annotate dmd/CompoundDeclarationStatement.d @ 178:e3afd1303184

Many small bugs fixed Made all classes derive from TObject to detect memory leaks (functionality is disabled for now) Began work on overriding backend memory allocations (to avoid memory leaks)
author korDen
date Sun, 17 Oct 2010 07:42:00 +0400
parents af724d3510d7
children b0d41ff5e0df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.CompoundDeclarationStatement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 72
diff changeset
3 import dmd.common;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.CompoundStatement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.Loc;
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
6 import dmd.TOK;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.ArrayTypes;
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
8 import dmd.VarDeclaration;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
9 import dmd.AssignExp;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
10 import dmd.ExpInitializer;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
11 import dmd.Declaration;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
12 import dmd.StorageClassDeclaration;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
13 import dmd.DeclarationStatement;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
14 import dmd.DeclarationExp;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 import dmd.Statement;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 import dmd.HdrGenState;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 class CompoundDeclarationStatement : CompoundStatement
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 this(Loc loc, Statements s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 174
diff changeset
23 register();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 super(loc, s);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 ///statements = s;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
27
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 51
diff changeset
28 override Statement syntaxCopy()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 {
51
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
30 Statements a = new Statements();
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
31 a.setDim(statements.dim);
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
32 for (size_t i = 0; i < statements.dim; i++)
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
33 {
122
c77e9f4f1793 Statements -> Vector
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
34 Statement s = statements[i];
51
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
35 if (s)
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
36 s = s.syntaxCopy();
122
c77e9f4f1793 Statements -> Vector
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 114
diff changeset
37 a[i] = s;
51
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
38 }
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
39 CompoundDeclarationStatement cs = new CompoundDeclarationStatement(loc, a);
b7d29f613539 StaticAssertStatement.syntaxCopy
korDen
parents: 0
diff changeset
40 return cs;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41 }
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
42
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 51
diff changeset
43 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44 {
174
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
45 int nwritten = 0;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
46 foreach (Statement s; statements)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
47 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
48 if (s)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
49 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
50 DeclarationStatement ds = s.isDeclarationStatement();
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
51 assert(ds);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
52 DeclarationExp de = cast(DeclarationExp)ds.exp;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
53 assert(de.op == TOKdeclaration);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
54 Declaration d = de.declaration.isDeclaration();
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
55 assert(d);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
56 VarDeclaration v = d.isVarDeclaration();
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
57 if (v)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
58 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
59 /* This essentially copies the part of VarDeclaration.toCBuffer()
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
60 * that does not print the type.
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
61 * Should refactor this.
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
62 */
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
63 if (nwritten)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
64 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
65 buf.writeByte(',');
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
66 buf.writestring(v.ident.toChars());
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
67 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
68 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
69 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
70 StorageClassDeclaration.stcToCBuffer(buf, v.storage_class);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
71 if (v.type)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
72 v.type.toCBuffer(buf, v.ident, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
73 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
74 buf.writestring(v.ident.toChars());
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
75 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
76
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
77 if (v.init)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
78 {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
79 buf.writestring(" = ");
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
80 ///version (DMDV2) {
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
81 ExpInitializer ie = v.init.isExpInitializer();
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
82 if (ie && (ie.exp.op == TOKconstruct || ie.exp.op == TOKblit))
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
83 (cast(AssignExp)ie.exp).e2.toCBuffer(buf, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
84 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
85 ///}
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
86 v.init.toCBuffer(buf, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
87 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
88 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
89 else
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
90 d.toCBuffer(buf, hgs);
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
91 nwritten++;
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
92 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
93 }
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
94 buf.writeByte(';');
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
95 if (!hgs.FLinit.init)
af724d3510d7 lot os toCBuffer methods implemented
korDen
parents: 122
diff changeset
96 buf.writenl();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 }
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 51
diff changeset
98 }