annotate dmd/scope.h @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
parents 9bf06e02070b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
1
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
2 // Copyright (c) 1999-2009 by Digital Mars
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
3 // All Rights Reserved
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
4 // written by Walter Bright
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
5 // http://www.digitalmars.com
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
6 // License for redistribution is by either the Artistic License
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
7 // in artistic.txt, or the GNU General Public License in gnu.txt.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
8 // See the included readme.txt for details.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
9
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
10 #ifndef DMD_SCOPE_H
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
11 #define DMD_SCOPE_H
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
12
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
13 #ifdef __DMC__
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
14 #pragma once
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
15 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
16
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
17 struct Dsymbol;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
18 struct ScopeDsymbol;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
19 struct Array;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
20 struct Identifier;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
21 struct Module;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
22 struct Statement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
23 struct SwitchStatement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
24 struct TryFinallyStatement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
25 struct LabelStatement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
26 struct ForeachStatement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
27 struct ClassDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
28 struct AggregateDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
29 struct AnonymousAggregateDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
30 struct FuncDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
31 struct DocComment;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
32 struct TemplateInstance;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
33
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
34 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
35 struct EnclosingHandler;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
36 struct AnonDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
37 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
38
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
39 #if __GNUC__
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
40 // Requires a full definition for PROT and LINK
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
41 #include "dsymbol.h" // PROT
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
42 #include "mars.h" // LINK
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
43 #else
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
44 enum LINK;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
45 enum PROT;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
46 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
47
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
48 struct Scope
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
49 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
50 Scope *enclosing; // enclosing Scope
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
51
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
52 Module *module; // Root module
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
53 ScopeDsymbol *scopesym; // current symbol
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
54 ScopeDsymbol *sd; // if in static if, and declaring new symbols,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
55 // sd gets the addMember()
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
56 FuncDeclaration *func; // function we are in
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
57 Dsymbol *parent; // parent to use
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
58 LabelStatement *slabel; // enclosing labelled statement
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
59 SwitchStatement *sw; // enclosing switch statement
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
60 TryFinallyStatement *enclosingFinally; // enclosing try finally statement; set inside its finally block
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
61 TemplateInstance *tinst; // enclosing template instance
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
62 Statement *enclosingScopeExit; // enclosing statement that wants to do something on scope exit
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
63 Statement *sbreak; // enclosing statement that supports "break"
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
64 Statement *scontinue; // enclosing statement that supports "continue"
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
65 ForeachStatement *fes; // if nested function for ForeachStatement, this is it
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
66 unsigned offset; // next offset to use in aggregate
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
67 int inunion; // we're processing members of a union
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
68 int incontract; // we're inside contract code
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
69 int nofree; // set if shouldn't free it
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
70 int noctor; // set if constructor calls aren't allowed
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
71 int intypeof; // in typeof(exp)
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
72 int parameterSpecialization; // if in template parameter specialization
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
73 int noaccesscheck; // don't do access checks
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
74 int mustsemantic; // cannot defer semantic()
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
75
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
76 unsigned callSuper; // primitive flow analysis for constructors
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
77 #define CSXthis_ctor 1 // called this()
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
78 #define CSXsuper_ctor 2 // called super()
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
79 #define CSXthis 4 // referenced this
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
80 #define CSXsuper 8 // referenced super
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
81 #define CSXlabel 0x10 // seen a label
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
82 #define CSXreturn 0x20 // seen a return statement
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
83 #define CSXany_ctor 0x40 // either this() or super() was called
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
84
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
85 unsigned structalign; // alignment for struct members
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
86 enum LINK linkage; // linkage for external functions
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
87
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
88 enum PROT protection; // protection for class members
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
89 int explicitProtection; // set if in an explicit protection attribute
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
90
1602
a413ae7329bf Merge DMD r243: some harmonization with D2 dmd
Leandro Lucarella <llucax@gmail.com>
parents: 1587
diff changeset
91 StorageClass stc; // storage class
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
92
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
93 unsigned flags;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
94 #define SCOPEctor 1 // constructor type
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
95 #define SCOPEstaticif 2 // inside static if
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
96 #define SCOPEfree 4 // is on free list
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
97
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
98 AnonymousAggregateDeclaration *anonAgg; // for temporary analysis
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
99
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
100 DocComment *lastdc; // documentation comment for last symbol at this scope
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
101 unsigned lastoffset; // offset in docbuf of where to insert next dec
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
102 OutBuffer *docbuf; // buffer for documentation output
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
103
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
104 static Scope *freelist;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
105 static void *operator new(size_t sz);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
106 static Scope *createGlobal(Module *module);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
107
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
108 Scope();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
109 Scope(Module *module);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
110 Scope(Scope *enclosing);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
111
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
112 Scope *push();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
113 Scope *push(ScopeDsymbol *ss);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
114 Scope *pop();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
115
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
116 void mergeCallSuper(Loc loc, unsigned cs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
117
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
118 Dsymbol *search(Loc loc, Identifier *ident, Dsymbol **pscopesym);
1640
9bf06e02070b Merge DMD 1.057.
Christian Kamm <kamm incasoftware de>
parents: 1602
diff changeset
119 Dsymbol *search_correct(Identifier *ident);
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
120 Dsymbol *insert(Dsymbol *s);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
121
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
122 ClassDeclaration *getClassScope();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
123 AggregateDeclaration *getStructClassScope();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
124 void setNoFree();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
125 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
126
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1367
diff changeset
127 #endif /* DMD_SCOPE_H */