readArgument method
Reads one undelimited argument: a braced group (without its braces) or a single token. Spaces before it are skipped.
Implementation
MacroArgument readArgument() {
skipRawSpaces();
final first = popRaw();
if (first.isEof) {
return MacroArgument(const [], first.span.end, incomplete: true);
}
if (first.kind == TokenKind.character && first.text == '{') {
return _readBalanced(first);
}
if (first.kind == TokenKind.character && first.text == '}') {
// Not an argument: put it back for the parser to report.
push(first);
return MacroArgument(const [], first.span.start, incomplete: false);
}
return MacroArgument([first], first.span.end);
}