[webkit-changes] [WebKit/WebKit] 26302c: [JSC] emitReturn() should load `this` value from a...
Commit Queue
noreply at github.com
Tue Feb 27 22:40:03 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 26302cf8d239273b6b659e4e746829b8322a83b5
https://github.com/WebKit/WebKit/commit/26302cf8d239273b6b659e4e746829b8322a83b5
Author: Alexey Shvayka <ashvayka at apple.com>
Date: 2024-02-27 (Tue, 27 Feb 2024)
Changed paths:
A JSTests/stress/regress-268864.js
M JSTests/test262/expectations.yaml
M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
M Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
Log Message:
-----------
[JSC] emitReturn() should load `this` value from arrow function lexical environment prior to TDZ check
https://bugs.webkit.org/show_bug.cgi?id=268864
<rdar://problem/122430056>
Reviewed by Justin Michaud.
This change:
1) Hoists first TDZ check of emitReturn() up to FunctionNode::emitBytecode(), and refactors it
leveraging semantically equivalent ensureThis(), which makes automatically-inserted return
equivalent to `return this`.
I confirmed this to be the only call site of emitReturn() with unchecked thisRegister() as `src`.
This is non-observable.
2) Adds missing emitLoadThisFromArrowFunctionLexicalEnvironment() before second TDZ check, and
refactors it using ensureThis().
This is an observable change that prevents ReferenceError being thrown on totally valid and
rather sane code of calling super() inside an arrow function before explicit `return`.
Aligns JSC with the spec [1], V8, and SpiderMonkey.
3) Since when `from == ReturnFrom::Finally` is true, `src` is always completionValueRegister(),
meaning the check ^^ is useless. Removes it altogether with BytecodeGenerator::ReturnFrom.
[1]: https://tc39.es/ecma262/#sec-ecmascript-function-objects-construct-argumentslist-newtarget (step 12)
* JSTests/stress/regress-268864.js: Added.
* JSTests/test262/expectations.yaml: Mark 6 tests as passing.
* Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::emitReturn):
(JSC::BytecodeGenerator::emitFinallyCompletion):
* Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:
* Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:
(JSC::FunctionNode::emitBytecode):
Canonical link: https://commits.webkit.org/275425@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list