-
Notifications
You must be signed in to change notification settings - Fork 396
Open
Description
The following program sample.go triggers an unexpected result
package main
import "fmt"
func run(fn func() bool) bool {
fmt.Println("run")
for {
return fn()
}
}
func main() {
run(func() bool {
deferred := func() {
fmt.Println("deferred")
}
defer deferred()
fmt.Println("done fn")
return true
})
fmt.Println("done main")
}
Expected result
run
done fn
deferred
done mainGot
Nothing, Eval runs indefinitelyYaegi Version
v0.16.1
Additional Notes
Seems to only happen when defer is used on a function defined inline/same scope as where defer is called from. For example, the following code works:
package main
import "fmt"
func run(fn func() bool) bool {
fmt.Println("run")
for {
return fn()
}
}
func deferred() {
fmt.Println("deferred")
}
func main() {
run(func() bool {
defer deferred()
fmt.Println("done fn")
return true
})
fmt.Println("done main")
}druizz90
Metadata
Metadata
Assignees
Labels
No labels