1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-19 14:31:59 +00:00

Fix nested break/return in shader switch statement

This commit is contained in:
Yuri Roubinsky
2020-01-10 11:57:56 +03:00
parent e7b7dc57fc
commit 1e154e0947

View File

@@ -4542,9 +4542,14 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui
} }
p_block->statements.push_back(flow); p_block->statements.push_back(flow);
if (p_block->block_type == BlockNode::BLOCK_TYPE_CASE || p_block->block_type == BlockNode::BLOCK_TYPE_DEFAULT) {
BlockNode *block = p_block;
while (block) {
if (block->block_type == BlockNode::BLOCK_TYPE_CASE || block->block_type == BlockNode::BLOCK_TYPE_DEFAULT) {
return OK; return OK;
} }
block = block->parent_block;
}
} else if (tk.type == TK_CF_DISCARD) { } else if (tk.type == TK_CF_DISCARD) {
//check return type //check return type
@@ -4591,9 +4596,14 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui
} }
p_block->statements.push_back(flow); p_block->statements.push_back(flow);
if (p_block->block_type == BlockNode::BLOCK_TYPE_CASE || p_block->block_type == BlockNode::BLOCK_TYPE_DEFAULT) {
BlockNode *block = p_block;
while (block) {
if (block->block_type == BlockNode::BLOCK_TYPE_CASE || block->block_type == BlockNode::BLOCK_TYPE_DEFAULT) {
return OK; return OK;
} }
block = block->parent_block;
}
} else if (tk.type == TK_CF_CONTINUE) { } else if (tk.type == TK_CF_CONTINUE) {