Changeset 260321 in webkit
- Timestamp:
- Apr 18, 2020 2:13:58 PM (4 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r260314 r260321 1 2020-04-18 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Replace DFG NewPromise with NewInternalFieldObject 4 https://bugs.webkit.org/show_bug.cgi?id=210687 5 6 Reviewed by Saam Barati. 7 8 The feature of DFG::NewPromise can be implemented completely with DFG::NewInternalFieldObject. This reduces code duplication, and furthermore, 9 this offers Object Allocation Sinking support for free. This patch replaces DFG::NewPromise with DFG::NewInternalFieldObject and remove DFG::NewPromise 10 completely. 11 12 * dfg/DFGAbstractInterpreterInlines.h: 13 (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): 14 * dfg/DFGByteCodeParser.cpp: 15 (JSC::DFG::ByteCodeParser::parseBlock): 16 * dfg/DFGClobberize.h: 17 (JSC::DFG::clobberize): 18 * dfg/DFGClobbersExitState.cpp: 19 (JSC::DFG::clobbersExitState): 20 * dfg/DFGConstantFoldingPhase.cpp: 21 (JSC::DFG::ConstantFoldingPhase::foldConstants): 22 * dfg/DFGDoesGC.cpp: 23 (JSC::DFG::doesGC): 24 * dfg/DFGFixupPhase.cpp: 25 (JSC::DFG::FixupPhase::fixupNode): 26 * dfg/DFGNode.h: 27 (JSC::DFG::Node::convertToNewInternalFieldObject): 28 (JSC::DFG::Node::convertToNewInternalFieldObjectWithInlineFields): 29 (JSC::DFG::Node::hasIsInternalPromise): 30 (JSC::DFG::Node::hasStructure): 31 (JSC::DFG::Node::convertToNewPromise): Deleted. 32 * dfg/DFGNodeType.h: 33 * dfg/DFGObjectAllocationSinkingPhase.cpp: 34 * dfg/DFGPredictionPropagationPhase.cpp: 35 * dfg/DFGSafeToExecute.h: 36 (JSC::DFG::safeToExecute): 37 * dfg/DFGSpeculativeJIT.cpp: 38 (JSC::DFG::SpeculativeJIT::compileNewInternalFieldObject): 39 (JSC::DFG::SpeculativeJIT::compileNewPromise): Deleted. 40 * dfg/DFGSpeculativeJIT.h: 41 * dfg/DFGSpeculativeJIT32_64.cpp: 42 (JSC::DFG::SpeculativeJIT::compile): 43 * dfg/DFGSpeculativeJIT64.cpp: 44 (JSC::DFG::SpeculativeJIT::compile): 45 * dfg/DFGStoreBarrierInsertionPhase.cpp: 46 * ftl/FTLCapabilities.cpp: 47 (JSC::FTL::canCompile): 48 * ftl/FTLLowerDFGToB3.cpp: 49 (JSC::FTL::DFG::LowerDFGToB3::compileNode): 50 (JSC::FTL::DFG::LowerDFGToB3::compileNewInternalFieldObject): 51 (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewInternalFieldObject): 52 (JSC::FTL::DFG::LowerDFGToB3::compileNewPromise): Deleted. 53 * ftl/FTLOperations.cpp: 54 (JSC::FTL::operationPopulateObjectInOSR): 55 (JSC::FTL::operationMaterializeObjectInOSR): 56 * runtime/JSInternalPromise.cpp: 57 (JSC::JSInternalPromise::createWithInitialValues): 58 * runtime/JSInternalPromise.h: 59 * runtime/JSPromise.cpp: 60 (JSC::JSPromise::createWithInitialValues): 61 (JSC::JSPromise::finishCreation): 62 (JSC::JSPromise::status const): 63 (JSC::JSPromise::result const): 64 (JSC::JSPromise::flags const): 65 (JSC::JSPromise::resolve): 66 (JSC::JSPromise::reject): 67 (JSC::JSPromise::rejectAsHandled): 68 * runtime/JSPromise.h: 69 (JSC::JSPromise::initialValues): 70 (JSC::JSPromise::internalField const): 71 (JSC::JSPromise::internalField): 72 1 73 2020-04-18 Yusuke Suzuki <ysuzuki@apple.com> 2 74 -
trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
r260181 r260321 2859 2859 } 2860 2860 2861 case NewPromise:2862 2861 case NewGenerator: 2863 2862 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r260297 r260321 5241 5241 if (promiseConstructor) { 5242 5242 addToGraph(Phantom, callee); 5243 set(VirtualRegister(bytecode.m_dst), addToGraph(NewPromise, OpInfo(m_graph.registerStructure(bytecode.m_isInternalPromise ? globalObject->internalPromiseStructure() : globalObject->promiseStructure())), OpInfo(bytecode.m_isInternalPromise))); 5243 Node* promise = addToGraph(NewInternalFieldObject, OpInfo(m_graph.registerStructure(bytecode.m_isInternalPromise ? globalObject->internalPromiseStructure() : globalObject->promiseStructure()))); 5244 set(VirtualRegister(bytecode.m_dst), promise); 5244 5245 alreadyEmitted = true; 5245 5246 } … … 5274 5275 m_graph.watchpoints().addLazily(rareData->allocationProfileWatchpointSet()); 5275 5276 5276 set(VirtualRegister(bytecode.m_dst), addToGraph(NewPromise, OpInfo(m_graph.registerStructure(structure)), OpInfo(bytecode.m_isInternalPromise))); 5277 Node* promise = addToGraph(NewInternalFieldObject, OpInfo(m_graph.registerStructure(structure))); 5278 set(VirtualRegister(bytecode.m_dst), promise); 5277 5279 // The callee is still live up to this point. 5278 5280 addToGraph(Phantom, callee); … … 5309 5311 auto bytecode = currentInstruction->as<OpNewPromise>(); 5310 5312 JSGlobalObject* globalObject = m_graph.globalObjectFor(currentNodeOrigin().semantic); 5311 set(bytecode.m_dst, addToGraph(NewPromise, OpInfo(m_graph.registerStructure(bytecode.m_isInternalPromise ? globalObject->internalPromiseStructure() : globalObject->promiseStructure())), OpInfo(bytecode.m_isInternalPromise))); 5313 Node* promise = addToGraph(NewInternalFieldObject, OpInfo(m_graph.registerStructure(bytecode.m_isInternalPromise ? globalObject->internalPromiseStructure() : globalObject->promiseStructure()))); 5314 set(bytecode.m_dst, promise); 5312 5315 NEXT_OPCODE(op_new_promise); 5313 5316 } -
trunk/Source/JavaScriptCore/dfg/DFGClobberize.h
r260181 r260321 1603 1603 1604 1604 case NewObject: 1605 case NewPromise:1606 1605 case NewGenerator: 1607 1606 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/dfg/DFGClobbersExitState.cpp
r260181 r260321 58 58 case Arrayify: 59 59 case NewObject: 60 case NewPromise:61 60 case NewGenerator: 62 61 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp
r260181 r260321 832 832 if (JSValue base = m_state.forNode(node->child1()).m_value) { 833 833 if (base == (node->isInternalPromise() ? globalObject->internalPromiseConstructor() : globalObject->promiseConstructor())) { 834 node->convertToNew Promise(m_graph.registerStructure(node->isInternalPromise() ? globalObject->internalPromiseStructure() : globalObject->promiseStructure()));834 node->convertToNewInternalFieldObject(m_graph.registerStructure(node->isInternalPromise() ? globalObject->internalPromiseStructure() : globalObject->promiseStructure())); 835 835 changed = true; 836 836 break; … … 846 846 m_graph.freeze(rareData); 847 847 m_graph.watchpoints().addLazily(rareData->allocationProfileWatchpointSet()); 848 node->convertToNew Promise(m_graph.registerStructure(structure));848 node->convertToNewInternalFieldObject(m_graph.registerStructure(structure)); 849 849 changed = true; 850 850 break; … … 872 872 m_graph.freeze(rareData); 873 873 m_graph.watchpoints().addLazily(rareData->allocationProfileWatchpointSet()); 874 node->convertToNewInternalFieldObject (newOp, m_graph.registerStructure(structure));874 node->convertToNewInternalFieldObjectWithInlineFields(newOp, m_graph.registerStructure(structure)); 875 875 changed = true; 876 876 return; -
trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp
r260181 r260321 354 354 case ArrayifyToStructure: 355 355 case NewObject: 356 case NewPromise:357 356 case NewGenerator: 358 357 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
r260181 r260321 2534 2534 case ProfileControlFlow: 2535 2535 case NewObject: 2536 case NewPromise:2537 2536 case NewGenerator: 2538 2537 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/dfg/DFGNode.h
r260181 r260321 785 785 } 786 786 787 void convertToNew Promise(RegisteredStructure structure)787 void convertToNewInternalFieldObject(RegisteredStructure structure) 788 788 { 789 789 ASSERT(m_op == CreatePromise); 790 bool internal = isInternalPromise(); 791 setOpAndDefaultFlags(NewPromise); 790 setOpAndDefaultFlags(NewInternalFieldObject); 792 791 children.reset(); 793 792 m_opInfo = structure; 794 m_opInfo2 = internal;795 } 796 797 void convertToNewInternalFieldObject (NodeType newOp, RegisteredStructure structure)793 m_opInfo2 = OpInfoWrapper(); 794 } 795 796 void convertToNewInternalFieldObjectWithInlineFields(NodeType newOp, RegisteredStructure structure) 798 797 { 799 798 ASSERT(m_op == CreateAsyncGenerator || m_op == CreateGenerator); … … 1313 1312 bool hasIsInternalPromise() 1314 1313 { 1315 return op() == CreatePromise || op() == NewPromise;1314 return op() == CreatePromise; 1316 1315 } 1317 1316 … … 1982 1981 case MaterializeNewInternalFieldObject: 1983 1982 case NewObject: 1984 case NewPromise:1985 1983 case NewGenerator: 1986 1984 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/dfg/DFGNodeType.h
r260181 r260321 353 353 /* Allocations. */\ 354 354 macro(NewObject, NodeResultJS) \ 355 macro(NewPromise, NodeResultJS) \356 355 macro(NewGenerator, NodeResultJS) \ 357 356 macro(NewAsyncGenerator, NodeResultJS) \ -
trunk/Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp
r260181 r260321 43 43 #include "JSArrayIterator.h" 44 44 #include "JSCInlines.h" 45 #include "JSInternalPromise.h" 45 46 #include "JSMapIterator.h" 46 47 #include "JSSetIterator.h" … … 975 976 target = handleInternalFieldClass<JSSetIterator>(node, writes); 976 977 break; 978 case JSPromiseType: 979 if (node->structure()->classInfo() == JSInternalPromise::info()) 980 target = handleInternalFieldClass<JSInternalPromise>(node, writes); 981 else { 982 ASSERT(node->structure()->classInfo() == JSPromise::info()); 983 target = handleInternalFieldClass<JSPromise>(node, writes); 984 } 985 break; 977 986 default: 978 987 DFG_CRASH(m_graph, node, "Bad structure"); -
trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp
r260181 r260321 1054 1054 1055 1055 case CreatePromise: 1056 case NewPromise:1057 1056 setPrediction(SpecPromiseObject); 1058 1057 break; -
trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h
r260181 r260321 543 543 case ConstructForwardVarargs: 544 544 case NewObject: 545 case NewPromise:546 545 case NewGenerator: 547 546 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r260289 r260321 12949 12949 } 12950 12950 12951 void SpeculativeJIT::compileNewPromise(Node* node)12952 {12953 GPRTemporary result(this);12954 GPRTemporary scratch1(this);12955 GPRTemporary scratch2(this);12956 12957 GPRReg resultGPR = result.gpr();12958 GPRReg scratch1GPR = scratch1.gpr();12959 GPRReg scratch2GPR = scratch2.gpr();12960 12961 MacroAssembler::JumpList slowCases;12962 12963 FrozenValue* structure = m_graph.freezeStrong(node->structure().get());12964 auto butterfly = TrustedImmPtr(nullptr);12965 if (node->isInternalPromise())12966 emitAllocateJSObjectWithKnownSize<JSInternalPromise>(resultGPR, TrustedImmPtr(structure), butterfly, scratch1GPR, scratch2GPR, slowCases, sizeof(JSInternalPromise));12967 else12968 emitAllocateJSObjectWithKnownSize<JSPromise>(resultGPR, TrustedImmPtr(structure), butterfly, scratch1GPR, scratch2GPR, slowCases, sizeof(JSPromise));12969 m_jit.storeTrustedValue(jsNumber(static_cast<unsigned>(JSPromise::Status::Pending)), CCallHelpers::Address(resultGPR, JSInternalFieldObjectImpl<>::offsetOfInternalField(static_cast<unsigned>(JSPromise::Field::Flags))));12970 m_jit.storeTrustedValue(jsUndefined(), CCallHelpers::Address(resultGPR, JSInternalFieldObjectImpl<>::offsetOfInternalField(static_cast<unsigned>(JSPromise::Field::ReactionsOrResult))));12971 m_jit.mutatorFence(m_jit.vm());12972 12973 addSlowPathGenerator(slowPathCall(slowCases, this, node->isInternalPromise() ? operationNewInternalPromise : operationNewPromise, resultGPR, TrustedImmPtr(&vm()), TrustedImmPtr(structure)));12974 12975 cellResult(resultGPR, node);12976 }12977 12978 12951 template<typename JSClass, typename Operation> 12979 12952 void SpeculativeJIT::compileNewInternalFieldObjectImpl(Node* node, Operation operation) … … 13025 12998 compileNewInternalFieldObjectImpl<JSSetIterator>(node, operationNewSetIterator); 13026 12999 break; 13000 case JSPromiseType: { 13001 if (node->structure()->classInfo() == JSInternalPromise::info()) 13002 compileNewInternalFieldObjectImpl<JSInternalPromise>(node, operationNewInternalPromise); 13003 else { 13004 ASSERT(node->structure()->classInfo() == JSPromise::info()); 13005 compileNewInternalFieldObjectImpl<JSPromise>(node, operationNewPromise); 13006 } 13007 break; 13008 } 13027 13009 default: 13028 13010 DFG_CRASH(m_graph, node, "Bad structure"); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
r260181 r260321 1460 1460 void compileCreateAsyncGenerator(Node*); 1461 1461 void compileNewObject(Node*); 1462 void compileNewPromise(Node*);1463 1462 void compileNewGenerator(Node*); 1464 1463 void compileNewAsyncGenerator(Node*); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r260181 r260321 3244 3244 case NewObject: { 3245 3245 compileNewObject(node); 3246 break;3247 }3248 3249 case NewPromise: {3250 compileNewPromise(node);3251 3246 break; 3252 3247 } -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r260181 r260321 3573 3573 case NewObject: { 3574 3574 compileNewObject(node); 3575 break;3576 }3577 3578 case NewPromise: {3579 compileNewPromise(node);3580 3575 break; 3581 3576 } -
trunk/Source/JavaScriptCore/dfg/DFGStoreBarrierInsertionPhase.cpp
r260181 r260321 333 333 switch (m_node->op()) { 334 334 case NewObject: 335 case NewPromise:336 335 case NewGenerator: 337 336 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp
r260181 r260321 75 75 case GetButterfly: 76 76 case NewObject: 77 case NewPromise:78 77 case NewGenerator: 79 78 case NewAsyncGenerator: -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r260289 r260321 85 85 #include "JSGeneratorFunction.h" 86 86 #include "JSImmutableButterfly.h" 87 #include "JSInternalPromise.h" 87 88 #include "JSLexicalEnvironment.h" 88 89 #include "JSMap.h" … … 1065 1066 case NewObject: 1066 1067 compileNewObject(); 1067 break;1068 case NewPromise:1069 compileNewPromise();1070 1068 break; 1071 1069 case NewGenerator: … … 6351 6349 } 6352 6350 6353 void compileNewPromise()6354 {6355 LBasicBlock slowCase = m_out.newBlock();6356 LBasicBlock continuation = m_out.newBlock();6357 6358 LBasicBlock lastNext = m_out.insertNewBlocksBefore(slowCase);6359 6360 LValue promise;6361 if (m_node->isInternalPromise())6362 promise = allocateObject<JSInternalPromise>(m_node->structure(), m_out.intPtrZero, slowCase);6363 else6364 promise = allocateObject<JSPromise>(m_node->structure(), m_out.intPtrZero, slowCase);6365 m_out.store64(m_out.constInt64(JSValue::encode(jsNumber(static_cast<unsigned>(JSPromise::Status::Pending)))), promise, m_heaps.JSInternalFieldObjectImpl_internalFields[static_cast<unsigned>(JSPromise::Field::Flags)]);6366 m_out.store64(m_out.constInt64(JSValue::encode(jsUndefined())), promise, m_heaps.JSInternalFieldObjectImpl_internalFields[static_cast<unsigned>(JSPromise::Field::ReactionsOrResult)]);6367 mutatorFence();6368 ValueFromBlock fastResult = m_out.anchor(promise);6369 m_out.jump(continuation);6370 6371 m_out.appendTo(slowCase, continuation);6372 ValueFromBlock slowResult = m_out.anchor(vmCall(pointerType(), m_node->isInternalPromise() ? operationNewInternalPromise : operationNewPromise, m_vmValue, frozenPointer(m_graph.freezeStrong(m_node->structure().get()))));6373 m_out.jump(continuation);6374 6375 m_out.appendTo(continuation, lastNext);6376 setJSValue(m_out.phi(pointerType(), fastResult, slowResult));6377 }6378 6379 6351 template<typename JSClass, typename Operation> 6380 6352 void compileNewInternalFieldObjectImpl(Operation operation) … … 6423 6395 case JSSetIteratorType: 6424 6396 compileNewInternalFieldObjectImpl<JSSetIterator>(operationNewSetIterator); 6397 break; 6398 case JSPromiseType: 6399 if (m_node->structure()->classInfo() == JSInternalPromise::info()) 6400 compileNewInternalFieldObjectImpl<JSInternalPromise>(operationNewInternalPromise); 6401 else { 6402 ASSERT(m_node->structure()->classInfo() == JSPromise::info()); 6403 compileNewInternalFieldObjectImpl<JSPromise>(operationNewPromise); 6404 } 6425 6405 break; 6426 6406 default: … … 12469 12449 case JSSetIteratorType: 12470 12450 compileMaterializeNewInternalFieldObjectImpl<JSSetIterator>(operationNewSetIterator); 12451 break; 12452 case JSPromiseType: 12453 if (m_node->structure()->classInfo() == JSInternalPromise::info()) 12454 compileMaterializeNewInternalFieldObjectImpl<JSInternalPromise>(operationNewInternalPromise); 12455 else { 12456 ASSERT(m_node->structure()->classInfo() == JSPromise::info()); 12457 compileMaterializeNewInternalFieldObjectImpl<JSPromise>(operationNewPromise); 12458 } 12471 12459 break; 12472 12460 default: -
trunk/Source/JavaScriptCore/ftl/FTLOperations.cpp
r260181 r260321 44 44 #include "JSGeneratorFunction.h" 45 45 #include "JSImmutableButterfly.h" 46 #include "JSInternalPromise.h" 46 47 #include "JSLexicalEnvironment.h" 47 48 #include "JSMapIterator.h" … … 144 145 case JSSetIteratorType: 145 146 materialize(jsCast<JSSetIterator*>(target)); 147 break; 148 case JSPromiseType: 149 if (target->classInfo(vm) == JSInternalPromise::info()) 150 materialize(jsCast<JSInternalPromise*>(target)); 151 else { 152 ASSERT(target->classInfo(vm) == JSPromise::info()); 153 materialize(jsCast<JSPromise*>(target)); 154 } 146 155 break; 147 156 default: … … 343 352 JSSetIterator* result = JSSetIterator::createWithInitialValues(vm, structure); 344 353 RELEASE_ASSERT(materialization->properties().size() - 1 == JSSetIterator::numberOfInternalFields); 354 return result; 355 } 356 case JSPromiseType: { 357 if (structure->classInfo() == JSInternalPromise::info()) { 358 JSInternalPromise* result = JSInternalPromise::createWithInitialValues(vm, structure); 359 RELEASE_ASSERT(materialization->properties().size() - 1 == JSInternalPromise::numberOfInternalFields); 360 return result; 361 } 362 ASSERT(structure->classInfo() == JSPromise::info()); 363 JSPromise* result = JSPromise::createWithInitialValues(vm, structure); 364 RELEASE_ASSERT(materialization->properties().size() - 1 == JSPromise::numberOfInternalFields); 345 365 return result; 346 366 } -
trunk/Source/JavaScriptCore/runtime/JSInternalPromise.cpp
r251425 r260321 41 41 } 42 42 43 JSInternalPromise* JSInternalPromise::createWithInitialValues(VM& vm, Structure* structure) 44 { 45 return create(vm, structure); 46 } 47 43 48 Structure* JSInternalPromise::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) 44 49 { -
trunk/Source/JavaScriptCore/runtime/JSInternalPromise.h
r251691 r260321 45 45 46 46 JS_EXPORT_PRIVATE static JSInternalPromise* create(VM&, Structure*); 47 static JSInternalPromise* createWithInitialValues(VM&, Structure*); 47 48 static Structure* createStructure(VM&, JSGlobalObject*, JSValue); 48 49 -
trunk/Source/JavaScriptCore/runtime/JSPromise.cpp
r258664 r260321 46 46 } 47 47 48 JSPromise* JSPromise::createWithInitialValues(VM& vm, Structure* structure) 49 { 50 return create(vm, structure); 51 } 52 48 53 Structure* JSPromise::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) 49 54 { … … 59 64 { 60 65 Base::finishCreation(vm); 61 internalField(static_cast<unsigned>(Field::Flags)).set(vm, this, jsNumber(static_cast<unsigned>(Status::Pending))); 62 internalField(static_cast<unsigned>(Field::ReactionsOrResult)).set(vm, this, jsUndefined()); 66 auto values = initialValues(); 67 for (unsigned index = 0; index < values.size(); ++index) 68 Base::internalField(index).set(vm, this, values[index]); 63 69 } 64 70 … … 72 78 auto JSPromise::status(VM&) const -> Status 73 79 { 74 JSValue value = internalField( static_cast<unsigned>(Field::Flags)).get();80 JSValue value = internalField(Field::Flags).get(); 75 81 uint32_t flags = value.asUInt32AsAnyInt(); 76 82 return static_cast<Status>(flags & stateMask); … … 82 88 if (status == Status::Pending) 83 89 return jsUndefined(); 84 return internalField( static_cast<unsigned>(Field::ReactionsOrResult)).get();90 return internalField(Field::ReactionsOrResult).get(); 85 91 } 86 92 87 93 uint32_t JSPromise::flags() const 88 94 { 89 JSValue value = internalField( static_cast<unsigned>(Field::Flags)).get();95 JSValue value = internalField(Field::Flags).get(); 90 96 return value.asUInt32AsAnyInt(); 91 97 } … … 161 167 uint32_t flags = this->flags(); 162 168 if (!(flags & isFirstResolvingFunctionCalledFlag)) { 163 internalField( static_cast<unsigned>(Field::Flags)).set(vm, this, jsNumber(flags | isFirstResolvingFunctionCalledFlag));169 internalField(Field::Flags).set(vm, this, jsNumber(flags | isFirstResolvingFunctionCalledFlag)); 164 170 JSGlobalObject* globalObject = this->globalObject(vm); 165 171 callFunction(lexicalGlobalObject, globalObject->resolvePromiseFunction(), this, value); … … 175 181 uint32_t flags = this->flags(); 176 182 if (!(flags & isFirstResolvingFunctionCalledFlag)) { 177 internalField( static_cast<unsigned>(Field::Flags)).set(vm, this, jsNumber(flags | isFirstResolvingFunctionCalledFlag));183 internalField(Field::Flags).set(vm, this, jsNumber(flags | isFirstResolvingFunctionCalledFlag)); 178 184 JSGlobalObject* globalObject = this->globalObject(vm); 179 185 callFunction(lexicalGlobalObject, globalObject->rejectPromiseFunction(), this, value); … … 189 195 uint32_t flags = this->flags(); 190 196 if (!(flags & isFirstResolvingFunctionCalledFlag)) 191 internalField( static_cast<unsigned>(Field::Flags)).set(vm, this, jsNumber(flags | isHandledFlag));197 internalField(Field::Flags).set(vm, this, jsNumber(flags | isHandledFlag)); 192 198 reject(lexicalGlobalObject, value); 193 199 } -
trunk/Source/JavaScriptCore/runtime/JSPromise.h
r258664 r260321 42 42 43 43 JS_EXPORT_PRIVATE static JSPromise* create(VM&, Structure*); 44 static JSPromise* createWithInitialValues(VM&, Structure*); 44 45 static Structure* createStructure(VM&, JSGlobalObject*, JSValue); 45 46 … … 60 61 }; 61 62 static_assert(numberOfInternalFields == 2); 63 64 static std::array<JSValue, numberOfInternalFields> initialValues() 65 { 66 return { { 67 jsNumber(static_cast<unsigned>(Status::Pending)), 68 jsUndefined(), 69 } }; 70 } 71 72 const WriteBarrier<Unknown>& internalField(Field field) const { return Base::internalField(static_cast<uint32_t>(field)); } 73 WriteBarrier<Unknown>& internalField(Field field) { return Base::internalField(static_cast<uint32_t>(field)); } 62 74 63 75 JS_EXPORT_PRIVATE Status status(VM&) const;
Note: See TracChangeset
for help on using the changeset viewer.