forked from OSchip/llvm-project
Several small patches to do pretty printing for objective-c top-level decls
(minimal printing), Derive ObjcClassDecl from Decl. Ted may want to take note of the change I made to CFGRecStmtDeclVisitor.h llvm-svn: 42764
This commit is contained in:
parent
104c48ab8f
commit
e90597f593
|
@ -79,6 +79,26 @@ static void PrintObjcInterfaceDecl(ObjcInterfaceDecl *OID) {
|
|||
// FIXME: implement the rest...
|
||||
}
|
||||
|
||||
static void PrintObjcProtocolDecl(ObjcProtocolDecl *PID) {
|
||||
std::string S = PID->getName();
|
||||
fprintf(stderr, "@protocol %s;\n", S.c_str());
|
||||
// FIXME: implement the rest...
|
||||
}
|
||||
|
||||
static void PrintObjcCategoryImplDecl(ObjcCategoryImplDecl *PID) {
|
||||
std::string S = PID->getName();
|
||||
std::string I = PID->getClassInterface()->getName();
|
||||
fprintf(stderr, "@implementation %s(%s);\n", I.c_str(), S.c_str());
|
||||
// FIXME: implement the rest...
|
||||
}
|
||||
|
||||
static void PrintObjcCategoryDecl(ObjcCategoryDecl *PID) {
|
||||
std::string S = PID->getName();
|
||||
std::string I = PID->getClassInterface()->getName();
|
||||
fprintf(stderr, "@interface %s(%s);\n", I.c_str(), S.c_str());
|
||||
// FIXME: implement the rest...
|
||||
}
|
||||
|
||||
namespace {
|
||||
class ASTPrinter : public ASTConsumer {
|
||||
virtual void HandleTopLevelDecl(Decl *D) {
|
||||
|
@ -92,10 +112,10 @@ namespace {
|
|||
}
|
||||
} else if (TypedefDecl *TD = dyn_cast<TypedefDecl>(D)) {
|
||||
PrintTypeDefDecl(TD);
|
||||
} else if (ScopedDecl *SD = dyn_cast<ScopedDecl>(D)) {
|
||||
fprintf(stderr, "Read top-level variable decl: '%s'\n", SD->getName());
|
||||
} else if (ObjcInterfaceDecl *OID = dyn_cast<ObjcInterfaceDecl>(D)) {
|
||||
PrintObjcInterfaceDecl(OID);
|
||||
} else if (ObjcProtocolDecl *PID = dyn_cast<ObjcProtocolDecl>(D)) {
|
||||
PrintObjcProtocolDecl(PID);
|
||||
} else if (ObjcForwardProtocolDecl *OFPD =
|
||||
dyn_cast<ObjcForwardProtocolDecl>(D)) {
|
||||
fprintf(stderr, "@protocol ");
|
||||
|
@ -109,8 +129,16 @@ namespace {
|
|||
dyn_cast<ObjcImplementationDecl>(D)) {
|
||||
fprintf(stderr, "@implementation %s [printing todo]\n",
|
||||
OID->getName());
|
||||
} else if (ObjcCategoryImplDecl *OID =
|
||||
dyn_cast<ObjcCategoryImplDecl>(D)) {
|
||||
PrintObjcCategoryImplDecl(OID);
|
||||
} else if (ObjcCategoryDecl *OID =
|
||||
dyn_cast<ObjcCategoryDecl>(D)) {
|
||||
PrintObjcCategoryDecl(OID);
|
||||
} else if (isa<ObjcClassDecl>(D)) {
|
||||
fprintf(stderr, "@class [printing todo]\n");
|
||||
} else if (ScopedDecl *SD = dyn_cast<ScopedDecl>(D)) {
|
||||
fprintf(stderr, "Read top-level variable decl: '%s'\n", SD->getName());
|
||||
} else {
|
||||
assert(0 && "Unknown decl type!");
|
||||
}
|
||||
|
|
|
@ -163,7 +163,7 @@ Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration(
|
|||
// The @ sign was already consumed by ParseObjCInterfaceDeclList().
|
||||
if (Tok.isObjCAtKeyword(tok::objc_end)) {
|
||||
ConsumeToken(); // the "end" identifier
|
||||
return 0;
|
||||
return CategoryType;
|
||||
}
|
||||
Diag(Tok, diag::err_objc_missing_end);
|
||||
return 0;
|
||||
|
@ -803,7 +803,7 @@ Parser::DeclTy *Parser::ParseObjCAtProtocolDeclaration(SourceLocation AtLoc) {
|
|||
// The @ sign was already consumed by ParseObjCInterfaceDeclList().
|
||||
if (Tok.isObjCAtKeyword(tok::objc_end)) {
|
||||
ConsumeToken(); // the "end" identifier
|
||||
return 0;
|
||||
return ProtoType;
|
||||
}
|
||||
Diag(Tok, diag::err_objc_missing_end);
|
||||
return 0;
|
||||
|
|
|
@ -347,12 +347,12 @@ public:
|
|||
///
|
||||
/// @class NSCursor, NSImage, NSPasteboard, NSWindow;
|
||||
///
|
||||
class ObjcClassDecl : public TypeDecl {
|
||||
class ObjcClassDecl : public Decl {
|
||||
ObjcInterfaceDecl **ForwardDecls;
|
||||
unsigned NumForwardDecls;
|
||||
public:
|
||||
ObjcClassDecl(SourceLocation L, ObjcInterfaceDecl **Elts, unsigned nElts)
|
||||
: TypeDecl(ObjcClass, L, 0, 0) {
|
||||
: Decl(ObjcClass, L) {
|
||||
if (nElts) {
|
||||
ForwardDecls = new ObjcInterfaceDecl*[nElts];
|
||||
memcpy(ForwardDecls, Elts, nElts*sizeof(ObjcInterfaceDecl*));
|
||||
|
|
|
@ -64,7 +64,6 @@ public:
|
|||
DISPATCH_CASE(Class,RecordDecl) // FIXME: Refine.
|
||||
DISPATCH_CASE(Enum,EnumDecl)
|
||||
DISPATCH_CASE(ObjcInterface,ObjcInterfaceDecl)
|
||||
DISPATCH_CASE(ObjcClass,ObjcClassDecl)
|
||||
DISPATCH_CASE(ObjcProtocol,ObjcProtocolDecl)
|
||||
default:
|
||||
assert(false && "Subtype of ScopedDecl not handled.");
|
||||
|
|
Loading…
Reference in New Issue