mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 00:13:30 +00:00
Merge pull request #68747 from rune-scape/rune-stringname-unification
GDScript: Unify StringName and String
This commit is contained in:
commit
907298d673
28 changed files with 1450 additions and 254 deletions
|
@ -1256,9 +1256,30 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c
|
|||
equality_type.kind = GDScriptDataType::BUILTIN;
|
||||
equality_type.builtin_type = Variant::BOOL;
|
||||
|
||||
GDScriptCodeGenerator::Address type_string_addr = codegen.add_constant(Variant::STRING);
|
||||
GDScriptCodeGenerator::Address type_string_name_addr = codegen.add_constant(Variant::STRING_NAME);
|
||||
|
||||
// Check type equality.
|
||||
GDScriptCodeGenerator::Address type_equality_addr = codegen.add_temporary(equality_type);
|
||||
codegen.generator->write_binary_operator(type_equality_addr, Variant::OP_EQUAL, p_type_addr, literal_type_addr);
|
||||
|
||||
// Check if StringName <-> String comparison is possible.
|
||||
GDScriptCodeGenerator::Address type_comp_addr_1 = codegen.add_temporary(equality_type);
|
||||
GDScriptCodeGenerator::Address type_comp_addr_2 = codegen.add_temporary(equality_type);
|
||||
|
||||
codegen.generator->write_binary_operator(type_comp_addr_1, Variant::OP_EQUAL, p_type_addr, type_string_addr);
|
||||
codegen.generator->write_binary_operator(type_comp_addr_2, Variant::OP_EQUAL, literal_type_addr, type_string_name_addr);
|
||||
codegen.generator->write_binary_operator(type_comp_addr_1, Variant::OP_AND, type_comp_addr_1, type_comp_addr_2);
|
||||
codegen.generator->write_binary_operator(type_equality_addr, Variant::OP_OR, type_equality_addr, type_comp_addr_1);
|
||||
|
||||
codegen.generator->write_binary_operator(type_comp_addr_1, Variant::OP_EQUAL, p_type_addr, type_string_name_addr);
|
||||
codegen.generator->write_binary_operator(type_comp_addr_2, Variant::OP_EQUAL, literal_type_addr, type_string_addr);
|
||||
codegen.generator->write_binary_operator(type_comp_addr_1, Variant::OP_AND, type_comp_addr_1, type_comp_addr_2);
|
||||
codegen.generator->write_binary_operator(type_equality_addr, Variant::OP_OR, type_equality_addr, type_comp_addr_1);
|
||||
|
||||
codegen.generator->pop_temporary(); // Remove type_comp_addr_2 from stack.
|
||||
codegen.generator->pop_temporary(); // Remove type_comp_addr_1 from stack.
|
||||
|
||||
codegen.generator->write_and_left_operand(type_equality_addr);
|
||||
|
||||
// Get literal.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue