[GDScript] Fix incorrect compound assignment
Reverts in-place compound assignments Added test to ensure correctness
This commit is contained in:
parent
4dcf2c5431
commit
e5365da03c
3 changed files with 38 additions and 11 deletions
|
@ -1165,18 +1165,8 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
|
|||
bool has_operation = assignment->operation != GDScriptParser::AssignmentNode::OP_NONE;
|
||||
if (has_operation) {
|
||||
// Perform operation.
|
||||
GDScriptCodeGenerator::Address og_value = _parse_expression(codegen, r_error, assignment->assignee);
|
||||
|
||||
if (!has_setter && !assignment->use_conversion_assign) {
|
||||
// If there's nothing special about the assignment, perform the assignment as part of the operator
|
||||
gen->write_binary_operator(target, assignment->variant_op, og_value, assigned_value);
|
||||
if (assigned_value.mode == GDScriptCodeGenerator::Address::TEMPORARY) {
|
||||
gen->pop_temporary(); // Pop assigned value if not done before.
|
||||
}
|
||||
return GDScriptCodeGenerator::Address();
|
||||
}
|
||||
|
||||
GDScriptCodeGenerator::Address op_result = codegen.add_temporary(_gdtype_from_datatype(assignment->get_datatype(), codegen.script));
|
||||
GDScriptCodeGenerator::Address og_value = _parse_expression(codegen, r_error, assignment->assignee);
|
||||
gen->write_binary_operator(op_result, assignment->variant_op, og_value, assigned_value);
|
||||
to_assign = op_result;
|
||||
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# https://github.com/godotengine/godot/issues/75832
|
||||
|
||||
@warning_ignore("narrowing_conversion")
|
||||
func test():
|
||||
var hf := 2.0
|
||||
var sf = 2.0
|
||||
|
||||
var i := 2
|
||||
i *= hf
|
||||
i *= sf
|
||||
i *= 2.0
|
||||
print(i)
|
||||
var v2 := Vector2i(1, 2)
|
||||
v2 *= hf
|
||||
v2 *= sf
|
||||
v2 *= 2.0
|
||||
print(v2)
|
||||
var v3 := Vector3i(1, 2, 3)
|
||||
v3 *= hf
|
||||
v3 *= sf
|
||||
v3 *= 2.0
|
||||
print(v3)
|
||||
var v4 := Vector4i(1, 2, 3, 4)
|
||||
v4 *= hf
|
||||
v4 *= sf
|
||||
v4 *= 2.0
|
||||
print(v4)
|
||||
|
||||
var arr := [1, 2, 3]
|
||||
arr += [4, 5]
|
||||
print(arr)
|
|
@ -0,0 +1,6 @@
|
|||
GDTEST_OK
|
||||
16
|
||||
(8, 16)
|
||||
(8, 16, 24)
|
||||
(8, 16, 24, 32)
|
||||
[1, 2, 3, 4, 5]
|
Loading…
Reference in a new issue