mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
glsl-in: Cull the body of do while if needed
This commit is contained in:
committed by
Dzmitry Malyshau
parent
322be0772e
commit
33c1daecee
@@ -292,6 +292,7 @@ impl<'source> ParsingContext<'source> {
|
||||
parser,
|
||||
&mut context,
|
||||
&mut body,
|
||||
&mut None,
|
||||
)?;
|
||||
|
||||
parser.add_function(context, name, result, body, meta);
|
||||
|
||||
@@ -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<usize>,
|
||||
) -> Result<Span> {
|
||||
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..)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user