readArgument method

MacroArgument readArgument()

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);
}