Make parse-ast-print print the storage class and inline

specifier of functions.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41416 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-08-26 04:02:13 +00:00
Родитель 4a70adba92
Коммит 70c8b2eccc
3 изменённых файлов: 20 добавлений и 5 удалений

Просмотреть файл

@ -47,6 +47,18 @@ void clang::BuildASTs(Preprocessor &PP, unsigned MainFileID, bool Stats) {
static void PrintFunctionDeclStart(FunctionDecl *FD) {
bool HasBody = FD->getBody();
fprintf(stderr, "\n");
switch (FD->getStorageClass()) {
default: assert(0 && "Unknown storage class");
case FunctionDecl::None: break;
case FunctionDecl::Extern: fprintf(stderr, "extern "); break;
case FunctionDecl::Static: fprintf(stderr, "static "); break;
}
if (FD->isInline())
fprintf(stderr, "inline ");
std::string Proto = FD->getName();
FunctionType *AFT = cast<FunctionType>(FD->getType());
@ -72,7 +84,7 @@ static void PrintFunctionDeclStart(FunctionDecl *FD) {
}
AFT->getResultType().getAsStringInternal(Proto);
fprintf(stderr, "\n%s", Proto.c_str());
fprintf(stderr, "%s", Proto.c_str());
if (!FD->getBody())
fprintf(stderr, ";\n");

Просмотреть файл

@ -156,7 +156,7 @@ Decl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned bid, Scope *S) {
QualType R = Context.BuiltinInfo.GetBuiltinType(BID, Context);
FunctionDecl *New = new FunctionDecl(SourceLocation(), II, R,
FunctionDecl::Extern, 0);
FunctionDecl::Extern, false, 0);
// Find translation-unit scope to insert this function into.
while (S->getParent())
@ -334,6 +334,7 @@ Sema::ParseDeclarator(Scope *S, Declarator &D, ExprTy *init,
}
FunctionDecl *NewFD = new FunctionDecl(D.getIdentifierLoc(), II, R, SC,
D.getDeclSpec().isInlineSpecified(),
LastDeclarator);
// Merge the decl with the existing one if appropriate.

Просмотреть файл

@ -239,9 +239,9 @@ public:
None, Extern, Static
};
FunctionDecl(SourceLocation L, IdentifierInfo *Id, QualType T,
StorageClass S = None, Decl *PrevDecl = 0)
StorageClass S = None, bool isInline, Decl *PrevDecl = 0)
: ValueDecl(Function, L, Id, T, PrevDecl),
ParamInfo(0), Body(0), DeclChain(0), SClass(S) {}
ParamInfo(0), Body(0), DeclChain(0), SClass(S), IsInline(isInline) {}
virtual ~FunctionDecl();
Stmt *getBody() const { return Body; }
@ -265,6 +265,7 @@ public:
return cast<FunctionType>(getType())->getResultType();
}
StorageClass getStorageClass() const { return SClass; }
bool isInline() const { return IsInline; }
// Implement isa/cast/dyncast/etc.
static bool classof(const Decl *D) { return D->getKind() == Function; }
@ -282,7 +283,8 @@ private:
/// function.
Decl *DeclChain;
StorageClass SClass;
StorageClass SClass : 2;
bool IsInline : 1;
};