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)