Hi Anthony, thanks for letting me know -- I'll need to try that. I've never played with erl_syntax_lib before.<div><br></div><div>I also realized the current version doesn't handle nested anonymous functions, so I'll need to fix that too.</div>
<div><br></div><div>--steve<br><br><div class="gmail_quote">On Sat, Jan 26, 2013 at 2:51 PM, Anthony Ramine <span dir="ltr"><<a href="mailto:n.oxyde@gmail.com" target="_blank">n.oxyde@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
An easier way to write this parse transform would be to populate the AST<br>
with its bindings with erl_syntax_lib:annotate_bindings/2 and then to<br>
fold through the tree with erl_syntax_lib:fold/3 to replace local calls<br>
to get_all_bindings/1.<br>
<br>
Regards,<br>
<br>
--<br>
Anthony Ramine<br>
<br>
Le 26 janv. 2013 à 19:45, Steve Vinoski a écrit :<br>
<div><div class="h5"><br>
><br>
><br>
> On Sat, Jan 26, 2013 at 9:32 AM, Tyron Zerafa <<a href="mailto:tyron.zerafa@gmail.com">tyron.zerafa@gmail.com</a>> wrote:<br>
> Does there exist any particular function which would give me all variable bindings (including their values) at that point. For instance, something similar to get_all_bindings (example below) should result in [{X=3},{Y=4}] when called with X=2.<br>

><br>
> my_fun(X) -><br>
>     Y = X+1,<br>
>      get_all_bindings().<br>
><br>
> I don't think anything like that exists, but here's a parse transform that might work for you:<br>
><br>
> <a href="https://gist.github.com/4643721" target="_blank">https://gist.github.com/4643721</a><br>
><br>
> The parse transform looks for a call to get_all_bindings/1 in each function body and replaces its argument with a list of variable names and their bindings used in the function up to that point. The argument to get_all_bindings can be anything because the parse transform replaces it. Example:<br>

><br>
> -module(foo).<br>
> -export([my_fun/1]).<br>
> -compile([{parse_transform,get_all_bindings}]).<br>
><br>
> -record(rec, {f1, f2, f3}).<br>
><br>
> my_fun(X) -><br>
>     Y = X+1,<br>
>     Z = [a,b,c,d,e,{X,Y}],<br>
>     #rec{f1=F1, f2=F2, f3=F3} = #rec{f1=42, f2=[X,Y], f3=Z},<br>
>     get_all_bindings([]),<br>
>     Q = 32,<br>
>     Q.<br>
><br>
> get_all_bindings(Bindings) -><br>
>     io:format("~p~n", [Bindings]).<br>
><br>
> The code produced for my_fun/1 by the parse transform looks like this:<br>
><br>
> my_fun(X) -><br>
>     Y = X + 1,<br>
>     Z = [a, b, c, d, e, {X, Y}],<br>
>     #rec{f1 = F1, f2 = F2, f3 = F3} = #rec{f1 = 42,<br>
>                                            f2 = [X, Y], f3 = Z},<br>
>     get_all_bindings([{'Z', Z}, {'Y', Y}, {'X', X},<br>
>                       {'F3', F3}, {'F2', F2}, {'F1', F1}]),<br>
>     Q = 32,<br>
>     Q.<br>
><br>
> Note that Q isn't included in the list because it occurs after the call to get_all_bindings/1.<br>
><br>
> --steve<br>
><br>
><br>
</div></div>> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>