aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2008-04-12 00:47:19 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2008-04-12 00:47:19 +0000
commit87f3ff0c27be71cfd0eaf4628eb64538e84ee6ce (patch)
tree3a57abe577b17274bc18c9134f1c514363d3023a /lib/Sema/SemaDecl.cpp
parentdae1a1a2aa4f245b1958dc8db6089f24c575ef13 (diff)
Added PushOnScopeChains method to Sema, that adds a decl to both the IdResolver and the Scope.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49567 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r--lib/Sema/SemaDecl.cpp36
1 files changed, 16 insertions, 20 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 169a5f77fb..7a86a8e7d3 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -51,6 +51,12 @@ void Sema::PopDeclContext() {
CurContext = CurContext->getParent();
}
+/// Add this decl to the scope shadowed decl chains.
+void Sema::PushOnScopeChains(NamedDecl *D, Scope *S) {
+ IdResolver.AddDecl(D, S);
+ S->AddDecl(D);
+}
+
void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {
if (S->decl_empty()) return;
assert((S->getFlags() & Scope::DeclScope) &&"Scope shouldn't contain decls!");
@@ -429,10 +435,8 @@ Sema::CreateImplicitParameter(Scope *S, IdentifierInfo *Id,
SourceLocation IdLoc, QualType Type) {
ParmVarDecl *New = ParmVarDecl::Create(Context, CurContext, IdLoc, Id, Type,
VarDecl::None, 0, 0);
- if (Id) {
- IdResolver.AddDecl(New, S);
- S->AddDecl(New);
- }
+ if (Id)
+ PushOnScopeChains(New, S);
return New;
}
@@ -896,10 +900,8 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
}
// If this has an identifier, add it to the scope stack.
- if (II) {
- IdResolver.AddDecl(New, S);
- S->AddDecl(New);
- }
+ if (II)
+ PushOnScopeChains(New, S);
// If any semantic error occurred, mark the decl as invalid.
if (D.getInvalidType() || InvalidDecl)
New->setInvalidDecl();
@@ -1117,10 +1119,8 @@ Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
if (D.getInvalidType())
New->setInvalidDecl();
- if (II) {
- IdResolver.AddDecl(New, S);
- S->AddDecl(New);
- }
+ if (II)
+ PushOnScopeChains(New, S);
HandleDeclAttributes(New, D.getAttributes(), 0);
return New;
@@ -1184,10 +1184,8 @@ Sema::DeclTy *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Declarator &D) {
for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) {
ParmVarDecl *Param = FD->getParamDecl(p);
// If this has an identifier, add it to the scope stack.
- if (Param->getIdentifier()) {
- IdResolver.AddDecl(Param, FnBodyScope);
- FnBodyScope->AddDecl(Param);
- }
+ if (Param->getIdentifier())
+ PushOnScopeChains(Param, FnBodyScope);
}
return FD;
@@ -1378,8 +1376,7 @@ Sema::DeclTy *Sema::ActOnTag(Scope *S, unsigned TagType, TagKind TK,
S = S->getParent();
// Add it to the decl chain.
- IdResolver.AddDecl(New, S);
- S->AddDecl(New);
+ PushOnScopeChains(New, S);
}
HandleDeclAttributes(New, Attr, 0);
@@ -1718,8 +1715,7 @@ Sema::DeclTy *Sema::ActOnEnumConstant(Scope *S, DeclTy *theEnumDecl,
LastEnumConst);
// Register this decl in the current scope stack.
- IdResolver.AddDecl(New, S);
- S->AddDecl(New);
+ PushOnScopeChains(New, S);
return New;
}