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());