[erlang-questions] erl_syntax:revert with binary arg

Max Kuznecov mek@REDACTED
Thu Sep 6 16:53:18 CEST 2012


Indeed, with abstract() it works just fine. Thank you

2012/9/6 Magnus Henoch <magnus.henoch@REDACTED>:
> Max Kuznecov <mek@REDACTED> writes:
>
>> I'm creating some dynamic module generation stuff and I found a
>> strange behavior,
>> erl_syntax:revert doesn't seem to work with binaries:
>>
>> It works with strings (and other types)
>>
>>> erl_syntax:revert(erl_syntax:string("DATA")).
>> {string,0,"DATA"}
>>
>> but
>>
>>> erl_syntax:revert(erl_syntax:binary(<<"DATA">>)).
>> ** exception error: no function clause matching
>>                     erl_syntax:'-revert/1-lc$^1/1-1-'(<<"DATA">>)
>> (erl_syntax.erl, line 6508)
>>      in function  erl_syntax:'-revert/1-lc$^0/1-0-'/1 (erl_syntax.erl,
>> line 6508)
>>      in call from erl_syntax:revert/1 (erl_syntax.erl, line 6508)
>>
>> Is there any special trick to handle binaries in revert()?
>
> It seems like erl_syntax:binary(<<"DATA">>) is not the right way to
> create an abstract representation of a binary literal - it's different
> from what erl_syntax:abstract returns:
>
> 1> erl_syntax:abstract(<<"DATA">>).
> {tree,binary,
>       {attr,0,[],none},
>       [{tree,binary_field,
>              {attr,0,[],none},
>              {binary_field,{tree,integer,{attr,0,[],none},68},[]}},
>        {tree,binary_field,
>              {attr,0,[],none},
>              {binary_field,{tree,integer,{attr,0,[],none},65},[]}},
>        {tree,binary_field,
>              {attr,0,[],none},
>              {binary_field,{tree,integer,{attr,0,[],none},84},[]}},
>        {tree,binary_field,
>              {attr,0,[],none},
>              {binary_field,{tree,integer,{attr,0,[],none},65},[]}}]}
> 2> erl_syntax:binary(<<"DATA">>).
> {tree,binary,{attr,0,[],none},<<"DATA">>}
> 3> erl_syntax:revert(v(1)).
> {bin,0,
>      [{bin_element,0,{integer,0,68},default,default},
>       {bin_element,0,{integer,0,65},default,default},
>       {bin_element,0,{integer,0,84},default,default},
>       {bin_element,0,{integer,0,65},default,default}]}
>
> Regards,
> Magnus



-- 
~syhpoon



More information about the erlang-questions mailing list