diff --git a/src/front/glsl/parser/declarations.rs b/src/front/glsl/parser/declarations.rs index 4911d0734d..6a1cc2ddba 100644 --- a/src/front/glsl/parser/declarations.rs +++ b/src/front/glsl/parser/declarations.rs @@ -292,6 +292,7 @@ impl<'source> ParsingContext<'source> { parser, &mut context, &mut body, + &mut None, )?; parser.add_function(context, name, result, body, meta); diff --git a/src/front/glsl/parser/functions.rs b/src/front/glsl/parser/functions.rs index aec40357a6..6483db0521 100644 --- a/src/front/glsl/parser/functions.rs +++ b/src/front/glsl/parser/functions.rs @@ -325,7 +325,8 @@ impl<'source> ParsingContext<'source> { let mut loop_body = Block::new(); - self.parse_statement(parser, ctx, &mut loop_body, &mut None)?; + let mut terminator = None; + self.parse_statement(parser, ctx, &mut loop_body, &mut terminator)?; let mut stmt = ctx.stmt_ctx(); @@ -359,6 +360,10 @@ impl<'source> ParsingContext<'source> { crate::Span::default(), ); + if let Some(idx) = terminator { + loop_body.cull(idx..) + } + body.push( Statement::Loop { body: loop_body, @@ -481,7 +486,8 @@ impl<'source> ParsingContext<'source> { let mut block = Block::new(); ctx.push_scope(); - let meta = self.parse_compound_statement(meta, parser, ctx, &mut block)?; + let meta = + self.parse_compound_statement(meta, parser, ctx, &mut block, terminator)?; ctx.remove_current_scope(); @@ -511,8 +517,8 @@ impl<'source> ParsingContext<'source> { parser: &mut Parser, ctx: &mut Context, body: &mut Block, + terminator: &mut Option, ) -> Result { - let mut terminator = None; loop { if let Some(Token { meta: brace_meta, .. @@ -522,14 +528,14 @@ impl<'source> ParsingContext<'source> { break; } - let stmt = self.parse_statement(parser, ctx, body, &mut terminator)?; + let stmt = self.parse_statement(parser, ctx, body, terminator)?; if let Some(stmt_meta) = stmt { meta.subsume(stmt_meta); } } - if let Some(idx) = terminator { + if let Some(idx) = *terminator { body.cull(idx..) }