mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-15 12:09:51 +00:00
Implement ObjC built-in types in MinimalAction.
This fixes the recent regression with selector-1.m and -parse-noop. llvm-svn: 43575
This commit is contained in:
parent
b681c68a7e
commit
aaba027717
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user