aboutsummaryrefslogtreecommitdiff
path: root/src/type.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-09-02 11:12:25 +0200
committerlemon <lsof@mailbox.org>2022-09-02 11:13:48 +0200
commit23f37d0c749742c51259d767fceae546ed551b06 (patch)
tree12773ccd60df17347827ad123a3a5309127ea057 /src/type.cff
parent88066fc3b0638281024293d8d8e6a25896090e71 (diff)
use arena for interning types toomaster
Diffstat (limited to 'src/type.cff')
-rw-r--r--src/type.cff5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/type.cff b/src/type.cff
index 2e4d840..641694c 100644
--- a/src/type.cff
+++ b/src/type.cff
@@ -108,14 +108,15 @@ struct TypeTraits {
}
fn dup(ty *const Type) *const Type {
- let p *Type = xmalloc(sizeof Type);
+ static arena Arena = {};
+ let p *Type = Arena:allocf(&arena, sizeof Type, alignof Type);
static id int = 0;
*p = *ty;
p.id = id++;
switch p.u {
case Fn *f;
let params = f.params;
- f.params = (as(**const Type)xmalloc(params.#len * sizeof *Type))[0::params.#len];
+ f.params = (as(**const Type)Arena:allocf(&arena, params.#len * sizeof *Type, alignof *Type))[0::params.#len];
memcpy(f.params.#ptr, params.#ptr, params.#len * sizeof *Type);
}
return p;