diff options
Diffstat (limited to 'src/type.cff')
| -rw-r--r-- | src/type.cff | 30 |
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; +} |