Merge pull request #51818 from MarianoGnu/gdscript2-enum-fixes
This commit is contained in:
commit
7f8e50801e
|
@ -1867,12 +1867,20 @@ void GDScriptAnalyzer::reduce_binary_op(GDScriptParser::BinaryOpNode *p_binary_o
|
||||||
|
|
||||||
GDScriptParser::DataType left_type;
|
GDScriptParser::DataType left_type;
|
||||||
if (p_binary_op->left_operand) {
|
if (p_binary_op->left_operand) {
|
||||||
|
if (p_binary_op->left_operand->is_constant) {
|
||||||
|
left_type = type_from_variant(p_binary_op->left_operand->reduced_value, p_binary_op->left_operand);
|
||||||
|
} else {
|
||||||
left_type = p_binary_op->left_operand->get_datatype();
|
left_type = p_binary_op->left_operand->get_datatype();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
GDScriptParser::DataType right_type;
|
GDScriptParser::DataType right_type;
|
||||||
if (p_binary_op->right_operand) {
|
if (p_binary_op->right_operand) {
|
||||||
|
if (p_binary_op->right_operand->is_constant) {
|
||||||
|
right_type = type_from_variant(p_binary_op->right_operand->reduced_value, p_binary_op->right_operand);
|
||||||
|
} else {
|
||||||
right_type = p_binary_op->right_operand->get_datatype();
|
right_type = p_binary_op->right_operand->get_datatype();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!left_type.is_set() || !right_type.is_set()) {
|
if (!left_type.is_set() || !right_type.is_set()) {
|
||||||
return;
|
return;
|
||||||
|
@ -2508,7 +2516,10 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
|
||||||
result.enum_type = name;
|
result.enum_type = name;
|
||||||
p_identifier->set_datatype(result);
|
p_identifier->set_datatype(result);
|
||||||
} else {
|
} else {
|
||||||
push_error(vformat(R"(Cannot find value "%s" in "%s".)", name, base.to_string()), p_identifier);
|
// Consider as a Dictionary
|
||||||
|
GDScriptParser::DataType dummy;
|
||||||
|
dummy.kind = GDScriptParser::DataType::VARIANT;
|
||||||
|
p_identifier->set_datatype(dummy);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
push_error(R"(Cannot get property from enum value.)", p_identifier);
|
push_error(R"(Cannot get property from enum value.)", p_identifier);
|
||||||
|
@ -3681,6 +3692,11 @@ bool GDScriptAnalyzer::is_type_compatible(const GDScriptParser::DataType &p_targ
|
||||||
if (p_source.kind == GDScriptParser::DataType::BUILTIN && p_source.builtin_type == Variant::INT) {
|
if (p_source.kind == GDScriptParser::DataType::BUILTIN && p_source.builtin_type == Variant::INT) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (p_source.kind == GDScriptParser::DataType::ENUM) {
|
||||||
|
if (p_source.native_type == p_target.native_type) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (p_source.kind == GDScriptParser::DataType::ENUM_VALUE) {
|
if (p_source.kind == GDScriptParser::DataType::ENUM_VALUE) {
|
||||||
if (p_source.native_type == p_target.native_type && p_target.enum_values.has(p_source.enum_type)) {
|
if (p_source.native_type == p_target.native_type && p_target.enum_values.has(p_source.enum_type)) {
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue