Mercurial > projects > dil
diff src/TypeRulesGenerator.d @ 806:bcb74c9b895c
Moved out files in the trunk folder to the root.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 09 Mar 2008 00:12:19 +0100 |
parents | trunk/src/TypeRulesGenerator.d@f51305056196 |
children | 451ede0105e0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/TypeRulesGenerator.d Sun Mar 09 00:12:19 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());