aboutsummaryrefslogtreecommitdiff
path: root/src/type.cff
diff options
context:
space:
mode:
Diffstat (limited to 'src/type.cff')
-rw-r--r--src/type.cff30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/type.cff b/src/type.cff
new file mode 100644
index 0000000..bd56503
--- /dev/null
+++ b/src/type.cff
@@ -0,0 +1,30 @@
+import "all.hff";
+
+fn hashtype(ty *const Type) u32 {
+ let h = FNV1A_INI;
+ h = fnv1a_i(h, ty.konst ? 1 : 0);
+ switch ty.u {
+ case Void; case Bool;
+
+ case Flo;
+ h = fnv1a_i(h, ty.size);
+ h = fnv1a_i(h, ty.align);
+
+ case Int i;
+ h = fnv1a_i(h, i.sgn ? 1 : 0);
+ h = fnv1a_i(h, ty.size);
+ h = fnv1a_i(h, ty.align);
+
+ case Ptr child;
+ h = fnv1a_i(h, child.id);
+
+ case Arr arr;
+ h = fnv1a_i(h, arr.child.id);
+ h = fnv1a_i(h, arr.length);
+
+ case Slice child;
+ h = fnv1a_i(h, child.id);
+
+ }
+ return h;
+}