From fbd0105958d0ada2e20787f5679aa03f677065d5 Mon Sep 17 00:00:00 2001 From: "A. R. Shajii" Date: Thu, 23 Mar 2023 11:27:53 -0400 Subject: [PATCH] Fix allocation --- stdlib/internal/internal.codon | 3 ++- stdlib/internal/python.codon | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/stdlib/internal/internal.codon b/stdlib/internal/internal.codon index 092ff896..f627d23d 100644 --- a/stdlib/internal/internal.codon +++ b/stdlib/internal/internal.codon @@ -2,7 +2,8 @@ from internal.gc import ( free, register_finalizer, seq_alloc, - seq_alloc_atomic, seq_gc_add_roots, alloc_uncollectable + seq_alloc_atomic, seq_gc_add_roots, alloc_uncollectable, + alloc_atomic_uncollectable, atomic ) @pure diff --git a/stdlib/internal/python.codon b/stdlib/internal/python.codon index 8660e130..c207e343 100644 --- a/stdlib/internal/python.codon +++ b/stdlib/internal/python.codon @@ -1897,8 +1897,12 @@ class _PyWrap: return cobj() def wrap_to_py(o) -> cobj: - pytype = _PyWrap.py_type(type(o)) - obj = Ptr[PyWrapper[type(o)]](alloc_uncollectable(sizeof(type(o)))) + O = type(o) + P = PyWrapper[O] + sz = sizeof(P) + pytype = _PyWrap.py_type(O) + mem = alloc_atomic_uncollectable(sz) if atomic(O) else alloc_uncollectable(sz) + obj = Ptr[P](mem.as_byte()) obj[0] = PyWrapper(PyObject(1, pytype), o) return obj.as_byte()