diff --git a/_list.vp b/_list.vp index fc7dfdd..ff5e35d 100644 --- a/_list.vp +++ b/_list.vp @@ -4,10 +4,6 @@ import string import stdio from stdint import * -# [LISTDBG] 诊断(用后移除):list.__init__ 打印初始化结果、append 首次 -# (Count==0) 打印 self/Data,配合 CTORDBG 定位二代编 SlotsBugTest cargs(list) -# 头覆盖。默认静默——由命令行 --enable-debug-log 开启(memhub.set_debug_log) - class list[T]: """Heap-allocated dynamic list container backed by memhub.MemManager polymorphic allocator. @@ -18,21 +14,21 @@ class list[T]: nums.append(42) x: int = nums.get(0) - For pointer types (e.g. AST | t.CPtr), pass elem_size=8 to avoid object slicing: - lst: list[AST | t.CPtr] = list[AST | t.CPtr](pool, 8) + For pointer types (e.g. AST*), pass elem_size=8 to avoid object slicing: + lst: list[AST*] = list[AST*](pool, 8) """ - __data__: t.CPtr + __data__: rawptr __count__: sizet __capacity__: sizet - __pool__: rawptr[memhub.MemManager] + __pool__: memhub.MemManager* __elem_size__: sizet __iter_index__: sizet - def __new__(self, pool: rawptr[memhub.MemManager], elem_size: sizet = 0): + def __new__(self, pool: memhub.MemManager*, elem_size: sizet = 0): ret = pool.alloc(48) return ret - def __init__(self, pool: rawptr[memhub.MemManager], elem_size: sizet = 0): + def __init__(self, pool: memhub.MemManager*, elem_size: sizet = 0): self.__pool__ = pool self.__count__ = 0 self.__capacity__ = 8 @@ -40,10 +36,7 @@ class list[T]: self.__elem_size__ = T.__sizeof__() else: self.__elem_size__ = elem_size - # 带申请点 tag:本处是"容量 × 元素大小"形态,尺寸为 0 时 [MEM] 报文直接 - # 指名本行(pool 是基类指针,故走 memhub.MemAllocTagged) - self.__data__ = memhub.MemAllocTagged(pool, self.__capacity__ * self.__elem_size__, - memhub.DETSITE_LIST_43) + self.__data__ = memhub.MemAllocTagged(pool, self.__capacity__ * self.__elem_size__, memhub.DETSITE_LIST_43) self.__iter_index__ = 0 def __len__(self) -> sizet: @@ -57,35 +50,35 @@ class list[T]: string.memcpy(new_data, self.__data__, self.__count__ * self.__elem_size__) self.__data__ = new_data self.__capacity__ = new_cap - elem_ptr: T | t.CPtr = (T | t.CPtr)(t.CUInt64T(self.__data__) + self.__count__ * self.__elem_size__) + elem_ptr: T* = T*(uint64(self.__data__) + self.__count__ * self.__elem_size__) elem_ptr[0] = item self.__count__ += 1 def get(self, index: sizet) -> T: - elem_ptr: T | t.CPtr = (T | t.CPtr)(t.CUInt64T(self.__data__) + index * self.__elem_size__) + elem_ptr: T* = T*(uint64(self.__data__) + index * self.__elem_size__) return elem_ptr[0] def __getitem__(self, index: sizet) -> T: - elem_ptr: T | t.CPtr = (T | t.CPtr)(t.CUInt64T(self.__data__) + index * self.__elem_size__) + elem_ptr: T* = T*(uint64(self.__data__) + index * self.__elem_size__) return elem_ptr[0] def set(self, index: sizet, value: T): - elem_ptr: T | t.CPtr = (T | t.CPtr)(t.CUInt64T(self.__data__) + index * self.__elem_size__) + elem_ptr: T* = T*(uint64(self.__data__) + index * self.__elem_size__) elem_ptr[0] = value def __setitem__(self, index: sizet, value: T): - elem_ptr: T | t.CPtr = (T | t.CPtr)(t.CUInt64T(self.__data__) + index * self.__elem_size__) + elem_ptr: T* = T*(uint64(self.__data__) + index * self.__elem_size__) elem_ptr[0] = value def pop(self) -> T: self.__count__ -= 1 - elem_ptr: T | t.CPtr = (T | t.CPtr)(t.CUInt64T(self.__data__) + self.__count__ * self.__elem_size__) + elem_ptr: T* = T*(uint64(self.__data__) + self.__count__ * self.__elem_size__) return elem_ptr[0] def clear(self): self.__count__ = 0 - def __iter__(self) -> list[T] | t.CPtr: + def __iter__(self) -> list[T]*: self.__iter_index__ = 0 return self @@ -94,5 +87,5 @@ class list[T]: raise StopIteration idx: sizet = self.__iter_index__ self.__iter_index__ = idx + 1 - elem_ptr: T | t.CPtr = (T | t.CPtr)(t.CUInt64T(self.__data__) + idx * self.__elem_size__) + elem_ptr: T* = T*(uint64(self.__data__) + idx * self.__elem_size__) return elem_ptr[0]