While fixing parsing issues in the povr/v4.0 fork's newer parser related
to the 'global' and 'local' keywords, I found some are also exposures in
the v3.8 beta 2 release too. Namely, some bare word situations are not
being flagged that the source code intends to be errors - and which
should be parse errors.
// Which are more likely to come up where a user might try:
#local localDict = local
#declare globalDict = global
// Neither assignment above works properly, but the v3.8 parser does
// not complain. The povr fork's parser will in the next release.
I only briefly looked at the relate v3.8 source, but the cause in both
the old and new parsers looks to be the same.
In the file parser_tokenizer.cpp and the function Parser::Read_Symbol()
there is code related to handling the two pseudo dictionaries. Look for
the text 'pseudoDictionary'. In that code there is a line which reads:
Get_Token(); // ensures the error is reported at the right token
Delete the line or comment it. What happens is that call to Get_Token()
- one intended to better point to the error column position - jumps the
parsing state ahead if the next token is '#'. In other words, it jumps
the parser past the following Warning() and Expectation_Error() calls!
Weird, but, it is what it is.
Post a reply to this message