mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-20 07:25:23 +02:00
Handles keywords in expression evaluator, bug 246369.
This commit is contained in:
parent
8d99a621b3
commit
cce773e663
2 changed files with 36 additions and 0 deletions
|
@ -149,4 +149,20 @@ public class PreprocessorBugsTests extends PreprocessorTestsBase {
|
||||||
validateEOF();
|
validateEOF();
|
||||||
validateProblemCount(0);
|
validateProblemCount(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #if if
|
||||||
|
// no
|
||||||
|
// #else
|
||||||
|
// yes
|
||||||
|
// #endif
|
||||||
|
// #if or
|
||||||
|
// no
|
||||||
|
// #endif
|
||||||
|
public void testKeywordsInConditionalExpression_Bug246369() throws Exception {
|
||||||
|
initializeScanner();
|
||||||
|
validateIdentifier("yes");
|
||||||
|
validateEOF();
|
||||||
|
validateProblemCount(1);
|
||||||
|
validateProblem(0, IProblem.SCANNER_EXPRESSION_SYNTAX_ERROR, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,7 +257,27 @@ class ExpressionEvaluator {
|
||||||
case IToken.tIDENTIFIER:
|
case IToken.tIDENTIFIER:
|
||||||
consume();
|
consume();
|
||||||
return 0;
|
return 0;
|
||||||
|
// 16.1.4 alternate keywords are not replaced by a 0
|
||||||
|
case IToken.tAND:
|
||||||
|
case IToken.tOR:
|
||||||
|
case IToken.tBITOR:
|
||||||
|
case IToken.tBITORASSIGN:
|
||||||
|
case IToken.tXOR:
|
||||||
|
case IToken.tXORASSIGN:
|
||||||
|
case IToken.tAMPER:
|
||||||
|
case IToken.tAMPERASSIGN:
|
||||||
|
case IToken.tSTRING:
|
||||||
|
case IToken.tLSTRING:
|
||||||
|
throw new EvalException(IProblem.SCANNER_EXPRESSION_SYNTAX_ERROR, null);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
// 16.1.4 keywords are replaced by 0
|
||||||
|
final char[] image= fTokens.getCharImage();
|
||||||
|
if (image.length > 0) {
|
||||||
|
final char c= image[0];
|
||||||
|
if ((c>='a' && c<='z') || (c>='A' && c<='Z') || c == '_' || c=='$' || c=='@')
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
throw new EvalException(IProblem.SCANNER_EXPRESSION_SYNTAX_ERROR, null);
|
throw new EvalException(IProblem.SCANNER_EXPRESSION_SYNTAX_ERROR, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue