Re: [PATCH 3/4] java: add support for lookahead correction

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
Hi Adrian,

> Le 2 nov. 2020 à 07:32, Akim Demaille <[email protected]> a écrit :
> 
>> Le 2 nov. 2020 à 01:50, Adrian Vogelsgesang <[email protected]> a écrit :
>> 
>> public ]b4_parser_class[(]b4_parse_param_decl([b4_lex_param_decl])[)]b4_maybe_throws([b4_init_throws])[
>> {
>> -]b4_percent_code_get([[init]])[
>> - this.yylexer = new YYLexer (]b4_lex_param_call[);
>> +]b4_percent_code_get([[init]])[]b4_lac_if([[
>> + this.yylacStack = new Vector<Integer>();
>> + this.yylacEstablished = false;]])[
>> + this.yylexer = new YYLexer(]b4_lex_param_call[);
>> ]b4_parse_param_cons[
>> 
>> 
>> Why do we place the user-provided init-code first?
>> Does that mean, the user must not call any methoes which might depend on `yylexer`?
>> Not sure if this actually matters, but I would put the user-provided init-code last, so that the rest of the class is already initialized…
> 
> It makes sense, I'll change that.  Thanks!

Well, it turns out that this was by design, to be able to call 'super'.
When I tried that change, the test suite failed:

> YYParser.java:294: error: call to super must be first statement in constructor
>  super("Test Thread"); if (true) throw new InterruptedException(); 
>       ^


That's test 682, java.at:470, Java constructor init and init_throws:

> m4_pushdef([AT_Witness],
> [super("Test Thread"); if (true) throw new InterruptedException();])
> 
> AT_CHECK_JAVA_MINIMAL([[
> %define extends {Thread}
> %code init { ]AT_Witness[ }
> %define init_throws {InterruptedException}
> %lex-param {int lex_param}]])
> AT_CHECK([[grep ']AT_Witness[' YYParser.java]], 0, [ignore])

And it's documented:

> Use @code{%code init} for code added to the start of the constructor
> body. This is especially useful to initialize superclasses. Use
> @samp{%define init_throws} to specify any uncaught exceptions.


Cheers!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.