@unmanaged export class StackPointer { static create(count: i32): StackPointer { assert(!isManaged()); assert(isReference()); assert(count > 0); let length = offsetof() * count; let ptr = __alloc(length, idof()); memory.fill(ptr, 0, length); return changetype>(ptr); } @inline push(): StackPointer { let current = changetype(this); let next = current + offsetof(); memory.copy(next, current, offsetof()); return changetype>(next); } @inline @operator.prefix("++") increment(): StackPointer { return changetype>(changetype(this) + offsetof()); } @inline @operator.prefix("--") decrement(): StackPointer { return changetype>(changetype(this) - offsetof()); } @inline pop(): StackPointer { return changetype>(changetype(this) - offsetof()); } reference(): T { return changetype(this); } dereference(): usize { return changetype(this); } }