|
@@ -322,6 +322,15 @@ Error ScriptClassParser::_parse_type_full_name(String &r_full_name) {
|
|
|
|
|
|
r_full_name += String(value);
|
|
|
|
|
|
+ if (code[idx] == '<') {
|
|
|
+ idx++;
|
|
|
+
|
|
|
+ // We don't mind if the base is generic, but we skip it any ways since this information is not needed
|
|
|
+ Error err = _skip_generic_type_params();
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
if (code[idx] != '.') // We only want to take the next token if it's a period
|
|
|
return OK;
|
|
|
|
|
@@ -344,16 +353,6 @@ Error ScriptClassParser::_parse_class_base(Vector<String> &r_base) {
|
|
|
|
|
|
Token tk = get_token();
|
|
|
|
|
|
- bool generic = false;
|
|
|
- if (tk == TK_OP_LESS) {
|
|
|
- err = _skip_generic_type_params();
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
- // We don't add it to the base list if it's generic
|
|
|
- generic = true;
|
|
|
- tk = get_token();
|
|
|
- }
|
|
|
-
|
|
|
if (tk == TK_COMMA) {
|
|
|
err = _parse_class_base(r_base);
|
|
|
if (err)
|
|
@@ -373,9 +372,7 @@ Error ScriptClassParser::_parse_class_base(Vector<String> &r_base) {
|
|
|
return ERR_PARSE_ERROR;
|
|
|
}
|
|
|
|
|
|
- if (!generic) {
|
|
|
- r_base.push_back(name);
|
|
|
- }
|
|
|
+ r_base.push_back(name);
|
|
|
|
|
|
return OK;
|
|
|
}
|
|
@@ -567,7 +564,7 @@ Error ScriptClassParser::parse(const String &p_code) {
|
|
|
if (full_name.length())
|
|
|
full_name += ".";
|
|
|
full_name += class_decl.name;
|
|
|
- OS::get_singleton()->print("%s", String("Ignoring generic class declaration: " + class_decl.name).utf8().get_data());
|
|
|
+ OS::get_singleton()->print("Ignoring generic class declaration: %s\n", class_decl.name.utf8().get_data());
|
|
|
}
|
|
|
}
|
|
|
} else if (tk == TK_IDENTIFIER && String(value) == "struct") {
|