diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-08-26 08:29:31 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-08-26 08:29:31 +0000 |
commit | af05bb9073319d8381b71c4325188853fd4b8ed6 (patch) | |
tree | 9379a25b653295e0c48894a0f777865b3a134e0c /lib/CodeGen/CodeGenFunction.cpp | |
parent | 394d33f1f602f7681032a659dff5bb09061ee510 (diff) |
Objective-C @synthesize support.
- Only supports simple assignment and atomic semantics are ignored.
- Not quite usable yet because the methods do not actually get added
to the class metadata.
- Added ObjCPropertyDecl::getSetterKind (one of Assign, Copy, Retain).
- Rearrange CodeGenFunction so synthesis can reuse function prolog /
epilog code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55365 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenFunction.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index 11fde87302..909486a6d1 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -62,19 +62,15 @@ bool CodeGenFunction::hasAggregateLLVMType(QualType T) { !T->isVoidType() && !T->isVectorType() && !T->isFunctionType(); } -void CodeGenFunction::GenerateFunction(const Stmt *Body) { - // Emit the function body. - EmitStmt(Body); - +void CodeGenFunction::FinishFunction(SourceLocation EndLoc) { // Finish emission of indirect switches. EmitIndirectSwitches(); // Emit debug descriptor for function end. CGDebugInfo *DI = CGM.getDebugInfo(); if (DI) { - const CompoundStmt* s = dyn_cast<CompoundStmt>(Body); - if (s && s->getRBracLoc().isValid()) { - DI->setLocation(s->getRBracLoc()); + if (EndLoc.isValid()) { + DI->setLocation(EndLoc); } DI->EmitRegionEnd(CurFn, Builder); } @@ -156,7 +152,15 @@ void CodeGenFunction::GenerateCode(const FunctionDecl *FD, EmitParmDecl(*CurParam, V); } } - GenerateFunction(FD->getBody()); + + EmitStmt(FD->getBody()); + + const CompoundStmt *S = dyn_cast<CompoundStmt>(FD->getBody()); + if (S) { + FinishFunction(S->getRBracLoc()); + } else { + FinishFunction(); + } } /// isDummyBlock - Return true if BB is an empty basic block |