You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Merge pull request #72512 from vonagam/fix-ternary-type-source
GDScript: Fix type certainty for result of ternary operator
This commit is contained in:
@@ -4113,7 +4113,6 @@ void GDScriptAnalyzer::reduce_ternary_op(GDScriptParser::TernaryOpNode *p_ternar
|
|||||||
if (!is_type_compatible(true_type, false_type)) {
|
if (!is_type_compatible(true_type, false_type)) {
|
||||||
result = false_type;
|
result = false_type;
|
||||||
if (!is_type_compatible(false_type, true_type)) {
|
if (!is_type_compatible(false_type, true_type)) {
|
||||||
result.type_source = GDScriptParser::DataType::UNDETECTED;
|
|
||||||
result.kind = GDScriptParser::DataType::VARIANT;
|
result.kind = GDScriptParser::DataType::VARIANT;
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
parser->push_warning(p_ternary_op, GDScriptWarning::INCOMPATIBLE_TERNARY);
|
parser->push_warning(p_ternary_op, GDScriptWarning::INCOMPATIBLE_TERNARY);
|
||||||
@@ -4121,6 +4120,7 @@ void GDScriptAnalyzer::reduce_ternary_op(GDScriptParser::TernaryOpNode *p_ternar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
result.type_source = true_type.is_hard_type() && false_type.is_hard_type() ? GDScriptParser::DataType::ANNOTATED_INFERRED : GDScriptParser::DataType::INFERRED;
|
||||||
|
|
||||||
p_ternary_op->set_datatype(result);
|
p_ternary_op->set_datatype(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
func test():
|
||||||
|
var left_hard_int := 1
|
||||||
|
var right_weak_int = 2
|
||||||
|
var result_hm_int := left_hard_int if true else right_weak_int
|
||||||
|
|
||||||
|
print('not ok')
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
GDTEST_ANALYZER_ERROR
|
||||||
|
Cannot infer the type of "result_hm_int" variable because the value doesn't have a set type.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
func test():
|
||||||
|
var left_hard_int := 1
|
||||||
|
var right_hard_int := 2
|
||||||
|
var result_hard_int := left_hard_int if true else right_hard_int
|
||||||
|
assert(result_hard_int == 1)
|
||||||
|
|
||||||
|
var left_hard_variant := 1 as Variant
|
||||||
|
var right_hard_variant := 2.0 as Variant
|
||||||
|
var result_hard_variant := left_hard_variant if true else right_hard_variant
|
||||||
|
assert(result_hard_variant == 1)
|
||||||
|
|
||||||
|
print('ok')
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
GDTEST_OK
|
||||||
|
ok
|
||||||
Reference in New Issue
Block a user