[GDScript] Fix incorrect compound assignment
Reverts in-place compound assignments Added test to ensure correctness
This commit is contained in:
parent
4dcf2c5431
commit
e5365da03c
@ -1165,18 +1165,8 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
|
|||||||
bool has_operation = assignment->operation != GDScriptParser::AssignmentNode::OP_NONE;
|
bool has_operation = assignment->operation != GDScriptParser::AssignmentNode::OP_NONE;
|
||||||
if (has_operation) {
|
if (has_operation) {
|
||||||
// Perform 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 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);
|
gen->write_binary_operator(op_result, assignment->variant_op, og_value, assigned_value);
|
||||||
to_assign = op_result;
|
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 New Issue
Block a user