# HG changeset patch # User Aziz K?ksal # Date 1204728354 -3600 # Node ID f51305056196ee12af2daf4293d6bec7fad427de # Parent c39667f1e814f8aef3124064f215ea5835901ca3 Added modules related to type rules. diff -r c39667f1e814 -r f51305056196 trunk/src/TypeRules.d --- 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( ``\n ``\n ``\n ` `\n ` `\n + ` `\n ``\n ``\n + `

These tables show what the type results of certain expressions are.

`\n ); - Stdout.format("\n", unaryExpressions.length); + Stdout.format("
Unary Expressions
\n\n", unaryExpressions.length); Stdout(""); foreach (unaryExpression; unaryExpressions) - Stdout.format("", unaryExpression); + Stdout.format("", { + if (unaryExpression[0] == 'x') + return `x` ~ xml_escape(unaryExpression[1..$]); + else + return xml_escape(unaryExpression[0..$-1]) ~ `x`; + }()); Stdout("\n"); foreach (i, basicType; basicTypes) { - Stdout.format("\n", basicType); - foreach (unaryExpResults; unaryExpsResults) + Stdout.format("\n"``, basicType); + foreach (expResults; unaryExpsResults) { - assert(unaryExpResults.length == basicTypes.length); - Stdout.format("", unaryExpResults[i]); + auto result = expResults[i]; + Stdout.format(``, result[0] == 'E' ? `Error`[] : result); } Stdout("\n\n"); } Stdout("
Unary Expressions
{}{}
{}
{}{}{}
\n"); - foreach (binaryExpression; binaryExpressions) + foreach (i, expResults; binaryExpsResults) { - Stdout.format("\n", basicTypes.length); - Stdout.format("", binaryExpression); + auto binaryExpression = binaryExpressions[i]; + binaryExpression = `x ` ~ + xml_escape(binaryExpression[1..$-1]) ~ + ` y`; + Stdout.format("
Binary Expression
{}
\n\n", basicTypes.length, binaryExpression); + Stdout.format(""); + foreach (basicType; basicTypes) + Stdout.format(``, basicType); Stdout("\n\n"); - foreach (i, basicType; basicTypes) + foreach (j, results; expResults) { - Stdout.format("\n", basicType); -// foreach (basicType; basicTypes) - { - } + Stdout.format("\n"``, basicTypes[j]); + foreach (result; results) + Stdout.format(``, result[0] == 'E' ? `Error`[] : result); Stdout("\n\n"); } Stdout("
{}
{}
{}
{}{}
\n"); diff -r c39667f1e814 -r f51305056196 trunk/src/TypeRulesData.d --- /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 diff -r c39667f1e814 -r f51305056196 trunk/src/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" +]; + +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()); diff -r c39667f1e814 -r f51305056196 trunk/src/config.d --- 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";