[erlang-patches] Print column numbers when compiling

Anthony Ramine <>
Mon Oct 29 14:40:48 CET 2012


Ping?
-- 
Anthony Ramine


Le 24 oct. 2012 à 08:07, Anthony Ramine a écrit :

> Hi,
> 
> It is mentioned in the OTP roadmap that column numbers won't be an option, should I rewrite my patch to take care of this or have you already done it? Is the line-only code path to be removed from erl_scan too?
> 
> I continued this patch to make erlc able to issue error diagnostics like how clang does (parse-ranges branch on my repos), would you be interested by this? This branch handles end locations in erl_scan and parse ranges in erl_parse and epp; the two things that remain are macro expansions tracking and obviously the use of these informations in the compiler output.
> 
> Regards,
> 
> -- 
> Anthony Ramine
> 
> Le 19 sept. 2012 à 19:28, Anthony Ramine <> a écrit :
> 
>> Hi,
>> 
>> I've documented the 'file' attribute item in the branch's first commit and reordered some erl_scan commits;
>> please refetch.
>> 
>> --
>> Anthony Ramine
>> 
>> Le 19 sept. 2012 à 11:11, Henrik Nord a écrit :
>> 
>>> done
>>> On 09/14/2012 03:41 PM, Anthony Ramine wrote:
>>>> Hi,
>>>> 
>>>> I've rewritten the erl_lint_SUITE patch with less formatting changes so the diff is clearer; please refetch.
>>>> 
>>>> Regards,
>>>> 
>>>> --
>>>> Anthony Ramine
>>>> 
>>>> 
>>>> Le 13 sept. 2012 à 10:54, Henrik Nord a écrit :
>>>> 
>>>>> Refetched.
>>>>> 
>>>>> On 09/11/2012 12:13 PM, Anthony Ramine wrote:
>>>>>> Fixed, please refetch. Sorry for the inconvenience; I tried to remove every duplicate definition of erl_scan:error_info() and forgot to update the docs.
>>>>>> 
>>>>>> --
>>>>>> Anthony Ramine
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> Le 10 sept. 2012 à 16:02, Henrik Nord a écrit :
>>>>>> 
>>>>>>> build error
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   xsltproc --output "../man6/stdlib.6" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl stdlib_app.xml
>>>>>>> /usr/bin/install -c -m 644 ushell1.gif ../html/ushell1.gif
>>>>>>> /usr/bin/install -c -m 644 ushell2.gif ../html/ushell2.gif
>>>>>>> /usr/bin/install -c -m 644 ushell3.gif ../html/ushell3.gif
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_array.xml; \
>>>>>>>   xsltproc --output "../man3/array.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl array.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_base64.xml; \
>>>>>>>   xsltproc --output "../man3/base64.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl base64.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_beam_lib.xml; \
>>>>>>>   xsltproc --output "../man3/beam_lib.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl beam_lib.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_binary.xml; \
>>>>>>>   xsltproc --output "../man3/binary.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl binary.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_c.xml; \
>>>>>>>   xsltproc --output "../man3/c.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl c.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_calendar.xml; \
>>>>>>>   xsltproc --output "../man3/calendar.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl calendar.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_dets.xml; \
>>>>>>>   xsltproc --output "../man3/dets.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl dets.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_dict.xml; \
>>>>>>>   xsltproc --output "../man3/dict.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl dict.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_digraph.xml; \
>>>>>>>   xsltproc --output "../man3/digraph.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl digraph.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_digraph_utils.xml; \
>>>>>>>   xsltproc --output "../man3/digraph_utils.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl digraph_utils.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_epp.xml; \
>>>>>>>   xsltproc --output "../man3/epp.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl epp.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_eval.xml; \
>>>>>>>   xsltproc --output "../man3/erl_eval.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_eval.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_expand_records.xml; \
>>>>>>>   xsltproc --output "../man3/erl_expand_records.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_expand_records.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_id_trans.xml; \
>>>>>>>   xsltproc --output "../man3/erl_id_trans.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_id_trans.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_internal.xml; \
>>>>>>>   xsltproc --output "../man3/erl_internal.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_internal.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_lint.xml; \
>>>>>>>   xsltproc --output "../man3/erl_lint.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_lint.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_parse.xml; \
>>>>>>>   xsltproc --output "../man3/erl_parse.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_parse.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_pp.xml; \
>>>>>>>   xsltproc --output "../man3/erl_pp.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_pp.xml
>>>>>>> date=`date +"%B %e %Y"`; \
>>>>>>>   specs_file=`pwd`/../specs/specs_erl_scan.xml; \
>>>>>>>   xsltproc --output "../man3/erl_scan.3" --stringparam company "Ericsson AB" --stringparam docgen "/ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen" --stringparam gendate "$date" --stringparam appname "stdlib" --stringparam appver "1.18.3" --stringparam specs_file "$specs_file" --xinclude -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd  -path /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/dtd_man_entities /ldisk/jenkins/jobs/compile-pu/workspace/lib/erl_docgen/priv/xsl/db_man.xsl erl_scan.xml
>>>>>>> 
>>>>>>> Error in erl_parse:error_description: unknown type
>>>>>>> make[4]: *** [../man3/erl_parse.3] Error 10
>>>>>>> make[4]: *** Waiting for unfinished jobs....
>>>>>>> make[4]: Leaving directory `/ldisk/jenkins/jobs/compile-pu/workspace/lib/stdlib/doc/src'
>>>>>>> make[3]: *** [release_docs] Error 2
>>>>>>> make[3]: Leaving directory `/ldisk/jenkins/jobs/compile-pu/workspace/lib/stdlib/doc/src'
>>>>>>> make[2]: *** [release_docs] Error 2
>>>>>>> make[2]: Leaving directory `/ldisk/jenkins/jobs/compile-pu/workspace/lib/stdlib'
>>>>>>> make[1]: *** [release_docs] Error 2
>>>>>>> make[1]: Leaving directory `/ldisk/jenkins/jobs/compile-pu/workspace/lib'
>>>>>>> make: *** [release_docs] Error 2
>>>>>>> 
>>>>>>> On 09/09/2012 12:52 PM, Anthony Ramine wrote:
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> I've rebased it against the latest maint branch. Please refetch.
>>>>>>>> 
>>>>>>>> On Wed, Sep 5, 2012 at 10:50 AM, Henrik Nord <> wrote:
>>>>>>>>> I would like you to rebase this on R15B02 after the release.
>>>>>>>>> /Henrik
>>>>>>>>> 
>>>>>>>>> On 09/02/2012 08:26 PM, Anthony Ramine wrote:
>>>>>>>>>> Hi,
>>>>>>>>>> 
>>>>>>>>>> Again, see responses inlined; please refetch.
>>>>>>>>>> 
>>>>>>>>>> Regards.
>>>>>>>>>> 
>>>>>>>>>> --
>>>>>>>>>> Anthony Ramine
>>>>>>>>>> 
>>>>>>>>>> Le 28 août 2012 à 15:28, Lukas Larsson a écrit :
>>>>>>>>>> 
>>>>>>>>>>> Hello,
>>>>>>>>>>> 
>>>>>>>>>>> See responses inlined.
>>>>>>>>>>> 
>>>>>>>>>>> Lukas
>>>>>>>>>>> 
>>>>>>>>>>> On 24/08/12 12:22, Anthony Ramine wrote:
>>>>>>>>>>>> Most OTP (at least erl_lint, erl_parse and syntax_tools) already knows
>>>>>>>>>>>> that locations can be a line or a line and a column; furthermore it is said
>>>>>>>>>>>> in erl_parse itself that one should always use get_line/1 and set_line/3
>>>>>>>>>>>> instead of depending on having an integer there.
>>>>>>>>>>> It does indeed say so inside the code of erl_parse. But all of the
>>>>>>>>>>> visible documentation (here[1] and here[2]) say that it is an integer. So if
>>>>>>>>>>> you have only read the documentation (which I assume most people only have)
>>>>>>>>>>> you would assume that it is an integer. That documentation has to be updated
>>>>>>>>>>> so that LINE can be either an integer() or a tuple(integer(),integer()), and
>>>>>>>>>>> a reference to use erl_parse:set/get_attribute to manipulate it safely.
>>>>>>>>>>> 
>>>>>>>>>>> The compiler should also be updated to use these API's, this includes
>>>>>>>>>>> the convention that a line number of -1 is used to say that something is
>>>>>>>>>>> compiler generated. To make sure that all uses of the non-api is eliminated,
>>>>>>>>>>> it might be a good idea to declare erl_scan:line as -opaque and let dialyzer
>>>>>>>>>>> search through the otp code for errors.
>>>>>>>>>>> 
>>>>>>>>>>> [1]: http://www.erlang.org/doc/apps/erts/absform.html
>>>>>>>>>>> [2]: http://www.erlang.org/doc/man/erl_scan.html#type-line
>>>>>>>>>> I replaced LINE by LOC in the first documentation you point to and I've
>>>>>>>>>> patched various type specs in erl_scan and erl_parse so they both use
>>>>>>>>>> location().
>>>>>>>>>> 
>>>>>>>>>> With regard to negative line numbers, it should be noted that
>>>>>>>>>> user-supplied -file attributes have their line numbers negated whereas as
>>>>>>>>>> you said in other modules like erl_lint and v3_core, compile-generated nodes
>>>>>>>>>> are the ones which lines are negated. Shouldn't the opposite be done in
>>>>>>>>>> epp's -file attributes handling?
>>>>>>>>>> 
>>>>>>>>>>>> If it is really that heavy of a change, why do we have
>>>>>>>>>>>> erl_scan:set_attribute/3 and erl_scan:attributes_info/{1,2}? They obviously
>>>>>>>>>>>> were coded to mitigate these issues.
>>>>>>>>>>> We have indeed been working on getting this to work before, but the
>>>>>>>>>>> effort was left as you see it now because there were a number of issues
>>>>>>>>>>> which needed solving and more important things got in the way. The reason
>>>>>>>>>>> why I say it is a heavy change is that we want to feel that a good effort
>>>>>>>>>>> has been made to make sure that all error and warning column numbers point
>>>>>>>>>>> to the correct position.
>>>>>>>>>> I've already added a 'file' item to these functions to improve the code
>>>>>>>>>> populating every node with the file from the -file attributes of the module
>>>>>>>>>> declaration in erl_lint; maybe another 'generated' item should be added to
>>>>>>>>>> replace the multiple neg_line and abs_line functions there are in some
>>>>>>>>>> compile-related modules?
>>>>>>>>>> 
>>>>>>>>>>>> Any parse transform that break because of this change will break
>>>>>>>>>>>> because it does AST manipulation wrong and their users will just have to not
>>>>>>>>>>>> use the "column" option for it to continue to work.
>>>>>>>>>>> Strictly speaking parse transform is also an experimental/undocumented
>>>>>>>>>>> feature of Erlang/OTP. But unfortunately a lot of people seem to use them,
>>>>>>>>>>> so we have to take some backwards compatibility into consideration. The
>>>>>>>>>>> closest thing to a documentation is the example found here
>>>>>>>>>>> lib/stdlib/example/erl_id_trans.erl, and that does not deal with line
>>>>>>>>>>> numbers at all.
>>>>>>>>>>> 
>>>>>>>>>>> We really really have to be sure that the fun2ms and qlc parse
>>>>>>>>>>> transforms work.
>>>>>>>>>> I've read through the code of various parse transforms this week and they
>>>>>>>>>> don't seem to make anything related to the transformed nodes' locations.
>>>>>>>>>> Most OTP-provided parse transforms are covered in the test suites I patched.
>>>>>>>>>> 
>>>>>>>>>> _______________________________________________
>>>>>>>>>> erlang-patches mailing list
>>>>>>>>>> 
>>>>>>>>>> http://erlang.org/mailman/listinfo/erlang-patches
>>>>>>>>> --
>>>>>>>>> /Henrik Nord Erlang/OTP
>>>>>>>>> 
>>>>>>> -- 
>>>>>>> /Henrik Nord Erlang/OTP
>>>>>>> 
>>>>> -- 
>>>>> /Henrik Nord Erlang/OTP
>>>>> 
>>> 
>>> -- 
>>> /Henrik Nord Erlang/OTP
>>> 
>> 



More information about the erlang-patches mailing list