diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index 734e7e3f10d..5fa7ce4908a 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 {