C#: Fix parsing of class full name when the base has generics

Also we no longer ignore base classes with generics, since we don't really care about that.
This commit is contained in:
Ignacio Etcheverry 2019-03-01 00:21:46 +01:00
parent ba9bfb8593
commit 42c57eef13

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