aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2007-10-31 20:55:39 +0000
committerSteve Naroff <snaroff@apple.com>2007-10-31 20:55:39 +0000
commitb4292f221fb879fd2274683ace4f73d3d99af8c5 (patch)
tree8d0da1c4329f7c054ff4fdf85072d4660332f8f6
parent9b181b3eec13686ac05fb2c57c3f4baf2d4074a9 (diff)
Implement ObjC built-in types in MinimalAction.
This fixes the recent regression with selector-1.m and -parse-noop. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43575 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Driver/PrintParserCallbacks.cpp7
-rw-r--r--Driver/clang.cpp5
-rw-r--r--Driver/clang.h3
-rw-r--r--Parse/MinimalAction.cpp14
-rw-r--r--include/clang/Parse/Action.h3
5 files changed, 26 insertions, 6 deletions
diff --git a/Driver/PrintParserCallbacks.cpp b/Driver/PrintParserCallbacks.cpp
index d7deb43f87..9568b87211 100644
--- a/Driver/PrintParserCallbacks.cpp
+++ b/Driver/PrintParserCallbacks.cpp
@@ -21,6 +21,9 @@ using namespace clang;
namespace {
class ParserPrintActions : public MinimalAction {
+ public:
+ ParserPrintActions(IdentifierTable &IT) : MinimalAction(IT) {}
+
/// ActOnDeclarator - This callback is invoked when a declarator is parsed
/// and 'Init' specifies the initializer if any. This is for things like:
/// "int X = 4" or "typedef int foo".
@@ -49,6 +52,6 @@ namespace {
};
}
-MinimalAction *clang::CreatePrintParserActionsAction() {
- return new ParserPrintActions();
+MinimalAction *clang::CreatePrintParserActionsAction(IdentifierTable &IT) {
+ return new ParserPrintActions(IT);
}
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 6e0ed914e2..77779f7e80 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -763,12 +763,13 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
break;
case ParseNoop: // -parse-noop
- ParseFile(PP, new MinimalAction(), MainFileID);
+ ParseFile(PP, new MinimalAction(PP.getIdentifierTable()), MainFileID);
ClearSourceMgr = true;
break;
case ParsePrintCallbacks:
- ParseFile(PP, CreatePrintParserActionsAction(), MainFileID);
+ ParseFile(PP, CreatePrintParserActionsAction(PP.getIdentifierTable()),
+ MainFileID);
ClearSourceMgr = true;
break;
diff --git a/Driver/clang.h b/Driver/clang.h
index bf212866ec..fd11590854 100644
--- a/Driver/clang.h
+++ b/Driver/clang.h
@@ -21,6 +21,7 @@ class MinimalAction;
class TargetInfo;
class Diagnostic;
class ASTConsumer;
+class IdentifierTable;
/// DoPrintPreprocessedInput - Implement -E mode.
void DoPrintPreprocessedInput(unsigned MainFileID, Preprocessor &PP,
@@ -28,7 +29,7 @@ void DoPrintPreprocessedInput(unsigned MainFileID, Preprocessor &PP,
/// CreatePrintParserActionsAction - Return the actions implementation that
/// implements the -parse-print-callbacks option.
-MinimalAction *CreatePrintParserActionsAction();
+MinimalAction *CreatePrintParserActionsAction(IdentifierTable &);
/// CreateTargetInfo - Return the set of target info objects as specified by
/// the -arch command line option.
diff --git a/Parse/MinimalAction.cpp b/Parse/MinimalAction.cpp
index bc7c41bec3..92d997f59c 100644
--- a/Parse/MinimalAction.cpp
+++ b/Parse/MinimalAction.cpp
@@ -30,7 +30,19 @@ struct TypeNameInfo {
void MinimalAction:: ActOnTranslationUnitScope(SourceLocation Loc, Scope *S) {
TUScope = S;
- // FIXME: add id/SEL/Class. We need to get our paws on the identifier table.
+ IdentifierInfo *II;
+ TypeNameInfo *TI;
+
+ // recognize the ObjC built-in type identifiers.
+ II = &Idents.get("id");
+ TI = new TypeNameInfo(1, II->getFETokenInfo<TypeNameInfo>());
+ II->setFETokenInfo(TI);
+ II = &Idents.get("SEL");
+ TI = new TypeNameInfo(1, II->getFETokenInfo<TypeNameInfo>());
+ II->setFETokenInfo(TI);
+ II = &Idents.get("Class");
+ TI = new TypeNameInfo(1, II->getFETokenInfo<TypeNameInfo>());
+ II->setFETokenInfo(TI);
}
/// isTypeName - This looks at the IdentifierInfo::FETokenInfo field to
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 43290f2add..32025eaa01 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -632,7 +632,10 @@ class MinimalAction : public Action {
/// to lookup file scope declarations in the "ordinary" C decl namespace.
/// For example, user-defined classes, built-in "id" type, etc.
Scope *TUScope;
+ IdentifierTable &Idents;
public:
+ MinimalAction(IdentifierTable &IT) : Idents(IT) {}
+
/// isTypeName - This looks at the IdentifierInfo::FETokenInfo field to
/// determine whether the name is a typedef or not in this scope.
virtual DeclTy *isTypeName(const IdentifierInfo &II, Scope *S) const;