Mercurial > projects > ddmd
annotate dmd/StaticAssert.d @ 35:69494b249ace
improper function signature fix
author | korDen |
---|---|
date | Sat, 21 Aug 2010 05:51:06 +0400 |
parents | 460959608115 |
children | 2e2a5c3f943a |
rev | line source |
---|---|
0 | 1 module dmd.StaticAssert; |
2 | |
3 import dmd.Dsymbol; | |
4 import dmd.Expression; | |
5 import dmd.OutBuffer; | |
6 import dmd.HdrGenState; | |
7 import dmd.ScopeDsymbol; | |
8 import dmd.Loc; | |
9 import dmd.Scope; | |
10 import dmd.Id; | |
11 import dmd.WANT; | |
12 import dmd.Global; | |
13 import dmd.Util; | |
14 | |
15 class StaticAssert : Dsymbol | |
16 { | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
17 Expression exp; |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
18 Expression msg; |
0 | 19 |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
20 this(Loc loc, Expression exp, Expression msg) |
0 | 21 { |
22 super(Id.empty); | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
23 |
0 | 24 this.loc = loc; |
25 this.exp = exp; | |
26 this.msg = msg; | |
27 } | |
28 | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
29 Dsymbol syntaxCopy(Dsymbol s) |
0 | 30 { |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
31 StaticAssert sa; |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
32 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
33 assert(!s); |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
34 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
|
35 return sa; |
0 | 36 } |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
37 |
35 | 38 bool addMember(Scope sc, ScopeDsymbol sd, bool memnum) |
0 | 39 { |
40 return false; // we didn't add anything | |
41 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
42 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
43 void semantic(Scope sc) |
0 | 44 { |
45 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
46 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
47 void semantic2(Scope sc) |
0 | 48 { |
49 Expression e; | |
50 | |
51 //printf("StaticAssert::semantic2() %s\n", toChars()); | |
52 e = exp.semantic(sc); | |
53 e = e.optimize(WANT.WANTvalue | WANT.WANTinterpret); | |
54 if (e.isBool(false)) | |
55 { | |
56 if (msg) | |
57 { | |
58 HdrGenState hgs; | |
59 scope OutBuffer buf = new OutBuffer(); | |
60 | |
61 msg = msg.semantic(sc); | |
62 msg = msg.optimize(WANT.WANTvalue | WANT.WANTinterpret); | |
63 hgs.console = 1; | |
64 msg.toCBuffer(buf, &hgs); | |
65 error("%s", buf.toChars()); | |
66 } | |
67 else | |
68 error("(%s) is false", exp.toChars()); | |
69 | |
70 if(sc.tinst) | |
71 sc.tinst.printInstantiationTrace(); | |
72 | |
73 if (!global.gag) { | |
74 fatal(); | |
75 } | |
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 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
83 void inlineScan() |
0 | 84 { |
85 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
86 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
87 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 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
94 void toObjFile(int multiobj) |
0 | 95 { |
96 } | |
20
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
97 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
98 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 |
1628b221808d
Fleshed out more unimplemented methods.
Robert Clipsham <robert@octarineparrot.com>
parents:
0
diff
changeset
|
103 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 } |