Fix vm.nim for --gc:arc (#13741)

* koch boot --gc:arc now passes the nim stage

... but generates invalid C code

* Move it closer to where its used

* Try something else

* Poor mans var

* Use UncheckedArray instead
This commit is contained in:
Clyybber 2020-03-26 16:18:45 +01:00 • committed by GitHub
commit 2925a47ae6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 41 deletions

View file

@ -212,6 +212,18 @@ type
slotTempComplex, # some complex temporary (s.node field is used)
slotTempPerm # slot is temporary but permanent (hack)
TRegisterKind* = enum
rkNone, rkNode, rkInt, rkFloat, rkRegisterAddr, rkNodeAddr
TFullReg* = object # with a custom mark proc, we could use the same
# data representation as LuaJit (tagged NaNs).
case kind*: TRegisterKind
of rkNone: nil
of rkInt: intVal*: BiggestInt
of rkFloat: floatVal*: BiggestFloat
of rkNode: node*: PNode
of rkRegisterAddr: regAddr*: ptr TFullReg
of rkNodeAddr: nodeAddr*: ptr PNode
PProc* = ref object
blocks*: seq[TBlock] # blocks; temp data structure
sym*: PSym
@ -220,7 +232,7 @@ type
VmArgs* = object
ra*, rb*, rc*: Natural
slots*: pointer
slots*: ptr UncheckedArray[TFullReg]
currentException*: PNode
currentLineInfo*: TLineInfo
VmCallback* = proc (args: VmArgs) {.closure.}