blob: 833a59fdceea2fdaced32fa9b7c77df49f6dc20b [file] [log] [blame]
John McCallfb44de92011-05-01 22:35:37 +00001//===- Scope.cpp - Lexical scope information --------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the Scope class, which is used for recording
11// information about a lexical scope.
12//
13//===----------------------------------------------------------------------===//
14
15#include "clang/Sema/Scope.h"
16
17using namespace clang;
18
19void Scope::Init(Scope *parent, unsigned flags) {
20 AnyParent = parent;
21 Flags = flags;
22
23 if (parent) {
24 Depth = parent->Depth + 1;
25 PrototypeDepth = parent->PrototypeDepth;
26 PrototypeIndex = 0;
27 FnParent = parent->FnParent;
28 BreakParent = parent->BreakParent;
29 ContinueParent = parent->ContinueParent;
30 ControlParent = parent->ControlParent;
31 BlockParent = parent->BlockParent;
32 TemplateParamParent = parent->TemplateParamParent;
33 } else {
34 Depth = 0;
35 PrototypeDepth = 0;
36 PrototypeIndex = 0;
37 FnParent = BreakParent = ContinueParent = BlockParent = 0;
38 ControlParent = 0;
39 TemplateParamParent = 0;
40 }
41
42 // If this scope is a function or contains breaks/continues, remember it.
43 if (flags & FnScope) FnParent = this;
44 if (flags & BreakScope) BreakParent = this;
45 if (flags & ContinueScope) ContinueParent = this;
46 if (flags & ControlScope) ControlParent = this;
47 if (flags & BlockScope) BlockParent = this;
48 if (flags & TemplateParamScope) TemplateParamParent = this;
49
50 // If this is a prototype scope, record that.
51 if (flags & FunctionPrototypeScope) PrototypeDepth++;
52
53 DeclsInScope.clear();
54 UsingDirectives.clear();
55 Entity = 0;
56 ErrorTrap.reset();
57}