summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorArne Döring <arne.doering@gmx.net>2017-07-17 08:12:15 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-07-17 08:12:15 +0200
commit52f092d02b5a4afa8cbd591bab9160e671f71700 (patch)
tree014875d219163f285d9e00137dcd19de0e106e79 /compiler
parent9427724a718ece9396d85fe8fa6a604b59f6bfd7 (diff)
downloadNim-52f092d02b5a4afa8cbd591bab9160e671f71700.tar.gz
Lineinfo change (#6084)
Diffstat (limited to 'compiler')
-rw-r--r--compiler/msgs.nim2
-rw-r--r--compiler/vm.nim20
-rw-r--r--compiler/vmdef.nim2
-rw-r--r--compiler/vmgen.nim11
4 files changed, 28 insertions, 7 deletions
diff --git a/compiler/msgs.nim b/compiler/msgs.nim
index 5f4a0caf1..4a1166f51 100644
--- a/compiler/msgs.nim
+++ b/compiler/msgs.nim
@@ -746,7 +746,7 @@ proc toFileLine*(info: TLineInfo): string {.inline.} =
   result = info.toFilename & ":" & $info.line
 
 proc toFileLineCol*(info: TLineInfo): string {.inline.} =
-  result = info.toFilename & "(" & $info.line & "," & $info.col & ")"
+  result = info.toFilename & "(" & $info.line & ", " & $info.col & ")"
 
 proc `$`*(info: TLineInfo): string = toFileLineCol(info)
 
diff --git a/compiler/vm.nim b/compiler/vm.nim
index b8e6467b5..908bbeb69 100644
--- a/compiler/vm.nim
+++ b/compiler/vm.nim
@@ -1307,12 +1307,24 @@ 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 opcNLineInfo:
+    of opcNGetFile:
       decodeB(rkNode)
       let n = regs[rb].node
-      createStr regs[ra]
-      regs[ra].node.strVal = n.info.toFileLineCol
-      regs[ra].node.info = c.debug[pc]
+      regs[ra].node = newStrNode(nkStrLit, n.info.toFilename)
+      regs[ra].node.info = n.info
+      regs[ra].node.typ = n.typ
+    of opcNGetLine:
+      decodeB(rkNode)
+      let n = regs[rb].node
+      regs[ra].node = newIntNode(nkIntLit, n.info.line)
+      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
     of opcEqIdent:
       decodeBC(rkInt)
       if regs[rb].node.kind == nkIdent and regs[rc].node.kind == nkIdent:
diff --git a/compiler/vmdef.nim b/compiler/vmdef.nim
index 263ec8378..5045f3f07 100644
--- a/compiler/vmdef.nim
+++ b/compiler/vmdef.nim
@@ -98,7 +98,7 @@ type
     opcNError,
     opcNWarning,
     opcNHint,
-    opcNLineInfo,
+    opcNGetLine, opcNGetColumn, opcNGetFile,
     opcEqIdent,
     opcStrToIdent,
     opcIdentToStr,
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim
index ba89f88d4..d65fe22e9 100644
--- a/compiler/vmgen.nim
+++ b/compiler/vmgen.nim
@@ -1071,7 +1071,16 @@ proc genMagic(c: PCtx; n: PNode; dest: var TDest; m: TMagic) =
   of mEqIdent: genBinaryABC(c, n, dest, opcEqIdent)
   of mEqNimrodNode: genBinaryABC(c, n, dest, opcEqNimrodNode)
   of mSameNodeType: genBinaryABC(c, n, dest, opcSameNodeType)
-  of mNLineInfo: genUnaryABC(c, n, dest, opcNLineInfo)
+  of mNLineInfo:
+    case n[0].sym.name.s
+    of "getFile":
+      genUnaryABC(c, n, dest, opcNGetFile)
+    of "getLine":
+      genUnaryABC(c, n, dest, opcNGetLine)
+    of "getColumn":
+      genUnaryABC(c, n, dest, opcNGetColumn)
+    else:
+      internalAssert false
   of mNHint:
     unused(n, dest)
     genUnaryStmt(c, n, opcNHint)