Changeset 221822 in webkit for trunk/Source/JavaScriptCore/jsc.cpp
- Timestamp:
- Sep 9, 2017, 9:21:45 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/jsc.cpp
r221417 r221822 430 430 JSGlobalObject* globalObject = exec->lexicalGlobalObject(); 431 431 Structure* structure = createStructure(vm, globalObject, createPrototype(vm, globalObject)); 432 RuntimeArray* runtimeArray = new (NotNull, allocateCell<RuntimeArray>( *exec->heap())) RuntimeArray(exec, structure);432 RuntimeArray* runtimeArray = new (NotNull, allocateCell<RuntimeArray>(vm.heap)) RuntimeArray(exec, structure); 433 433 runtimeArray->finishCreation(exec); 434 434 vm.heap.addFinalizer(runtimeArray, destroy); … … 447 447 static bool getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot) 448 448 { 449 VM& vm = exec->vm(); 449 450 RuntimeArray* thisObject = jsCast<RuntimeArray*>(object); 450 if (propertyName == exec->propertyNames().length) {451 if (propertyName == vm.propertyNames->length) { 451 452 slot.setCacheableCustom(thisObject, DontDelete | ReadOnly | DontEnum, thisObject->lengthGetter); 452 453 return true; … … 666 667 static EncodedJSValue JIT_OPERATION slowCall(ExecState* exec, void* pointer) 667 668 { 668 NativeCallFrameTracer tracer(&exec->vm(), exec); 669 VM& vm = exec->vm(); 670 NativeCallFrameTracer tracer(&vm, exec); 669 671 return JSValue::encode(jsNumber(static_cast<DOMJITGetter*>(pointer)->value())); 670 672 } … … 856 858 static EncodedJSValue JIT_OPERATION unsafeFunction(ExecState* exec, DOMJITNode* node) 857 859 { 858 NativeCallFrameTracer tracer(&exec->vm(), exec); 860 VM& vm = exec->vm(); 861 NativeCallFrameTracer tracer(&vm, exec); 859 862 return JSValue::encode(jsNumber(node->value())); 860 863 } … … 929 932 static EncodedJSValue JIT_OPERATION unsafeFunction(ExecState* exec, DOMJITNode* node) 930 933 { 931 NativeCallFrameTracer tracer(&exec->vm(), exec); 934 VM& vm = exec->vm(); 935 NativeCallFrameTracer tracer(&vm, exec); 932 936 return JSValue::encode(jsNumber(node->value())); 933 937 } … … 1812 1816 return deferred->reject(exec, createError(exec, makeString("Could not open file '", moduleKey, "'."))); 1813 1817 1814 auto result = deferred->resolve(exec, JSSourceCode::create( exec->vm(), makeSource(stringFromUTF(utf8), SourceOrigin { moduleKey }, moduleKey, TextPosition(), SourceProviderSourceType::Module)));1818 auto result = deferred->resolve(exec, JSSourceCode::create(vm, makeSource(stringFromUTF(utf8), SourceOrigin { moduleKey }, moduleKey, TextPosition(), SourceProviderSourceType::Module))); 1815 1819 scope.releaseAssertNoException(); 1816 1820 return result; … … 1854 1858 EncodedJSValue JSC_HOST_CALL functionDumpCallFrame(ExecState* exec) 1855 1859 { 1856 VMEntryFrame* topVMEntryFrame = exec->vm().topVMEntryFrame; 1860 VM& vm = exec->vm(); 1861 VMEntryFrame* topVMEntryFrame = vm.topVMEntryFrame; 1857 1862 ExecState* callerFrame = exec->callerFrame(topVMEntryFrame); 1858 1863 if (callerFrame) 1859 exec->vm().interpreter->dumpCallFrame(callerFrame);1864 vm.interpreter->dumpCallFrame(callerFrame); 1860 1865 return JSValue::encode(jsUndefined()); 1861 1866 } … … 1934 1939 EncodedJSValue JSC_HOST_CALL functionCreateRoot(ExecState* exec) 1935 1940 { 1936 JSLockHolder lock(exec); 1937 return JSValue::encode(Root::create(exec->vm(), exec->lexicalGlobalObject())); 1941 VM& vm = exec->vm(); 1942 JSLockHolder lock(vm); 1943 return JSValue::encode(Root::create(vm, exec->lexicalGlobalObject())); 1938 1944 } 1939 1945 … … 1952 1958 EncodedJSValue JSC_HOST_CALL functionGetElement(ExecState* exec) 1953 1959 { 1954 JSLockHolder lock(exec);1955 VM& vm = exec->vm();1960 VM& vm = exec->vm(); 1961 JSLockHolder lock(vm); 1956 1962 Root* root = jsDynamicCast<Root*>(vm, exec->argument(0)); 1957 1963 if (!root) … … 1963 1969 EncodedJSValue JSC_HOST_CALL functionSetElementRoot(ExecState* exec) 1964 1970 { 1965 JSLockHolder lock(exec);1966 VM& vm = exec->vm();1971 VM& vm = exec->vm(); 1972 JSLockHolder lock(vm); 1967 1973 Element* element = jsDynamicCast<Element*>(vm, exec->argument(0)); 1968 1974 Root* root = jsDynamicCast<Root*>(vm, exec->argument(1)); 1969 1975 if (element && root) 1970 element->setRoot( exec->vm(), root);1976 element->setRoot(vm, root); 1971 1977 return JSValue::encode(jsUndefined()); 1972 1978 } … … 1974 1980 EncodedJSValue JSC_HOST_CALL functionCreateSimpleObject(ExecState* exec) 1975 1981 { 1976 JSLockHolder lock(exec); 1977 return JSValue::encode(SimpleObject::create(exec->vm(), exec->lexicalGlobalObject())); 1982 VM& vm = exec->vm(); 1983 JSLockHolder lock(vm); 1984 return JSValue::encode(SimpleObject::create(vm, exec->lexicalGlobalObject())); 1978 1985 } 1979 1986 … … 2004 2011 } 2005 2012 JSValue value = exec->argument(1); 2006 simpleObject->setHiddenValue( exec->vm(), value);2013 simpleObject->setHiddenValue(vm, value); 2007 2014 return JSValue::encode(jsUndefined()); 2008 2015 } … … 2010 2017 EncodedJSValue JSC_HOST_CALL functionCreateProxy(ExecState* exec) 2011 2018 { 2012 JSLockHolder lock(exec); 2019 VM& vm = exec->vm(); 2020 JSLockHolder lock(vm); 2013 2021 JSValue target = exec->argument(0); 2014 2022 if (!target.isObject()) 2015 2023 return JSValue::encode(jsUndefined()); 2016 2024 JSObject* jsTarget = asObject(target.asCell()); 2017 Structure* structure = JSProxy::createStructure( exec->vm(), exec->lexicalGlobalObject(), jsTarget->getPrototypeDirect(), ImpureProxyType);2018 JSProxy* proxy = JSProxy::create( exec->vm(), structure, jsTarget);2025 Structure* structure = JSProxy::createStructure(vm, exec->lexicalGlobalObject(), jsTarget->getPrototypeDirect(), ImpureProxyType); 2026 JSProxy* proxy = JSProxy::create(vm, structure, jsTarget); 2019 2027 return JSValue::encode(proxy); 2020 2028 } … … 2029 2037 EncodedJSValue JSC_HOST_CALL functionCreateImpureGetter(ExecState* exec) 2030 2038 { 2031 JSLockHolder lock(exec); 2039 VM& vm = exec->vm(); 2040 JSLockHolder lock(vm); 2032 2041 JSValue target = exec->argument(0); 2033 2042 JSObject* delegate = nullptr; 2034 2043 if (target.isObject()) 2035 2044 delegate = asObject(target.asCell()); 2036 Structure* structure = ImpureGetter::createStructure( exec->vm(), exec->lexicalGlobalObject(), jsNull());2037 ImpureGetter* result = ImpureGetter::create( exec->vm(), structure, delegate);2045 Structure* structure = ImpureGetter::createStructure(vm, exec->lexicalGlobalObject(), jsNull()); 2046 ImpureGetter* result = ImpureGetter::create(vm, structure, delegate); 2038 2047 return JSValue::encode(result); 2039 2048 } … … 2041 2050 EncodedJSValue JSC_HOST_CALL functionCreateCustomGetterObject(ExecState* exec) 2042 2051 { 2043 JSLockHolder lock(exec); 2044 Structure* structure = CustomGetter::createStructure(exec->vm(), exec->lexicalGlobalObject(), jsNull()); 2045 CustomGetter* result = CustomGetter::create(exec->vm(), structure); 2052 VM& vm = exec->vm(); 2053 JSLockHolder lock(vm); 2054 Structure* structure = CustomGetter::createStructure(vm, exec->lexicalGlobalObject(), jsNull()); 2055 CustomGetter* result = CustomGetter::create(vm, structure); 2046 2056 return JSValue::encode(result); 2047 2057 } … … 2049 2059 EncodedJSValue JSC_HOST_CALL functionCreateDOMJITNodeObject(ExecState* exec) 2050 2060 { 2051 JSLockHolder lock(exec); 2052 Structure* structure = DOMJITNode::createStructure(exec->vm(), exec->lexicalGlobalObject(), DOMJITGetter::create(exec->vm(), DOMJITGetter::createStructure(exec->vm(), exec->lexicalGlobalObject(), jsNull()))); 2053 DOMJITNode* result = DOMJITNode::create(exec->vm(), structure); 2061 VM& vm = exec->vm(); 2062 JSLockHolder lock(vm); 2063 Structure* structure = DOMJITNode::createStructure(vm, exec->lexicalGlobalObject(), DOMJITGetter::create(vm, DOMJITGetter::createStructure(vm, exec->lexicalGlobalObject(), jsNull()))); 2064 DOMJITNode* result = DOMJITNode::create(vm, structure); 2054 2065 return JSValue::encode(result); 2055 2066 } … … 2057 2068 EncodedJSValue JSC_HOST_CALL functionCreateDOMJITGetterObject(ExecState* exec) 2058 2069 { 2059 JSLockHolder lock(exec); 2060 Structure* structure = DOMJITGetter::createStructure(exec->vm(), exec->lexicalGlobalObject(), jsNull()); 2061 DOMJITGetter* result = DOMJITGetter::create(exec->vm(), structure); 2070 VM& vm = exec->vm(); 2071 JSLockHolder lock(vm); 2072 Structure* structure = DOMJITGetter::createStructure(vm, exec->lexicalGlobalObject(), jsNull()); 2073 DOMJITGetter* result = DOMJITGetter::create(vm, structure); 2062 2074 return JSValue::encode(result); 2063 2075 } … … 2065 2077 EncodedJSValue JSC_HOST_CALL functionCreateDOMJITGetterComplexObject(ExecState* exec) 2066 2078 { 2067 JSLockHolder lock(exec); 2068 Structure* structure = DOMJITGetterComplex::createStructure(exec->vm(), exec->lexicalGlobalObject(), jsNull()); 2069 DOMJITGetterComplex* result = DOMJITGetterComplex::create(exec->vm(), exec->lexicalGlobalObject(), structure); 2079 VM& vm = exec->vm(); 2080 JSLockHolder lock(vm); 2081 Structure* structure = DOMJITGetterComplex::createStructure(vm, exec->lexicalGlobalObject(), jsNull()); 2082 DOMJITGetterComplex* result = DOMJITGetterComplex::create(vm, exec->lexicalGlobalObject(), structure); 2070 2083 return JSValue::encode(result); 2071 2084 } … … 2073 2086 EncodedJSValue JSC_HOST_CALL functionCreateDOMJITFunctionObject(ExecState* exec) 2074 2087 { 2075 JSLockHolder lock(exec); 2076 Structure* structure = DOMJITFunctionObject::createStructure(exec->vm(), exec->lexicalGlobalObject(), jsNull()); 2077 DOMJITFunctionObject* result = DOMJITFunctionObject::create(exec->vm(), exec->lexicalGlobalObject(), structure); 2088 VM& vm = exec->vm(); 2089 JSLockHolder lock(vm); 2090 Structure* structure = DOMJITFunctionObject::createStructure(vm, exec->lexicalGlobalObject(), jsNull()); 2091 DOMJITFunctionObject* result = DOMJITFunctionObject::create(vm, exec->lexicalGlobalObject(), structure); 2078 2092 return JSValue::encode(result); 2079 2093 } … … 2081 2095 EncodedJSValue JSC_HOST_CALL functionCreateDOMJITCheckSubClassObject(ExecState* exec) 2082 2096 { 2083 JSLockHolder lock(exec); 2084 Structure* structure = DOMJITCheckSubClassObject::createStructure(exec->vm(), exec->lexicalGlobalObject(), jsNull()); 2085 DOMJITCheckSubClassObject* result = DOMJITCheckSubClassObject::create(exec->vm(), exec->lexicalGlobalObject(), structure); 2097 VM& vm = exec->vm(); 2098 JSLockHolder lock(vm); 2099 Structure* structure = DOMJITCheckSubClassObject::createStructure(vm, exec->lexicalGlobalObject(), jsNull()); 2100 DOMJITCheckSubClassObject* result = DOMJITCheckSubClassObject::create(vm, exec->lexicalGlobalObject(), structure); 2086 2101 return JSValue::encode(result); 2087 2102 } … … 2110 2125 EncodedJSValue JSC_HOST_CALL functionGCAndSweep(ExecState* exec) 2111 2126 { 2112 JSLockHolder lock(exec); 2113 exec->heap()->collectNow(Sync, CollectionScope::Full); 2114 return JSValue::encode(jsNumber(exec->heap()->sizeAfterLastFullCollection())); 2127 VM& vm = exec->vm(); 2128 JSLockHolder lock(vm); 2129 vm.heap.collectNow(Sync, CollectionScope::Full); 2130 return JSValue::encode(jsNumber(vm.heap.sizeAfterLastFullCollection())); 2115 2131 } 2116 2132 2117 2133 EncodedJSValue JSC_HOST_CALL functionFullGC(ExecState* exec) 2118 2134 { 2119 JSLockHolder lock(exec); 2120 exec->heap()->collectSync(CollectionScope::Full); 2121 return JSValue::encode(jsNumber(exec->heap()->sizeAfterLastFullCollection())); 2135 VM& vm = exec->vm(); 2136 JSLockHolder lock(vm); 2137 vm.heap.collectSync(CollectionScope::Full); 2138 return JSValue::encode(jsNumber(vm.heap.sizeAfterLastFullCollection())); 2122 2139 } 2123 2140 2124 2141 EncodedJSValue JSC_HOST_CALL functionEdenGC(ExecState* exec) 2125 2142 { 2126 JSLockHolder lock(exec); 2127 exec->heap()->collectSync(CollectionScope::Eden); 2128 return JSValue::encode(jsNumber(exec->heap()->sizeAfterLastEdenCollection())); 2143 VM& vm = exec->vm(); 2144 JSLockHolder lock(vm); 2145 vm.heap.collectSync(CollectionScope::Eden); 2146 return JSValue::encode(jsNumber(vm.heap.sizeAfterLastEdenCollection())); 2129 2147 } 2130 2148 … … 2139 2157 EncodedJSValue JSC_HOST_CALL functionHeapSize(ExecState* exec) 2140 2158 { 2141 JSLockHolder lock(exec); 2142 return JSValue::encode(jsNumber(exec->heap()->size())); 2159 VM& vm = exec->vm(); 2160 JSLockHolder lock(vm); 2161 return JSValue::encode(jsNumber(vm.heap.size())); 2143 2162 } 2144 2163 … … 2368 2387 EncodedJSValue JSC_HOST_CALL functionShadowChickenFunctionsOnStack(ExecState* exec) 2369 2388 { 2370 return JSValue::encode(exec->vm().shadowChicken().functionsOnStack(exec)); 2389 VM& vm = exec->vm(); 2390 return JSValue::encode(vm.shadowChicken().functionsOnStack(exec)); 2371 2391 } 2372 2392 2373 2393 EncodedJSValue JSC_HOST_CALL functionSetGlobalConstRedeclarationShouldNotThrow(ExecState* exec) 2374 2394 { 2375 exec->vm().setGlobalConstRedeclarationShouldThrow(false); 2395 VM& vm = exec->vm(); 2396 vm.setGlobalConstRedeclarationShouldThrow(false); 2376 2397 return JSValue::encode(jsUndefined()); 2377 2398 } … … 2808 2829 EncodedJSValue JSC_HOST_CALL functionJSCOptions(ExecState* exec) 2809 2830 { 2831 VM& vm = exec->vm(); 2810 2832 JSObject* optionsObject = constructEmptyObject(exec); 2811 2833 #define FOR_EACH_OPTION(type_, name_, defaultValue_, availability_, description_) \ 2812 addOption( exec->vm(), optionsObject, Identifier::fromString(exec, #name_), Options::name_());2834 addOption(vm, optionsObject, Identifier::fromString(exec, #name_), Options::name_()); 2813 2835 JSC_OPTIONS(FOR_EACH_OPTION) 2814 2836 #undef FOR_EACH_OPTION … … 2848 2870 EncodedJSValue JSC_HOST_CALL functionFailNextNewCodeBlock(ExecState* exec) 2849 2871 { 2850 exec->vm().setFailNextNewCodeBlock(); 2872 VM& vm = exec->vm(); 2873 vm.setFailNextNewCodeBlock(); 2851 2874 return JSValue::encode(jsUndefined()); 2852 2875 } … … 2890 2913 EncodedJSValue JSC_HOST_CALL functionMakeMasquerader(ExecState* exec) 2891 2914 { 2892 return JSValue::encode(Masquerader::create(exec->vm(), exec->lexicalGlobalObject())); 2915 VM& vm = exec->vm(); 2916 return JSValue::encode(Masquerader::create(vm, exec->lexicalGlobalObject())); 2893 2917 } 2894 2918 … … 2903 2927 EncodedJSValue JSC_HOST_CALL functionDumpTypesForAllVariables(ExecState* exec) 2904 2928 { 2905 exec->vm().dumpTypeProfilerData(); 2929 VM& vm = exec->vm(); 2930 vm.dumpTypeProfilerData(); 2906 2931 return JSValue::encode(jsUndefined()); 2907 2932 } … … 2910 2935 { 2911 2936 VM& vm = exec->vm(); 2912 RELEASE_ASSERT( exec->vm().typeProfiler());2937 RELEASE_ASSERT(vm.typeProfiler()); 2913 2938 vm.typeProfilerLog()->processLogEntries(ASCIILiteral("jsc Testing API: functionFindTypeForExpression")); 2914 2939 … … 2922 2947 unsigned offset = static_cast<unsigned>(sourceCodeText.find(substring) + executable->source().startOffset()); 2923 2948 2924 String jsonString = exec->vm().typeProfiler()->typeInformationForExpressionAtOffset(TypeProfilerSearchDescriptorNormal, offset, executable->sourceID(), exec->vm());2949 String jsonString = vm.typeProfiler()->typeInformationForExpressionAtOffset(TypeProfilerSearchDescriptorNormal, offset, executable->sourceID(), vm); 2925 2950 return JSValue::encode(JSONParse(exec, jsonString)); 2926 2951 } … … 2929 2954 { 2930 2955 VM& vm = exec->vm(); 2931 RELEASE_ASSERT( exec->vm().typeProfiler());2956 RELEASE_ASSERT(vm.typeProfiler()); 2932 2957 vm.typeProfilerLog()->processLogEntries(ASCIILiteral("jsc Testing API: functionReturnTypeFor")); 2933 2958 … … 2937 2962 2938 2963 unsigned offset = executable->typeProfilingStartOffset(); 2939 String jsonString = exec->vm().typeProfiler()->typeInformationForExpressionAtOffset(TypeProfilerSearchDescriptorFunctionReturn, offset, executable->sourceID(), exec->vm());2964 String jsonString = vm.typeProfiler()->typeInformationForExpressionAtOffset(TypeProfilerSearchDescriptorFunctionReturn, offset, executable->sourceID(), vm); 2940 2965 return JSValue::encode(JSONParse(exec, jsonString)); 2941 2966 } … … 2943 2968 EncodedJSValue JSC_HOST_CALL functionDumpBasicBlockExecutionRanges(ExecState* exec) 2944 2969 { 2945 RELEASE_ASSERT(exec->vm().controlFlowProfiler()); 2946 exec->vm().controlFlowProfiler()->dumpData(); 2970 VM& vm = exec->vm(); 2971 RELEASE_ASSERT(vm.controlFlowProfiler()); 2972 vm.controlFlowProfiler()->dumpData(); 2947 2973 return JSValue::encode(jsUndefined()); 2948 2974 } … … 2982 3008 int offset = sourceCodeText.find(substring) + executable->source().startOffset(); 2983 3009 2984 size_t executionCount = vm.controlFlowProfiler()->basicBlockExecutionCountAtTextOffset(offset, executable->sourceID(), exec->vm());3010 size_t executionCount = vm.controlFlowProfiler()->basicBlockExecutionCountAtTextOffset(offset, executable->sourceID(), vm); 2985 3011 return JSValue::encode(JSValue(executionCount)); 2986 3012 } … … 2994 3020 EncodedJSValue JSC_HOST_CALL functionDrainMicrotasks(ExecState* exec) 2995 3021 { 2996 exec->vm().drainMicrotasks(); 3022 VM& vm = exec->vm(); 3023 vm.drainMicrotasks(); 2997 3024 return JSValue::encode(jsUndefined()); 2998 3025 } … … 3094 3121 auto scope = DECLARE_THROW_SCOPE(vm); 3095 3122 3096 HeapSnapshotBuilder snapshotBuilder( exec->vm().ensureHeapProfiler());3123 HeapSnapshotBuilder snapshotBuilder(vm.ensureHeapProfiler()); 3097 3124 snapshotBuilder.buildSnapshot(); 3098 3125 … … 3114 3141 for (unsigned i = 0; i < exec->argumentCount(); ++i) { 3115 3142 if (JSObject* object = jsDynamicCast<JSObject*>(vm, exec->argument(0))) 3116 object->ensureArrayStorage( exec->vm());3143 object->ensureArrayStorage(vm); 3117 3144 } 3118 3145 return JSValue::encode(jsUndefined()); … … 3122 3149 EncodedJSValue JSC_HOST_CALL functionStartSamplingProfiler(ExecState* exec) 3123 3150 { 3124 SamplingProfiler& samplingProfiler = exec->vm().ensureSamplingProfiler(WTF::Stopwatch::create()); 3151 VM& vm = exec->vm(); 3152 SamplingProfiler& samplingProfiler = vm.ensureSamplingProfiler(WTF::Stopwatch::create()); 3125 3153 samplingProfiler.noticeCurrentThreadAsJSCExecutionThread(); 3126 3154 samplingProfiler.start(); … … 3480 3508 source = source + line; 3481 3509 source = source + '\n'; 3482 checkSyntax( globalObject->vm(), makeSource(source, sourceOrigin), error);3510 checkSyntax(vm, makeSource(source, sourceOrigin), error); 3483 3511 if (!line[0]) { 3484 3512 free(line); … … 3519 3547 3520 3548 scope.clearException(); 3521 globalObject->vm().drainMicrotasks();3549 vm.drainMicrotasks(); 3522 3550 } 3523 3551 printf("\n");
Note:
See TracChangeset
for help on using the changeset viewer.