diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2022-06-27 23:25:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-27 23:25:53 +0200 |
commit | c4a426d6ec71865b971ad419bf925ce8b8f9c37b (patch) | |
tree | 4bcece6ac87faea0c66d76d647d8b151a54d4ecd /modules/gdscript/gdscript_vm.cpp | |
parent | 25baa32db068af49cda1d79ea211c9df6c47a547 (diff) | |
parent | 511a4b761c3b5bf565f6e580fc9774a99e72a53e (diff) | |
download | redot-engine-c4a426d6ec71865b971ad419bf925ce8b8f9c37b.tar.gz |
Merge pull request #62462 from vnen/gdscript-setter-chaining
GDScript: Fix setter being called in chains for shared types
Diffstat (limited to 'modules/gdscript/gdscript_vm.cpp')
-rw-r--r-- | modules/gdscript/gdscript_vm.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript_vm.cpp b/modules/gdscript/gdscript_vm.cpp index 20b8d29ec3..988a98a591 100644 --- a/modules/gdscript/gdscript_vm.cpp +++ b/modules/gdscript/gdscript_vm.cpp @@ -311,6 +311,7 @@ void (*type_init_function_table[])(Variant *) = { &&OPCODE_JUMP_IF, \ &&OPCODE_JUMP_IF_NOT, \ &&OPCODE_JUMP_TO_DEF_ARGUMENT, \ + &&OPCODE_JUMP_IF_SHARED, \ &&OPCODE_RETURN, \ &&OPCODE_RETURN_TYPED_BUILTIN, \ &&OPCODE_RETURN_TYPED_ARRAY, \ @@ -2361,6 +2362,21 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a } DISPATCH_OPCODE; + OPCODE(OPCODE_JUMP_IF_SHARED) { + CHECK_SPACE(3); + + GET_INSTRUCTION_ARG(val, 0); + + if (val->is_shared()) { + int to = _code_ptr[ip + 2]; + GD_ERR_BREAK(to < 0 || to > _code_size); + ip = to; + } else { + ip += 3; + } + } + DISPATCH_OPCODE; + OPCODE(OPCODE_RETURN) { CHECK_SPACE(2); GET_INSTRUCTION_ARG(r, 0); |