RAII #2

Merged
samsonium merged 14 commits from impl-dealloc into master 2026-10-18 18:00:04 +00:00
Showing only changes of commit 82b6cc3346 - Show all commits
+5 -1
View File
@@ -281,6 +281,7 @@ int fzl_vm_run(fzl_vm_t *vm)
break; break;
} }
// NOTE: make recursive owning transfer for nested objects!
case FZL_OPCODE_ESCAPE_OBJECT: case FZL_OPCODE_ESCAPE_OBJECT:
{ {
if (vm->dtop < 1) if (vm->dtop < 1)
@@ -291,7 +292,7 @@ int fzl_vm_run(fzl_vm_t *vm)
return -1; return -1;
} }
fzl_value_t obj = vm->dstack[--vm->dtop]; fzl_value_t obj = vm->dstack[--vm->dtop];
if (obj.type != FZL_TYPE_OBJECT) if (obj.type != FZL_TYPE_OBJECT && obj.type < FZL_TYPE_INT8)
{ {
snprintf(last_err, sizeof(last_err), snprintf(last_err, sizeof(last_err),
"runtime error - cannot escape non-object type"); "runtime error - cannot escape non-object type");
@@ -310,6 +311,8 @@ int fzl_vm_run(fzl_vm_t *vm)
} }
bool found = false; bool found = false;
if (obj.as.u != 0)
{
for (size_t i = 0; i < current->owned_objects_count; i++) for (size_t i = 0; i < current->owned_objects_count; i++)
{ {
if (obj.as.obj == current->owned_objects[i]) if (obj.as.obj == current->owned_objects[i])
@@ -319,6 +322,7 @@ int fzl_vm_run(fzl_vm_t *vm)
break; break;
} }
} }
}
if (found) if (found)
{ {