fixes regression #20746; remove string copies for ORC booted compiler (#20776)

* fixes #20746; remove string copies for ORC booted compiler

* add a test case

* use `cursor` thanks to @beef331

* for old compilers

* change file extension

* change test cases
This commit is contained in:
ringabout
2022-11-07 21:36:43 +08:00
committed by GitHub
parent 66b0c843c3
commit 600b3a91ab
2 changed files with 16 additions and 1 deletions

View File

@@ -32,6 +32,8 @@ const
when hasFFI:
import evalffi
when not defined(nimHasCursor):
{.pragma: cursor.}
proc stackTraceAux(c: PCtx; x: PStackFrame; pc: int; recursionLimit=100) =
if x != nil:
@@ -787,7 +789,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
of opcLdStrIdx:
decodeBC(rkInt)
let idx = regs[rc].intVal.int
let s = regs[rb].node.strVal
let s {.cursor.} = regs[rb].node.strVal
if idx <% s.len:
regs[ra].intVal = s[idx].ord
else:

13
tests/vm/t20746.nim Normal file
View File

@@ -0,0 +1,13 @@
discard """
timeout: 10
joinable: false
output: "fine"
"""
func addString(): string =
let x = newString(1000000)
for i in 0..<1000000:
discard x[i]
const translationTable = addString()
echo "fine"