Browse Source

Keep GDScriptAnalyzer alive for whole parse()

Analyzed data is allocated by Parser but kept as a reference in the cache
which in turn is held by the Analyzer. If Analyzer goes away Parser is left
with a tree of dangling references.

Code is analogous to all other usages of Analyzer + Parser pair.
Bartosz Bielecki 2 years ago
parent
commit
2af4f7f762
1 changed files with 2 additions and 1 deletions
  1. 2 1
      modules/gdscript/language_server/gdscript_extend_parser.cpp

+ 2 - 1
modules/gdscript/language_server/gdscript_extend_parser.cpp

@@ -844,8 +844,9 @@ Error ExtendGDScriptParser::parse(const String &p_code, const String &p_path) {
 	lines = p_code.split("\n");
 
 	Error err = GDScriptParser::parse(p_code, p_path, false);
+	GDScriptAnalyzer analyzer(this);
+
 	if (err == OK) {
-		GDScriptAnalyzer analyzer(this);
 		err = analyzer.analyze();
 	}
 	update_diagnostics();