зеркало из https://github.com/microsoft/clang-1.git
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
This commit is contained in:
Родитель
9b181b3eec
Коммит
b4292f221f
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче