annotate dmd/NewAnonClassExp.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 14feb7ae01a6
children b0d41ff5e0df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
1 module dmd.NewAnonClassExp;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 72
diff changeset
3 import dmd.common;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
4 import dmd.Expression;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
5 import dmd.OutBuffer;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
6 import dmd.Loc;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
7 import dmd.Scope;
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
8 import dmd.ClassDeclaration;
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
9 import dmd.DeclarationExp;
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
10 import dmd.NewExp;
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
11 import dmd.CommaExp;
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
12 import dmd.PREC;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
13 import dmd.HdrGenState;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 import dmd.ArrayTypes;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
15 import dmd.TOK;
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
16 import dmd.expression.Util;
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
17
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 class NewAnonClassExp : Expression
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 /* thisexp.new(newargs) class baseclasses { } (arguments)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 Expression thisexp; // if !NULL, 'this' for class being allocated
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23 Expressions newargs; // Array of Expression's to call new operator
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 ClassDeclaration cd; // class being instantiated
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 Expressions arguments; // Array of Expression's to call class constructor
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27 this(Loc loc, Expression thisexp, Expressions newargs, ClassDeclaration cd, Expressions arguments)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 154
diff changeset
29 register();
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
30 super(loc, TOKnewanonclass, NewAnonClassExp.sizeof);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
31 this.thisexp = thisexp;
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
32 this.newargs = newargs;
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
33 this.cd = cd;
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
34 this.arguments = arguments;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
37 override Expression syntaxCopy()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 {
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
39 return new NewAnonClassExp(loc,
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
40 thisexp ? thisexp.syntaxCopy() : null,
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
41 arraySyntaxCopy(newargs),
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
42 cast(ClassDeclaration)cd.syntaxCopy(null),
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
43 arraySyntaxCopy(arguments));
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44 }
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
45
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
46 override Expression semantic(Scope sc)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 {
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
48 version (LOGSEMANTIC) {
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
49 printf("NewAnonClassExp.semantic() %s\n", toChars());
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
50 //printf("thisexp = %p\n", thisexp);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
51 //printf("type: %s\n", type.toChars());
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
52 }
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
53
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
54 Expression d = new DeclarationExp(loc, cd);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
55 d = d.semantic(sc);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
56
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
57 Expression n = new NewExp(loc, thisexp, newargs, cd.type, arguments);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
58
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
59 Expression c = new CommaExp(loc, d, n);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
60 return c.semantic(sc);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
63 override bool checkSideEffect(int flag)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64 {
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
65 return true;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
66 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67
154
14feb7ae01a6 * changed the build system to build a release version if the debug one compiles
trass3r
parents: 123
diff changeset
68 override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
69 {
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
70 if (thisexp)
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
71 {
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
72 expToCBuffer(buf, hgs, thisexp, PREC.PREC_primary);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
73 buf.writeByte('.');
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
74 }
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
75 buf.writestring("new");
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
76 if (newargs && newargs.dim)
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
77 {
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
78 buf.writeByte('(');
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
79 argsToCBuffer(buf, newargs, hgs);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
80 buf.writeByte(')');
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
81 }
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
82 buf.writestring(" class ");
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
83 if (arguments && arguments.dim)
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
84 {
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
85 buf.writeByte('(');
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
86 argsToCBuffer(buf, arguments, hgs);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
87 buf.writeByte(')');
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
88 }
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
89 //buf.writestring(" { }");
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
90 if (cd)
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
91 {
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
92 cd.toCBuffer(buf, hgs);
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
93 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95
72
2e2a5c3f943a reduced warnings by adding override to the methods
Trass3r
parents: 0
diff changeset
96 override bool canThrow()
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 {
123
9e39c7de8438 Make dmd test suite compile
korDen
parents: 114
diff changeset
98 return true;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101