1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

GDScript: Infer type with string format operator

If the left value type is known to be String, assume the format operator
(`%`) will return a string, since it works with any type in the right
hand side. This is also used by type inference even if the right hand
type is unknown at compile time.
This commit is contained in:
George Marques
2024-04-09 15:49:44 -03:00
parent a7b860250f
commit 4bdba718c5
3 changed files with 13 additions and 0 deletions

View File

@@ -2846,6 +2846,11 @@ void GDScriptAnalyzer::reduce_binary_op(GDScriptParser::BinaryOpNode *p_binary_o
result.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
result.kind = GDScriptParser::DataType::BUILTIN;
result.builtin_type = Variant::BOOL;
} else if (p_binary_op->variant_op == Variant::OP_MODULE && left_type.builtin_type == Variant::STRING) {
// The modulo operator (%) on string acts as formatting and will always return a string.
result.type_source = left_type.type_source;
result.kind = GDScriptParser::DataType::BUILTIN;
result.builtin_type = Variant::STRING;
} else if (left_type.is_variant() || right_type.is_variant()) {
// Cannot infer type because one operand can be anything.
result.kind = GDScriptParser::DataType::VARIANT;