aboutsummaryrefslogtreecommitdiff
path: root/src/type.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-13 13:00:37 +0200
committerlemon <lsof@mailbox.org>2022-08-13 13:00:37 +0200
commita4ddca68662f4bc0531763357b4bc00b6c50b456 (patch)
tree97f83407da049732ec97dd2d32ee34e0cd3c8c0f /src/type.cff
parent5b95abb249604e7df9be1d63b1f3dc85b8f5990b (diff)
target
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;
+}