Retoor software development Projects Research SearchXNG
Register Sign In

12 lines
331 B
Plaintext
Raw Normal View History

fix: close only existing upvalues for locals in scope during stack unwinding The previous implementation unconditionally closed the first open upvalue when executing CLOSE_UPVALUE, which could crash when a local variable was never actually captured by a closure. Changed closeUpvalue to closeUpvalues with a stack threshold parameter, so only upvalues whose stack slot is at or above the given pointer are closed. This prevents closing nonexistent upvalues for locals that were never closed over, fixing segfaults in unused closure scenarios. Added regression tests for unused closures and for nested scopes where only some locals are captured.
2015-10-08 17:06:29 +02:00
// This is a regression test. There was a bug where the VM would try to close
// an upvalue even if the upvalue was never created because the codepath for
// the closure was not executed.
{
var a = "a"
if (false) Fn.new { a }
}
// If we get here, we didn't segfault when a went out of scope.
System.print("ok") // expect: ok
Reference in New Issue Copy Permalink
aef30ca4a1
wren/test/language/closure/unused_closure.wren
Response time: 86ms
Mail Licenses API