diff options
| author | 2022-09-02 11:12:25 +0200 | |
|---|---|---|
| committer | 2022-09-02 11:13:48 +0200 | |
| commit | 23f37d0c749742c51259d767fceae546ed551b06 (patch) | |
| tree | 12773ccd60df17347827ad123a3a5309127ea057 | |
| parent | 88066fc3b0638281024293d8d8e6a25896090e71 (diff) | |
use arena for interning types toomaster
| -rw-r--r-- | src/type.cff | 5 |
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; |