diff --git a/src/dreammaker/ast.rs b/src/dreammaker/ast.rs index 3bf3296f..1b680ac8 100644 --- a/src/dreammaker/ast.rs +++ b/src/dreammaker/ast.rs @@ -1029,7 +1029,7 @@ pub enum Statement { }, ForLoop { init: Option>, - test: Option, + test: Option>, inc: Option>, block: Block, }, @@ -1062,8 +1062,8 @@ pub enum Statement { block: Block, }, Switch { - input: Expression, - cases: Vec<(Spanned>, Block)>, + input: Box, + cases: Box<[(Spanned>, Block)]>, default: Option, }, TryCatch { diff --git a/src/dreammaker/parser.rs b/src/dreammaker/parser.rs index a7ff4a59..a063cb04 100644 --- a/src/dreammaker/parser.rs +++ b/src/dreammaker/parser.rs @@ -1254,7 +1254,7 @@ impl<'ctx, 'an, 'inp> Parser<'ctx, 'an, 'inp> { require!(self.exact(Token::Punct(Punctuation::RParen))); spanned(Statement::ForLoop { init: init.map(Box::new), - test, + test: test.map(Box::new), inc: inc.map(Box::new), block: require!(self.block(&LoopContext::ForLoop)), }) @@ -1385,7 +1385,11 @@ impl<'ctx, 'an, 'inp> Parser<'ctx, 'an, 'inp> { None }; require!(self.exact(Token::Punct(Punctuation::RBrace))); - spanned(Statement::Switch { input: expr, cases, default }) + spanned(Statement::Switch { + input: Box::new(expr), + cases: cases.into_boxed_slice(), + default, + }) } else if let Some(()) = self.exact_ident("try")? { let try_block = require!(self.block(loop_ctx)); self.skip_phantom_semicolons()?;