[antlr-interest] An issue with label method references in actions
Gerald Rosenberg
gerald at certiv.net
Fri Jan 16 15:21:27 PST 2009
At 01:20 PM 1/16/2009, Jim Idle wrote:
>Gerald Rosenberg wrote:
>>Bug in the Java target code generation? -- possibly related to
>><http://www.antlr.org/jira/browse/ANTLR-357>ANTLR-357
>Basically, the references are not really intended to be used like
>that, but you get away with it quite a lot of the time. You should
>really do this:
>
>CommonToken ct = $k.start;
>// Check for null and so on here
>gDecl.setName(ct.getStartIndex());
Thanks, Jim. I realize the work around is obvious.
What is not so obvious is intent. To all appearances, the code gen
is intending to do the right thing -- it produces valid code, but
vulnerable to the run-time NPE. I just wanted to raise the issue so
that it might be noted by someone with Jira rights and hopefully
addressed as Antlr continues to evolve.
Best,
Gerald
>>Given the rule:
>>
>>statement
>> @init {
>> gDecl = new Statement($statement.start.getStartIndex());
>> }
>> : k=id { gDecl.setName($k.start.getStartIndex()); } ';'
>> ;
>>
>>The reference $statement.start.getStartIndex() generates the code,
>>with correct parens placement:
>>
>>gDecl = new Statement(((CommonToken) retval. start).getStartIndex());
>>
>>
>>The reference $k.start.getStartIndex() generates different, NPE
>>vulnerable code:
>>
>>gDecl .setName((k != null ? ((CommonToken) k.start ) : null
>>).getStartIndex());
>>
>>
>>
>>
>>
>>List:
>><http://www.antlr.org/mailman/listinfo/antlr-interest>http://www.antlr.org/mailman/listinfo/antlr-interest
>>Unsubscribe:
>><http://www.antlr.org/mailman/options/antlr-interest/your-email-address>http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>>
>
>
>List: http://www.antlr.org/mailman/listinfo/antlr-interest
>Unsubscribe:
>http://www.antlr.org/mailman/options/antlr-interest/your-email-address
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090116/c05d82ad/attachment.html
More information about the antlr-interest
mailing list