fixes #4299 #12492 #10849; lambda lifting for JS backend (#23484)

fixes #4299 
fixes #12492 
fixes #10849

It binds `function` with `env`: `function.bind(:env)` to ease codegen
for now
This commit is contained in:
ringabout
2024-04-11 15:14:56 +08:00
committed by GitHub
parent 2bd2f28858
commit 779bc8474b
10 changed files with 118 additions and 71 deletions

View File

@@ -0,0 +1,47 @@
discard """
targets: "c js"
"""
import std/assertions
block: # bug #4299
proc scopeProc() =
proc normalProc() =
discard
proc genericProc[T]() =
normalProc()
genericProc[string]()
scopeProc()
block: # bug #12492
proc foo() =
var i = 0
proc bar() =
inc i
bar()
doAssert i == 1
foo()
static:
foo()
block: # bug #10849
type
Generic[T] = ref object
getState: proc(): T
proc newGeneric[T](): Generic[T] =
var state: T
proc getState[T](): T =
state
Generic[T](getState: getState)
let g = newGeneric[int]()
let state = g.getState()
doAssert state == 0