GDScript: unsafe arithmetic assignment bug fix

Fix: #41051
This commit is contained in:
Thakee Nathees 2020-08-06 11:12:26 +05:30
parent ec678c5e94
commit 38c7d080e8

View file

@ -1406,6 +1406,7 @@ void GDScriptAnalyzer::reduce_assignment(GDScriptParser::AssignmentNode *p_assig
break; break;
} }
if (!p_assignment->assignee->get_datatype().is_variant() && !p_assignment->assigned_value->get_datatype().is_variant()) {
bool compatible = true; bool compatible = true;
GDScriptParser::DataType op_type = p_assignment->assigned_value->get_datatype(); GDScriptParser::DataType op_type = p_assignment->assigned_value->get_datatype();
if (vop != Variant::OP_EQUAL) { if (vop != Variant::OP_EQUAL) {
@ -1424,6 +1425,7 @@ void GDScriptAnalyzer::reduce_assignment(GDScriptParser::AssignmentNode *p_assig
} else { } else {
push_error(vformat(R"(Invalid operands "%s" and "%s" for assignment operator.)", p_assignment->assignee->get_datatype().to_string(), p_assignment->assigned_value->get_datatype().to_string()), p_assignment); push_error(vformat(R"(Invalid operands "%s" and "%s" for assignment operator.)", p_assignment->assignee->get_datatype().to_string(), p_assignment->assigned_value->get_datatype().to_string()), p_assignment);
} }
}
if (p_assignment->assignee->get_datatype().has_no_type() || p_assignment->assigned_value->get_datatype().is_variant()) { if (p_assignment->assignee->get_datatype().has_no_type() || p_assignment->assigned_value->get_datatype().is_variant()) {
mark_node_unsafe(p_assignment); mark_node_unsafe(p_assignment);