|
Lines 1-3
a/Source/JavaScriptCore/ChangeLog_sec1
|
|
|
1 |
2017-05-14 Yusuke Suzuki <utatane.tea@gmail.com> |
| 2 |
|
| 3 |
[JSC][DFG][DOMJIT] Extend CheckDOM to CheckSubClass |
| 4 |
https://bugs.webkit.org/show_bug.cgi?id=172098 |
| 5 |
|
| 6 |
Reviewed by NOBODY (OOPS!). |
| 7 |
|
| 8 |
In this patch, we generalize CheckDOM to CheckSubClass. |
| 9 |
It can accept any ClassInfo and perform ClassInfo check |
| 10 |
in DFG / FTL. Now, we add a new function pointer to ClassInfo, |
| 11 |
checkSubClassPatchpoint. It can create DOMJIT patchpoint |
| 12 |
for that ClassInfo. It it natural that ClassInfo holds the |
| 13 |
way to emit DOMJIT::Patchpoint to perform CheckSubClass |
| 14 |
rather than having it in each DOMJIT getter / function |
| 15 |
signature annotation. |
| 16 |
|
| 17 |
One problem is that it enlarges the size of ClassInfo. |
| 18 |
But this is the best place to put this function pointer. |
| 19 |
By doing so, we can add a patchpoint for CheckSubClass |
| 20 |
in an non-intrusive manner: WebCore can inject patchpoints |
| 21 |
without interactive JSC. |
| 22 |
|
| 23 |
We still have a way to reduce the size of ClassInfo if |
| 24 |
we move ArrayBuffer related methods out to the other places. |
| 25 |
|
| 26 |
This patch touches many files because we add a new function |
| 27 |
pointer to ClassInfo. But they are basically mechanical change. |
| 28 |
|
| 29 |
* API/JSAPIWrapperObject.mm: |
| 30 |
* API/JSCallbackConstructor.cpp: |
| 31 |
* API/JSCallbackFunction.cpp: |
| 32 |
* API/JSCallbackObject.cpp: |
| 33 |
* API/ObjCCallbackFunction.mm: |
| 34 |
* bytecode/CodeBlock.cpp: |
| 35 |
* bytecode/DOMJITAccessCasePatchpointParams.h: |
| 36 |
(JSC::DOMJITAccessCasePatchpointParams::DOMJITAccessCasePatchpointParams): |
| 37 |
* bytecode/EvalCodeBlock.cpp: |
| 38 |
* bytecode/FunctionCodeBlock.cpp: |
| 39 |
* bytecode/GetterSetterAccessCase.cpp: |
| 40 |
(JSC::GetterSetterAccessCase::emitDOMJITGetter): |
| 41 |
* bytecode/ModuleProgramCodeBlock.cpp: |
| 42 |
* bytecode/ProgramCodeBlock.cpp: |
| 43 |
* bytecode/UnlinkedCodeBlock.cpp: |
| 44 |
* bytecode/UnlinkedEvalCodeBlock.cpp: |
| 45 |
* bytecode/UnlinkedFunctionCodeBlock.cpp: |
| 46 |
* bytecode/UnlinkedFunctionExecutable.cpp: |
| 47 |
* bytecode/UnlinkedModuleProgramCodeBlock.cpp: |
| 48 |
* bytecode/UnlinkedProgramCodeBlock.cpp: |
| 49 |
* debugger/DebuggerScope.cpp: |
| 50 |
* dfg/DFGAbstractInterpreterInlines.h: |
| 51 |
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): |
| 52 |
* dfg/DFGByteCodeParser.cpp: |
| 53 |
(JSC::DFG::ByteCodeParser::handleDOMJITGetter): |
| 54 |
* dfg/DFGClobberize.h: |
| 55 |
(JSC::DFG::clobberize): |
| 56 |
* dfg/DFGConstantFoldingPhase.cpp: |
| 57 |
(JSC::DFG::ConstantFoldingPhase::foldConstants): |
| 58 |
* dfg/DFGDOMJITPatchpointParams.h: |
| 59 |
(JSC::DFG::DOMJITPatchpointParams::DOMJITPatchpointParams): |
| 60 |
* dfg/DFGDoesGC.cpp: |
| 61 |
(JSC::DFG::doesGC): |
| 62 |
* dfg/DFGFixupPhase.cpp: |
| 63 |
(JSC::DFG::FixupPhase::fixupNode): |
| 64 |
(JSC::DFG::FixupPhase::attemptToMakeCallDOM): |
| 65 |
(JSC::DFG::FixupPhase::fixupCheckSubClass): |
| 66 |
(JSC::DFG::FixupPhase::fixupCheckDOM): Deleted. |
| 67 |
* dfg/DFGNode.h: |
| 68 |
(JSC::DFG::Node::hasClassInfo): |
| 69 |
(JSC::DFG::Node::classInfo): |
| 70 |
(JSC::DFG::Node::hasCheckDOMPatchpoint): Deleted. |
| 71 |
(JSC::DFG::Node::checkDOMPatchpoint): Deleted. |
| 72 |
* dfg/DFGNodeType.h: |
| 73 |
* dfg/DFGPredictionPropagationPhase.cpp: |
| 74 |
* dfg/DFGSafeToExecute.h: |
| 75 |
(JSC::DFG::safeToExecute): |
| 76 |
* dfg/DFGSpeculativeJIT.cpp: |
| 77 |
(JSC::DFG::SpeculativeJIT::compileCheckSubClass): |
| 78 |
(JSC::DFG::SpeculativeJIT::compileCheckDOM): Deleted. |
| 79 |
* dfg/DFGSpeculativeJIT.h: |
| 80 |
(JSC::DFG::SpeculativeJIT::vm): |
| 81 |
* dfg/DFGSpeculativeJIT32_64.cpp: |
| 82 |
(JSC::DFG::SpeculativeJIT::compile): |
| 83 |
* dfg/DFGSpeculativeJIT64.cpp: |
| 84 |
(JSC::DFG::SpeculativeJIT::compile): |
| 85 |
In DFG, we rename CheckDOM to CheckSubClass. It just holds ClassInfo. |
| 86 |
And ClassInfo knows how to perform CheckSubClass efficiently. |
| 87 |
If ClassInfo does not have a way to perform CheckSubClass efficiently, |
| 88 |
we just perform jsDynamicCast thing in ASM. |
| 89 |
|
| 90 |
* domjit/DOMJITGetterSetter.h: |
| 91 |
* domjit/DOMJITPatchpointParams.h: |
| 92 |
(JSC::DOMJIT::PatchpointParams::PatchpointParams): |
| 93 |
(JSC::DOMJIT::PatchpointParams::vm): |
| 94 |
* domjit/DOMJITSignature.h: |
| 95 |
(JSC::DOMJIT::Signature::Signature): |
| 96 |
(JSC::DOMJIT::Signature::checkDOM): Deleted. |
| 97 |
* ftl/FTLAbstractHeapRepository.h: |
| 98 |
* ftl/FTLCapabilities.cpp: |
| 99 |
(JSC::FTL::canCompile): |
| 100 |
* ftl/FTLDOMJITPatchpointParams.h: |
| 101 |
(JSC::FTL::DOMJITPatchpointParams::DOMJITPatchpointParams): |
| 102 |
* ftl/FTLLowerDFGToB3.cpp: |
| 103 |
(JSC::FTL::DFG::LowerDFGToB3::compileNode): |
| 104 |
(JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): |
| 105 |
(JSC::FTL::DFG::LowerDFGToB3::compileCheckDOM): Deleted. |
| 106 |
* inspector/JSInjectedScriptHost.cpp: |
| 107 |
* inspector/JSInjectedScriptHostPrototype.cpp: |
| 108 |
* inspector/JSJavaScriptCallFrame.cpp: |
| 109 |
* inspector/JSJavaScriptCallFramePrototype.cpp: |
| 110 |
* jsc.cpp: |
| 111 |
(WTF::DOMJITNode::checkSubClassPatchpoint): |
| 112 |
(WTF::DOMJITFunctionObject::checkSubClassPatchpoint): |
| 113 |
(WTF::DOMJITNode::checkDOMJITNode): Deleted. |
| 114 |
(WTF::DOMJITFunctionObject::checkDOMJITNode): Deleted. |
| 115 |
* runtime/AbstractModuleRecord.cpp: |
| 116 |
* runtime/ArrayBufferNeuteringWatchpoint.cpp: |
| 117 |
* runtime/ArrayConstructor.cpp: |
| 118 |
* runtime/ArrayIteratorPrototype.cpp: |
| 119 |
* runtime/ArrayPrototype.cpp: |
| 120 |
* runtime/AsyncFunctionConstructor.cpp: |
| 121 |
* runtime/AsyncFunctionPrototype.cpp: |
| 122 |
* runtime/AtomicsObject.cpp: |
| 123 |
* runtime/BooleanConstructor.cpp: |
| 124 |
* runtime/BooleanObject.cpp: |
| 125 |
* runtime/BooleanPrototype.cpp: |
| 126 |
* runtime/ClassInfo.h: |
| 127 |
(JSC::ClassInfo::offsetOfParentClass): |
| 128 |
* runtime/ClonedArguments.cpp: |
| 129 |
* runtime/ConsoleObject.cpp: |
| 130 |
* runtime/CustomGetterSetter.cpp: |
| 131 |
* runtime/DateConstructor.cpp: |
| 132 |
* runtime/DateInstance.cpp: |
| 133 |
* runtime/DatePrototype.cpp: |
| 134 |
* runtime/DirectArguments.cpp: |
| 135 |
* runtime/Error.cpp: |
| 136 |
* runtime/ErrorConstructor.cpp: |
| 137 |
* runtime/ErrorInstance.cpp: |
| 138 |
* runtime/ErrorPrototype.cpp: |
| 139 |
* runtime/EvalExecutable.cpp: |
| 140 |
* runtime/Exception.cpp: |
| 141 |
* runtime/ExceptionHelpers.cpp: |
| 142 |
* runtime/ExecutableBase.cpp: |
| 143 |
* runtime/FunctionConstructor.cpp: |
| 144 |
* runtime/FunctionExecutable.cpp: |
| 145 |
* runtime/FunctionPrototype.cpp: |
| 146 |
* runtime/FunctionPrototype.cpp.tu: Added. |
| 147 |
* runtime/FunctionRareData.cpp: |
| 148 |
* runtime/GeneratorFunctionConstructor.cpp: |
| 149 |
* runtime/GeneratorFunctionPrototype.cpp: |
| 150 |
* runtime/GeneratorPrototype.cpp: |
| 151 |
* runtime/GetterSetter.cpp: |
| 152 |
* runtime/HashMapImpl.cpp: |
| 153 |
* runtime/HashMapImpl.h: |
| 154 |
* runtime/InferredType.cpp: |
| 155 |
(JSC::InferredType::create): |
| 156 |
* runtime/InferredTypeTable.cpp: |
| 157 |
* runtime/InferredValue.cpp: |
| 158 |
* runtime/InspectorInstrumentationObject.cpp: |
| 159 |
* runtime/InternalFunction.cpp: |
| 160 |
* runtime/IntlCollator.cpp: |
| 161 |
* runtime/IntlCollatorConstructor.cpp: |
| 162 |
* runtime/IntlCollatorPrototype.cpp: |
| 163 |
* runtime/IntlDateTimeFormat.cpp: |
| 164 |
* runtime/IntlDateTimeFormatConstructor.cpp: |
| 165 |
* runtime/IntlDateTimeFormatPrototype.cpp: |
| 166 |
* runtime/IntlNumberFormat.cpp: |
| 167 |
* runtime/IntlNumberFormatConstructor.cpp: |
| 168 |
* runtime/IntlNumberFormatPrototype.cpp: |
| 169 |
* runtime/IntlObject.cpp: |
| 170 |
* runtime/IteratorPrototype.cpp: |
| 171 |
* runtime/JSAPIValueWrapper.cpp: |
| 172 |
* runtime/JSArray.cpp: |
| 173 |
* runtime/JSArrayBuffer.cpp: |
| 174 |
* runtime/JSArrayBufferConstructor.cpp: |
| 175 |
* runtime/JSArrayBufferPrototype.cpp: |
| 176 |
* runtime/JSArrayBufferView.cpp: |
| 177 |
* runtime/JSAsyncFunction.cpp: |
| 178 |
* runtime/JSBoundFunction.cpp: |
| 179 |
* runtime/JSCallee.cpp: |
| 180 |
* runtime/JSCustomGetterSetterFunction.cpp: |
| 181 |
* runtime/JSDataView.cpp: |
| 182 |
* runtime/JSDataViewPrototype.cpp: |
| 183 |
* runtime/JSEnvironmentRecord.cpp: |
| 184 |
* runtime/JSFixedArray.cpp: |
| 185 |
* runtime/JSFunction.cpp: |
| 186 |
* runtime/JSGeneratorFunction.cpp: |
| 187 |
* runtime/JSGlobalLexicalEnvironment.cpp: |
| 188 |
* runtime/JSGlobalObject.cpp: |
| 189 |
* runtime/JSInternalPromise.cpp: |
| 190 |
* runtime/JSInternalPromiseConstructor.cpp: |
| 191 |
* runtime/JSInternalPromiseDeferred.cpp: |
| 192 |
* runtime/JSInternalPromisePrototype.cpp: |
| 193 |
* runtime/JSLexicalEnvironment.cpp: |
| 194 |
* runtime/JSMap.cpp: |
| 195 |
* runtime/JSMapIterator.cpp: |
| 196 |
* runtime/JSModuleEnvironment.cpp: |
| 197 |
* runtime/JSModuleLoader.cpp: |
| 198 |
* runtime/JSModuleNamespaceObject.cpp: |
| 199 |
* runtime/JSModuleRecord.cpp: |
| 200 |
* runtime/JSNativeStdFunction.cpp: |
| 201 |
* runtime/JSONObject.cpp: |
| 202 |
* runtime/JSObject.cpp: |
| 203 |
* runtime/JSPromise.cpp: |
| 204 |
* runtime/JSPromiseConstructor.cpp: |
| 205 |
* runtime/JSPromiseDeferred.cpp: |
| 206 |
* runtime/JSPromisePrototype.cpp: |
| 207 |
* runtime/JSPropertyNameEnumerator.cpp: |
| 208 |
* runtime/JSPropertyNameIterator.cpp: |
| 209 |
* runtime/JSProxy.cpp: |
| 210 |
* runtime/JSScriptFetcher.cpp: |
| 211 |
* runtime/JSSet.cpp: |
| 212 |
* runtime/JSSetIterator.cpp: |
| 213 |
* runtime/JSSourceCode.cpp: |
| 214 |
* runtime/JSString.cpp: |
| 215 |
* runtime/JSStringIterator.cpp: |
| 216 |
* runtime/JSSymbolTableObject.cpp: |
| 217 |
* runtime/JSTemplateRegistryKey.cpp: |
| 218 |
* runtime/JSTypedArrayConstructors.cpp: |
| 219 |
* runtime/JSTypedArrayPrototypes.cpp: |
| 220 |
* runtime/JSTypedArrayViewConstructor.cpp: |
| 221 |
* runtime/JSTypedArrays.cpp: |
| 222 |
* runtime/JSWeakMap.cpp: |
| 223 |
* runtime/JSWeakSet.cpp: |
| 224 |
* runtime/JSWithScope.cpp: |
| 225 |
* runtime/MapConstructor.cpp: |
| 226 |
* runtime/MapIteratorPrototype.cpp: |
| 227 |
* runtime/MapPrototype.cpp: |
| 228 |
* runtime/MathObject.cpp: |
| 229 |
* runtime/ModuleLoaderPrototype.cpp: |
| 230 |
* runtime/ModuleProgramExecutable.cpp: |
| 231 |
* runtime/NativeErrorConstructor.cpp: |
| 232 |
* runtime/NativeExecutable.cpp: |
| 233 |
* runtime/NativeStdFunctionCell.cpp: |
| 234 |
* runtime/NullGetterFunction.cpp: |
| 235 |
* runtime/NullSetterFunction.cpp: |
| 236 |
* runtime/NumberConstructor.cpp: |
| 237 |
* runtime/NumberObject.cpp: |
| 238 |
* runtime/NumberPrototype.cpp: |
| 239 |
* runtime/ObjectConstructor.cpp: |
| 240 |
* runtime/ObjectPrototype.cpp: |
| 241 |
* runtime/ProgramExecutable.cpp: |
| 242 |
* runtime/PropertyTable.cpp: |
| 243 |
* runtime/ProxyConstructor.cpp: |
| 244 |
* runtime/ProxyObject.cpp: |
| 245 |
* runtime/ProxyRevoke.cpp: |
| 246 |
* runtime/ReflectObject.cpp: |
| 247 |
* runtime/RegExp.cpp: |
| 248 |
* runtime/RegExpConstructor.cpp: |
| 249 |
* runtime/RegExpObject.cpp: |
| 250 |
* runtime/RegExpPrototype.cpp: |
| 251 |
* runtime/ScopedArguments.cpp: |
| 252 |
* runtime/ScopedArgumentsTable.cpp: |
| 253 |
* runtime/ScriptExecutable.cpp: |
| 254 |
* runtime/SetConstructor.cpp: |
| 255 |
* runtime/SetIteratorPrototype.cpp: |
| 256 |
* runtime/SetPrototype.cpp: |
| 257 |
* runtime/SparseArrayValueMap.cpp: |
| 258 |
* runtime/StrictEvalActivation.cpp: |
| 259 |
* runtime/StringConstructor.cpp: |
| 260 |
* runtime/StringIteratorPrototype.cpp: |
| 261 |
* runtime/StringObject.cpp: |
| 262 |
* runtime/StringPrototype.cpp: |
| 263 |
* runtime/Structure.cpp: |
| 264 |
* runtime/StructureChain.cpp: |
| 265 |
* runtime/StructureRareData.cpp: |
| 266 |
* runtime/Symbol.cpp: |
| 267 |
* runtime/SymbolConstructor.cpp: |
| 268 |
* runtime/SymbolObject.cpp: |
| 269 |
* runtime/SymbolPrototype.cpp: |
| 270 |
* runtime/SymbolTable.cpp: |
| 271 |
* runtime/WeakMapConstructor.cpp: |
| 272 |
* runtime/WeakMapData.cpp: |
| 273 |
* runtime/WeakMapPrototype.cpp: |
| 274 |
* runtime/WeakSetConstructor.cpp: |
| 275 |
* runtime/WeakSetPrototype.cpp: |
| 276 |
* testRegExp.cpp: |
| 277 |
* tools/JSDollarVM.cpp: |
| 278 |
* tools/JSDollarVMPrototype.cpp: |
| 279 |
* wasm/JSWebAssembly.cpp: |
| 280 |
* wasm/js/JSWebAssemblyCodeBlock.cpp: |
| 281 |
* wasm/js/JSWebAssemblyCompileError.cpp: |
| 282 |
* wasm/js/JSWebAssemblyInstance.cpp: |
| 283 |
* wasm/js/JSWebAssemblyLinkError.cpp: |
| 284 |
* wasm/js/JSWebAssemblyMemory.cpp: |
| 285 |
* wasm/js/JSWebAssemblyModule.cpp: |
| 286 |
* wasm/js/JSWebAssemblyRuntimeError.cpp: |
| 287 |
* wasm/js/JSWebAssemblyTable.cpp: |
| 288 |
* wasm/js/WebAssemblyCompileErrorConstructor.cpp: |
| 289 |
* wasm/js/WebAssemblyCompileErrorPrototype.cpp: |
| 290 |
* wasm/js/WebAssemblyFunction.cpp: |
| 291 |
* wasm/js/WebAssemblyInstanceConstructor.cpp: |
| 292 |
* wasm/js/WebAssemblyInstancePrototype.cpp: |
| 293 |
* wasm/js/WebAssemblyLinkErrorConstructor.cpp: |
| 294 |
* wasm/js/WebAssemblyLinkErrorPrototype.cpp: |
| 295 |
* wasm/js/WebAssemblyMemoryConstructor.cpp: |
| 296 |
* wasm/js/WebAssemblyMemoryPrototype.cpp: |
| 297 |
* wasm/js/WebAssemblyModuleConstructor.cpp: |
| 298 |
* wasm/js/WebAssemblyModulePrototype.cpp: |
| 299 |
* wasm/js/WebAssemblyModuleRecord.cpp: |
| 300 |
* wasm/js/WebAssemblyPrototype.cpp: |
| 301 |
* wasm/js/WebAssemblyRuntimeErrorConstructor.cpp: |
| 302 |
* wasm/js/WebAssemblyRuntimeErrorPrototype.cpp: |
| 303 |
* wasm/js/WebAssemblyTableConstructor.cpp: |
| 304 |
* wasm/js/WebAssemblyTablePrototype.cpp: |
| 305 |
* wasm/js/WebAssemblyToJSCallee.cpp: |
| 306 |
* wasm/js/WebAssemblyWrapperFunction.cpp: |
| 307 |
|
| 1 |
2017-05-13 David Kilzer <ddkilzer@apple.com> |
308 |
2017-05-13 David Kilzer <ddkilzer@apple.com> |
| 2 |
|
309 |
|
| 3 |
Unused lambda capture in JSContextGroupAddMarkingConstraint() |
310 |
Unused lambda capture in JSContextGroupAddMarkingConstraint() |