[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