mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-18 13:49:59 +01:00
Get rid of fiber for finalizers.
Instead, finalizers just get access to the foreign object's raw bytes. This is deliberately limiting, since it discourages the user from interacting with the VM in the middle of a GC.
This commit is contained in:
@ -69,11 +69,16 @@ static void pointToString(WrenVM* vm)
|
||||
|
||||
static void resourceAllocate(WrenVM* vm)
|
||||
{
|
||||
wrenAllocateForeign(vm, 0);
|
||||
int* value = (int*)wrenAllocateForeign(vm, sizeof(int));
|
||||
*value = 123;
|
||||
}
|
||||
|
||||
static void resourceFinalize(WrenVM* vm)
|
||||
static void resourceFinalize(void* data)
|
||||
{
|
||||
// Make sure we get the right data back.
|
||||
int* value = (int*)data;
|
||||
if (*value != 123) exit(1);
|
||||
|
||||
finalized++;
|
||||
}
|
||||
|
||||
|
||||
10
test/io/file/finalize.wren
Normal file
10
test/io/file/finalize.wren
Normal file
@ -0,0 +1,10 @@
|
||||
import "io" for File
|
||||
|
||||
// Don't store in a variable.
|
||||
File.open("test/io/file/finalize.wren")
|
||||
|
||||
System.gc()
|
||||
// We can't really test what the finalizer *does* from Wren, since the object
|
||||
// is unreachable, but this at least ensures it doesn't crash.
|
||||
|
||||
System.print("ok") // expect: ok
|
||||
Reference in New Issue
Block a user