Browse Source

Merge pull request #29145 from GodotExplorer/gdscript-extend-fix

Fix parse error when inherits from subclass of named classes
Rémi Verschelde 6 years ago
parent
commit
b09ed50020
1 changed files with 4 additions and 3 deletions
  1. 4 3
      modules/gdscript/gdscript_parser.cpp

+ 4 - 3
modules/gdscript/gdscript_parser.cpp

@@ -5248,6 +5248,7 @@ void GDScriptParser::_determine_inheritance(ClassNode *p_class) {
 			if (base_script.is_valid()) {
 			if (base_script.is_valid()) {
 
 
 				String ident = base;
 				String ident = base;
+				Ref<GDScript> find_subclass = base_script;
 
 
 				for (int i = extend_iter; i < p_class->extends_class.size(); i++) {
 				for (int i = extend_iter; i < p_class->extends_class.size(); i++) {
 
 
@@ -5257,7 +5258,7 @@ void GDScriptParser::_determine_inheritance(ClassNode *p_class) {
 
 
 					if (base_script->get_subclasses().has(subclass)) {
 					if (base_script->get_subclasses().has(subclass)) {
 
 
-						base_script = base_script->get_subclasses()[subclass];
+						find_subclass = base_script->get_subclasses()[subclass];
 					} else if (base_script->get_constants().has(subclass)) {
 					} else if (base_script->get_constants().has(subclass)) {
 
 
 						Ref<GDScript> new_base_class = base_script->get_constants()[subclass];
 						Ref<GDScript> new_base_class = base_script->get_constants()[subclass];
@@ -5265,7 +5266,7 @@ void GDScriptParser::_determine_inheritance(ClassNode *p_class) {
 							_set_error("Constant is not a class: " + ident, p_class->line);
 							_set_error("Constant is not a class: " + ident, p_class->line);
 							return;
 							return;
 						}
 						}
-						base_script = new_base_class;
+						find_subclass = new_base_class;
 					} else {
 					} else {
 
 
 						_set_error("Could not find subclass: " + ident, p_class->line);
 						_set_error("Could not find subclass: " + ident, p_class->line);
@@ -5273,7 +5274,7 @@ void GDScriptParser::_determine_inheritance(ClassNode *p_class) {
 					}
 					}
 				}
 				}
 
 
-				script = base_script;
+				script = find_subclass;
 
 
 			} else if (!base_class) {
 			} else if (!base_class) {