mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
LibJS: Make assignment to CallExpression a syntax error in strict mode
This commit is contained in:
parent
283ee678f7
commit
f4d0babd5d
Notes:
sideshowbarker
2024-07-19 02:02:44 +09:00
Author: https://github.com/linusg Commit: https://github.com/SerenityOS/serenity/commit/f4d0babd5dc Pull-request: https://github.com/SerenityOS/serenity/pull/3688
2 changed files with 6 additions and 0 deletions
|
@ -1129,6 +1129,8 @@ NonnullRefPtr<AssignmentExpression> Parser::parse_assignment_expression(Assignme
|
|||
auto name = static_cast<const Identifier&>(*lhs).string();
|
||||
if (name == "eval" || name == "arguments")
|
||||
syntax_error(String::formatted("'{}' cannot be assigned to in strict mode code", name));
|
||||
} else if (m_parser_state.m_strict_mode && lhs->is_call_expression()) {
|
||||
syntax_error("Cannot assign to function call");
|
||||
}
|
||||
return create_ast_node<AssignmentExpression>(assignment_op, move(lhs), parse_expression(min_precedence, associativity));
|
||||
}
|
||||
|
|
|
@ -5,6 +5,10 @@ test("assignment to function call", () => {
|
|||
}).toThrowWithMessage(ReferenceError, "Invalid left-hand side in assignment");
|
||||
});
|
||||
|
||||
test("assignment to function call in strict mode", () => {
|
||||
expect("'use strict'; foo() = 'foo'").not.toEval();
|
||||
});
|
||||
|
||||
test("assignment to inline function call", () => {
|
||||
expect(() => {
|
||||
(function () {})() = "foo";
|
||||
|
|
Loading…
Reference in a new issue