aboutsummaryrefslogtreecommitdiff
path: root/src/type.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-17 11:11:22 +0200
committerlemon <lsof@mailbox.org>2022-08-17 11:11:22 +0200
commitffc52a0ecb61d0f7488f91d9b124344e50f7855f (patch)
tree22a0f55e0adc570aae26160acc655f323d738943 /src/type.cff
parentd378b8c2bc4b3896e0041bd1c48407800a088ef3 (diff)
ack check
Diffstat (limited to 'src/type.cff')
-rw-r--r--src/type.cff18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/type.cff b/src/type.cff
index a4a4e3d..b18c5c4 100644
--- a/src/type.cff
+++ b/src/type.cff
@@ -29,7 +29,16 @@ struct TypeTraits {
case Slice child;
h = fnv1a_i(h, child.id);
+ case Fn f;
+ h = fnv1a_i(h, f.ret.id);
+ foreach(p, _, f.params,
+ h = fnv1a_i(h, p.id);
+ )
+
+ case Agg agg;
+ h = fnv1a_i(h, agg.id);
}
+
return h;
}
@@ -40,15 +49,20 @@ struct TypeTraits {
}
switch a.u {
case Void; case Bool; case Flo;
+
case Int i;
return i.sgn == b.u.Int.sgn;
+
case Ptr child;
return child == b.u.Ptr;
+
case Arr arr;
let brr = b.u.Arr;
return arr.length == brr.length and arr.child == brr.child;
+
case Slice child;
return child == b.u.Slice;
+
case Fn f0;
let f1 = b.u.Fn;
if f0.variadic != f1.variadic {
@@ -66,6 +80,10 @@ struct TypeTraits {
}
)
return #t;
+
+ case Agg agg;
+ let bgg = b.u.Agg;
+ return agg.id == bgg.id;
}
return #f;
}