Browse Source

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.
Ignacio Etcheverry 6 years ago
parent
commit
42c57eef13
1 changed files with 11 additions and 14 deletions
  1. 11 14
      modules/mono/editor/script_class_parser.cpp

+ 11 - 14
modules/mono/editor/script_class_parser.cpp

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