Mercurial > projects > dil
annotate src/TypeRulesGenerator.d @ 836:e7cb5e38d567
Improved ExpressionType template.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Tue, 12 Aug 2008 21:25:14 +0200 |
parents | 451ede0105e0 |
children |
rev | line source |
---|---|
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
1 #! /usr/bin/rdmd |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
2 /++ |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
3 Author: Aziz Köksal |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
4 License: GPL3 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
5 +/ |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
6 module TypeRulesGenerator; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
7 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
8 import tango.io.File; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
9 import tango.io.FilePath; |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
10 import common; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
11 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
12 alias char[] string; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
13 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
14 void main(char[][] args) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
15 { |
835
451ede0105e0
Applied minor fixes and tidied some code up a bit.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
16 char[] text = "/// Generated by TypeRulesGenerator.d\n" |
451ede0105e0
Applied minor fixes and tidied some code up a bit.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
17 "module TypeRulesData;\n\n"; |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
18 text ~= Format(`const char[] compilerNameVersion = "{} {}.{,:d3}";`\n\n, |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
19 __VENDOR__, __VERSION__/1000, __VERSION__%1000); |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
20 text ~= "char[][][] unaryExpsResults = [\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
21 foreach (results; unaryExpsResults) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
22 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
23 text ~= " ["; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
24 foreach (result; results) |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
25 text ~= '"' ~ result ~ `", `; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
26 text.length = text.length - 2; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
27 text ~= "],\n"; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
28 } |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
29 text.length = text.length - 2; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
30 text ~= "\n];\n\n"; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
31 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
32 text ~= "char[][][][] binaryExpsResults = [\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
33 foreach (expResults; binaryExpsResults) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
34 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
35 text ~= " [\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
36 foreach (results; expResults) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
37 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
38 text ~= " ["; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
39 foreach (result; results) |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
40 text ~= '"' ~ result ~ `", `; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
41 text.length = text.length - 2; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
42 text ~= "],\n"; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
43 } |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
44 text.length = text.length - 2; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
45 text ~= "\n ],\n"; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
46 } |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
47 text.length = text.length - 2; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
48 text ~= "\n];\n"; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
49 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
50 // Write the text to a D module. |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
51 auto file = new File("TypeRulesData.d"); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
52 file.write(text); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
53 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
54 |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
55 template ExpressionType(alias x, alias y, char[] expression) |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
56 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
57 static if(is(typeof(mixin(expression)) ResultType)) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
58 const char[] result = ResultType.stringof; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
59 else |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
60 const char[] result = "Error"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
61 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
62 alias ExpressionType EType; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
63 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
64 // pragma(msg, EType!("char", "int", "&x").result); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
65 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
66 static const string[] basicTypes = [ |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
67 "char"[], "wchar", "dchar", "bool", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
68 "byte", "ubyte", "short", "ushort", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
69 "int", "uint", "long", "ulong", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
70 /+"cent", "ucent",+/ |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
71 "float", "double", "real", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
72 "ifloat", "idouble", "ireal", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
73 "cfloat", "cdouble", "creal"/+, "void"+/ |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
74 ]; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
75 |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
76 char char_; wchar wchar_; dchar dchar_; bool bool_; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
77 byte byte_; ubyte ubyte_; short short_; ushort ushort_; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
78 int int_; uint uint_; long long_; ulong ulong_; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
79 /+cent cent_; ucent ucent_;+/ |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
80 float float_; double double_; real real_; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
81 ifloat ifloat_; idouble idouble_; ireal ireal_; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
82 cfloat cfloat_; cdouble cdouble_; creal creal_; |
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
83 |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
84 static const string[] unaryExpressions = [ |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
85 "!x", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
86 "&x", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
87 "~x", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
88 "+x", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
89 "-x", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
90 "++x", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
91 "--x", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
92 "x++", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
93 "x--", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
94 ]; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
95 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
96 static const string[] binaryExpressions = [ |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
97 "x!<>=y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
98 "x!<>y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
99 "x!<=y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
100 "x!<y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
101 "x!>=y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
102 "x!>y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
103 "x<>=y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
104 "x<>y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
105 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
106 "x=y", "x==y", "x!=y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
107 "x<=y", "x<y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
108 "x>=y", "x>y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
109 "x<<=y", "x<<y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
110 "x>>=y","x>>y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
111 "x>>>=y", "x>>>y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
112 "x|=y", "x||y", "x|y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
113 "x&=y", "x&&y", "x&y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
114 "x+=y", "x+y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
115 "x-=y", "x-y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
116 "x/=y", "x/y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
117 "x*=y", "x*y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
118 "x%=y", "x%y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
119 "x^=y", "x^y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
120 "x~=y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
121 "x~y", |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
122 "x,y" |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
123 ]; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
124 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
125 char[] genBinaryExpArray(char[] expression) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
126 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
127 char[] result = "[\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
128 foreach (t1; basicTypes) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
129 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
130 result ~= "[\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
131 foreach (t2; basicTypes) |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
132 result ~= `EType!(`~t1~`_, `~t2~`_, "`~expression~`").result,`\n; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
133 result[result.length-2] = ']'; // Overwrite last comma. |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
134 result[result.length-1] = ','; // Overwrite last \n. |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
135 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
136 result[result.length-1] = ']'; // Overwrite last comma. |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
137 return result; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
138 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
139 // pragma(msg, mixin(genBinaryExpArray("x%y")).stringof); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
140 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
141 char[] genBinaryExpsArray() |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
142 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
143 char[] result = "[\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
144 foreach (expression; binaryExpressions) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
145 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
146 result ~= genBinaryExpArray(expression); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
147 result ~= ",\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
148 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
149 result[result.length-2] = ']'; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
150 return result; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
151 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
152 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
153 // pragma(msg, mixin(genBinaryExpsArray()).stringof); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
154 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
155 char[] genUnaryExpArray(char[] expression) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
156 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
157 char[] result = "[\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
158 foreach (t1; basicTypes) |
836
e7cb5e38d567
Improved ExpressionType template.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
835
diff
changeset
|
159 result ~= `EType!(`~t1~`_, int_, "`~expression~`").result,`\n; |
802
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
160 result[result.length-2] = ']'; // Overwrite last comma. |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
161 return result; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
162 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
163 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
164 char[] genUnaryExpsArray() |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
165 { |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
166 char[] result = "[\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
167 foreach (expression; unaryExpressions) |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
168 result ~= genUnaryExpArray(expression) ~ ",\n"; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
169 result[result.length-2] = ']'; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
170 return result; |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
171 } |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
172 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
173 // pragma(msg, mixin(genUnaryExpsArray()).stringof); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
174 |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
175 auto unaryExpsResults = mixin(genUnaryExpsArray()); |
f51305056196
Added modules related to type rules.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
176 auto binaryExpsResults = mixin(genBinaryExpsArray()); |