Mercurial > projects > ddmd
annotate dmd/StaticAssert.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 | af1bebfd96a4 |
children | b0d41ff5e0df |
rev | line source |
---|---|
0 | 1 module dmd.StaticAssert; |
2 | |
114 | 3 import dmd.common; |
0 | 4 import dmd.Dsymbol; |
5 import dmd.Expression; | |
6 import dmd.OutBuffer; | |
7 import dmd.HdrGenState; | |
8 import dmd.ScopeDsymbol; | |
9 import dmd.Loc; | |
10 import dmd.Scope; | |
11 import dmd.Id; | |
12 import dmd.WANT; | |
13 import dmd.Global; | |
14 import dmd.Util; | |
15 | |
16 class StaticAssert : Dsymbol | |
17 { | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
18 Expression exp; |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
19 Expression msg; |
0 | 20 |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
21 this(Loc loc, Expression exp, Expression msg) |
0 | 22 { |
178 | 23 register(); |
0 | 24 super(Id.empty); |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
25 |
0 | 26 this.loc = loc; |
27 this.exp = exp; | |
28 this.msg = msg; | |
29 } | |
30 | |
72 | 31 override Dsymbol syntaxCopy(Dsymbol s) |
0 | 32 { |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
33 StaticAssert sa; |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
34 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
35 assert(!s); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
36 sa = new StaticAssert(loc, exp.syntaxCopy(), msg ? msg.syntaxCopy() : null); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
37 return sa; |
0 | 38 } |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
39 |
72 | 40 override bool addMember(Scope sc, ScopeDsymbol sd, bool memnum) |
0 | 41 { |
42 return false; // we didn't add anything | |
43 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
44 |
72 | 45 override void semantic(Scope sc) |
0 | 46 { |
47 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
48 |
72 | 49 override void semantic2(Scope sc) |
0 | 50 { |
51 Expression e; | |
52 | |
53 //printf("StaticAssert::semantic2() %s\n", toChars()); | |
54 e = exp.semantic(sc); | |
55 e = e.optimize(WANT.WANTvalue | WANT.WANTinterpret); | |
56 if (e.isBool(false)) | |
57 { | |
58 if (msg) | |
59 { | |
60 HdrGenState hgs; | |
61 scope OutBuffer buf = new OutBuffer(); | |
62 | |
63 msg = msg.semantic(sc); | |
64 msg = msg.optimize(WANT.WANTvalue | WANT.WANTinterpret); | |
65 hgs.console = 1; | |
66 msg.toCBuffer(buf, &hgs); | |
67 error("%s", buf.toChars()); | |
68 } | |
69 else | |
70 error("(%s) is false", exp.toChars()); | |
71 | |
135 | 72 if (sc.tinst) |
0 | 73 sc.tinst.printInstantiationTrace(); |
74 | |
135 | 75 if (!global.gag) |
0 | 76 fatal(); |
77 } | |
78 else if (!e.isBool(true)) | |
79 { | |
80 error("(%s) is not evaluatable at compile time", exp.toChars()); | |
81 } | |
82 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
83 |
72 | 84 override void inlineScan() |
0 | 85 { |
86 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
87 |
72 | 88 override bool oneMember(Dsymbol* ps) |
0 | 89 { |
13 | 90 //printf("StaticAssert.oneMember())\n"); |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
91 *ps = null; |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
92 return true; |
0 | 93 } |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
94 |
72 | 95 override void toObjFile(int multiobj) |
0 | 96 { |
97 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
98 |
72 | 99 override string kind() |
0 | 100 { |
101 return "static assert"; | |
102 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
103 |
72 | 104 override void toCBuffer(OutBuffer buf, HdrGenState* hgs) |
0 | 105 { |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
106 buf.writestring(kind()); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
107 buf.writeByte('('); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
108 exp.toCBuffer(buf, hgs); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
109 if (msg) |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
110 { |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
111 buf.writeByte(','); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
112 msg.toCBuffer(buf, hgs); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
113 } |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
114 buf.writestring(");"); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
115 buf.writenl(); |
0 | 116 } |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
117 } |