RAII #2
+5
-1
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user