Skip to content

Commit

Permalink
Fix regressions
Browse files Browse the repository at this point in the history
  • Loading branch information
jedel1043 committed May 18, 2023
1 parent 9a6f89b commit 5f4b890
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 7 deletions.
38 changes: 37 additions & 1 deletion boa_parser/src/parser/expression/left_hand_side/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ where

let token = cursor.peek(0, interner).or_abrupt()?;

let mut lhs = if token.kind() == &TokenKind::Punctuator(Punctuator::OpenParen) {
let lhs = if token.kind() == &TokenKind::Punctuator(Punctuator::OpenParen) {
let args =
Arguments::new(self.allow_yield, self.allow_await).parse(cursor, interner)?;
Call::new(self.first_member_expr, args).into()
Expand All @@ -85,6 +85,41 @@ where
"call expression",
));
};
CallExpressionTail::new(self.allow_yield, self.allow_await, lhs).parse(cursor, interner)
}
}

/// Parses the tail parts of a call expression (property access, sucessive call, array access).
#[derive(Debug)]
pub(super) struct CallExpressionTail {
allow_yield: AllowYield,
allow_await: AllowAwait,
call: ast::Expression,
}

impl CallExpressionTail {
/// Creates a new `CallExpression` parser.
pub(super) fn new<Y, A>(allow_yield: Y, allow_await: A, call: ast::Expression) -> Self
where
Y: Into<AllowYield>,
A: Into<AllowAwait>,
{
Self {
allow_yield: allow_yield.into(),
allow_await: allow_await.into(),
call,
}
}
}

impl<R> TokenParser<R> for CallExpressionTail
where
R: Read,
{
type Output = ast::Expression;

fn parse(self, cursor: &mut Cursor<R>, interner: &mut Interner) -> ParseResult<Self::Output> {
let mut lhs = self.call;

while let Some(tok) = cursor.peek(0, interner)? {
let token = tok.clone();
Expand Down Expand Up @@ -153,6 +188,7 @@ where
_ => break,
}
}

Ok(lhs)
}
}
22 changes: 16 additions & 6 deletions boa_parser/src/parser/expression/left_hand_side/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,21 @@ mod template;
use crate::{
lexer::{InputElement, TokenKind},
parser::{
expression::{left_hand_side::{
arguments::Arguments, call::CallExpression, member::MemberExpression,
optional::OptionalExpression,
}, AssignmentExpression},
expression::{
left_hand_side::{
arguments::Arguments,
call::{CallExpression, CallExpressionTail},
member::MemberExpression,
optional::OptionalExpression,
},
AssignmentExpression,
},
AllowAwait, AllowYield, Cursor, OrAbrupt, ParseResult, TokenParser,
},
Error,
};
use boa_ast::{
expression::{Identifier, SuperCall, ImportCall},
expression::{Identifier, ImportCall, SuperCall},
Expression, Keyword, Punctuator,
};
use boa_interner::Interner;
Expand Down Expand Up @@ -132,7 +137,12 @@ where
interner,
)?;

ImportCall::new(arg).into()
CallExpressionTail::new(
self.allow_yield,
self.allow_await,
ImportCall::new(arg).into(),
)
.parse(cursor, interner)?
} else {
let mut member =
MemberExpression::new(self.name, self.allow_yield, self.allow_await)
Expand Down

0 comments on commit 5f4b890

Please sign in to comment.