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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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());