Where would one find this kind of stuff documented? Is it strictly in the
source code? Any pointers would be appreciated. Thanx!

  -- Ben

On Thu, Sep 8, 2016 at 5:05 PM, Eric Meadows-Jönsson <
eric.meadows.jons...@gmail.com> wrote:

> Inside a macro the callers environment is available in __CALLER__. The
> imported modules are actually available in the environment as Michal said
> and OvermindDL1 showed:
>
> iex(1)> __ENV__.macros
> [{IEx.Helpers,
>   [b: 1, h: 1, import_file: 1, import_file: 2, import_file_if_available: 1,
>    import_if_available: 1, import_if_available: 2, s: 1, t: 1]},
>  {Kernel,
>   [!: 1, &&: 2, ..: 2, <>: 2, @: 1, alias!: 1, and: 2, binding: 0,
> binding: 1,
>    def: 1, def: 2, defdelegate: 2, defexception: 1, defimpl: 2, defimpl: 3,
>    defmacro: 1, defmacro: 2, defmacrop: 1, defmacrop: 2, defmodule: 2,
>    defoverridable: 1, defp: 1, defp: 2, defprotocol: 2, defstruct: 1,
>    destructure: 2, get_and_update_in: 2, if: 2, in: 2, is_nil: 1, match?:
> 2,
>    or: 2, pop_in: 1, put_in: 2, raise: 1, raise: 2, reraise: 2, reraise: 3,
>    sigil_C: 2, sigil_D: 2, sigil_N: 2, sigil_R: 2, sigil_S: 2, sigil_T: 2,
>    sigil_W: 2, sigil_c: 2, sigil_r: 2, sigil_s: 2, ...]}]
>
> In the code snippet above you can see the modules IEx.Helpers and Kernel.
> They are imported modules.
>
> You can also see from where a function/macro was imported in the AST:
>
> iex(2)> quote(do: is_nil(1))
> {:is_nil, [context: Elixir, import: Kernel], [1]}
>
> See the import: Kernel in the snippet above.
>
> On Thu, Sep 8, 2016 at 2:24 AM, eksperimental <eksperimen...@autistici.org
> > wrote:
>
>> that's the thing,
>> I don't know what modules had been imported (I'm planning on using this
>> inside a macro, that's why
>> the requirements are that it needs to be available at compile-time).
>> pretty much I need to do what Elixir does to determine what is the module
>> being called, when no
>> module is specified.
>>
>>  On Wed, 7 Sep 2016 16:45:01 -0700 (PDT)
>> OvermindDL1 <overmind...@gmail.com> wrote:
>>
>> > On Wednesday, September 7, 2016 at 5:34:16 PM UTC-6, eksperimental
>> wrote:
>> > >
>> > > thank you Michał, but __ENV__ holds no information about imported
>> modules.
>> > > I will be calling the macros/funtions with no module, so somehow I
>> need to
>> > > figure out which Module
>> > > I'm going to be calling the macro/function from
>> > >
>> >
>> > Uh, you sure it does not hold the information?
>> > ```elixir
>> > iex> import Ecto.Query
>> > iex> __ENV__.macros[Ecto.Query]
>> > [distinct: 2, distinct: 3, from: 1, from: 2, group_by: 2, group_by: 3,
>> >  having: 2, having: 3, join: 3, join: 4, join: 5, limit: 2, limit: 3,
>> lock:
>> > 2,
>> >  offset: 2, offset: 3, order_by: 2, order_by: 3, preload: 2, preload: 3,
>> >  select: 2, select: 3, update: 2, update: 3, where: 2, where: 3]
>> > ```
>> > You should be able to just iterate through `__ENV__.macros` to find
>> which
>> > module the macro belongs to.  There is also a `__ENV__.functions` for
>> that
>> > one too.  Just remember to use the __ENV__ in the environment where you
>> > will be calling it in, not from the callee environment.
>> >
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "elixir-lang-talk" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to elixir-lang-talk+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit https://groups.google.com/d/ms
>> gid/elixir-lang-talk/20160908072400.4bc10809.eksperimental%
>> 40autistici.org.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> Eric Meadows-Jönsson
>
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to elixir-lang-talk+unsubscr...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/elixir-lang-talk/CAM_eapgp7XU3Rw7VJai0hkV5tTZjDzvEM
> 4KyCftARc2DO94eTg%40mail.gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-talk/CAM_eapgp7XU3Rw7VJai0hkV5tTZjDzvEM4KyCftARc2DO94eTg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-talk+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-talk/CACo3Shi%2BWGO%3DZtX6r1UF3VPLnUSibFqQBKZ1F%3DVBB_zz3WgXRw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to