Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-patch] 1.0.1 Parser "Big Hammer" Fix

> 
> --=====================_277667000==_
> Content-Type: text/plain; charset="us-ascii"; format=flowed
> 
> 
> Hi!
> 
> The 1.0.1 parser has lots of constructs that look like this:
> 
> catch( ParseException ) { synchronize( MY_FAVORITE_TOKEN ); }
> 
> The intent appears to be that if the parser cannot correctly parse a given 
> construct, it can at least try to get to the end of that construct so that 
> it can gracefully recover. It seems simple, but it's not because it gets it 
> wrong sometimes. Doing this recovery requires correctly repositioning the 
> current token so that the parser can move forward and sometimes the parser 
> doesn't do this right and just keeps erroring on the same token again and 
> again.
> 
> If it were clear that the catch( ParseException ) { synchronize } always 
> caused lockups, we could just remove them all. I ran a few tests, turns out 
> that once in a while catch/synchronize makes the parser work right. Welcome 
> to hell, here's your accordion.
> 
> So, please find a patch attached that fixes all of this class of lockup 
> while leaving the recovery potential in place. Basically, I added a new 
> RuntimeException called ParserFatalException. 
> CPPParser::generateParseException throws ParserFatalException when called 
> twice in a row with the same token position. It's kind of a big hammer to 
> use, but it works and I didn't have to type throw 
> NewFatalNonRuntimeException in the 1000 machine generated functions in 
> CPPParser.java. The 1.0.1 parser is not long for this world anyway.
> 

Patch applied in the 1_0_1 branch.
Thanks.




Back to the top