[erlang-bugs] BugReport_syntax_tools_invalid_number_string

Constantin Malikov <>
Wed Nov 13 05:05:00 CET 2013


Hello , friends. I want to tell you about a bug in Erlang:

 I have differences between result of using methods map() and input data. I
attached simple sample, where you can see this differences.

 1) For getitng syntax tree input:

_______________________________________________________________________

{ok, Forms} = epp:parse_file("example.erl", [], []).

_______________________________________________________________________

 You get this:

_______________________________________________________________________
{ok,[{attribute,1,file,{"example.erl",1}},
     {attribute,1,module,example},
     {attribute,3,export,[{handle_event,2}]},
     {function,5,handle_event,2,
               [{clause,5,
                        [{var,5,'_'},{var,5,'_'}],
                        [],
                        [{cons,6,
                               {tuple,6,[]},
                               {cons,7,{nil,7},{cons,8,{...},...}}}]}]},
     {eof,9}]}
_______________________________________________________________________

2) Then input:

_______________________________________________________________________

io:format("~p~n",[Forms]).

_______________________________________________________________________

 You get this:

_______________________________________________________________________
[{attribute,1,file,{"example.erl",1}},
 {attribute,1,module,example},
 {attribute,3,export,[{handle_event,2}]},
 {function,5,handle_event,2,
     [{clause,5,
          [{var,5,'_'},{var,5,'_'}],
          [],
          [{cons,6,
               {tuple,6,[]},
               {cons,7,
                   {nil,7},
                   {cons,8,
                       {cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}},
                       {nil,8}}}}]}]},
 {eof,9}]
ok

_______________________________________________________________________

 3) Then input:

_______________________________________________________________________

Form = {function,5,handle_event,2,
     [{clause,5,
          [{var,5,'_'},{var,5,'_'}],
          [],
          [{cons,6,
               {tuple,6,[]},
               {cons,7,
                   {nil,7},
                   {cons,8,
                       {cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}},
                       {nil,8}}}}]}]}.

_______________________________________________________________________

 You get:

_______________________________________________________________________{function,5,handle_event,2,
          [{clause,5,
                   [{var,5,'_'},{var,5,'_'}],
                   [],
                   [{cons,6,
                          {tuple,6,[]},
                          {cons,7,
                                {nil,7},
                                {cons,8,
                                      {cons,8,{atom,8,asd},{cons,8,...}},
                                      {nil,8}}}}]}]}

_______________________________________________________________________

 4) Now, I will try to traverse the data via erl_syntax_lib:map():

_______________________________________________________________________

erl_syntax_lib:map(fun (El) -> io:format("~p~n", [erl_syntax:revert(El)]),
El end, Form).

_______________________________________________________________________

 You get:

____________________________________________
{atom,5,handle_event}
{var,5,'_'}
{var,5,'_'}
{tuple,6,[]}
{nil,7}
{atom,8,asd}
{atom,8,asd}
{cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}}
{cons,6,
      {tuple,6,[]},
      {cons,6,
            {nil,7},
            {cons,6,
                  {cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}},
                  {nil,8}}}}
{clause,5,
        [{var,5,'_'},{var,5,'_'}],
        [],
        [{cons,6,
               {tuple,6,[]},
               {cons,6,
                     {nil,7},
                     {cons,6,

{cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}},
                           {nil,8}}}}]}
{function,5,handle_event,2,
    [{clause,5,
         [{var,5,'_'},{var,5,'_'}],
         [],
         [{cons,6,
              {tuple,6,[]},
              {cons,6,
                  {nil,7},
                  {cons,6,
                      {cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}},
                      {nil,8}}}}]}]}
{tree,function,
    {attr,5,[],none},
    {func,
        {tree,atom,{attr,5,[],none},handle_event},
        [{tree,clause,
             {attr,5,[],none},
             {clause,
                 [{var,5,'_'},{var,5,'_'}],
                 none,
                 [{tree,list,
                      {attr,6,[],none},
                      {list,
                          [{tuple,6,[]},{nil,7},{tree,list,{...},...}],
                          {nil,8}}}]}}]}}

_______________________________________________________________________

 Part of initial datas is:

_______________________________________________________________________
[{cons,6,
               {tuple,6,[]},
               {cons,7,
                   {nil,7},
                   {cons,8,
                       {cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}},
                       {nil,8}}}}]

_______________________________________________________________________

 But i get:

_______________________________________________________________________
[{cons,6,
              {tuple,6,[]},
              {cons,6,
                  {nil,7},
                  {cons,6,
                      {cons,8,{atom,8,asd},{cons,8,{atom,8,asd},{nil,8}}},
                      {nil,8}}}}]

_______________________________________________________________________

 Unexpected change original:
“{cons,7,” to “{cons,6,” and “{cons,8,” to “{cons,6,”.

 Tested by Erlang 16B02 syntax_tools-1.6.11, and R15B02, syntax_tools-1.6.9


__________________________example.erl____________________________________-module(example).

-export([handle_event/2]).

handle_event( _, _) ->
    [    {},
        [],
        [asd,asd] ].

_______________________________________________________________________

With best regards,

Malikov Constantin, software developer, Eltex.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20131113/b8c00ce6/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: syntax_tools_invalid_number_string.tar.gz
Type: application/x-gzip
Size: 21369 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20131113/b8c00ce6/attachment-0001.bin>


More information about the erlang-bugs mailing list