20 lines
516 B
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 |