Skip to content

Commit

Permalink
Fixed parsing if statement without else block preceded by a newline
Browse files Browse the repository at this point in the history
  • Loading branch information
HalidOdat committed May 25, 2020
1 parent 4beadfc commit 1d99d6f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 8 deletions.
16 changes: 8 additions & 8 deletions boa/src/syntax/parser/statement/if_stm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ impl TokenParser for IfStatement {
let then_stm =
Statement::new(self.allow_yield, self.allow_await, self.allow_return).parse(cursor)?;

let else_stm = match cursor.next() {
Some(else_tok) if else_tok.kind == TokenKind::Keyword(Keyword::Else) => Some(
Statement::new(self.allow_yield, self.allow_await, self.allow_return)
.parse(cursor)?,
),
_ => {
cursor.back();
None
let else_stm = match cursor.peek(0) {
Some(else_tok) if else_tok.kind == TokenKind::Keyword(Keyword::Else) => {
cursor.next();
Some(
Statement::new(self.allow_yield, self.allow_await, self.allow_return)
.parse(cursor)?,
)
}
_ => None,
};

Ok(Node::if_node::<_, _, Node, _>(cond, then_stm, else_stm))
Expand Down
30 changes: 30 additions & 0 deletions boa/src/syntax/parser/statement/if_stm/tests.rs
Original file line number Diff line number Diff line change
@@ -1 +1,31 @@
use crate::syntax::{
ast::{
node::{Block, Node},
Const,
},
parser::tests::check_parser,
};

#[test]
fn if_without_else_block() {
check_parser(
"if (true) {}",
vec![Node::if_node::<_, _, Node, _>(
Const::from(true),
Block::from(Vec::new()),
None,
)],
);
}

#[test]
fn if_without_else_block_with_trailing_newline() {
check_parser(
"if (true) {}\n",
vec![Node::if_node::<_, _, Node, _>(
Const::from(true),
Block::from(Vec::new()),
None,
)],
);
}

0 comments on commit 1d99d6f

Please sign in to comment.