Skip to content

Commit b903c32

Browse files
authored
Merge pull request #112 from oven-sh/promise-reaction-job-cpp
Re-apply 300670@main
2 parents 6d0f3aa + 51420ba commit b903c32

26 files changed

+355
-55
lines changed

JSTests/stress/destructuring-assignment-require-object-coercible-symbol-private.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function shouldThrow(testFunction, expectedError) {
2222

2323
{
2424
const destructToPrivateName = $vm.createBuiltin(
25-
"(function (value) { var { @context } = value; })",
25+
"(function (value) { var { @Number } = value; })",
2626
);
2727
shouldThrow(() => {
2828
destructToPrivateName(null);

Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2084,6 +2084,7 @@
20842084
E3A38EFD2E754D3B00D53DDD /* B3BulkMemoryValue.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A38EFB2E754D3B00D53DDD /* B3BulkMemoryValue.h */; };
20852085
E3A421431D6F58930007C617 /* PreciseJumpTargetsInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A421421D6F588F0007C617 /* PreciseJumpTargetsInlines.h */; };
20862086
E3AC277721FDB4940024452C /* RegExpCachedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F75EFC151C062F007C9BA3 /* RegExpCachedResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
2087+
E3AEF17D2E890C0C00D493ED /* JSPromiseReaction.h in Headers */ = {isa = PBXBuildFile; fileRef = E3AEF17A2E890C0C00D493ED /* JSPromiseReaction.h */; };
20872088
E3B2329D2DF7A0CC00ECC447 /* ConcatKeyAtomStringCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B2329A2DF7A0BE00ECC447 /* ConcatKeyAtomStringCache.h */; };
20882089
E3B2329E2DF7A0D300ECC447 /* ConcatKeyAtomStringCacheInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B2329C2DF7A0BE00ECC447 /* ConcatKeyAtomStringCacheInlines.h */; };
20892090
E3B24859291224540029C08A /* BufferMemoryHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B24857291224530029C08A /* BufferMemoryHandle.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5923,6 +5924,8 @@
59235924
E3A38EFB2E754D3B00D53DDD /* B3BulkMemoryValue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = B3BulkMemoryValue.h; path = b3/B3BulkMemoryValue.h; sourceTree = "<group>"; };
59245925
E3A38EFC2E754D3B00D53DDD /* B3BulkMemoryValue.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = B3BulkMemoryValue.cpp; path = b3/B3BulkMemoryValue.cpp; sourceTree = "<group>"; };
59255926
E3A421421D6F588F0007C617 /* PreciseJumpTargetsInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreciseJumpTargetsInlines.h; sourceTree = "<group>"; };
5927+
E3AEF17A2E890C0C00D493ED /* JSPromiseReaction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSPromiseReaction.h; sourceTree = "<group>"; };
5928+
E3AEF17B2E890C0C00D493ED /* JSPromiseReaction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSPromiseReaction.cpp; sourceTree = "<group>"; };
59265929
E3B2329A2DF7A0BE00ECC447 /* ConcatKeyAtomStringCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ConcatKeyAtomStringCache.h; sourceTree = "<group>"; };
59275930
E3B2329B2DF7A0BE00ECC447 /* ConcatKeyAtomStringCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ConcatKeyAtomStringCache.cpp; sourceTree = "<group>"; };
59285931
E3B2329C2DF7A0BE00ECC447 /* ConcatKeyAtomStringCacheInlines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ConcatKeyAtomStringCacheInlines.h; sourceTree = "<group>"; };
@@ -8758,6 +8761,8 @@
87588761
7C184E2117BEE240007CB63A /* JSPromiseConstructor.h */,
87598762
7C184E1C17BEE22E007CB63A /* JSPromisePrototype.cpp */,
87608763
7C184E1D17BEE22E007CB63A /* JSPromisePrototype.h */,
8764+
E3AEF17B2E890C0C00D493ED /* JSPromiseReaction.cpp */,
8765+
E3AEF17A2E890C0C00D493ED /* JSPromiseReaction.h */,
87618766
2A05ABD31961DF2400341750 /* JSPropertyNameEnumerator.cpp */,
87628767
2A05ABD41961DF2400341750 /* JSPropertyNameEnumerator.h */,
87638768
276B387A2A71D11700252F4E /* JSPropertyNameEnumeratorInlines.h */,
@@ -11653,6 +11658,7 @@
1165311658
7C184E1B17BEDBD3007CB63A /* JSPromise.h in Headers */,
1165411659
7C184E2317BEE240007CB63A /* JSPromiseConstructor.h in Headers */,
1165511660
7C184E1F17BEE22E007CB63A /* JSPromisePrototype.h in Headers */,
11661+
E3AEF17D2E890C0C00D493ED /* JSPromiseReaction.h in Headers */,
1165611662
2A05ABD61961DF2400341750 /* JSPropertyNameEnumerator.h in Headers */,
1165711663
276B387D2A71D11800252F4E /* JSPropertyNameEnumeratorInlines.h in Headers */,
1165811664
E39E578329380FC6000D0D3B /* JSRawJSONObject.h in Headers */,
@@ -12275,7 +12281,6 @@
1227512281
527E6CEC2772B9CB005E0782 /* WasmOSREntryPlan.h in Headers */,
1227612282
53F40E8D1D5901F20099A1B6 /* WasmParser.h in Headers */,
1227712283
531374BD1D5CE67600AF7A0B /* WasmPlan.h in Headers */,
12278-
E37986372E6FA60E008B5EA6 /* WasmProfileCollection.h in Headers */,
1227912284
FFD49E6F2E276CA10083E383 /* WasmQueryHandler.h in Headers */,
1228012285
E3A0531C21342B680022EC14 /* WasmSectionParser.h in Headers */,
1228112286
53F40E851D58F9770099A1B6 /* WasmSections.h in Headers */,

Source/JavaScriptCore/Sources.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,7 @@ runtime/JSPromise.cpp
941941
runtime/JSPromiseAllContext.cpp
942942
runtime/JSPromiseConstructor.cpp
943943
runtime/JSPromisePrototype.cpp
944+
runtime/JSPromiseReaction.cpp
944945
runtime/JSPropertyNameEnumerator.cpp
945946
runtime/JSRawJSONObject.cpp
946947
runtime/JSRegExpStringIterator.cpp

Source/JavaScriptCore/builtins/BuiltinNames.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ namespace JSC {
5757
macro(iteratedObject) \
5858
macro(iteratedString) \
5959
macro(promise) \
60-
macro(promiseOrCapability) \
6160
macro(Object) \
6261
macro(Number) \
6362
macro(Array) \
@@ -78,8 +77,6 @@ namespace JSC {
7877
macro(homeObject) \
7978
macro(enqueueJob) \
8079
macro(hostPromiseRejectionTracker) \
81-
macro(onFulfilled) \
82-
macro(onRejected) \
8380
macro(push) \
8481
macro(repeatCharacter) \
8582
macro(starDefault) \
@@ -88,7 +85,6 @@ namespace JSC {
8885
macro(values) \
8986
macro(set) \
9087
macro(clear) \
91-
macro(context) \
9288
macro(defer) \
9389
macro(delete) \
9490
macro(size) \
@@ -195,7 +191,6 @@ namespace JSC {
195191
macro(hasOwnPropertyFunction) \
196192
macro(createPrivateSymbol) \
197193
macro(entries) \
198-
macro(outOfLineReactionCounts) \
199194
macro(emptyPropertyNameEnumerator) \
200195
macro(sentinelString) \
201196
macro(createRemoteFunction) \
@@ -217,6 +212,7 @@ namespace JSC {
217212
macro(wrapForValidIteratorCreate) \
218213
macro(asyncFromSyncIteratorCreate) \
219214
macro(promiseAllContextCreate) \
215+
macro(promiseReactionCreate) \
220216
macro(regExpStringIteratorCreate) \
221217
macro(iteratorHelperCreate) \
222218
macro(syncIterator) \

Source/JavaScriptCore/builtins/PromiseOperations.js

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -26,31 +26,6 @@
2626

2727
// @internal
2828

29-
@linkTimeConstant
30-
function pushNewPromiseReaction(thenable, existingReactions, promiseOrCapability, onFulfilled, onRejected, context)
31-
{
32-
"use strict";
33-
var asyncContext = @getInternalField(@asyncContext, 0);
34-
if (!existingReactions) {
35-
existingReactions = {
36-
@promiseOrCapability: promiseOrCapability,
37-
@onFulfilled: onFulfilled,
38-
@onRejected: onRejected,
39-
@context: asyncContext ? [context, asyncContext] : context,
40-
// This is 4x the number of out of line reactions (promise, fulfill callback, reject callback, context).
41-
@outOfLineReactionCounts: 0,
42-
};
43-
@putPromiseInternalField(thenable, @promiseFieldReactionsOrResult, existingReactions);
44-
} else {
45-
var outOfLineReactionCounts = existingReactions.@outOfLineReactionCounts;
46-
@putByValDirect(existingReactions, outOfLineReactionCounts++, promiseOrCapability);
47-
@putByValDirect(existingReactions, outOfLineReactionCounts++, onFulfilled);
48-
@putByValDirect(existingReactions, outOfLineReactionCounts++, onRejected);
49-
@putByValDirect(existingReactions, outOfLineReactionCounts++, asyncContext ? [context, asyncContext] : context);
50-
existingReactions.@outOfLineReactionCounts = outOfLineReactionCounts;
51-
}
52-
}
53-
5429
@linkTimeConstant
5530
function newPromiseCapabilitySlow(constructor)
5631
{
@@ -160,18 +135,27 @@ function triggerPromiseReactions(state, reactions, argument)
160135
if (!reactions)
161136
return;
162137

163-
var isResolved = state === @promiseStateFulfilled;
164-
var handler = isResolved ? reactions.@onFulfilled : reactions.@onRejected;
138+
// Reverse the order of singly-linked-list.
139+
var previous = @undefined;
140+
var current = reactions;
141+
while (current) {
142+
var next = @getPromiseReactionInternalField(current, @promiseReactionFieldNext);
143+
@putPromiseReactionInternalField(current, @promiseReactionFieldNext, previous);
144+
previous = current;
145+
current = next;
146+
}
147+
reactions = previous;
165148

166-
@enqueueJob(@promiseReactionJob, reactions.@promiseOrCapability, handler, argument, handler ? reactions.@context : state);
149+
var isResolved = state === @promiseStateFulfilled;
167150

168-
for (var i = 0, count = reactions.@outOfLineReactionCounts; i < count; i += 4) {
169-
var promise = reactions[i];
170-
var handler = isResolved ? reactions[i + 1] : reactions[i + 2];
171-
var context = reactions[i + 3];
151+
current = reactions;
152+
while (current) {
153+
var promise = @getPromiseReactionInternalField(current, @promiseReactionFieldPromise);
154+
var handler = isResolved ? @getPromiseReactionInternalField(current, @promiseReactionFieldOnFulfilled) : @getPromiseReactionInternalField(current, @promiseReactionFieldOnRejected);
155+
var context = @getPromiseReactionInternalField(current, @promiseReactionFieldContext);
156+
current = @getPromiseReactionInternalField(current, @promiseReactionFieldNext);
172157
@enqueueJob(@promiseReactionJob, promise, handler, argument, handler ? context : state);
173158
}
174-
@assert(i === count);
175159
}
176160

177161
@linkTimeConstant
@@ -570,7 +554,7 @@ function promiseResolveThenableJobFast(thenable, promiseToResolve)
570554
var state = flags & @promiseStateMask;
571555
var reactionsOrResult = @getPromiseInternalField(thenable, @promiseFieldReactionsOrResult);
572556
if (state === @promiseStatePending)
573-
@pushNewPromiseReaction(thenable, reactionsOrResult, promiseToResolve, @undefined, @undefined);
557+
@putPromiseInternalField(thenable, @promiseFieldReactionsOrResult, @promiseReactionCreate(promiseToResolve, @undefined, @undefined, @undefined, reactionsOrResult));
574558
else {
575559
if (state === @promiseStateRejected && !(flags & @promiseFlagsIsHandled))
576560
@hostPromiseRejectionTracker(thenable, @promiseRejectionHandle);
@@ -602,9 +586,12 @@ function promiseResolveThenableJobWithoutPromiseFast(thenable, onFulfilled, onRe
602586
var flags = @getPromiseInternalField(thenable, @promiseFieldFlags);
603587
var state = flags & @promiseStateMask;
604588
var reactionsOrResult = @getPromiseInternalField(thenable, @promiseFieldReactionsOrResult);
605-
if (state === @promiseStatePending)
606-
@pushNewPromiseReaction(thenable, reactionsOrResult, @undefined, onFulfilled, onRejected, context);
607-
else {
589+
if (state === @promiseStatePending) {
590+
var asyncContext = @getInternalField(@asyncContext, 0);
591+
if (asyncContext)
592+
context = [context, asyncContext];
593+
@putPromiseInternalField(thenable, @promiseFieldReactionsOrResult, @promiseReactionCreate(@undefined, onFulfilled, onRejected, context, reactionsOrResult));
594+
} else {
608595
if (state === @promiseStateRejected) {
609596
if (!(flags & @promiseFlagsIsHandled))
610597
@hostPromiseRejectionTracker(thenable, @promiseRejectionHandle);
@@ -693,6 +680,7 @@ function promiseEmptyOnRejected(argument)
693680
}
694681

695682
@linkTimeConstant
683+
@alwaysInline
696684
function performPromiseThen(promise, onFulfilled, onRejected, promiseOrCapability, context)
697685
{
698686
"use strict";
@@ -706,9 +694,12 @@ function performPromiseThen(promise, onFulfilled, onRejected, promiseOrCapabilit
706694
var reactionsOrResult = @getPromiseInternalField(promise, @promiseFieldReactionsOrResult);
707695
var flags = @getPromiseInternalField(promise, @promiseFieldFlags);
708696
var state = flags & @promiseStateMask;
709-
if (state === @promiseStatePending)
710-
@pushNewPromiseReaction(promise, reactionsOrResult, promiseOrCapability, onFulfilled, onRejected, context);
711-
else {
697+
if (state === @promiseStatePending) {
698+
var asyncContext = @getInternalField(@asyncContext, 0);
699+
if (asyncContext)
700+
context = [context, asyncContext];
701+
@putPromiseInternalField(promise, @promiseFieldReactionsOrResult, @promiseReactionCreate(promiseOrCapability, onFulfilled, onRejected, context, reactionsOrResult));
702+
} else {
712703
var handler;
713704

714705
if (state === @promiseStateRejected) {

Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ enum class LinkTimeConstant : int32_t;
6464
macro(getProxyInternalField) \
6565
macro(getWrapForValidIteratorInternalField) \
6666
macro(getPromiseAllContextInternalField) \
67+
macro(getPromiseReactionInternalField) \
6768
macro(getDisposableStackInternalField) \
6869
macro(idWithProfile) \
6970
macro(isAsyncDisposableStack) \
@@ -79,6 +80,7 @@ enum class LinkTimeConstant : int32_t;
7980
macro(isAsyncGenerator) \
8081
macro(isPromise) \
8182
macro(isPromiseAllContext) \
83+
macro(isPromiseReaction) \
8284
macro(isRegExpObject) \
8385
macro(isMap) \
8486
macro(isSet) \
@@ -113,6 +115,7 @@ enum class LinkTimeConstant : int32_t;
113115
macro(putSetIteratorInternalField) \
114116
macro(putRegExpStringIteratorInternalField) \
115117
macro(putPromiseAllContextInternalField) \
118+
macro(putPromiseReactionInternalField) \
116119
macro(putDisposableStackInternalField) \
117120
macro(superSamplerBegin) \
118121
macro(superSamplerEnd) \
@@ -208,6 +211,11 @@ enum class LinkTimeConstant : int32_t;
208211
macro(promiseAllContextFieldValues) \
209212
macro(promiseAllContextFieldRemainingElementsCount) \
210213
macro(promiseAllContextFieldIndex) \
214+
macro(promiseReactionFieldPromise) \
215+
macro(promiseReactionFieldOnFulfilled) \
216+
macro(promiseReactionFieldOnRejected) \
217+
macro(promiseReactionFieldContext) \
218+
macro(promiseReactionFieldNext) \
211219
macro(regExpStringIteratorFieldRegExp) \
212220
macro(regExpStringIteratorFieldString) \
213221
macro(regExpStringIteratorFieldGlobal) \

Source/JavaScriptCore/bytecode/LinkTimeConstant.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ class JSGlobalObject;
148148
v(wrapForValidIteratorCreate, nullptr) \
149149
v(asyncFromSyncIteratorCreate, nullptr) \
150150
v(promiseAllContextCreate, nullptr) \
151+
v(promiseReactionCreate, nullptr) \
151152
v(regExpStringIteratorCreate, nullptr) \
152153
v(iteratorHelperCreate, nullptr) \
153154
v(ReferenceError, nullptr) \

Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,7 @@ namespace JSC {
930930
RegisterID* emitIsJSArray(RegisterID* dst, RegisterID* src) { return emitIsCellWithType(dst, src, ArrayType); }
931931
RegisterID* emitIsPromise(RegisterID* dst, RegisterID* src) { return emitIsCellWithType(dst, src, JSPromiseType); }
932932
RegisterID* emitIsPromiseAllContext(RegisterID* dst, RegisterID* src) { return emitIsCellWithType(dst, src, JSPromiseAllContextType); }
933+
RegisterID* emitIsPromiseReaction(RegisterID* dst, RegisterID* src) { return emitIsCellWithType(dst, src, JSPromiseReactionType); }
933934
RegisterID* emitIsProxyObject(RegisterID* dst, RegisterID* src) { return emitIsCellWithType(dst, src, ProxyObjectType); }
934935
RegisterID* emitIsRegExpObject(RegisterID* dst, RegisterID* src) { return emitIsCellWithType(dst, src, RegExpObjectType); }
935936
RegisterID* emitIsMap(RegisterID* dst, RegisterID* src) { return emitIsCellWithType(dst, src, JSMapType); }

Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#include "JSMapIterator.h"
4545
#include "JSPromise.h"
4646
#include "JSPromiseAllContext.h"
47+
#include "JSPromiseReaction.h"
4748
#include "JSRegExpStringIterator.h"
4849
#include "JSSetIterator.h"
4950
#include "JSStringIterator.h"
@@ -1727,6 +1728,23 @@ static JSPromiseAllContext::Field promiseAllContextInternalFieldIndex(BytecodeIn
17271728
return JSPromiseAllContext::Field::Promise;
17281729
}
17291730

1731+
static JSPromiseReaction::Field promiseReactionInternalFieldIndex(BytecodeIntrinsicNode* node)
1732+
{
1733+
ASSERT(node->entry().type() == BytecodeIntrinsicRegistry::Type::Emitter);
1734+
if (node->entry().emitter() == &BytecodeIntrinsicNode::emit_intrinsic_promiseReactionFieldPromise)
1735+
return JSPromiseReaction::Field::Promise;
1736+
if (node->entry().emitter() == &BytecodeIntrinsicNode::emit_intrinsic_promiseReactionFieldOnFulfilled)
1737+
return JSPromiseReaction::Field::OnFulfilled;
1738+
if (node->entry().emitter() == &BytecodeIntrinsicNode::emit_intrinsic_promiseReactionFieldOnRejected)
1739+
return JSPromiseReaction::Field::OnRejected;
1740+
if (node->entry().emitter() == &BytecodeIntrinsicNode::emit_intrinsic_promiseReactionFieldContext)
1741+
return JSPromiseReaction::Field::Context;
1742+
if (node->entry().emitter() == &BytecodeIntrinsicNode::emit_intrinsic_promiseReactionFieldNext)
1743+
return JSPromiseReaction::Field::Next;
1744+
RELEASE_ASSERT_NOT_REACHED();
1745+
return JSPromiseReaction::Field::Promise;
1746+
}
1747+
17301748
static JSDisposableStack::Field disposableStackInternalFieldIndex(BytecodeIntrinsicNode* node)
17311749
{
17321750
ASSERT(node->entry().type() == BytecodeIntrinsicRegistry::Type::Emitter);
@@ -1935,6 +1953,19 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_getPromiseAllContextInternalFi
19351953
return generator.emitGetInternalField(generator.finalDestination(dst), base.get(), index);
19361954
}
19371955

1956+
RegisterID* BytecodeIntrinsicNode::emit_intrinsic_getPromiseReactionInternalField(BytecodeGenerator& generator, RegisterID* dst)
1957+
{
1958+
ArgumentListNode* node = m_args->m_listNode;
1959+
RefPtr<RegisterID> base = generator.emitNode(node);
1960+
node = node->m_next;
1961+
RELEASE_ASSERT(node->m_expr->isBytecodeIntrinsicNode());
1962+
unsigned index = static_cast<unsigned>(promiseReactionInternalFieldIndex(static_cast<BytecodeIntrinsicNode*>(node->m_expr)));
1963+
ASSERT(index < JSPromiseReaction::numberOfInternalFields);
1964+
ASSERT(!node->m_next);
1965+
1966+
return generator.emitGetInternalField(generator.finalDestination(dst), base.get(), index);
1967+
}
1968+
19381969
RegisterID* BytecodeIntrinsicNode::emit_intrinsic_getDisposableStackInternalField(BytecodeGenerator& generator, RegisterID* dst)
19391970
{
19401971
ArgumentListNode* node = m_args->m_listNode;
@@ -2247,6 +2278,22 @@ RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putPromiseAllContextInternalFi
22472278
return generator.move(dst, generator.emitPutInternalField(base.get(), index, value.get()));
22482279
}
22492280

2281+
RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putPromiseReactionInternalField(BytecodeGenerator& generator, RegisterID* dst)
2282+
{
2283+
ArgumentListNode* node = m_args->m_listNode;
2284+
RefPtr<RegisterID> base = generator.emitNode(node);
2285+
node = node->m_next;
2286+
RELEASE_ASSERT(node->m_expr->isBytecodeIntrinsicNode());
2287+
unsigned index = static_cast<unsigned>(promiseReactionInternalFieldIndex(static_cast<BytecodeIntrinsicNode*>(node->m_expr)));
2288+
ASSERT(index < JSPromiseReaction::numberOfInternalFields);
2289+
node = node->m_next;
2290+
RefPtr<RegisterID> value = generator.emitNode(node);
2291+
2292+
ASSERT(!node->m_next);
2293+
2294+
return generator.move(dst, generator.emitPutInternalField(base.get(), index, value.get()));
2295+
}
2296+
22502297
RegisterID* BytecodeIntrinsicNode::emit_intrinsic_superSamplerBegin(BytecodeGenerator& generator, RegisterID* dst)
22512298
{
22522299
ASSERT(!m_args->m_listNode);
@@ -2431,6 +2478,7 @@ CREATE_INTRINSIC_FOR_BRAND_CHECK(isIteratorHelper, IsIteratorHelper)
24312478
CREATE_INTRINSIC_FOR_BRAND_CHECK(isAsyncGenerator, IsAsyncGenerator)
24322479
CREATE_INTRINSIC_FOR_BRAND_CHECK(isPromise, IsPromise)
24332480
CREATE_INTRINSIC_FOR_BRAND_CHECK(isPromiseAllContext, IsPromiseAllContext)
2481+
CREATE_INTRINSIC_FOR_BRAND_CHECK(isPromiseReaction, IsPromiseReaction)
24342482
CREATE_INTRINSIC_FOR_BRAND_CHECK(isRegExpObject, IsRegExpObject)
24352483
CREATE_INTRINSIC_FOR_BRAND_CHECK(isMap, IsMap)
24362484
CREATE_INTRINSIC_FOR_BRAND_CHECK(isSet, IsSet)

0 commit comments

Comments
 (0)