nondescript/src/ndspkg/types/closure.nim

20 lines
516 B
Nim

type
UpvalueObj[T] = object
location: ptr T
Upvalue*[T] = ptr UpvalueObj[T]
ClosureObj[T] = object
start: ptr uint8
upvalueCount: int
upvalues: UncheckedArray[Upvalue[T]]
Closure*[T] = ptr ClosureObj[T]
proc newClosure*[T](start: ptr uint8, upvalueCount: int): Closure[T] =
result = cast[Closure[T]](alloc0(8 * upvalueCount + sizeof(ClosureObj[T])))
result.start = start
result.upvalueCount = upvalueCount
proc getIp*[T](clos: Closure[T]): ptr uint8 {.inline.} =
clos.start