From 4f46ecc4790ea57b04fe77d2923d50bb88fb3047 Mon Sep 17 00:00:00 2001 From: Murrent <43298787+Murrent@users.noreply.github.com> Date: Sat, 22 Feb 2025 17:00:38 +0100 Subject: [PATCH] Allow default case at the top of a switch scope in shaders Revert "Removed translations of unused error message" This reverts commit 6dbc75e000375196eb0176e65eb41935f71fc4fe. Variable name change Detecting multiple default cases in shaders Removed translations of unused error message Allowing default case at top of scope in switch statement in shaders --- servers/rendering/shader_language.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index 59adb53b786..38d490e9056 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -8460,9 +8460,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun pos = _get_tkpos(); tk = _get_token(); - TokenType prev_type; + bool has_default = false; if (tk.type == TK_CF_CASE || tk.type == TK_CF_DEFAULT) { - prev_type = tk.type; + if (tk.type == TK_CF_DEFAULT) { + has_default = true; + } _set_tkpos(pos); } else { _set_expected_error("case", "default"); @@ -8476,17 +8478,15 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun } pos = _get_tkpos(); tk = _get_token(); - if (tk.type == TK_CF_CASE || tk.type == TK_CF_DEFAULT) { - if (prev_type == TK_CF_DEFAULT) { - if (tk.type == TK_CF_CASE) { - _set_error(RTR("Cases must be defined before default case.")); - return ERR_PARSE_ERROR; - } else if (prev_type == TK_CF_DEFAULT) { - _set_error(RTR("Default case must be defined only once.")); - return ERR_PARSE_ERROR; - } + if (tk.type == TK_CF_CASE) { + _set_tkpos(pos); + continue; + } else if (tk.type == TK_CF_DEFAULT) { + if (has_default) { + _set_error(RTR("Default case must be defined only once.")); + return ERR_PARSE_ERROR; } - prev_type = tk.type; + has_default = true; _set_tkpos(pos); continue; } else {