Changeset 217031 in webkit for trunk/Source/JavaScriptCore/jsc.cpp
- Timestamp:
- May 17, 2017, 9:59:38 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/jsc.cpp
r216699 r217031 590 590 591 591 #if ENABLE(JIT) 592 static Ref <DOMJIT::Patchpoint> checkDOMJITNode()592 static RefPtr<DOMJIT::Patchpoint> checkSubClassPatchpoint() 593 593 { 594 594 Ref<DOMJIT::Patchpoint> patchpoint = DOMJIT::Patchpoint::create(); … … 601 601 return failureCases; 602 602 }); 603 return patchpoint;603 return WTFMove(patchpoint); 604 604 } 605 605 #endif … … 654 654 655 655 #if ENABLE(JIT) 656 Ref<DOMJIT::Patchpoint> checkDOM() override657 {658 return DOMJITNode::checkDOMJITNode();659 }660 661 656 static EncodedJSValue JIT_OPERATION slowCall(ExecState* exec, void* pointer) 662 657 { … … 739 734 740 735 #if ENABLE(JIT) 741 Ref<DOMJIT::Patchpoint> checkDOM() override742 {743 return DOMJITNode::checkDOMJITNode();744 }745 746 736 static EncodedJSValue JIT_OPERATION slowCall(ExecState* exec, void* pointer) 747 737 { … … 857 847 } 858 848 859 #if ENABLE(JIT)860 849 static EncodedJSValue JIT_OPERATION unsafeFunction(ExecState* exec, DOMJITNode* node) 861 850 { … … 864 853 } 865 854 866 static Ref<DOMJIT::Patchpoint> checkDOMJITNode() 855 #if ENABLE(JIT) 856 static RefPtr<DOMJIT::Patchpoint> checkSubClassPatchpoint() 867 857 { 868 858 static const double value = 42.0; … … 879 869 return failureCases; 880 870 }); 881 return patchpoint;871 return WTFMove(patchpoint); 882 872 } 883 873 #endif … … 887 877 }; 888 878 879 static const DOMJIT::Signature DOMJITFunctionObjectSignature((uintptr_t)DOMJITFunctionObject::unsafeFunction, DOMJITFunctionObject::info(), DOMJIT::Effect::forRead(DOMJIT::HeapRange::top()), SpecInt32Only); 880 881 void DOMJITFunctionObject::finishCreation(VM& vm, JSGlobalObject* globalObject) 882 { 883 Base::finishCreation(vm); 884 putDirectNativeFunction(vm, globalObject, Identifier::fromString(&vm, "func"), 0, safeFunction, NoIntrinsic, &DOMJITFunctionObjectSignature, ReadOnly); 885 } 886 887 class DOMJITCheckSubClassObject : public DOMJITNode { 888 public: 889 DOMJITCheckSubClassObject(VM& vm, Structure* structure) 890 : Base(vm, structure) 891 { 892 } 893 894 DECLARE_INFO; 895 typedef DOMJITNode Base; 896 static const unsigned StructureFlags = Base::StructureFlags; 897 898 899 static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) 900 { 901 return Structure::create(vm, globalObject, prototype, TypeInfo(JSC::JSType(LastJSCObjectType + 1), StructureFlags), info()); 902 } 903 904 static DOMJITCheckSubClassObject* create(VM& vm, JSGlobalObject* globalObject, Structure* structure) 905 { 906 DOMJITCheckSubClassObject* object = new (NotNull, allocateCell<DOMJITCheckSubClassObject>(vm.heap, sizeof(DOMJITCheckSubClassObject))) DOMJITCheckSubClassObject(vm, structure); 907 object->finishCreation(vm, globalObject); 908 return object; 909 } 910 911 static EncodedJSValue JSC_HOST_CALL safeFunction(ExecState* exec) 912 { 913 VM& vm = exec->vm(); 914 auto scope = DECLARE_THROW_SCOPE(vm); 915 916 auto* thisObject = jsDynamicCast<DOMJITCheckSubClassObject*>(vm, exec->thisValue()); 917 if (!thisObject) 918 return throwVMTypeError(exec, scope); 919 return JSValue::encode(jsNumber(thisObject->value())); 920 } 921 922 static EncodedJSValue JIT_OPERATION unsafeFunction(ExecState* exec, DOMJITNode* node) 923 { 924 NativeCallFrameTracer tracer(&exec->vm(), exec); 925 return JSValue::encode(jsNumber(node->value())); 926 } 927 928 private: 929 void finishCreation(VM&, JSGlobalObject*); 930 }; 931 932 static const DOMJIT::Signature DOMJITCheckSubClassObjectSignature((uintptr_t)DOMJITCheckSubClassObject::unsafeFunction, DOMJITCheckSubClassObject::info(), DOMJIT::Effect::forRead(DOMJIT::HeapRange::top()), SpecInt32Only); 933 934 void DOMJITCheckSubClassObject::finishCreation(VM& vm, JSGlobalObject* globalObject) 935 { 936 Base::finishCreation(vm); 937 putDirectNativeFunction(vm, globalObject, Identifier::fromString(&vm, "func"), 0, safeFunction, NoIntrinsic, &DOMJITCheckSubClassObjectSignature, ReadOnly); 938 } 939 940 const ClassInfo Element::s_info = { "Element", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(Element) }; 941 const ClassInfo Masquerader::s_info = { "Masquerader", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(Masquerader) }; 942 const ClassInfo Root::s_info = { "Root", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(Root) }; 943 const ClassInfo ImpureGetter::s_info = { "ImpureGetter", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(ImpureGetter) }; 944 const ClassInfo CustomGetter::s_info = { "CustomGetter", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(CustomGetter) }; 889 945 #if ENABLE(JIT) 890 static const DOMJIT::Signature DOMJITFunctionObjectSignature((uintptr_t)DOMJITFunctionObject::unsafeFunction, DOMJITFunctionObject::checkDOMJITNode, DOMJITFunctionObject::info(), DOMJIT::Effect::forRead(DOMJIT::HeapRange::top()), SpecInt32Only);891 #e ndif892 893 void DOMJITFunctionObject::finishCreation(VM& vm, JSGlobalObject* globalObject) 894 { 895 Base::finishCreation(vm);946 const ClassInfo DOMJITNode::s_info = { "DOMJITNode", &Base::s_info, nullptr, &DOMJITNode::checkSubClassPatchpoint, CREATE_METHOD_TABLE(DOMJITNode) }; 947 #else 948 const ClassInfo DOMJITNode::s_info = { "DOMJITNode", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DOMJITNode) }; 949 #endif 950 const ClassInfo DOMJITGetter::s_info = { "DOMJITGetter", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DOMJITGetter) }; 951 const ClassInfo DOMJITGetterComplex::s_info = { "DOMJITGetterComplex", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DOMJITGetterComplex) }; 896 952 #if ENABLE(JIT) 897 putDirectNativeFunction(vm, globalObject, Identifier::fromString(&vm, "func"), 0, safeFunction, NoIntrinsic, &DOMJITFunctionObjectSignature, ReadOnly);953 const ClassInfo DOMJITFunctionObject::s_info = { "DOMJITFunctionObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DOMJITFunctionObject) }; 898 954 #else 899 putDirectNativeFunction(vm, globalObject, Identifier::fromString(&vm, "func"), 0, safeFunction, NoIntrinsic, nullptr, ReadOnly); 900 #endif 901 } 902 903 904 const ClassInfo Element::s_info = { "Element", &Base::s_info, nullptr, CREATE_METHOD_TABLE(Element) }; 905 const ClassInfo Masquerader::s_info = { "Masquerader", &Base::s_info, nullptr, CREATE_METHOD_TABLE(Masquerader) }; 906 const ClassInfo Root::s_info = { "Root", &Base::s_info, nullptr, CREATE_METHOD_TABLE(Root) }; 907 const ClassInfo ImpureGetter::s_info = { "ImpureGetter", &Base::s_info, nullptr, CREATE_METHOD_TABLE(ImpureGetter) }; 908 const ClassInfo CustomGetter::s_info = { "CustomGetter", &Base::s_info, nullptr, CREATE_METHOD_TABLE(CustomGetter) }; 909 const ClassInfo DOMJITNode::s_info = { "DOMJITNode", &Base::s_info, nullptr, CREATE_METHOD_TABLE(DOMJITNode) }; 910 const ClassInfo DOMJITGetter::s_info = { "DOMJITGetter", &Base::s_info, nullptr, CREATE_METHOD_TABLE(DOMJITGetter) }; 911 const ClassInfo DOMJITGetterComplex::s_info = { "DOMJITGetterComplex", &Base::s_info, nullptr, CREATE_METHOD_TABLE(DOMJITGetterComplex) }; 912 const ClassInfo DOMJITFunctionObject::s_info = { "DOMJITFunctionObject", &Base::s_info, nullptr, CREATE_METHOD_TABLE(DOMJITFunctionObject) }; 913 const ClassInfo RuntimeArray::s_info = { "RuntimeArray", &Base::s_info, nullptr, CREATE_METHOD_TABLE(RuntimeArray) }; 914 const ClassInfo SimpleObject::s_info = { "SimpleObject", &Base::s_info, nullptr, CREATE_METHOD_TABLE(SimpleObject) }; 955 const ClassInfo DOMJITFunctionObject::s_info = { "DOMJITFunctionObject", &Base::s_info, nullptr, &DOMJITFunctionObject::checkSubClassPatchpoint, CREATE_METHOD_TABLE(DOMJITFunctionObject) }; 956 #endif 957 const ClassInfo DOMJITCheckSubClassObject::s_info = { "DOMJITCheckSubClassObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DOMJITCheckSubClassObject) }; 958 const ClassInfo RuntimeArray::s_info = { "RuntimeArray", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(RuntimeArray) }; 959 const ClassInfo SimpleObject::s_info = { "SimpleObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(SimpleObject) }; 915 960 static unsigned asyncTestPasses { 0 }; 916 961 static unsigned asyncTestExpectedPasses { 0 }; … … 1004 1049 static EncodedJSValue JSC_HOST_CALL functionCreateDOMJITGetterComplexObject(ExecState*); 1005 1050 static EncodedJSValue JSC_HOST_CALL functionCreateDOMJITFunctionObject(ExecState*); 1051 static EncodedJSValue JSC_HOST_CALL functionCreateDOMJITCheckSubClassObject(ExecState*); 1006 1052 static EncodedJSValue JSC_HOST_CALL functionCreateBuiltin(ExecState*); 1007 1053 static EncodedJSValue JSC_HOST_CALL functionCreateGlobalObject(ExecState*); … … 1319 1365 addFunction(vm, "createDOMJITGetterComplexObject", functionCreateDOMJITGetterComplexObject, 0); 1320 1366 addFunction(vm, "createDOMJITFunctionObject", functionCreateDOMJITFunctionObject, 0); 1367 addFunction(vm, "createDOMJITCheckSubClassObject", functionCreateDOMJITCheckSubClassObject, 0); 1321 1368 addFunction(vm, "createBuiltin", functionCreateBuiltin, 2); 1322 1369 addFunction(vm, "createGlobalObject", functionCreateGlobalObject, 0); … … 1427 1474 }; 1428 1475 1429 const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, nullptr, CREATE_METHOD_TABLE(GlobalObject) };1476 const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(GlobalObject) }; 1430 1477 const GlobalObjectMethodTable GlobalObject::s_globalObjectMethodTable = { 1431 1478 &supportsRichSourceInfo, … … 2002 2049 } 2003 2050 2051 EncodedJSValue JSC_HOST_CALL functionCreateDOMJITCheckSubClassObject(ExecState* exec) 2052 { 2053 JSLockHolder lock(exec); 2054 Structure* structure = DOMJITCheckSubClassObject::createStructure(exec->vm(), exec->lexicalGlobalObject(), jsNull()); 2055 DOMJITCheckSubClassObject* result = DOMJITCheckSubClassObject::create(exec->vm(), exec->lexicalGlobalObject(), structure); 2056 return JSValue::encode(result); 2057 } 2058 2004 2059 EncodedJSValue JSC_HOST_CALL functionSetImpureGetterDelegate(ExecState* exec) 2005 2060 {
Note:
See TracChangeset
for help on using the changeset viewer.