renamed TRegister to TFullReg so that older versions can compile it
This commit is contained in:
parent
384a018906
commit
2b271e7b17
1 changed files with 16 additions and 16 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The Nimrod Compiler
|
# The Nimrod Compiler
|
||||||
# (c) Copyright 2013 Andreas Rumpf
|
# (c) Copyright 2014 Andreas Rumpf
|
||||||
#
|
#
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
@ -25,20 +25,20 @@ when hasFFI:
|
||||||
type
|
type
|
||||||
TRegisterKind = enum
|
TRegisterKind = enum
|
||||||
rkNone, rkNode, rkInt, rkFloat, rkRegisterAddr, rkNodeAddr
|
rkNone, rkNode, rkInt, rkFloat, rkRegisterAddr, rkNodeAddr
|
||||||
TRegister = object # with a custom mark proc, we could use the same
|
TFullReg = object # with a custom mark proc, we could use the same
|
||||||
# data representation as LuaJit (tagged NaNs).
|
# data representation as LuaJit (tagged NaNs).
|
||||||
case kind: TRegisterKind
|
case kind: TRegisterKind
|
||||||
of rkNone: nil
|
of rkNone: nil
|
||||||
of rkInt: intVal: BiggestInt
|
of rkInt: intVal: BiggestInt
|
||||||
of rkFloat: floatVal: BiggestFloat
|
of rkFloat: floatVal: BiggestFloat
|
||||||
of rkNode: node: PNode
|
of rkNode: node: PNode
|
||||||
of rkRegisterAddr: regAddr: ptr TRegister
|
of rkRegisterAddr: regAddr: ptr TFullReg
|
||||||
of rkNodeAddr: nodeAddr: ptr PNode
|
of rkNodeAddr: nodeAddr: ptr PNode
|
||||||
|
|
||||||
PStackFrame* = ref TStackFrame
|
PStackFrame* = ref TStackFrame
|
||||||
TStackFrame* = object
|
TStackFrame* = object
|
||||||
prc: PSym # current prc; proc that is evaluated
|
prc: PSym # current prc; proc that is evaluated
|
||||||
slots: seq[TRegister] # parameters passed to the proc + locals;
|
slots: seq[TFullReg] # parameters passed to the proc + locals;
|
||||||
# parameters come first
|
# parameters come first
|
||||||
next: PStackFrame # for stacking
|
next: PStackFrame # for stacking
|
||||||
comesFrom: int
|
comesFrom: int
|
||||||
|
|
@ -75,7 +75,7 @@ proc bailOut(c: PCtx; tos: PStackFrame) =
|
||||||
when not defined(nimComputedGoto):
|
when not defined(nimComputedGoto):
|
||||||
{.pragma: computedGoto.}
|
{.pragma: computedGoto.}
|
||||||
|
|
||||||
proc myreset(n: var TRegister) =
|
proc myreset(n: var TFullReg) =
|
||||||
when defined(system.reset):
|
when defined(system.reset):
|
||||||
reset(n)
|
reset(n)
|
||||||
|
|
||||||
|
|
@ -109,7 +109,7 @@ template decodeBx(k: expr) {.immediate, dirty.} =
|
||||||
template move(a, b: expr) {.immediate, dirty.} = system.shallowCopy(a, b)
|
template move(a, b: expr) {.immediate, dirty.} = system.shallowCopy(a, b)
|
||||||
# XXX fix minor 'shallowCopy' overloading bug in compiler
|
# XXX fix minor 'shallowCopy' overloading bug in compiler
|
||||||
|
|
||||||
proc createStrKeepNode(x: var TRegister) =
|
proc createStrKeepNode(x: var TFullReg) =
|
||||||
if x.node.isNil:
|
if x.node.isNil:
|
||||||
x.node = newNode(nkStrLit)
|
x.node = newNode(nkStrLit)
|
||||||
elif x.node.kind == nkNilLit:
|
elif x.node.kind == nkNilLit:
|
||||||
|
|
@ -124,7 +124,7 @@ proc createStrKeepNode(x: var TRegister) =
|
||||||
template createStr(x) =
|
template createStr(x) =
|
||||||
x.node = newNode(nkStrLit)
|
x.node = newNode(nkStrLit)
|
||||||
|
|
||||||
proc moveConst(x: var TRegister, y: TRegister) =
|
proc moveConst(x: var TFullReg, y: TFullReg) =
|
||||||
if x.kind != y.kind:
|
if x.kind != y.kind:
|
||||||
myreset(x)
|
myreset(x)
|
||||||
x.kind = y.kind
|
x.kind = y.kind
|
||||||
|
|
@ -161,7 +161,7 @@ proc copyValue(src: PNode): PNode =
|
||||||
for i in countup(0, sonsLen(src) - 1):
|
for i in countup(0, sonsLen(src) - 1):
|
||||||
result.sons[i] = copyValue(src.sons[i])
|
result.sons[i] = copyValue(src.sons[i])
|
||||||
|
|
||||||
proc asgnComplex(x: var TRegister, y: TRegister) =
|
proc asgnComplex(x: var TFullReg, y: TFullReg) =
|
||||||
if x.kind != y.kind:
|
if x.kind != y.kind:
|
||||||
myreset(x)
|
myreset(x)
|
||||||
x.kind = y.kind
|
x.kind = y.kind
|
||||||
|
|
@ -173,7 +173,7 @@ proc asgnComplex(x: var TRegister, y: TRegister) =
|
||||||
of rkRegisterAddr: x.regAddr = y.regAddr
|
of rkRegisterAddr: x.regAddr = y.regAddr
|
||||||
of rkNodeAddr: x.nodeAddr = y.nodeAddr
|
of rkNodeAddr: x.nodeAddr = y.nodeAddr
|
||||||
|
|
||||||
proc putIntoNode(n: PNode; x: TRegister) =
|
proc putIntoNode(n: PNode; x: TFullReg) =
|
||||||
case x.kind
|
case x.kind
|
||||||
of rkNone: discard
|
of rkNone: discard
|
||||||
of rkInt: n.intVal = x.intVal
|
of rkInt: n.intVal = x.intVal
|
||||||
|
|
@ -182,7 +182,7 @@ proc putIntoNode(n: PNode; x: TRegister) =
|
||||||
of rkRegisterAddr: putIntoNode(n, x.regAddr[])
|
of rkRegisterAddr: putIntoNode(n, x.regAddr[])
|
||||||
of rkNodeAddr: n[] = x.nodeAddr[][]
|
of rkNodeAddr: n[] = x.nodeAddr[][]
|
||||||
|
|
||||||
proc putIntoReg(dest: var TRegister; n: PNode) =
|
proc putIntoReg(dest: var TFullReg; n: PNode) =
|
||||||
case n.kind
|
case n.kind
|
||||||
of nkStrLit..nkTripleStrLit:
|
of nkStrLit..nkTripleStrLit:
|
||||||
dest.kind = rkNode
|
dest.kind = rkNode
|
||||||
|
|
@ -198,7 +198,7 @@ proc putIntoReg(dest: var TRegister; n: PNode) =
|
||||||
dest.kind = rkNode
|
dest.kind = rkNode
|
||||||
dest.node = n
|
dest.node = n
|
||||||
|
|
||||||
proc regToNode(x: TRegister): PNode =
|
proc regToNode(x: TFullReg): PNode =
|
||||||
case x.kind
|
case x.kind
|
||||||
of rkNone: result = newNode(nkEmpty)
|
of rkNone: result = newNode(nkEmpty)
|
||||||
of rkInt: result = newNode(nkIntLit); result.intVal = x.intVal
|
of rkInt: result = newNode(nkIntLit); result.intVal = x.intVal
|
||||||
|
|
@ -216,7 +216,7 @@ proc pushSafePoint(f: PStackFrame; pc: int) =
|
||||||
|
|
||||||
proc popSafePoint(f: PStackFrame) = discard f.safePoints.pop()
|
proc popSafePoint(f: PStackFrame) = discard f.safePoints.pop()
|
||||||
|
|
||||||
proc cleanUpOnException(c: PCtx; tos: PStackFrame; regs: seq[TRegister]): int =
|
proc cleanUpOnException(c: PCtx; tos: PStackFrame; regs: seq[TFullReg]): int =
|
||||||
let raisedType = c.currentExceptionA.typ.skipTypes(abstractPtrs)
|
let raisedType = c.currentExceptionA.typ.skipTypes(abstractPtrs)
|
||||||
var f = tos
|
var f = tos
|
||||||
while true:
|
while true:
|
||||||
|
|
@ -258,7 +258,7 @@ proc cleanUpOnReturn(c: PCtx; f: PStackFrame): int =
|
||||||
return pc
|
return pc
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
proc opConv*(dest: var TRegister, src: TRegister, desttyp, srctyp: PType): bool =
|
proc opConv*(dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType): bool =
|
||||||
if desttyp.kind == tyString:
|
if desttyp.kind == tyString:
|
||||||
if dest.kind != rkNode:
|
if dest.kind != rkNode:
|
||||||
myreset(dest)
|
myreset(dest)
|
||||||
|
|
@ -328,10 +328,10 @@ proc compile(c: PCtx, s: PSym): int =
|
||||||
result = vmgen.genProc(c, s)
|
result = vmgen.genProc(c, s)
|
||||||
#c.echoCode
|
#c.echoCode
|
||||||
|
|
||||||
proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TRegister =
|
proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
|
||||||
var pc = start
|
var pc = start
|
||||||
var tos = tos
|
var tos = tos
|
||||||
var regs: seq[TRegister] # alias to tos.slots for performance
|
var regs: seq[TFullReg] # alias to tos.slots for performance
|
||||||
move(regs, tos.slots)
|
move(regs, tos.slots)
|
||||||
#echo "NEW RUN ------------------------"
|
#echo "NEW RUN ------------------------"
|
||||||
while true:
|
while true:
|
||||||
|
|
@ -877,7 +877,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TRegister =
|
||||||
message(c.debug[pc], hintQuitCalled)
|
message(c.debug[pc], hintQuitCalled)
|
||||||
quit(int(getOrdValue(regs[ra].regToNode)))
|
quit(int(getOrdValue(regs[ra].regToNode)))
|
||||||
else:
|
else:
|
||||||
return TRegister(kind: rkNone)
|
return TFullReg(kind: rkNone)
|
||||||
of opcSetLenStr:
|
of opcSetLenStr:
|
||||||
decodeB(rkNode)
|
decodeB(rkNode)
|
||||||
createStrKeepNode regs[ra]
|
createStrKeepNode regs[ra]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue