Merge pull request #26425 from neikeq/issue-24958

C#: Fix parsing of class full name when the base has generics
This commit is contained in:
Ignacio Etcheverry 2019-03-01 00:40:37 +01:00 committed by GitHub
commit 8d117b214f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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") {