cppBad2.vert
ERROR: 0:3: 'macro expansion' : End of input in macro b
-ERROR: 1 compilation errors. No code generated.
+ERROR: 0:3: '' : compilation terminated
+ERROR: 2 compilation errors. No code generated.
Shader version: 100
cppBad3.vert
ERROR: 0:3: 'macro expansion' : End of input in macro y
-ERROR: 1 compilation errors. No code generated.
+ERROR: 0:3: '' : compilation terminated
+ERROR: 2 compilation errors. No code generated.
Shader version: 100
--- /dev/null
+cppBad4.vert
+ERROR: 0:4: 'macro expansion' : unexpected '#' g
+ERROR: 0:5: '' : syntax error, unexpected SEMICOLON, expecting LEFT_PAREN
+ERROR: 2 compilation errors. No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
--- /dev/null
+cppBad5.vert
+ERROR: 0:4: 'macro expansion' : End of input in macro g
+ERROR: 0:5: '' : compilation terminated
+ERROR: 2 compilation errors. No code generated.
+
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
+
+Shader version: 100
+ERROR: node is still EOpNull!
+0:? Linker Objects
+
--- /dev/null
+int,i=
+#define f g(#g(y
+#define g(m)
+g(f)
--- /dev/null
+int,i=
+#define f g($g(y
+#define g(m)
+g(f)
case MacroExpandNotStarted:
break;
case MacroExpandError:
- token = EndOfInput;
+ // toss the rest of the pushed-input argument by scanning until tMarkerInput
+ while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput)
+ ;
break;
case MacroExpandStarted:
case MacroExpandUndef:
expandedArg->putToken(token, ppToken);
}
- if (token == EndOfInput) {
+ if (token != tMarkerInput::marker) {
// Error, or MacroExpand ate the marker, so had bad input, recover
delete expandedArg;
expandedArg = nullptr;
- } else {
- // remove the marker
- popInput();
}
return expandedArg;
if (token == ')') {
// closing paren of call
- if (in->mac->args.size() == 1 && tokenRecorded == 0)
+ if (in->mac->args.size() == 1 && !tokenRecorded)
break;
arg++;
break;
// Handle token-pasting logic
token = tokenPaste(token, ppToken);
- if (token == EndOfInput || token == tMarkerInput::marker) {
+ if (token == EndOfInput) {
missingEndifCheck();
return EndOfInput;
}
"cppBad.vert",
"cppBad2.vert",
"cppBad3.vert",
+ "cppBad4.vert",
+ "cppBad5.vert",
"cppComplexExpr.vert",
"cppDeepNest.frag",
"cppPassMacroName.frag",