|
@@ -112,11 +112,10 @@ static GDScriptParser::DataType make_native_enum_type(const StringName &p_native
|
|
|
type.is_meta_type = true;
|
|
|
|
|
|
List<StringName> enum_values;
|
|
|
- StringName real_native_name = GDScriptParser::get_real_class_name(p_native_class);
|
|
|
- ClassDB::get_enum_constants(real_native_name, p_enum_name, &enum_values);
|
|
|
+ ClassDB::get_enum_constants(p_native_class, p_enum_name, &enum_values);
|
|
|
|
|
|
for (const StringName &E : enum_values) {
|
|
|
- type.enum_values[E] = ClassDB::get_integer_constant(real_native_name, E);
|
|
|
+ type.enum_values[E] = ClassDB::get_integer_constant(p_native_class, E);
|
|
|
}
|
|
|
|
|
|
return type;
|
|
@@ -229,7 +228,7 @@ Error GDScriptAnalyzer::resolve_inheritance(GDScriptParser::ClassNode *p_class,
|
|
|
push_error(vformat(R"(Could not resolve super class inheritance from "%s".)", name), p_class);
|
|
|
return err;
|
|
|
}
|
|
|
- } else if (class_exists(name) && ClassDB::can_instantiate(GDScriptParser::get_real_class_name(name))) {
|
|
|
+ } else if (class_exists(name) && ClassDB::can_instantiate(name)) {
|
|
|
base.kind = GDScriptParser::DataType::NATIVE;
|
|
|
base.native_type = name;
|
|
|
} else {
|
|
@@ -406,7 +405,7 @@ GDScriptParser::DataType GDScriptAnalyzer::resolve_datatype(GDScriptParser::Type
|
|
|
return GDScriptParser::DataType();
|
|
|
}
|
|
|
result = ref->get_parser()->head->get_datatype();
|
|
|
- } else if (ClassDB::has_enum(GDScriptParser::get_real_class_name(parser->current_class->base_type.native_type), first)) {
|
|
|
+ } else if (ClassDB::has_enum(parser->current_class->base_type.native_type, first)) {
|
|
|
// Native enum in current class.
|
|
|
result = make_native_enum_type(parser->current_class->base_type.native_type, first);
|
|
|
} else {
|
|
@@ -469,7 +468,7 @@ GDScriptParser::DataType GDScriptAnalyzer::resolve_datatype(GDScriptParser::Type
|
|
|
}
|
|
|
} else if (result.kind == GDScriptParser::DataType::NATIVE) {
|
|
|
// Only enums allowed for native.
|
|
|
- if (ClassDB::has_enum(GDScriptParser::get_real_class_name(result.native_type), p_type->type_chain[1]->name)) {
|
|
|
+ if (ClassDB::has_enum(result.native_type, p_type->type_chain[1]->name)) {
|
|
|
if (p_type->type_chain.size() > 2) {
|
|
|
push_error(R"(Enums cannot contain nested types.)", p_type->type_chain[2]);
|
|
|
} else {
|
|
@@ -2252,7 +2251,7 @@ void GDScriptAnalyzer::reduce_get_node(GDScriptParser::GetNodeNode *p_get_node)
|
|
|
result.native_type = "Node";
|
|
|
result.builtin_type = Variant::OBJECT;
|
|
|
|
|
|
- if (!ClassDB::is_parent_class(GDScriptParser::get_real_class_name(parser->current_class->base_type.native_type), result.native_type)) {
|
|
|
+ if (!ClassDB::is_parent_class(parser->current_class->base_type.native_type, result.native_type)) {
|
|
|
push_error(R"*(Cannot use shorthand "get_node()" notation ("$") on a class that isn't a node.)*", p_get_node);
|
|
|
} else if (!lambda_stack.is_empty()) {
|
|
|
push_error(R"*(Cannot use shorthand "get_node()" notation ("$") inside a lambda. Use a captured variable instead.)*", p_get_node);
|
|
@@ -2421,7 +2420,7 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
|
|
|
}
|
|
|
|
|
|
// Check native members.
|
|
|
- const StringName &native = GDScriptParser::get_real_class_name(base.native_type);
|
|
|
+ const StringName &native = base.native_type;
|
|
|
|
|
|
if (class_exists(native)) {
|
|
|
PropertyInfo prop_info;
|
|
@@ -3303,10 +3302,8 @@ bool GDScriptAnalyzer::get_function_signature(GDScriptParser::Node *p_source, GD
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- StringName real_native = GDScriptParser::get_real_class_name(base_native);
|
|
|
-
|
|
|
MethodInfo info;
|
|
|
- if (ClassDB::get_method_info(real_native, function_name, &info)) {
|
|
|
+ if (ClassDB::get_method_info(base_native, function_name, &info)) {
|
|
|
return function_signature_from_info(info, r_return_type, r_par_types, r_default_arg_count, r_static, r_vararg);
|
|
|
}
|
|
|
|
|
@@ -3398,24 +3395,23 @@ bool GDScriptAnalyzer::is_shadowing(GDScriptParser::IdentifierNode *p_local, con
|
|
|
|
|
|
StringName parent = base_native;
|
|
|
while (parent != StringName()) {
|
|
|
- StringName real_class_name = GDScriptParser::get_real_class_name(parent);
|
|
|
- if (ClassDB::has_method(real_class_name, name, true)) {
|
|
|
+ if (ClassDB::has_method(parent, name, true)) {
|
|
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_VARIABLE_BASE_CLASS, p_context, p_local->name, "method", parent);
|
|
|
return true;
|
|
|
- } else if (ClassDB::has_signal(real_class_name, name, true)) {
|
|
|
+ } else if (ClassDB::has_signal(parent, name, true)) {
|
|
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_VARIABLE_BASE_CLASS, p_context, p_local->name, "signal", parent);
|
|
|
return true;
|
|
|
- } else if (ClassDB::has_property(real_class_name, name, true)) {
|
|
|
+ } else if (ClassDB::has_property(parent, name, true)) {
|
|
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_VARIABLE_BASE_CLASS, p_context, p_local->name, "property", parent);
|
|
|
return true;
|
|
|
- } else if (ClassDB::has_integer_constant(real_class_name, name, true)) {
|
|
|
+ } else if (ClassDB::has_integer_constant(parent, name, true)) {
|
|
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_VARIABLE_BASE_CLASS, p_context, p_local->name, "constant", parent);
|
|
|
return true;
|
|
|
- } else if (ClassDB::has_enum(real_class_name, name, true)) {
|
|
|
+ } else if (ClassDB::has_enum(parent, name, true)) {
|
|
|
parser->push_warning(p_local, GDScriptWarning::SHADOWED_VARIABLE_BASE_CLASS, p_context, p_local->name, "enum", parent);
|
|
|
return true;
|
|
|
}
|
|
|
- parent = ClassDB::get_parent_class(real_class_name);
|
|
|
+ parent = ClassDB::get_parent_class(parent);
|
|
|
}
|
|
|
|
|
|
return false;
|
|
@@ -3560,16 +3556,12 @@ bool GDScriptAnalyzer::is_type_compatible(const GDScriptParser::DataType &p_targ
|
|
|
break; // Already solved before.
|
|
|
}
|
|
|
|
|
|
- // Get underscore-prefixed version for some classes.
|
|
|
- src_native = GDScriptParser::get_real_class_name(src_native);
|
|
|
-
|
|
|
switch (p_target.kind) {
|
|
|
case GDScriptParser::DataType::NATIVE: {
|
|
|
if (p_target.is_meta_type) {
|
|
|
return ClassDB::is_parent_class(src_native, GDScriptNativeClass::get_class_static());
|
|
|
}
|
|
|
- StringName tgt_native = GDScriptParser::get_real_class_name(p_target.native_type);
|
|
|
- return ClassDB::is_parent_class(src_native, tgt_native);
|
|
|
+ return ClassDB::is_parent_class(src_native, p_target.native_type);
|
|
|
}
|
|
|
case GDScriptParser::DataType::SCRIPT:
|
|
|
if (p_target.is_meta_type) {
|
|
@@ -3618,8 +3610,7 @@ void GDScriptAnalyzer::mark_node_unsafe(const GDScriptParser::Node *p_node) {
|
|
|
}
|
|
|
|
|
|
bool GDScriptAnalyzer::class_exists(const StringName &p_class) const {
|
|
|
- StringName real_name = GDScriptParser::get_real_class_name(p_class);
|
|
|
- return ClassDB::class_exists(real_name) && ClassDB::is_class_exposed(real_name);
|
|
|
+ return ClassDB::class_exists(p_class) && ClassDB::is_class_exposed(p_class);
|
|
|
}
|
|
|
|
|
|
Ref<GDScriptParserRef> GDScriptAnalyzer::get_parser_for(const String &p_path) {
|