diff --git a/Userland/Libraries/LibJS/Parser.cpp b/Userland/Libraries/LibJS/Parser.cpp index 3b312146dc..7018375c5e 100644 --- a/Userland/Libraries/LibJS/Parser.cpp +++ b/Userland/Libraries/LibJS/Parser.cpp @@ -923,9 +923,15 @@ NonnullRefPtr Parser::parse_unary_prefixed_expression() case TokenType::Void: consume(); return create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, UnaryOp::Void, parse_expression(precedence, associativity)); - case TokenType::Delete: + case TokenType::Delete: { consume(); - return create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, UnaryOp::Delete, parse_expression(precedence, associativity)); + auto rhs_start = position(); + auto rhs = parse_expression(precedence, associativity); + if (is(*rhs) && m_state.strict_mode) { + syntax_error("Delete of an unqualified identifier in strict mode.", rhs_start); + } + return create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, UnaryOp::Delete, move(rhs)); + } default: expected("primary expression"); consume();