private SyntaxNode LexSingleDirective( bool isActive, bool endIsActive, bool afterNonWhitespaceOnLine, List <SyntaxNode> triviaList) { _start = _charReader.Position; if (char.IsWhiteSpace(_charReader.Current)) { ReadWhitespace(); AddTrivia(triviaList, SyntaxKind.WhitespaceTrivia); } var saveMode = _mode; var saveExpandMacros = ExpandMacros; _mode = LexerMode.Directive; ExpandMacros = false; var dp = new DirectiveParser(this, _directives); var directive = dp.ParseDirective(isActive, endIsActive, afterNonWhitespaceOnLine); if (!isActive || directive.Kind != SyntaxKind.IncludeDirectiveTrivia) { triviaList.Add(directive); } _directives = directive.ApplyDirectives(_directives); ExpandMacros = saveExpandMacros; _mode = saveMode; // Directive parser sometimes leaves charReader at start of token *after* the one we want. _charReader.Reset(directive.GetLastToken().GetLastSpanIncludingTrivia().End); _start = _charReader.Position; return(directive); }
private SyntaxNode LexSingleDirective( bool isActive, bool endIsActive, bool afterNonWhitespaceOnLine, List<SyntaxNode> triviaList) { _start = _charReader.Position; if (char.IsWhiteSpace(_charReader.Current)) { ReadWhitespace(); AddTrivia(triviaList, SyntaxKind.WhitespaceTrivia); } var saveMode = _mode; var saveExpandMacros = ExpandMacros; _mode = LexerMode.Directive; ExpandMacros = false; var dp = new DirectiveParser(this, _directives); var directive = dp.ParseDirective(isActive, endIsActive, afterNonWhitespaceOnLine); if (!isActive || directive.Kind != SyntaxKind.IncludeDirectiveTrivia) triviaList.Add(directive); _directives = directive.ApplyDirectives(_directives); ExpandMacros = saveExpandMacros; _mode = saveMode; // Directive parser sometimes leaves charReader at start of token *after* the one we want. _charReader.Reset(directive.GetLastToken().GetLastSpanIncludingTrivia().End); _start = _charReader.Position; return directive; }