mirror of
https://github.com/godotengine/godot.git
synced 2025-11-01 06:01:14 +00:00
Add GDScript member initializer implicit type conversion
This commit is contained in:
parent
05097ded0a
commit
c8293a73b4
3 changed files with 17 additions and 0 deletions
|
|
@ -2389,6 +2389,7 @@ Error GDScriptCompiler::_populate_class_members(GDScript *p_script, const GDScri
|
|||
#ifdef TOOLS_ENABLED
|
||||
if (variable->initializer != nullptr && variable->initializer->is_constant) {
|
||||
p_script->member_default_values[name] = variable->initializer->reduced_value;
|
||||
GDScriptCompiler::convert_to_initializer_type(p_script->member_default_values[name], variable);
|
||||
} else {
|
||||
p_script->member_default_values.erase(name);
|
||||
}
|
||||
|
|
@ -2646,6 +2647,20 @@ Error GDScriptCompiler::_compile_class(GDScript *p_script, const GDScriptParser:
|
|||
return OK;
|
||||
}
|
||||
|
||||
void GDScriptCompiler::convert_to_initializer_type(Variant &p_variant, const GDScriptParser::VariableNode *p_node) {
|
||||
// Set p_variant to the value of p_node's initializer, with the type of p_node's variable.
|
||||
GDScriptParser::DataType member_t = p_node->datatype;
|
||||
GDScriptParser::DataType init_t = p_node->initializer->datatype;
|
||||
if (member_t.is_hard_type() && init_t.is_hard_type() &&
|
||||
member_t.kind == GDScriptParser::DataType::BUILTIN && init_t.kind == GDScriptParser::DataType::BUILTIN) {
|
||||
if (Variant::can_convert_strict(init_t.builtin_type, member_t.builtin_type)) {
|
||||
Variant *v = &p_node->initializer->reduced_value;
|
||||
Callable::CallError ce;
|
||||
Variant::construct(member_t.builtin_type, p_variant, const_cast<const Variant **>(&v), 1, ce);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GDScriptCompiler::make_scripts(GDScript *p_script, const GDScriptParser::ClassNode *p_class, bool p_keep_state) {
|
||||
p_script->fully_qualified_name = p_class->fqcn;
|
||||
p_script->name = p_class->identifier ? p_class->identifier->name : "";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue