implement simple support for arbitrary token lookahead. Change the
objc @try parser to use it, fixing a FIXME. Update the
objc-try-catch-1.m file to pass now that we get more reasonable
errors.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48129 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Lex/TokenLexer.cpp b/Lex/TokenLexer.cpp
index c91b753..fc8cfd7 100644
--- a/Lex/TokenLexer.cpp
+++ b/Lex/TokenLexer.cpp
@@ -36,6 +36,7 @@
HasLeadingSpace = Tok.hasLeadingSpace();
Tokens = &*Macro->tokens_begin();
OwnsTokens = false;
+ DisableMacroExpansion = false;
NumTokens = Macro->tokens_end()-Macro->tokens_begin();
// If this is a function-like macro, expand the arguments and change
@@ -53,7 +54,8 @@
/// Create a TokenLexer for the specified token stream. This does not
/// take ownership of the specified token vector.
-void TokenLexer::Init(const Token *TokArray, unsigned NumToks) {
+void TokenLexer::Init(const Token *TokArray, unsigned NumToks,
+ bool disableMacroExpansion, bool ownsTokens) {
// If the client is reusing a TokenLexer, make sure to free any memory
// associated with it.
destroy();
@@ -61,7 +63,8 @@
Macro = 0;
ActualArgs = 0;
Tokens = TokArray;
- OwnsTokens = false;
+ OwnsTokens = ownsTokens;
+ DisableMacroExpansion = disableMacroExpansion;
NumTokens = NumToks;
CurToken = 0;
InstantiateLoc = SourceLocation();
@@ -323,7 +326,7 @@
}
// Handle recursive expansion!
- if (Tok.getIdentifierInfo())
+ if (Tok.getIdentifierInfo() && !DisableMacroExpansion)
return PP.HandleIdentifier(Tok);
// Otherwise, return a normal token.