annotate dmd/scope.h @ 715:30b42a283c8e

Removed TypeOpaque from DMD. Changed runtime functions taking opaque[] to void[]. Implemented proper type painting, to avoid "resizing" array casts in runtime calls that previously took opaque[]. Implemented dynamic arrays as first class types, this implements proper ABI for these types on x86. Added dwarf region end after call to assert function, fixes some problems with llvm not allowing this to be missing. Reverted change to WithStatement from rev [704] it breaks MiniD, mini/with2.d needs to be fixed some other way... Fixed tango bug 1339 in runtime, problem with _adReverseChar on invalid UTF-8. Disabled .bc generation in the compiler runtime part, genobj.d triggers some llvm bug when using debug info. the .o seems to work fine.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Wed, 22 Oct 2008 14:55:33 +0200
parents d4e95db0e62b
children 041c1596d217
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
2 // Copyright (c) 1999-2005 by Digital Mars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
3 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
4 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
5 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
6 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
7 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
8 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
9
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
10 #ifndef DMD_SCOPE_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
11 #define DMD_SCOPE_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
12
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
13 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
14 #pragma once
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
15 #endif /* __DMC__ */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
16
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
17 struct Dsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
18 struct ScopeDsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
19 struct Array;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
20 struct Identifier;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
21 struct Module;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
22 struct Statement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
23 struct SwitchStatement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
24 struct TryFinallyStatement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
25 struct LabelStatement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
26 struct ForeachStatement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
27 struct ClassDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
28 struct AggregateDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
29 struct AnonymousAggregateDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
30 struct FuncDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
31 struct DocComment;
309
d59c363fccad [svn r330] Implemented synchronized statements.
lindquist
parents: 159
diff changeset
32 struct EnclosingHandler;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
33 enum LINK;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
34 enum PROT;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
35
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
36 struct Scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
37 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
38 Scope *enclosing; // enclosing Scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
39
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
40 Module *module; // Root module
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
41 ScopeDsymbol *scopesym; // current symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
42 ScopeDsymbol *sd; // if in static if, and declaring new symbols,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
43 // sd gets the addMember()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
44 FuncDeclaration *func; // function we are in
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
45 Dsymbol *parent; // parent to use
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
46 LabelStatement *slabel; // enclosing labelled statement
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
47 SwitchStatement *sw; // enclosing switch statement
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
48 TryFinallyStatement *tf; // enclosing try finally statement; set inside its finally block
309
d59c363fccad [svn r330] Implemented synchronized statements.
lindquist
parents: 159
diff changeset
49 EnclosingHandler *tfOfTry; // enclosing try-finally, volatile or synchronized statement; set inside its try or body block
561
d4e95db0e62b Introducing template instantiation traces for static asserts and errors within templates.
Christian Kamm <kamm incasoftware de>
parents: 309
diff changeset
50 TemplateInstance *tinst; // enclosing template instance
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
51 Statement *sbreak; // enclosing statement that supports "break"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
52 Statement *scontinue; // enclosing statement that supports "continue"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
53 ForeachStatement *fes; // if nested function for ForeachStatement, this is it
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
54 unsigned offset; // next offset to use in aggregate
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
55 int inunion; // we're processing members of a union
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
56 int incontract; // we're inside contract code
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
57 int nofree; // set if shouldn't free it
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
58 int noctor; // set if constructor calls aren't allowed
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
59 int intypeof; // in typeof(exp)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
60 int parameterSpecialization; // if in template parameter specialization
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
61 int noaccesscheck; // don't do access checks
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
62
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
63 unsigned callSuper; // primitive flow analysis for constructors
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
64 #define CSXthis_ctor 1 // called this()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
65 #define CSXsuper_ctor 2 // called super()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
66 #define CSXthis 4 // referenced this
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
67 #define CSXsuper 8 // referenced super
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
68 #define CSXlabel 0x10 // seen a label
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
69 #define CSXreturn 0x20 // seen a return statement
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
70 #define CSXany_ctor 0x40 // either this() or super() was called
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
71
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
72 unsigned structalign; // alignment for struct members
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
73 enum LINK linkage; // linkage for external functions
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
74
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
75 enum PROT protection; // protection for class members
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
76 int explicitProtection; // set if in an explicit protection attribute
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
77
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
78 unsigned stc; // storage class
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
79
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
80 unsigned flags;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
81 #define SCOPEctor 1 // constructor type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
82 #define SCOPEstaticif 2 // inside static if
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
83 #define SCOPEfree 4 // is on free list
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
84
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
85 AnonymousAggregateDeclaration *anonAgg; // for temporary analysis
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
86
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
87 DocComment *lastdc; // documentation comment for last symbol at this scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
88 unsigned lastoffset; // offset in docbuf of where to insert next dec
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
89 OutBuffer *docbuf; // buffer for documentation output
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
90
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
91 static Scope *freelist;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
92 static void *operator new(size_t sz);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
93 static Scope *createGlobal(Module *module);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
94
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
95 Scope();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
96 Scope(Module *module);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
97 Scope(Scope *enclosing);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
98
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
99 Scope *push();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
100 Scope *push(ScopeDsymbol *ss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
101 Scope *pop();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
102
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
103 void mergeCallSuper(Loc loc, unsigned cs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
104
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
105 Dsymbol *search(Loc loc, Identifier *ident, Dsymbol **pscopesym);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
106 Dsymbol *insert(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
107
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
108 ClassDeclaration *getClassScope();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
109 AggregateDeclaration *getStructClassScope();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
110 void setNoFree();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
111 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
112
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 145
diff changeset
113 #endif /* DMD_SCOPE_H */