mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-13 04:21:54 +00:00
LibJS: Emit ThrowIfTDZ for identifiers used in assignment expressions
Some checks are pending
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Some checks are pending
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Error about not-initialized `x` variable access should be thrown for: ```js function foo() { x = 69; let x; } foo(); ``` Progress on test262: ``` Diff Tests: test/staging/sm/expressions/optional-chain-tdz.js ❌ -> ✅ test/staging/sm/expressions/short-circuit-compound-assignment-tdz.js ❌ -> ✅ ``` Fixes https://github.com/LadybirdBrowser/ladybird/issues/4587
This commit is contained in:
parent
db480b1f0c
commit
b3713db4ab
Notes:
github-actions[bot]
2025-05-06 10:07:25 +00:00
Author: https://github.com/kalenikaliaksandr
Commit: b3713db4ab
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4616
Reviewed-by: https://github.com/awesomekling
2 changed files with 11 additions and 4 deletions
|
@ -630,6 +630,13 @@ Bytecode::CodeGenerationErrorOr<Optional<ScopedOperand>> AssignmentExpression::g
|
|||
// e. Perform ? PutValue(lref, rval).
|
||||
if (is<Identifier>(*lhs)) {
|
||||
auto& identifier = static_cast<Identifier const&>(*lhs);
|
||||
if (identifier.is_local()) {
|
||||
auto is_initialized = generator.is_local_initialized(identifier.local_index());
|
||||
auto is_lexically_declared = generator.is_local_lexically_declared(identifier.local_index());
|
||||
if (is_lexically_declared && !is_initialized) {
|
||||
generator.emit<Bytecode::Op::ThrowIfTDZ>(generator.local(identifier.local_index()));
|
||||
}
|
||||
}
|
||||
generator.emit_set_variable(identifier, rval);
|
||||
} else if (is<MemberExpression>(*lhs)) {
|
||||
auto& expression = static_cast<MemberExpression const&>(*lhs);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue