Mercurial > projects > dil
comparison trunk/src/TypeRules.d @ 802:f51305056196
Added modules related to type rules.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Wed, 05 Mar 2008 15:45:54 +0100 |
parents | dcd30b0ba711 |
children |
comparison
equal
deleted
inserted
replaced
801:c39667f1e814 | 802:f51305056196 |
---|---|
2 Author: Aziz Köksal | 2 Author: Aziz Köksal |
3 License: GPL3 | 3 License: GPL3 |
4 +/ | 4 +/ |
5 module TypeRules; | 5 module TypeRules; |
6 | 6 |
7 import cmd.Generate : xml_escape; | |
8 | |
9 import TypeRulesData; | |
7 import common; | 10 import common; |
8 | |
9 template ExpressionType(char[] T1, char[] T2, char[] expression) | |
10 { | |
11 mixin("alias "~T1~" X;"); | |
12 mixin("alias "~T2~" Y;"); | |
13 X x; | |
14 Y y; | |
15 static if(is(typeof(mixin(expression)) ResultType)) | |
16 const char[] result = ResultType.stringof; | |
17 else | |
18 const char[] result = "Error"; | |
19 } | |
20 alias ExpressionType EType; | |
21 | |
22 // pragma(msg, EType!("char", "int", "&x").result); | |
23 | 11 |
24 static const string[] basicTypes = [ | 12 static const string[] basicTypes = [ |
25 "char"[], "wchar", "dchar", "bool", | 13 "char"[], "wchar", "dchar", "bool", |
26 "byte", "ubyte", "short", "ushort", | 14 "byte", "ubyte", "short", "ushort", |
27 "int", "uint", "long", "ulong", | 15 "int", "uint", "long", "ulong", |
70 "x~=y", | 58 "x~=y", |
71 "x~y", | 59 "x~y", |
72 "x,y" | 60 "x,y" |
73 ]; | 61 ]; |
74 | 62 |
75 char[] genBinaryExpArray(char[] expression) | |
76 { | |
77 char[] result = "[\n"; | |
78 foreach (t1; basicTypes) | |
79 { | |
80 result ~= "[\n"; | |
81 foreach (t2; basicTypes) | |
82 result ~= `EType!("`~t1~`", "`~t2~`", "`~expression~`").result,`\n; | |
83 result[result.length-2] = ']'; // Overwrite last comma. | |
84 result[result.length-1] = ','; // Overwrite last \n. | |
85 } | |
86 result[result.length-1] = ']'; // Overwrite last comma. | |
87 return result; | |
88 } | |
89 // pragma(msg, mixin(genBinaryExpArray("x%y")).stringof); | |
90 | |
91 char[] genBinaryExpsArray() | |
92 { | |
93 char[] result = "[\n"; | |
94 foreach (expression; binaryExpressions[0..42]) | |
95 { | |
96 // pragma(msg, "asd"); | |
97 result ~= genBinaryExpArray(expression)/+ ~ ",\n"+/; | |
98 result ~= ",\n"; | |
99 } | |
100 result[result.length-2] = ']'; | |
101 return result; | |
102 } | |
103 | |
104 // pragma(msg, mixin(genBinaryExpsArray()).stringof); | |
105 | |
106 char[] genUnaryExpArray(char[] expression) | |
107 { | |
108 char[] result = "[\n"; | |
109 foreach (t1; basicTypes) | |
110 result ~= `EType!("`~t1~`", "int", "`~expression~`").result,`\n; | |
111 result[result.length-2] = ']'; // Overwrite last comma. | |
112 return result; | |
113 } | |
114 | |
115 char[] genUnaryExpsArray() | |
116 { | |
117 char[] result = "[\n"; | |
118 foreach (expression; unaryExpressions) | |
119 result ~= genUnaryExpArray(expression) ~ ",\n"; | |
120 result[result.length-2] = ']'; | |
121 return result; | |
122 } | |
123 | |
124 // pragma(msg, mixin(genUnaryExpsArray()).stringof); | |
125 | |
126 void genHTMLTypeRulesTables() | 63 void genHTMLTypeRulesTables() |
127 { | 64 { |
128 auto unaryExpsResults = mixin(genUnaryExpsArray()); | |
129 // auto binaryExpsResults = mixin(genBinaryExpsArray()); | |
130 | |
131 Stdout( | 65 Stdout( |
132 `<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">`\n | 66 `<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">`\n |
133 `<html>`\n | 67 `<html>`\n |
134 `<head>`\n | 68 `<head>`\n |
135 ` <meta http-equiv="Content-Type" content="text/html; charset=utf-8">`\n | 69 ` <meta http-equiv="Content-Type" content="text/html; charset=utf-8">`\n |
136 ` <link href="" rel="stylesheet" type="text/css">`\n | 70 ` <link href="" rel="stylesheet" type="text/css">`\n |
71 ` <style type="text/css">`\n | |
72 ` .E { color: darkred; } /* Error */`\n | |
73 ` .R { font-size: 0.8em; } /* Result */`\n | |
74 ` .X { color: darkorange; }`\n | |
75 ` .Y { color: darkblue; }`\n | |
76 ` </style>`\n | |
137 `</head>`\n | 77 `</head>`\n |
138 `<body>`\n | 78 `<body>`\n |
79 `<p>These tables show what the type results of certain expressions are.</p>`\n | |
139 ); | 80 ); |
140 | 81 |
141 Stdout.format("<table>\n<tr><th colspan=\"{}\">Unary Expressions</th></tr>", unaryExpressions.length); | 82 Stdout.format("<table>\n<tr><th colspan=\"{}\">Unary Expressions</th></tr>\n", unaryExpressions.length); |
142 Stdout("<tr><td><!--typecol--></td>"); | 83 Stdout("<tr><td><!--typecol--></td>"); |
143 foreach (unaryExpression; unaryExpressions) | 84 foreach (unaryExpression; unaryExpressions) |
144 Stdout.format("<td>{}</td>", unaryExpression); | 85 Stdout.format("<td>{}</td>", { |
86 if (unaryExpression[0] == 'x') | |
87 return `<span class="X">x</span>` ~ xml_escape(unaryExpression[1..$]); | |
88 else | |
89 return xml_escape(unaryExpression[0..$-1]) ~ `<span class="X">x</span>`; | |
90 }()); | |
145 Stdout("</tr>\n"); | 91 Stdout("</tr>\n"); |
146 foreach (i, basicType; basicTypes) | 92 foreach (i, basicType; basicTypes) |
147 { | 93 { |
148 Stdout.format("<tr>\n<td>{}</td>", basicType); | 94 Stdout.format("<tr>\n"`<td class="X">{}</td>`, basicType); |
149 foreach (unaryExpResults; unaryExpsResults) | 95 foreach (expResults; unaryExpsResults) |
150 { | 96 { |
151 assert(unaryExpResults.length == basicTypes.length); | 97 auto result = expResults[i]; |
152 Stdout.format("<td>{}</td>", unaryExpResults[i]); | 98 Stdout.format(`<td class="R">{}</td>`, result[0] == 'E' ? `<span class="E">Error</span>`[] : result); |
153 } | 99 } |
154 Stdout("\n<tr>\n"); | 100 Stdout("\n<tr>\n"); |
155 } | 101 } |
156 Stdout("</table>\n"); | 102 Stdout("</table>\n"); |
157 | 103 |
158 foreach (binaryExpression; binaryExpressions) | 104 foreach (i, expResults; binaryExpsResults) |
159 { | 105 { |
160 Stdout.format("<table>\n<tr><th colspan=\"{}\">Binary Expression</th></tr>", basicTypes.length); | 106 auto binaryExpression = binaryExpressions[i]; |
161 Stdout.format("<tr><td>{}</td>", binaryExpression); | 107 binaryExpression = `<span class="X">x</span> ` ~ |
108 xml_escape(binaryExpression[1..$-1]) ~ | |
109 ` <span class="Y">y</span>`; | |
110 Stdout.format("<table>\n<tr><th colspan=\"{}\">{}</th></tr>\n", basicTypes.length, binaryExpression); | |
111 Stdout.format("<tr><td><!--typecol--></td>"); | |
112 foreach (basicType; basicTypes) | |
113 Stdout.format(`<td class="Y">{}</td>`, basicType); | |
162 Stdout("\n<tr>\n"); | 114 Stdout("\n<tr>\n"); |
163 foreach (i, basicType; basicTypes) | 115 foreach (j, results; expResults) |
164 { | 116 { |
165 Stdout.format("<tr>\n<td>{}</td>", basicType); | 117 Stdout.format("<tr>\n"`<td class="X">{}</td>`, basicTypes[j]); |
166 // foreach (basicType; basicTypes) | 118 foreach (result; results) |
167 { | 119 Stdout.format(`<td class="R">{}</td>`, result[0] == 'E' ? `<span class="E">Error</span>`[] : result); |
168 } | |
169 Stdout("\n<tr>\n"); | 120 Stdout("\n<tr>\n"); |
170 } | 121 } |
171 Stdout("</table>\n"); | 122 Stdout("</table>\n"); |
172 } | 123 } |
173 | 124 |