fixes #5617, 'copyLineInfo' addition (#8523)

This commit is contained in:
andri lim 2018-08-06 04:38:21 +07:00 • committed by Andreas Rumpf
commit 6e3d1dced5
6 changed files with 40 additions and 23 deletions

View file

@ -1422,24 +1422,23 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
ensureKind(rkNode)
if c.callsite != nil: regs[ra].node = c.callsite
else: stackTrace(c, tos, pc, errFieldXNotFound & "callsite")
of opcNGetFile:
decodeB(rkNode)
of opcNGetLineInfo:
decodeBImm(rkNode)
let n = regs[rb].node
regs[ra].node = newStrNode(nkStrLit, toFullPath(c.config, n.info))
case imm
of 0: # getFile
regs[ra].node = newStrNode(nkStrLit, toFullPath(c.config, n.info))
of 1: # getLine
regs[ra].node = newIntNode(nkIntLit, n.info.line.int)
of 2: # getColumn
regs[ra].node = newIntNode(nkIntLit, n.info.col)
else:
internalAssert c.config, false
regs[ra].node.info = n.info
regs[ra].node.typ = n.typ
of opcNGetLine:
of opcNSetLineInfo:
decodeB(rkNode)
let n = regs[rb].node
regs[ra].node = newIntNode(nkIntLit, n.info.line.int)
regs[ra].node.info = n.info
regs[ra].node.typ = n.typ
of opcNGetColumn:
decodeB(rkNode)
let n = regs[rb].node
regs[ra].node = newIntNode(nkIntLit, n.info.col)
regs[ra].node.info = n.info
regs[ra].node.typ = n.typ
regs[ra].node.info = regs[rb].node.info
of opcEqIdent:
decodeBC(rkInt)
# aliases for shorter and easier to understand code below