Merge pull request #35076 from vnen/gdscript-type-match-assign

Type match on assignment only if operators have type
This commit is contained in:
Rémi Verschelde 2020-01-13 13:14:57 +01:00 committed by GitHub
commit e32d232053
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 2 additions and 8 deletions

View File

@ -8210,12 +8210,10 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
_add_warning(GDScriptWarning::FUNCTION_MAY_YIELD, op->line, _find_function_name(static_cast<OperatorNode *>(op->arguments[1]))); _add_warning(GDScriptWarning::FUNCTION_MAY_YIELD, op->line, _find_function_name(static_cast<OperatorNode *>(op->arguments[1])));
} }
bool type_match = check_types;
#endif // DEBUG_ENABLED #endif // DEBUG_ENABLED
bool type_match = lh_type.has_type && rh_type.has_type;
if (check_types && !_is_type_compatible(lh_type, rh_type)) { if (check_types && !_is_type_compatible(lh_type, rh_type)) {
#ifdef DEBUG_ENABLED
type_match = false; type_match = false;
#endif // DEBUG_ENABLED
// Try supertype test // Try supertype test
if (_is_type_compatible(rh_type, lh_type)) { if (_is_type_compatible(rh_type, lh_type)) {
@ -8247,9 +8245,7 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
op->arguments.write[1] = convert_call; op->arguments.write[1] = convert_call;
#ifdef DEBUG_ENABLED
type_match = true; // Since we are converting, the type is matching type_match = true; // Since we are converting, the type is matching
#endif // DEBUG_ENABLED
} }
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
if (lh_type.builtin_type == Variant::INT && rh_type.builtin_type == Variant::REAL) { if (lh_type.builtin_type == Variant::INT && rh_type.builtin_type == Variant::REAL) {
@ -8262,10 +8258,8 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
if (!rh_type.has_type && (op->op != OperatorNode::OP_ASSIGN || lh_type.has_type || op->arguments[0]->type == Node::TYPE_OPERATOR)) { if (!rh_type.has_type && (op->op != OperatorNode::OP_ASSIGN || lh_type.has_type || op->arguments[0]->type == Node::TYPE_OPERATOR)) {
_mark_line_as_unsafe(op->line); _mark_line_as_unsafe(op->line);
} }
op->datatype.has_type = type_match;
#else
op->datatype.has_type = false;
#endif // DEBUG_ENABLED #endif // DEBUG_ENABLED
op->datatype.has_type = type_match;
} break; } break;
case OperatorNode::OP_CALL: case OperatorNode::OP_CALL:
case OperatorNode::OP_PARENT_CALL: { case OperatorNode::OP_PARENT_CALL: {