Mercurial > projects > dil
changeset 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 | c39667f1e814 |
children | cb8040538772 |
files | trunk/src/TypeRules.d trunk/src/TypeRulesData.d trunk/src/TypeRulesGenerator.d trunk/src/config.d |
diffstat | 4 files changed, 211 insertions(+), 83 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/TypeRules.d Sat Mar 01 20:14:56 2008 +0200 +++ b/trunk/src/TypeRules.d Wed Mar 05 15:45:54 2008 +0100 @@ -4,22 +4,10 @@ +/ module TypeRules; -import common; +import cmd.Generate : xml_escape; -template ExpressionType(char[] T1, char[] T2, char[] expression) -{ - mixin("alias "~T1~" X;"); - mixin("alias "~T2~" Y;"); - X x; - Y y; - static if(is(typeof(mixin(expression)) ResultType)) - const char[] result = ResultType.stringof; - else - const char[] result = "Error"; -} -alias ExpressionType EType; - -// pragma(msg, EType!("char", "int", "&x").result); +import TypeRulesData; +import common; static const string[] basicTypes = [ "char"[], "wchar", "dchar", "bool", @@ -72,100 +60,63 @@ "x,y" ]; -char[] genBinaryExpArray(char[] expression) -{ - char[] result = "[\n"; - foreach (t1; basicTypes) - { - result ~= "[\n"; - foreach (t2; basicTypes) - result ~= `EType!("`~t1~`", "`~t2~`", "`~expression~`").result,`\n; - result[result.length-2] = ']'; // Overwrite last comma. - result[result.length-1] = ','; // Overwrite last \n. - } - result[result.length-1] = ']'; // Overwrite last comma. - return result; -} -// pragma(msg, mixin(genBinaryExpArray("x%y")).stringof); - -char[] genBinaryExpsArray() -{ - char[] result = "[\n"; - foreach (expression; binaryExpressions[0..42]) - { -// pragma(msg, "asd"); - result ~= genBinaryExpArray(expression)/+ ~ ",\n"+/; - result ~= ",\n"; - } - result[result.length-2] = ']'; - return result; -} - -// pragma(msg, mixin(genBinaryExpsArray()).stringof); - -char[] genUnaryExpArray(char[] expression) -{ - char[] result = "[\n"; - foreach (t1; basicTypes) - result ~= `EType!("`~t1~`", "int", "`~expression~`").result,`\n; - result[result.length-2] = ']'; // Overwrite last comma. - return result; -} - -char[] genUnaryExpsArray() -{ - char[] result = "[\n"; - foreach (expression; unaryExpressions) - result ~= genUnaryExpArray(expression) ~ ",\n"; - result[result.length-2] = ']'; - return result; -} - -// pragma(msg, mixin(genUnaryExpsArray()).stringof); - void genHTMLTypeRulesTables() { - auto unaryExpsResults = mixin(genUnaryExpsArray()); -// auto binaryExpsResults = mixin(genBinaryExpsArray()); - Stdout( `<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">`\n `<html>`\n `<head>`\n ` <meta http-equiv="Content-Type" content="text/html; charset=utf-8">`\n ` <link href="" rel="stylesheet" type="text/css">`\n + ` <style type="text/css">`\n + ` .E { color: darkred; } /* Error */`\n + ` .R { font-size: 0.8em; } /* Result */`\n + ` .X { color: darkorange; }`\n + ` .Y { color: darkblue; }`\n + ` </style>`\n `</head>`\n `<body>`\n + `<p>These tables show what the type results of certain expressions are.</p>`\n ); - Stdout.format("<table>\n<tr><th colspan=\"{}\">Unary Expressions</th></tr>", unaryExpressions.length); + Stdout.format("<table>\n<tr><th colspan=\"{}\">Unary Expressions</th></tr>\n", unaryExpressions.length); Stdout("<tr><td><!--typecol--></td>"); foreach (unaryExpression; unaryExpressions) - Stdout.format("<td>{}</td>", unaryExpression); + Stdout.format("<td>{}</td>", { + if (unaryExpression[0] == 'x') + return `<span class="X">x</span>` ~ xml_escape(unaryExpression[1..$]); + else + return xml_escape(unaryExpression[0..$-1]) ~ `<span class="X">x</span>`; + }()); Stdout("</tr>\n"); foreach (i, basicType; basicTypes) { - Stdout.format("<tr>\n<td>{}</td>", basicType); - foreach (unaryExpResults; unaryExpsResults) + Stdout.format("<tr>\n"`<td class="X">{}</td>`, basicType); + foreach (expResults; unaryExpsResults) { - assert(unaryExpResults.length == basicTypes.length); - Stdout.format("<td>{}</td>", unaryExpResults[i]); + auto result = expResults[i]; + Stdout.format(`<td class="R">{}</td>`, result[0] == 'E' ? `<span class="E">Error</span>`[] : result); } Stdout("\n<tr>\n"); } Stdout("</table>\n"); - foreach (binaryExpression; binaryExpressions) + foreach (i, expResults; binaryExpsResults) { - Stdout.format("<table>\n<tr><th colspan=\"{}\">Binary Expression</th></tr>", basicTypes.length); - Stdout.format("<tr><td>{}</td>", binaryExpression); + auto binaryExpression = binaryExpressions[i]; + binaryExpression = `<span class="X">x</span> ` ~ + xml_escape(binaryExpression[1..$-1]) ~ + ` <span class="Y">y</span>`; + Stdout.format("<table>\n<tr><th colspan=\"{}\">{}</th></tr>\n", basicTypes.length, binaryExpression); + Stdout.format("<tr><td><!--typecol--></td>"); + foreach (basicType; basicTypes) + Stdout.format(`<td class="Y">{}</td>`, basicType); Stdout("\n<tr>\n"); - foreach (i, basicType; basicTypes) + foreach (j, results; expResults) { - Stdout.format("<tr>\n<td>{}</td>", basicType); -// foreach (basicType; basicTypes) - { - } + Stdout.format("<tr>\n"`<td class="X">{}</td>`, basicTypes[j]); + foreach (result; results) + Stdout.format(`<td class="R">{}</td>`, result[0] == 'E' ? `<span class="E">Error</span>`[] : result); Stdout("\n<tr>\n"); } Stdout("</table>\n");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/TypeRulesData.d Wed Mar 05 15:45:54 2008 +0100 @@ -0,0 +1,1 @@ +// Run TypeRulesGenerator.d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/TypeRulesGenerator.d Wed Mar 05 15:45:54 2008 +0100 @@ -0,0 +1,174 @@ +#! /usr/bin/rdmd +/++ + Author: Aziz Köksal + License: GPL3 ++/ +module TypeRulesGenerator; + +import tango.io.File; +import tango.io.FilePath; + +alias char[] string; + +void main(char[][] args) +{ + char[] text = "// Generated by TypeRulesGenerator.d\n" + "module TypeRules.d;\n\n"; + text ~= "char[][][] unaryExpsResults = [\n"; + foreach (results; unaryExpsResults) + { + text ~= " ["; + foreach (result; results) + text ~= '"' ~ result ~ '"' ~ ", "; + text[$-2] = ']'; + text[$-1] = ','; + text ~= \n; + } + text[$-2] = '\n'; + text[$-1] = ']'; + text ~= ";\n\n"; + + text ~= "char[][][][] binaryExpsResults = [\n"; + foreach (expResults; binaryExpsResults) + { + text ~= " [\n"; + foreach (results; expResults) + { + text ~= " ["; + foreach (result; results) + text ~= '"' ~ result ~ '"' ~ ", "; + text[$-2] = ']'; + text[$-1] = ','; + text ~= \n; + } + text[$-2] = '\n'; + text[$-1] = ' '; + text ~= " ],\n"; + } + text[$-2] = '\n'; + text[$-1] = ']'; + text ~= ";\n"; + + // Write the text to a D module. + auto file = new File("TypeRulesData.d"); + file.write(text); +} + +template ExpressionType(char[] T1, char[] T2, char[] expression) +{ + mixin("alias "~T1~" X;"); + mixin("alias "~T2~" Y;"); + X x; + Y y; + static if(is(typeof(mixin(expression)) ResultType)) + const char[] result = ResultType.stringof; + else + const char[] result = "Error"; +} +alias ExpressionType EType; + +// pragma(msg, EType!("char", "int", "&x").result); + +static const string[] basicTypes = [ + "char"[], "wchar", "dchar", "bool", + "byte", "ubyte", "short", "ushort", + "int", "uint", "long", "ulong", + /+"cent", "ucent",+/ + "float", "double", "real", + "ifloat", "idouble", "ireal", + "cfloat", "cdouble", "creal"/+, "void"+/ +]; + +static const string[] unaryExpressions = [ + "!x", + "&x", + "~x", + "+x", + "-x", + "++x", + "--x", + "x++", + "x--", +]; + +static const string[] binaryExpressions = [ + "x!<>=y", + "x!<>y", + "x!<=y", + "x!<y", + "x!>=y", + "x!>y", + "x<>=y", + "x<>y", + + "x=y", "x==y", "x!=y", + "x<=y", "x<y", + "x>=y", "x>y", + "x<<=y", "x<<y", + "x>>=y","x>>y", + "x>>>=y", "x>>>y", + "x|=y", "x||y", "x|y", + "x&=y", "x&&y", "x&y", + "x+=y", "x+y", + "x-=y", "x-y", + "x/=y", "x/y", + "x*=y", "x*y", + "x%=y", "x%y", + "x^=y", "x^y", + "x~=y", + "x~y", + "x,y" +]; + +char[] genBinaryExpArray(char[] expression) +{ + char[] result = "[\n"; + foreach (t1; basicTypes) + { + result ~= "[\n"; + foreach (t2; basicTypes) + result ~= `EType!("`~t1~`", "`~t2~`", "`~expression~`").result,`\n; + result[result.length-2] = ']'; // Overwrite last comma. + result[result.length-1] = ','; // Overwrite last \n. + } + result[result.length-1] = ']'; // Overwrite last comma. + return result; +} +// pragma(msg, mixin(genBinaryExpArray("x%y")).stringof); + +char[] genBinaryExpsArray() +{ + char[] result = "[\n"; + foreach (expression; binaryExpressions) + { + result ~= genBinaryExpArray(expression); + result ~= ",\n"; + } + result[result.length-2] = ']'; + return result; +} + +// pragma(msg, mixin(genBinaryExpsArray()).stringof); + +char[] genUnaryExpArray(char[] expression) +{ + char[] result = "[\n"; + foreach (t1; basicTypes) + result ~= `EType!("`~t1~`", "int", "`~expression~`").result,`\n; + result[result.length-2] = ']'; // Overwrite last comma. + return result; +} + +char[] genUnaryExpsArray() +{ + char[] result = "[\n"; + foreach (expression; unaryExpressions) + result ~= genUnaryExpArray(expression) ~ ",\n"; + result[result.length-2] = ']'; + return result; +} + +// pragma(msg, mixin(genUnaryExpsArray()).stringof); + +auto unaryExpsResults = mixin(genUnaryExpsArray()); +auto binaryExpsResults = mixin(genBinaryExpsArray());
--- a/trunk/src/config.d Sat Mar 01 20:14:56 2008 +0200 +++ b/trunk/src/config.d Wed Mar 05 15:45:54 2008 +0100 @@ -14,6 +14,8 @@ var import_paths = []; /// E.g.: ["src/", "import/"] /// DDoc macro file paths. +/// +/// Macro definitions in ddoc_files[n] override the ones in ddoc_files[n-1]. var ddoc_files = ["predefined.ddoc"]; /// E.g.: ["src/mymacros.ddoc", "othermacros.ddoc"] var xml_map = "xml_map.d";