shithub: mc

Download patch

ref: 9bdc51d83c76ac575cd8a379756271764e4388a9
parent: e08b97c2d81aded93b27b0b1812e424c9a2b2043
author: Ori Bernstein <[email protected]>
date: Wed Dec 21 09:09:06 EST 2011

More stubbing.

--- a/parse/parse.h
+++ b/parse/parse.h
@@ -39,6 +39,12 @@
 } Ty;
 
 typedef enum {
+#define Tc(c) c,
+#include "cstr.def"
+#undef Tc
+} Tc;
+
+typedef enum {
     Dclconst = 1 << 0,
     Dclextern = 1 << 1,
 } Dclflags;
--- a/parse/type.c
+++ b/parse/type.c
@@ -265,6 +265,9 @@
         case Tyenum:
             snprintf(p, end - p, "TYPE ?");
             break;
+        case Ntypes:
+            die("Ntypes is not a type");
+            break;
     }
 
     return len - (end - p);
@@ -281,4 +284,53 @@
     char buf[1024];
     tyfmt(buf, 1024, t);
     return strdup(buf);
+}
+
+static Type *tybuiltins[Ntypes];
+#if 0
+static Cstr *cstrbuiltins[Ncstr];
+#endif
+void tyinit()
+{
+#if 0
+    int i;
+#define Tc(c) \
+    cstrbuiltins[c] = mkcstr(-1, c);
+#include "cstr.def"
+#undef Tc
+#endif
+
+#define Ty(t) \
+    tybuiltins[t] = mkty(-1, t);
+#include "types.def"
+#undef Ty
+
+#if 0
+    /* bool :: tctest */
+    constrain(tybuiltins[Tybool], cstrbuiltins[Tctest]);
+
+    /* <integer types> :: tcnum, tcint, tctest */
+    for (i = Tyint8; i < Tyfloat32; i++) {
+        constrain(tybuiltins[i], cstrbuiltins[Tcnum]);
+        constrain(tybuiltins[i], cstrbuiltins[Tcint]);
+        constrain(tybuiltins[i], cstrbuiltins[Tctest]);
+    }
+
+    /* <floats> :: tcnum */
+    constrain(tybuiltins[Tyfloat32], cstrbuiltins[Tcnum]);
+    constrain(tybuiltins[Tyfloat64], cstrbuiltins[Tcnum]);
+
+    /* @a* :: tctest, tcslice */
+    constrain(tybuiltins[Typtr], cstrbuiltins[Tctest]);
+    constrain(tybuiltins[Typtr], cstrbuiltins[Tcslice]);
+
+    /* @a[,] :: tctest, tcslice, tcidx */
+    constrain(tybuiltins[Tyslice], cstrbuiltins[Tctest]);
+    constrain(tybuiltins[Tyslice], cstrbuiltins[Tcslice]);
+    constrain(tybuiltins[Tyslice], cstrbuiltins[Tcidx]);
+
+    /* enum */
+    constrain(tybuiltins[Tyenum], cstrbuiltins[Tcint]);
+    constrain(tybuiltins[Tyenum], cstrbuiltins[Tcnum]);
+#endif
 }
--- a/parse/types.def
+++ b/parse/types.def
@@ -38,4 +38,4 @@
 Ty(Tystruct)
 Ty(Tyunion)
 Ty(Tyenum)
-
+Ty(Ntypes)