* 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:
parent
66b0c843c3
commit
600b3a91ab
2 changed files with 16 additions and 1 deletions
|
|
@ -32,6 +32,8 @@ const
|
||||||
when hasFFI:
|
when hasFFI:
|
||||||
import evalffi
|
import evalffi
|
||||||
|
|
||||||
|
when not defined(nimHasCursor):
|
||||||
|
{.pragma: cursor.}
|
||||||
|
|
||||||
proc stackTraceAux(c: PCtx; x: PStackFrame; pc: int; recursionLimit=100) =
|
proc stackTraceAux(c: PCtx; x: PStackFrame; pc: int; recursionLimit=100) =
|
||||||
if x != nil:
|
if x != nil:
|
||||||
|
|
@ -787,7 +789,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg =
|
||||||
of opcLdStrIdx:
|
of opcLdStrIdx:
|
||||||
decodeBC(rkInt)
|
decodeBC(rkInt)
|
||||||
let idx = regs[rc].intVal.int
|
let idx = regs[rc].intVal.int
|
||||||
let s = regs[rb].node.strVal
|
let s {.cursor.} = regs[rb].node.strVal
|
||||||
if idx <% s.len:
|
if idx <% s.len:
|
||||||
regs[ra].intVal = s[idx].ord
|
regs[ra].intVal = s[idx].ord
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
13
tests/vm/t20746.nim
Normal file
13
tests/vm/t20746.nim
Normal 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"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue