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