瀏覽代碼

Merge pull request #42534 from Paulb23/color_region_crash_issue_42492

Switch from recursion to iterative for backfilling colour regions
Rémi Verschelde 5 年之前
父節點
當前提交
aa38a667d1
共有 2 個文件被更改,包括 14 次插入0 次删除
  1. 7 0
      modules/gdscript/editor/gdscript_highlighter.cpp
  2. 7 0
      scene/resources/syntax_highlighter.cpp

+ 7 - 0
modules/gdscript/editor/gdscript_highlighter.cpp

@@ -73,6 +73,13 @@ Dictionary GDScriptSyntaxHighlighter::_get_line_syntax_highlighting(int p_line)
 	color_region_cache[p_line] = -1;
 	int in_region = -1;
 	if (p_line != 0) {
+		int prev_region_line = p_line - 1;
+		while (prev_region_line > 0 && !color_region_cache.has(prev_region_line)) {
+			prev_region_line--;
+		}
+		for (int i = prev_region_line; i < p_line - 1; i++) {
+			get_line_syntax_highlighting(i);
+		}
 		if (!color_region_cache.has(p_line - 1)) {
 			get_line_syntax_highlighting(p_line - 1);
 		}

+ 7 - 0
scene/resources/syntax_highlighter.cpp

@@ -149,6 +149,13 @@ Dictionary CodeHighlighter::_get_line_syntax_highlighting(int p_line) {
 	color_region_cache[p_line] = -1;
 	int in_region = -1;
 	if (p_line != 0) {
+		int prev_region_line = p_line - 1;
+		while (prev_region_line > 0 && !color_region_cache.has(prev_region_line)) {
+			prev_region_line--;
+		}
+		for (int i = prev_region_line; i < p_line - 1; i++) {
+			get_line_syntax_highlighting(i);
+		}
 		if (!color_region_cache.has(p_line - 1)) {
 			get_line_syntax_highlighting(p_line - 1);
 		}