diff options
| author | 2022-08-17 11:11:22 +0200 | |
|---|---|---|
| committer | 2022-08-17 11:11:22 +0200 | |
| commit | ffc52a0ecb61d0f7488f91d9b124344e50f7855f (patch) | |
| tree | 22a0f55e0adc570aae26160acc655f323d738943 /src/type.cff | |
| parent | d378b8c2bc4b3896e0041bd1c48407800a088ef3 (diff) | |
ack check
Diffstat (limited to 'src/type.cff')
| -rw-r--r-- | src/type.cff | 18 |
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; } |