[JSC] GetterSetter should be JSCell, not JSObject
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2019-10-08  Yusuke Suzuki  <ysuzuki@apple.com>
2
3         [JSC] GetterSetter should be JSCell, not JSObject
4         https://bugs.webkit.org/show_bug.cgi?id=202656
5
6         Reviewed by Tadeu Zagallo and Saam Barati.
7
8         Essentially, GetterSetter is not a JSObject. It is like a JSCell. But we made GetterSetter JSObject
9         to leverage existing strict-eq implementations for JSObject: pointer-comparison. But given the following
10         conditions,
11
12         1. GetterSetter strict-eq comparison only happens in builtin code when using @tryGetById.
13         2. RHS of that comparison is always folded into constant in DFG.
14         3. We already use pointer-comparison for cells that are neither JSString nor JSBigInt.
15         4. DFG strength reduction already has a rule which makes `CompareStrictEq(Cell-not-JSString/JSBigInt, Constant)` `ComparePtrEq`.
16
17         So we already support non-JSString/JSBigInt cell comparison in JSC JS code. We should use it instead of making GetterSetter JSObject.
18         This patch makes GetterSetter JSCell, and makes getterSetterStructure per-VM structure.
19
20         The attached test reported AI validation failure. AI assumed that GetterSetter's realm should be the same to the base object. But
21         this is incorrect in our runtime code: we are creating GetterSetter with lexical realm (JSGlobalObject). But the fundamental problem
22         is that GetterSetter is JSObject and tied to JSGlobalObject while it is not necessary.
23
24         * dfg/DFGAbstractInterpreterInlines.h:
25         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
26         * dfg/DFGFixupPhase.cpp:
27         * runtime/GetterSetter.cpp:
28         * runtime/GetterSetter.h:
29         * runtime/JSGlobalObject.cpp:
30         (JSC::getGetterById):
31         (JSC::JSGlobalObject::init):
32         (JSC::JSGlobalObject::visitChildren):
33         * runtime/JSGlobalObject.h:
34         (JSC::JSGlobalObject::regExpProtoGlobalGetter const):
35         (JSC::JSGlobalObject::regExpProtoUnicodeGetter const):
36         (JSC::JSGlobalObject::customGetterSetterFunctionStructure const):
37         (JSC::JSGlobalObject::getterSetterStructure const): Deleted.
38         * runtime/JSType.h:
39         * runtime/VM.cpp:
40         (JSC::VM::VM):
41         * runtime/VM.h:
42
43 2019-10-08  Devin Rousso  <drousso@apple.com>
44
45         Web Inspector: Canvas: modifications to shader modules can be shared between vertex/fragment shaders
46         https://bugs.webkit.org/show_bug.cgi?id=202031
47
48         Reviewed by Dean Jackson.
49
50         * inspector/protocol/Canvas.json:
51         Create a distinct `ShaderProgram` type so that additional data can be bundled and sent to
52         the frontend as part of the `programCreated` event without having to worry about having too
53         many arguments.
54
55 2019-10-08  Alexey Shvayka  <shvaikalesh@gmail.com>
56
57         JSON.parse incorrectly handles array proxies
58         https://bugs.webkit.org/show_bug.cgi?id=199292
59
60         Reviewed by Saam Barati.
61
62         1. Use isArray to correctly detect proxied arrays.
63         2. Make "length" lookup observable to array proxies and handle exceptions.
64
65         * runtime/JSONObject.cpp:
66         (JSC::Walker::walk):
67
68 2019-10-08  Adrian Perez de Castro  <aperez@igalia.com>
69
70         [GTK][WPE] Fix non-unified builds after r250486
71         https://bugs.webkit.org/show_bug.cgi?id=202636
72
73         Reviewed by Youenn Fablet.
74
75         * runtime/JSLock.h: Add missing inclusion of wtf/ForbidHeapAllocation.h
76         * wasm/WasmSignature.cpp: Add missing inclusions of wtf/CommaPrinter.h and
77         wtf/StringPrintStream.h (needed by debug builds).
78         * wasm/WasmStreamingParser.cpp: Add missing inclusion of WasmSignatureInlines.h to
79         avoid missing symbols during linking.
80
81 2019-10-08  Yusuke Suzuki  <ysuzuki@apple.com>
82
83         [JSC] FTL vmCall should check # of arguments
84         https://bugs.webkit.org/show_bug.cgi?id=202683
85
86         Reviewed by Saam Barati.
87
88         This patch inserts static_assert for # of arguments when using FTL vmCall.
89         It turned out that such check is useful when converting ExecState* to JSGlobalObject*.
90         Like, first, adding JSGlobalObject* parameter, making it compiled and removing ExecState* and m_callFrame parameter later.
91
92         * ftl/FTLLowerDFGToB3.cpp:
93         (JSC::FTL::DFG::LowerDFGToB3::compileToObjectOrCallObjectConstructor):
94         (JSC::FTL::DFG::LowerDFGToB3::compileToThis):
95         (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
96         (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
97         (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
98         (JSC::FTL::DFG::LowerDFGToB3::compileStrCat):
99         (JSC::FTL::DFG::LowerDFGToB3::compileArithClz32):
100         (JSC::FTL::DFG::LowerDFGToB3::compileValueDiv):
101         (JSC::FTL::DFG::LowerDFGToB3::compileValueMod):
102         (JSC::FTL::DFG::LowerDFGToB3::compileArithAbs):
103         (JSC::FTL::DFG::LowerDFGToB3::compileArithUnary):
104         (JSC::FTL::DFG::LowerDFGToB3::compileValuePow):
105         (JSC::FTL::DFG::LowerDFGToB3::compileArithRound):
106         (JSC::FTL::DFG::LowerDFGToB3::compileArithFloor):
107         (JSC::FTL::DFG::LowerDFGToB3::compileArithCeil):
108         (JSC::FTL::DFG::LowerDFGToB3::compileArithTrunc):
109         (JSC::FTL::DFG::LowerDFGToB3::compileArithSqrt):
110         (JSC::FTL::DFG::LowerDFGToB3::compileArithFRound):
111         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot):
112         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitAnd):
113         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitOr):
114         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitXor):
115         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitRShift):
116         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitLShift):
117         (JSC::FTL::DFG::LowerDFGToB3::compileArrayify):
118         (JSC::FTL::DFG::LowerDFGToB3::compileGetById):
119         (JSC::FTL::DFG::LowerDFGToB3::compileGetByIdWithThis):
120         (JSC::FTL::DFG::LowerDFGToB3::compileGetByValWithThis):
121         (JSC::FTL::DFG::LowerDFGToB3::compilePutByIdWithThis):
122         (JSC::FTL::DFG::LowerDFGToB3::compilePutByValWithThis):
123         (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite):
124         (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsIsLockFree):
125         (JSC::FTL::DFG::LowerDFGToB3::compileDefineDataProperty):
126         (JSC::FTL::DFG::LowerDFGToB3::compileDefineAccessorProperty):
127         (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage):
128         (JSC::FTL::DFG::LowerDFGToB3::compileGetPrototypeOf):
129         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
130         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
131         (JSC::FTL::DFG::LowerDFGToB3::compilePutAccessorById):
132         (JSC::FTL::DFG::LowerDFGToB3::compilePutGetterSetterById):
133         (JSC::FTL::DFG::LowerDFGToB3::compilePutAccessorByVal):
134         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteById):
135         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal):
136         (JSC::FTL::DFG::LowerDFGToB3::compileArrayPush):
137         (JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOf):
138         (JSC::FTL::DFG::LowerDFGToB3::compileArrayPop):
139         (JSC::FTL::DFG::LowerDFGToB3::compilePushWithScope):
140         (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation):
141         (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
142         (JSC::FTL::DFG::LowerDFGToB3::compileCreateScopedArguments):
143         (JSC::FTL::DFG::LowerDFGToB3::compileCreateClonedArguments):
144         (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest):
145         (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys):
146         (JSC::FTL::DFG::LowerDFGToB3::compileObjectCreate):
147         (JSC::FTL::DFG::LowerDFGToB3::compileNewPromise):
148         (JSC::FTL::DFG::LowerDFGToB3::compileNewInternalFieldObject):
149         (JSC::FTL::DFG::LowerDFGToB3::compileNewSymbol):
150         (JSC::FTL::DFG::LowerDFGToB3::compileNewArray):
151         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
152         (JSC::FTL::DFG::LowerDFGToB3::compileCreateThis):
153         (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
154         (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
155         (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
156         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayBuffer):
157         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSize):
158         (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
159         (JSC::FTL::DFG::LowerDFGToB3::compileToNumber):
160         (JSC::FTL::DFG::LowerDFGToB3::compileToStringOrCallStringConstructorOrStringValueOf):
161         (JSC::FTL::DFG::LowerDFGToB3::compileToPrimitive):
162         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
163         (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode):
164         (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
165         (JSC::FTL::DFG::LowerDFGToB3::compileSameValue):
166         (JSC::FTL::DFG::LowerDFGToB3::compileLoadVarargs):
167         (JSC::FTL::DFG::LowerDFGToB3::compileSwitch):
168         (JSC::FTL::DFG::LowerDFGToB3::compileThrow):
169         (JSC::FTL::DFG::LowerDFGToB3::compileThrowStaticError):
170         (JSC::FTL::DFG::LowerDFGToB3::mapHashString):
171         (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
172         (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):
173         (JSC::FTL::DFG::LowerDFGToB3::compileSetAdd):
174         (JSC::FTL::DFG::LowerDFGToB3::compileMapSet):
175         (JSC::FTL::DFG::LowerDFGToB3::compileWeakSetAdd):
176         (JSC::FTL::DFG::LowerDFGToB3::compileWeakMapSet):
177         (JSC::FTL::DFG::LowerDFGToB3::compileInByVal):
178         (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty):
179         (JSC::FTL::DFG::LowerDFGToB3::compileParseInt):
180         (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOfCustom):
181         (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):
182         (JSC::FTL::DFG::LowerDFGToB3::compileHasGenericProperty):
183         (JSC::FTL::DFG::LowerDFGToB3::compileHasStructureProperty):
184         (JSC::FTL::DFG::LowerDFGToB3::compileGetDirectPname):
185         (JSC::FTL::DFG::LowerDFGToB3::compileGetPropertyEnumerator):
186         (JSC::FTL::DFG::LowerDFGToB3::compileToIndexString):
187         (JSC::FTL::DFG::LowerDFGToB3::compileRegExpExec):
188         (JSC::FTL::DFG::LowerDFGToB3::compileRegExpExecNonGlobalOrSticky):
189         (JSC::FTL::DFG::LowerDFGToB3::compileRegExpMatchFastGlobal):
190         (JSC::FTL::DFG::LowerDFGToB3::compileRegExpTest):
191         (JSC::FTL::DFG::LowerDFGToB3::compileRegExpMatchFast):
192         (JSC::FTL::DFG::LowerDFGToB3::compileSetFunctionName):
193         (JSC::FTL::DFG::LowerDFGToB3::compileStringReplace):
194         (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage):
195         (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage):
196         (JSC::FTL::DFG::LowerDFGToB3::compare):
197         (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice):
198         (JSC::FTL::DFG::LowerDFGToB3::compileToLowerCase):
199         (JSC::FTL::DFG::LowerDFGToB3::compileNumberToStringWithRadix):
200         (JSC::FTL::DFG::LowerDFGToB3::compileNumberToStringWithValidRadixConstant):
201         (JSC::FTL::DFG::LowerDFGToB3::compileResolveScopeForHoistingFuncDeclInEval):
202         (JSC::FTL::DFG::LowerDFGToB3::compileResolveScope):
203         (JSC::FTL::DFG::LowerDFGToB3::compileGetDynamicVar):
204         (JSC::FTL::DFG::LowerDFGToB3::compilePutDynamicVar):
205         (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
206         (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter):
207         (JSC::FTL::DFG::LowerDFGToB3::nonSpeculativeCompare):
208         (JSC::FTL::DFG::LowerDFGToB3::stringsEqual):
209         (JSC::FTL::DFG::LowerDFGToB3::ensureShadowChickenPacket):
210         (JSC::FTL::DFG::LowerDFGToB3::contiguousPutByValOutOfBounds):
211         (JSC::FTL::DFG::LowerDFGToB3::switchStringSlow):
212         (JSC::FTL::DFG::LowerDFGToB3::emitStoreBarrier):
213         (JSC::FTL::DFG::LowerDFGToB3::vmCall):
214
215 2019-10-07  Yusuke Suzuki  <ysuzuki@apple.com>
216
217         [JSC] Clean up ThunkGenerator's nativeCallTrampoline generator code
218         https://bugs.webkit.org/show_bug.cgi?id=202657
219
220         Reviewed by Saam Barati.
221
222         ThunkGenerator has per-architecture JIT code for nativeForGenerator, but this is unnecessary.
223         This patch cleans up it and unifies the implementations.
224
225         * jit/ThunkGenerators.cpp:
226         (JSC::nativeForGenerator):
227
228 2019-10-07  Saam Barati  <sbarati@apple.com>
229
230         Allow OSR exit to the LLInt
231         https://bugs.webkit.org/show_bug.cgi?id=197993
232
233         Reviewed by Tadeu Zagallo.
234
235         This patch makes it so we can OSR exit to the LLInt.
236         Here are the interesting implementation details:
237         
238         1. We no longer baseline compile everything in the inline stack.
239         
240         2. When the top frame is a LLInt frame, we exit to the corresponding
241         LLInt bytecode. However, we need to materialize the LLInt registers
242         for PC, PB, and metadata.
243         
244         3. When dealing with inline call frames where the caller is LLInt, we
245         need to return to the appropriate place. Let's consider we're exiting
246         at a place A->B (A calls B), where A is LLInt. If A is a normal call,
247         we place the return PC in the frame we materialize to B to be right
248         after the LLInt's inline cache for calls. If A is a varargs call, we place
249         it at the return location for vararg calls. The interesting scenario here
250         is where A is a getter/setter. This means that A might be get_by_id,
251         get_by_val, put_by_id, or put_by_val. Since the LLInt does not have any
252         form of IC for getters/setters, we make this work by creating new LLInt
253         "return location" stubs for these opcodes.
254         
255         4. We need to update what callee saves we store in the callee if the caller frame
256         is a LLInt frame. Let's consider an inline stack A->B->C, where A is a LLInt frame.
257         When we materialize the stack frame for B, we need to ensure that the LLInt callee
258         saves that A uses is stored into B's preserved callee saves. Specifically, this
259         is just the PB/metadata registers.
260         
261         This patch also fixes offlineasm's macro expansion to allow us to
262         use computed label names for global labels.
263         
264         In a future bug, I'm going to investigate some kind of control system for
265         throwing away baseline code when we tier up:
266         https://bugs.webkit.org/show_bug.cgi?id=202503
267
268         * JavaScriptCore.xcodeproj/project.pbxproj:
269         * Sources.txt:
270         * bytecode/CodeBlock.h:
271         (JSC::CodeBlock::metadataTable):
272         (JSC::CodeBlock::instructionsRawPointer):
273         * dfg/DFGOSRExit.cpp:
274         (JSC::DFG::OSRExit::executeOSRExit):
275         (JSC::DFG::reifyInlinedCallFrames):
276         (JSC::DFG::adjustAndJumpToTarget):
277         (JSC::DFG::OSRExit::compileOSRExit):
278         * dfg/DFGOSRExit.h:
279         (JSC::DFG::OSRExitState::OSRExitState):
280         * dfg/DFGOSRExitCompilerCommon.cpp:
281         (JSC::DFG::callerReturnPC):
282         (JSC::DFG::calleeSaveSlot):
283         (JSC::DFG::reifyInlinedCallFrames):
284         (JSC::DFG::adjustAndJumpToTarget):
285         * dfg/DFGOSRExitCompilerCommon.h:
286         * dfg/DFGOSRExitPreparation.cpp:
287         (JSC::DFG::prepareCodeOriginForOSRExit): Deleted.
288         * dfg/DFGOSRExitPreparation.h:
289         * ftl/FTLOSRExitCompiler.cpp:
290         (JSC::FTL::compileFTLOSRExit):
291         * llint/LLIntData.h:
292         (JSC::LLInt::getCodePtr):
293         * llint/LowLevelInterpreter.asm:
294         * llint/LowLevelInterpreter32_64.asm:
295         * llint/LowLevelInterpreter64.asm:
296         * offlineasm/asm.rb:
297         * offlineasm/transform.rb:
298         * runtime/OptionsList.h:
299
300 2019-10-07  Yusuke Suzuki  <ysuzuki@apple.com>
301
302         [JSC] Change signature of HostFunction to (JSGlobalObject*, CallFrame*)
303         https://bugs.webkit.org/show_bug.cgi?id=202569
304
305         Reviewed by Saam Barati.
306
307         This patch changes JSC host-functions's signature from `CallFrame*` to `JSGlobalObject*, CallFrame*`.
308         We would like to replace the current `ExecState*` use with `JSGlobalObject*` to fix many issues, remove
309         globalExec() hack, and remove `ExecState::vm()` hack. This is important since this hack prevents us from
310         implementing scalable IsoSubspace optimization, which leads to putting all JS cells in each IsoSubspace.
311
312         To get lexical JSGlobalObject in a super fast way, we put it in JSFunction/InternalFunction's field.
313         And trampoline gets JSGlobalObject from callee, and passes it as its argument. Since this trampoline already
314         accesses to the field of callee to get executable address, getting another field is fairly cheap.
315         The memory increase does not matter in this case. The sizeof(JSFunction) is 40. Since our allocation size of
316         JSCells are rounded by 16, increasing one field does not change the actual allocation size. And # of InternalFunction
317         is very limited since it is only used for constructors in JSC.
318
319         This patch changes the signature. And for the ExecState* -> JSGlobalObject* preparation, we use `CallFrame*` name
320         instead of `ExecState*` in the host-functions. And use `callFrame` variable name instead of `state` or `exec`.
321         And we also get VM& from `JSGlobalObject*` instead of `CallFrame*` since it is faster.
322
323         * API/APICallbackFunction.h:
324         (JSC::APICallbackFunction::call):
325         (JSC::APICallbackFunction::construct):
326         * API/APICast.h:
327         * API/JSAPIGlobalObject.mm:
328         (JSC::JSAPIGlobalObject::moduleLoaderFetch):
329         * API/JSBaseInternal.h:
330         * API/JSCallbackObject.h:
331         * API/JSCallbackObjectFunctions.h:
332         (JSC::JSCallbackObject<Parent>::construct):
333         (JSC::JSCallbackObject<Parent>::call):
334         * bytecode/InlineCallFrame.h:
335         * debugger/Debugger.h:
336         * dfg/DFGArithMode.h:
337         * dfg/DFGByteCodeParser.cpp:
338         (JSC::DFG::ByteCodeParser::handleTypedArrayConstructor):
339         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
340         * dfg/DFGGraph.h:
341         * dfg/DFGOSREntry.h:
342         * dfg/DFGSpeculativeJIT.cpp:
343         (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon):
344         * ftl/FTLAbstractHeapRepository.h:
345         * ftl/FTLLowerDFGToB3.cpp:
346         (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
347         * ftl/FTLOSREntry.h:
348         * inspector/ConsoleMessage.h:
349         * inspector/InjectedScriptBase.cpp:
350         (Inspector::InjectedScriptBase::makeAsyncCall):
351         * inspector/InjectedScriptManager.h:
352         * inspector/JSGlobalObjectInspectorController.h:
353         * inspector/JSInjectedScriptHostPrototype.cpp:
354         (Inspector::jsInjectedScriptHostPrototypeAttributeEvaluate):
355         (Inspector::jsInjectedScriptHostPrototypeAttributeSavedResultAlias):
356         (Inspector::jsInjectedScriptHostPrototypeFunctionInternalConstructorName):
357         (Inspector::jsInjectedScriptHostPrototypeFunctionIsHTMLAllCollection):
358         (Inspector::jsInjectedScriptHostPrototypeFunctionIsPromiseRejectedWithNativeGetterTypeError):
359         (Inspector::jsInjectedScriptHostPrototypeFunctionProxyTargetValue):
360         (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapSize):
361         (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapEntries):
362         (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetSize):
363         (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetEntries):
364         (Inspector::jsInjectedScriptHostPrototypeFunctionIteratorEntries):
365         (Inspector::jsInjectedScriptHostPrototypeFunctionQueryInstances):
366         (Inspector::jsInjectedScriptHostPrototypeFunctionQueryHolders):
367         (Inspector::jsInjectedScriptHostPrototypeFunctionEvaluateWithScopeExtension):
368         (Inspector::jsInjectedScriptHostPrototypeFunctionSubtype):
369         (Inspector::jsInjectedScriptHostPrototypeFunctionFunctionDetails):
370         (Inspector::jsInjectedScriptHostPrototypeFunctionGetInternalProperties):
371         * inspector/JSJavaScriptCallFramePrototype.cpp:
372         (Inspector::jsJavaScriptCallFramePrototypeFunctionEvaluateWithScopeExtension):
373         (Inspector::jsJavaScriptCallFramePrototypeFunctionScopeDescriptions):
374         (Inspector::jsJavaScriptCallFrameAttributeCaller):
375         (Inspector::jsJavaScriptCallFrameAttributeSourceID):
376         (Inspector::jsJavaScriptCallFrameAttributeLine):
377         (Inspector::jsJavaScriptCallFrameAttributeColumn):
378         (Inspector::jsJavaScriptCallFrameAttributeFunctionName):
379         (Inspector::jsJavaScriptCallFrameAttributeScopeChain):
380         (Inspector::jsJavaScriptCallFrameAttributeThisObject):
381         (Inspector::jsJavaScriptCallFrameAttributeType):
382         (Inspector::jsJavaScriptCallFrameIsTailDeleted):
383         * inspector/ScriptArguments.h:
384         * inspector/ScriptCallStackFactory.h:
385         * inspector/ScriptDebugServer.h:
386         * inspector/agents/InspectorConsoleAgent.h:
387         * interpreter/AbstractPC.h:
388         * interpreter/CallFrame.h:
389         (JSC::ExecState::guaranteedJSValueCallee const): Deleted.
390         (JSC::ExecState::jsCallee const): Deleted.
391         (JSC::ExecState::callee const): Deleted.
392         (JSC::ExecState::unsafeCallee const): Deleted.
393         (JSC::ExecState::codeBlock const): Deleted.
394         (JSC::ExecState::addressOfCodeBlock const): Deleted.
395         (JSC::ExecState::unsafeCodeBlock const): Deleted.
396         (JSC::ExecState::scope const): Deleted.
397         (JSC::ExecState::create): Deleted.
398         (JSC::ExecState::registers): Deleted.
399         (JSC::ExecState::registers const): Deleted.
400         (JSC::ExecState::operator=): Deleted.
401         (JSC::ExecState::callerFrame const): Deleted.
402         (JSC::ExecState::callerFrameOrEntryFrame const): Deleted.
403         (JSC::ExecState::unsafeCallerFrameOrEntryFrame const): Deleted.
404         (JSC::ExecState::callerFrameOffset): Deleted.
405         (JSC::ExecState::returnPC const): Deleted.
406         (JSC::ExecState::hasReturnPC const): Deleted.
407         (JSC::ExecState::clearReturnPC): Deleted.
408         (JSC::ExecState::returnPCOffset): Deleted.
409         (JSC::ExecState::abstractReturnPC): Deleted.
410         (JSC::ExecState::topOfFrame): Deleted.
411         (JSC::ExecState::setCallerFrame): Deleted.
412         (JSC::ExecState::setScope): Deleted.
413         (JSC::ExecState::argumentCount const): Deleted.
414         (JSC::ExecState::argumentCountIncludingThis const): Deleted.
415         (JSC::ExecState::argumentOffset): Deleted.
416         (JSC::ExecState::argumentOffsetIncludingThis): Deleted.
417         (JSC::ExecState::addressOfArgumentsStart const): Deleted.
418         (JSC::ExecState::argument): Deleted.
419         (JSC::ExecState::uncheckedArgument): Deleted.
420         (JSC::ExecState::setArgument): Deleted.
421         (JSC::ExecState::getArgumentUnsafe): Deleted.
422         (JSC::ExecState::thisArgumentOffset): Deleted.
423         (JSC::ExecState::thisValue): Deleted.
424         (JSC::ExecState::setThisValue): Deleted.
425         (JSC::ExecState::newTarget): Deleted.
426         (JSC::ExecState::offsetFor): Deleted.
427         (JSC::ExecState::noCaller): Deleted.
428         (JSC::ExecState::isGlobalExec const): Deleted.
429         (JSC::ExecState::setArgumentCountIncludingThis): Deleted.
430         (JSC::ExecState::setCallee): Deleted.
431         (JSC::ExecState::setCodeBlock): Deleted.
432         (JSC::ExecState::setReturnPC): Deleted.
433         (JSC::ExecState::iterate): Deleted.
434         (JSC::ExecState::argIndexForRegister): Deleted.
435         (JSC::ExecState::callerFrameAndPC): Deleted.
436         (JSC::ExecState::callerFrameAndPC const): Deleted.
437         (JSC::ExecState::unsafeCallerFrameAndPC const): Deleted.
438         * interpreter/Interpreter.cpp:
439         (JSC::Interpreter::executeProgram):
440         (JSC::Interpreter::executeCall):
441         (JSC::Interpreter::executeConstruct):
442         (JSC::Interpreter::prepareForRepeatCall):
443         (JSC::Interpreter::execute):
444         (JSC::Interpreter::executeModuleProgram):
445         * interpreter/ProtoCallFrame.h:
446         (JSC::ProtoCallFrame::init):
447         * interpreter/Register.h:
448         * interpreter/ShadowChicken.h:
449         * interpreter/StackVisitor.h:
450         * interpreter/VMEntryRecord.h:
451         (JSC::VMEntryRecord::prevTopCallFrame):
452         (JSC::VMEntryRecord::unsafePrevTopCallFrame):
453         * jit/CCallHelpers.h:
454         * jit/JITExceptions.h:
455         * jit/JITOperations.cpp:
456         * jit/JITOperations.h:
457         * jit/ThunkGenerators.cpp:
458         (JSC::nativeForGenerator):
459         * jsc.cpp:
460         (GlobalObject::finishCreation):
461         (functionPrintStdOut):
462         (functionPrintStdErr):
463         (functionDebug):
464         (functionDescribe):
465         (functionDescribeArray):
466         (functionSleepSeconds):
467         (functionJSCStack):
468         (functionGCAndSweep):
469         (functionFullGC):
470         (functionEdenGC):
471         (functionHeapSize):
472         (functionResetMemoryPeak):
473         (functionAddressOf):
474         (functionVersion):
475         (functionRun):
476         (functionRunString):
477         (functionLoad):
478         (functionLoadString):
479         (functionReadFile):
480         (functionCheckSyntax):
481         (functionSetSamplingFlags):
482         (functionClearSamplingFlags):
483         (functionGetRandomSeed):
484         (functionSetRandomSeed):
485         (functionIsRope):
486         (functionCallerSourceOrigin):
487         (functionReadline):
488         (functionPreciseTime):
489         (functionNeverInlineFunction):
490         (functionNoDFG):
491         (functionNoFTL):
492         (functionNoOSRExitFuzzing):
493         (functionOptimizeNextInvocation):
494         (functionNumberOfDFGCompiles):
495         (functionCallerIsOMGCompiled):
496         (functionDollarCreateRealm):
497         (functionDollarEvalScript):
498         (functionDollarAgentStart):
499         (functionDollarAgentReceiveBroadcast):
500         (functionDollarAgentReport):
501         (functionDollarAgentSleep):
502         (functionDollarAgentBroadcast):
503         (functionDollarAgentGetReport):
504         (functionDollarAgentLeaving):
505         (functionDollarAgentMonotonicNow):
506         (functionWaitForReport):
507         (functionHeapCapacity):
508         (functionFlashHeapAccess):
509         (functionDisableRichSourceInfo):
510         (functionMallocInALoop):
511         (functionTotalCompileTime):
512         (functionJSCOptions):
513         (functionReoptimizationRetryCount):
514         (functionTransferArrayBuffer):
515         (functionFailNextNewCodeBlock):
516         (functionQuit):
517         (functionFalse):
518         (functionUndefined1):
519         (functionUndefined2):
520         (functionIsInt32):
521         (functionIsPureNaN):
522         (functionIdentity):
523         (functionEffectful42):
524         (functionMakeMasquerader):
525         (functionHasCustomProperties):
526         (functionDumpTypesForAllVariables):
527         (functionDrainMicrotasks):
528         (functionReleaseWeakRefs):
529         (functionIs32BitPlatform):
530         (functionCreateGlobalObject):
531         (functionCheckModuleSyntax):
532         (functionPlatformSupportsSamplingProfiler):
533         (functionGenerateHeapSnapshot):
534         (functionGenerateHeapSnapshotForGCDebugging):
535         (functionResetSuperSamplerState):
536         (functionEnsureArrayStorage):
537         (functionStartSamplingProfiler):
538         (functionSamplingProfilerStackTraces):
539         (functionMaxArguments):
540         (functionAsyncTestStart):
541         (functionAsyncTestPassed):
542         (functionWebAssemblyMemoryMode):
543         (functionSetUnhandledRejectionCallback):
544         (runWithOptions):
545         (functionDollarDetachArrayBuffer): Deleted.
546         * llint/LLIntExceptions.h:
547         * llint/LLIntSlowPaths.cpp:
548         (JSC::LLInt::handleHostCall):
549         * llint/LLIntSlowPaths.h:
550         * llint/LowLevelInterpreter.cpp:
551         (JSC::CLoopRegister::callFrame const):
552         (JSC::CLoopRegister::execState const): Deleted.
553         * llint/LowLevelInterpreter32_64.asm:
554         * llint/LowLevelInterpreter64.asm:
555         * offlineasm/cloop.rb:
556         * runtime/ArrayBufferView.h:
557         * runtime/ArrayConstructor.cpp:
558         (JSC::constructArrayWithSizeQuirk):
559         (JSC::constructWithArrayConstructor):
560         (JSC::callArrayConstructor):
561         (JSC::arrayConstructorPrivateFuncIsArraySlow):
562         * runtime/ArrayConstructor.h:
563         * runtime/ArrayPrototype.cpp:
564         (JSC::arrayProtoFuncSpeciesCreate):
565         (JSC::arrayProtoFuncToString):
566         (JSC::arrayProtoFuncToLocaleString):
567         (JSC::arrayProtoFuncJoin):
568         (JSC::arrayProtoFuncPop):
569         (JSC::arrayProtoFuncPush):
570         (JSC::arrayProtoFuncReverse):
571         (JSC::arrayProtoFuncShift):
572         (JSC::arrayProtoFuncSlice):
573         (JSC::arrayProtoFuncSplice):
574         (JSC::arrayProtoFuncUnShift):
575         (JSC::arrayProtoFuncIndexOf):
576         (JSC::arrayProtoFuncLastIndexOf):
577         (JSC::arrayProtoPrivateFuncConcatMemcpy):
578         (JSC::arrayProtoPrivateFuncAppendMemcpy):
579         * runtime/ArrayPrototype.h:
580         * runtime/AsyncFunctionConstructor.cpp:
581         (JSC::callAsyncFunctionConstructor):
582         (JSC::constructAsyncFunctionConstructor):
583         * runtime/AsyncGeneratorFunctionConstructor.cpp:
584         (JSC::callAsyncGeneratorFunctionConstructor):
585         (JSC::constructAsyncGeneratorFunctionConstructor):
586         * runtime/AtomicsObject.cpp:
587         (JSC::atomicsFuncAdd):
588         (JSC::atomicsFuncAnd):
589         (JSC::atomicsFuncCompareExchange):
590         (JSC::atomicsFuncExchange):
591         (JSC::atomicsFuncIsLockFree):
592         (JSC::atomicsFuncLoad):
593         (JSC::atomicsFuncOr):
594         (JSC::atomicsFuncStore):
595         (JSC::atomicsFuncSub):
596         (JSC::atomicsFuncWait):
597         (JSC::atomicsFuncWake):
598         (JSC::atomicsFuncXor):
599         * runtime/BigIntConstructor.cpp:
600         (JSC::callBigIntConstructor):
601         (JSC::bigIntConstructorFuncAsUintN):
602         (JSC::bigIntConstructorFuncAsIntN):
603         * runtime/BigIntPrototype.cpp:
604         (JSC::bigIntProtoFuncToStringImpl):
605         (JSC::bigIntProtoFuncToString):
606         (JSC::bigIntProtoFuncToLocaleString):
607         (JSC::bigIntProtoFuncValueOf):
608         * runtime/BooleanConstructor.cpp:
609         (JSC::callBooleanConstructor):
610         (JSC::constructWithBooleanConstructor):
611         (JSC::constructBooleanFromImmediateBoolean):
612         * runtime/BooleanPrototype.cpp:
613         (JSC::booleanProtoFuncToString):
614         (JSC::booleanProtoFuncValueOf):
615         * runtime/CallData.h:
616         * runtime/CommonSlowPaths.h:
617         * runtime/Completion.h:
618         * runtime/ConsoleClient.h:
619         * runtime/ConsoleObject.cpp:
620         (JSC::consoleLogWithLevel):
621         (JSC::consoleProtoFuncDebug):
622         (JSC::consoleProtoFuncError):
623         (JSC::consoleProtoFuncLog):
624         (JSC::consoleProtoFuncInfo):
625         (JSC::consoleProtoFuncWarn):
626         (JSC::consoleProtoFuncClear):
627         (JSC::consoleProtoFuncDir):
628         (JSC::consoleProtoFuncDirXML):
629         (JSC::consoleProtoFuncTable):
630         (JSC::consoleProtoFuncTrace):
631         (JSC::consoleProtoFuncAssert):
632         (JSC::consoleProtoFuncCount):
633         (JSC::consoleProtoFuncCountReset):
634         (JSC::consoleProtoFuncProfile):
635         (JSC::consoleProtoFuncProfileEnd):
636         (JSC::consoleProtoFuncTakeHeapSnapshot):
637         (JSC::consoleProtoFuncTime):
638         (JSC::consoleProtoFuncTimeLog):
639         (JSC::consoleProtoFuncTimeEnd):
640         (JSC::consoleProtoFuncTimeStamp):
641         (JSC::consoleProtoFuncGroup):
642         (JSC::consoleProtoFuncGroupCollapsed):
643         (JSC::consoleProtoFuncGroupEnd):
644         (JSC::consoleProtoFuncRecord):
645         (JSC::consoleProtoFuncRecordEnd):
646         (JSC::consoleProtoFuncScreenshot):
647         * runtime/ConstructData.h:
648         * runtime/DateConstructor.cpp:
649         (JSC::constructWithDateConstructor):
650         (JSC::callDate):
651         (JSC::dateParse):
652         (JSC::dateNowImpl):
653         (JSC::dateNow):
654         (JSC::dateUTC):
655         * runtime/DateConstructor.h:
656         * runtime/DatePrototype.cpp:
657         (JSC::dateProtoFuncToString):
658         (JSC::dateProtoFuncToUTCString):
659         (JSC::dateProtoFuncToISOString):
660         (JSC::dateProtoFuncToDateString):
661         (JSC::dateProtoFuncToTimeString):
662         (JSC::dateProtoFuncToLocaleString):
663         (JSC::dateProtoFuncToLocaleDateString):
664         (JSC::dateProtoFuncToLocaleTimeString):
665         (JSC::dateProtoFuncToPrimitiveSymbol):
666         (JSC::dateProtoFuncGetTime):
667         (JSC::dateProtoFuncGetFullYear):
668         (JSC::dateProtoFuncGetUTCFullYear):
669         (JSC::dateProtoFuncGetMonth):
670         (JSC::dateProtoFuncGetUTCMonth):
671         (JSC::dateProtoFuncGetDate):
672         (JSC::dateProtoFuncGetUTCDate):
673         (JSC::dateProtoFuncGetDay):
674         (JSC::dateProtoFuncGetUTCDay):
675         (JSC::dateProtoFuncGetHours):
676         (JSC::dateProtoFuncGetUTCHours):
677         (JSC::dateProtoFuncGetMinutes):
678         (JSC::dateProtoFuncGetUTCMinutes):
679         (JSC::dateProtoFuncGetSeconds):
680         (JSC::dateProtoFuncGetUTCSeconds):
681         (JSC::dateProtoFuncGetMilliSeconds):
682         (JSC::dateProtoFuncGetUTCMilliseconds):
683         (JSC::dateProtoFuncGetTimezoneOffset):
684         (JSC::dateProtoFuncSetTime):
685         (JSC::dateProtoFuncSetMilliSeconds):
686         (JSC::dateProtoFuncSetUTCMilliseconds):
687         (JSC::dateProtoFuncSetSeconds):
688         (JSC::dateProtoFuncSetUTCSeconds):
689         (JSC::dateProtoFuncSetMinutes):
690         (JSC::dateProtoFuncSetUTCMinutes):
691         (JSC::dateProtoFuncSetHours):
692         (JSC::dateProtoFuncSetUTCHours):
693         (JSC::dateProtoFuncSetDate):
694         (JSC::dateProtoFuncSetUTCDate):
695         (JSC::dateProtoFuncSetMonth):
696         (JSC::dateProtoFuncSetUTCMonth):
697         (JSC::dateProtoFuncSetFullYear):
698         (JSC::dateProtoFuncSetUTCFullYear):
699         (JSC::dateProtoFuncSetYear):
700         (JSC::dateProtoFuncGetYear):
701         (JSC::dateProtoFuncToJSON):
702         * runtime/DatePrototype.h:
703         * runtime/ECMAScriptSpecInternalFunctions.cpp:
704         (JSC::esSpecIsConstructor):
705         * runtime/ECMAScriptSpecInternalFunctions.h:
706         * runtime/Error.h:
707         * runtime/ErrorConstructor.cpp:
708         (JSC::ErrorConstructor::finishCreation):
709         (JSC::constructErrorConstructor):
710         (JSC::callErrorConstructor):
711         (JSC::ErrorConstructor::put):
712         (JSC::ErrorConstructor::deleteProperty):
713         * runtime/ErrorPrototype.cpp:
714         (JSC::errorProtoFuncToString):
715         * runtime/ExceptionFuzz.h:
716         * runtime/FunctionConstructor.cpp:
717         (JSC::constructWithFunctionConstructor):
718         (JSC::callFunctionConstructor):
719         (JSC::constructFunction):
720         * runtime/FunctionPrototype.cpp:
721         (JSC::callFunctionPrototype):
722         (JSC::functionProtoFuncToString):
723         * runtime/GeneratorFunctionConstructor.cpp:
724         (JSC::callGeneratorFunctionConstructor):
725         (JSC::constructGeneratorFunctionConstructor):
726         * runtime/Identifier.h:
727         * runtime/InspectorInstrumentationObject.cpp:
728         (JSC::inspectorInstrumentationObjectLog):
729         * runtime/InternalFunction.cpp:
730         (JSC::InternalFunction::InternalFunction):
731         * runtime/InternalFunction.h:
732         (JSC::InternalFunction::offsetOfGlobalObject):
733         (JSC::InternalFunction::globalObject const):
734         * runtime/IntlCollatorConstructor.cpp:
735         (JSC::constructIntlCollator):
736         (JSC::callIntlCollator):
737         (JSC::IntlCollatorConstructorFuncSupportedLocalesOf):
738         * runtime/IntlCollatorConstructor.h:
739         * runtime/IntlCollatorPrototype.cpp:
740         (JSC::IntlCollatorFuncCompare):
741         (JSC::IntlCollatorPrototypeGetterCompare):
742         (JSC::IntlCollatorPrototypeFuncResolvedOptions):
743         * runtime/IntlDateTimeFormatConstructor.cpp:
744         (JSC::constructIntlDateTimeFormat):
745         (JSC::callIntlDateTimeFormat):
746         (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf):
747         * runtime/IntlDateTimeFormatConstructor.h:
748         * runtime/IntlDateTimeFormatPrototype.cpp:
749         (JSC::IntlDateTimeFormatFuncFormatDateTime):
750         (JSC::IntlDateTimeFormatPrototypeGetterFormat):
751         (JSC::IntlDateTimeFormatPrototypeFuncFormatToParts):
752         (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions):
753         * runtime/IntlNumberFormatConstructor.cpp:
754         (JSC::constructIntlNumberFormat):
755         (JSC::callIntlNumberFormat):
756         (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf):
757         * runtime/IntlNumberFormatConstructor.h:
758         * runtime/IntlNumberFormatPrototype.cpp:
759         (JSC::IntlNumberFormatFuncFormatNumber):
760         (JSC::IntlNumberFormatPrototypeGetterFormat):
761         (JSC::IntlNumberFormatPrototypeFuncFormatToParts):
762         (JSC::IntlNumberFormatPrototypeFuncResolvedOptions):
763         * runtime/IntlObject.cpp:
764         (JSC::intlObjectFuncGetCanonicalLocales):
765         * runtime/IntlPluralRulesConstructor.cpp:
766         (JSC::constructIntlPluralRules):
767         (JSC::callIntlPluralRules):
768         (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf):
769         * runtime/IntlPluralRulesConstructor.h:
770         * runtime/IntlPluralRulesPrototype.cpp:
771         (JSC::IntlPluralRulesPrototypeFuncSelect):
772         (JSC::IntlPluralRulesPrototypeFuncResolvedOptions):
773         * runtime/JSArrayBufferConstructor.cpp:
774         (JSC::JSGenericArrayBufferConstructor<sharingMode>::finishCreation):
775         (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructArrayBuffer):
776         (JSC::callArrayBuffer):
777         (JSC::arrayBufferFuncIsView):
778         * runtime/JSArrayBufferConstructor.h:
779         * runtime/JSArrayBufferPrototype.cpp:
780         (JSC::arrayBufferProtoFuncSlice):
781         (JSC::arrayBufferProtoGetterFuncByteLength):
782         (JSC::sharedArrayBufferProtoGetterFuncByteLength):
783         * runtime/JSBoundFunction.cpp:
784         (JSC::boundThisNoArgsFunctionCall):
785         (JSC::boundFunctionCall):
786         (JSC::boundThisNoArgsFunctionConstruct):
787         (JSC::boundFunctionConstruct):
788         (JSC::isBoundFunction):
789         (JSC::hasInstanceBoundFunction):
790         (JSC::JSBoundFunction::boundArgsCopy):
791         * runtime/JSBoundFunction.h:
792         * runtime/JSCJSValue.h:
793         * runtime/JSCell.h:
794         * runtime/JSCustomGetterSetterFunction.cpp:
795         (JSC::JSCustomGetterSetterFunction::customGetterSetterFunctionCall):
796         * runtime/JSCustomGetterSetterFunction.h:
797         * runtime/JSDataViewPrototype.cpp:
798         (JSC::getData):
799         (JSC::setData):
800         (JSC::dataViewProtoGetterBuffer):
801         (JSC::dataViewProtoGetterByteLength):
802         (JSC::dataViewProtoGetterByteOffset):
803         (JSC::dataViewProtoFuncGetInt8):
804         (JSC::dataViewProtoFuncGetInt16):
805         (JSC::dataViewProtoFuncGetInt32):
806         (JSC::dataViewProtoFuncGetUint8):
807         (JSC::dataViewProtoFuncGetUint16):
808         (JSC::dataViewProtoFuncGetUint32):
809         (JSC::dataViewProtoFuncGetFloat32):
810         (JSC::dataViewProtoFuncGetFloat64):
811         (JSC::dataViewProtoFuncSetInt8):
812         (JSC::dataViewProtoFuncSetInt16):
813         (JSC::dataViewProtoFuncSetInt32):
814         (JSC::dataViewProtoFuncSetUint8):
815         (JSC::dataViewProtoFuncSetUint16):
816         (JSC::dataViewProtoFuncSetUint32):
817         (JSC::dataViewProtoFuncSetFloat32):
818         (JSC::dataViewProtoFuncSetFloat64):
819         * runtime/JSDateMath.h:
820         * runtime/JSFunction.cpp:
821         (JSC::callHostFunctionAsConstructor):
822         (JSC::JSFunction::JSFunction):
823         (JSC::JSFunction::prototypeForConstruction):
824         (JSC::JSFunction::allocateAndInitializeRareData):
825         (JSC::JSFunction::initializeRareData):
826         (JSC::JSFunction::getOwnPropertySlot):
827         * runtime/JSFunction.h:
828         (JSC::JSFunction::offsetOfGlobalObject):
829         (JSC::JSFunction::globalObject const):
830         * runtime/JSFunctionInlines.h:
831         (JSC::JSFunction::JSFunction):
832         * runtime/JSGenericTypedArrayViewConstructorInlines.h:
833         (JSC::constructGenericTypedArrayView):
834         (JSC::callGenericTypedArrayView):
835         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
836         (JSC::genericTypedArrayViewProtoFuncSlice):
837         (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
838         * runtime/JSGlobalObject.cpp:
839         (JSC::makeBoundFunction):
840         (JSC::hasOwnLengthProperty):
841         (JSC::assertCall):
842         (JSC::enqueueJob):
843         * runtime/JSGlobalObjectFunctions.cpp:
844         (JSC::globalFuncEval):
845         (JSC::globalFuncParseInt):
846         (JSC::globalFuncParseFloat):
847         (JSC::globalFuncDecodeURI):
848         (JSC::globalFuncDecodeURIComponent):
849         (JSC::globalFuncEncodeURI):
850         (JSC::globalFuncEncodeURIComponent):
851         (JSC::globalFuncEscape):
852         (JSC::globalFuncUnescape):
853         (JSC::globalFuncThrowTypeError):
854         (JSC::globalFuncThrowTypeErrorArgumentsCalleeAndCaller):
855         (JSC::globalFuncMakeTypeError):
856         (JSC::globalFuncProtoGetter):
857         (JSC::globalFuncProtoSetter):
858         (JSC::globalFuncHostPromiseRejectionTracker):
859         (JSC::globalFuncBuiltinLog):
860         (JSC::globalFuncBuiltinDescribe):
861         (JSC::globalFuncImportModule):
862         (JSC::globalFuncPropertyIsEnumerable):
863         (JSC::globalFuncOwnKeys):
864         (JSC::globalFuncDateTimeFormat):
865         * runtime/JSGlobalObjectFunctions.h:
866         * runtime/JSLock.h:
867         * runtime/JSModuleLoader.cpp:
868         (JSC::moduleLoaderParseModule):
869         (JSC::moduleLoaderRequestedModules):
870         (JSC::moduleLoaderModuleDeclarationInstantiation):
871         (JSC::moduleLoaderResolve):
872         (JSC::moduleLoaderResolveSync):
873         (JSC::moduleLoaderFetch):
874         (JSC::moduleLoaderGetModuleNamespaceObject):
875         (JSC::moduleLoaderEvaluate):
876         * runtime/JSNativeStdFunction.cpp:
877         (JSC::runStdFunction):
878         * runtime/JSNativeStdFunction.h:
879         * runtime/JSONObject.cpp:
880         (JSC::JSONProtoFuncParse):
881         (JSC::JSONProtoFuncStringify):
882         * runtime/JSObject.cpp:
883         (JSC::objectPrivateFuncInstanceOf):
884         * runtime/JSObject.h:
885         * runtime/JSTypedArrayViewConstructor.cpp:
886         (JSC::constructTypedArrayView):
887         * runtime/JSTypedArrayViewPrototype.cpp:
888         (JSC::typedArrayViewPrivateFuncIsTypedArrayView):
889         (JSC::typedArrayViewPrivateFuncLength):
890         (JSC::typedArrayViewPrivateFuncGetOriginalConstructor):
891         (JSC::typedArrayViewPrivateFuncSort):
892         (JSC::typedArrayViewProtoFuncSet):
893         (JSC::typedArrayViewProtoFuncCopyWithin):
894         (JSC::typedArrayViewProtoFuncIncludes):
895         (JSC::typedArrayViewProtoFuncLastIndexOf):
896         (JSC::typedArrayViewProtoFuncIndexOf):
897         (JSC::typedArrayViewProtoFuncJoin):
898         (JSC::typedArrayViewProtoGetterFuncBuffer):
899         (JSC::typedArrayViewProtoGetterFuncLength):
900         (JSC::typedArrayViewProtoGetterFuncByteLength):
901         (JSC::typedArrayViewProtoGetterFuncByteOffset):
902         (JSC::typedArrayViewProtoFuncReverse):
903         (JSC::typedArrayViewPrivateFuncSubarrayCreate):
904         (JSC::typedArrayViewProtoFuncSlice):
905         (JSC::typedArrayViewProtoGetterFuncToStringTag):
906         * runtime/JSTypedArrayViewPrototype.h:
907         * runtime/MapConstructor.cpp:
908         (JSC::callMap):
909         (JSC::constructMap):
910         (JSC::mapPrivateFuncMapBucketHead):
911         (JSC::mapPrivateFuncMapBucketNext):
912         (JSC::mapPrivateFuncMapBucketKey):
913         (JSC::mapPrivateFuncMapBucketValue):
914         * runtime/MapConstructor.h:
915         * runtime/MapPrototype.cpp:
916         (JSC::getMap):
917         (JSC::mapProtoFuncClear):
918         (JSC::mapProtoFuncDelete):
919         (JSC::mapProtoFuncGet):
920         (JSC::mapProtoFuncHas):
921         (JSC::mapProtoFuncSet):
922         (JSC::mapProtoFuncSize):
923         * runtime/MathObject.cpp:
924         (JSC::mathProtoFuncAbs):
925         (JSC::mathProtoFuncACos):
926         (JSC::mathProtoFuncASin):
927         (JSC::mathProtoFuncATan):
928         (JSC::mathProtoFuncATan2):
929         (JSC::mathProtoFuncCeil):
930         (JSC::mathProtoFuncClz32):
931         (JSC::mathProtoFuncCos):
932         (JSC::mathProtoFuncExp):
933         (JSC::mathProtoFuncFloor):
934         (JSC::mathProtoFuncHypot):
935         (JSC::mathProtoFuncLog):
936         (JSC::mathProtoFuncMax):
937         (JSC::mathProtoFuncMin):
938         (JSC::mathProtoFuncPow):
939         (JSC::mathProtoFuncRandom):
940         (JSC::mathProtoFuncRound):
941         (JSC::mathProtoFuncSign):
942         (JSC::mathProtoFuncSin):
943         (JSC::mathProtoFuncSqrt):
944         (JSC::mathProtoFuncTan):
945         (JSC::mathProtoFuncIMul):
946         (JSC::mathProtoFuncACosh):
947         (JSC::mathProtoFuncASinh):
948         (JSC::mathProtoFuncATanh):
949         (JSC::mathProtoFuncCbrt):
950         (JSC::mathProtoFuncCosh):
951         (JSC::mathProtoFuncExpm1):
952         (JSC::mathProtoFuncFround):
953         (JSC::mathProtoFuncLog1p):
954         (JSC::mathProtoFuncLog10):
955         (JSC::mathProtoFuncLog2):
956         (JSC::mathProtoFuncSinh):
957         (JSC::mathProtoFuncTanh):
958         (JSC::mathProtoFuncTrunc):
959         * runtime/MathObject.h:
960         * runtime/Microtask.h:
961         * runtime/NativeErrorConstructor.cpp:
962         (JSC::NativeErrorConstructor<errorType>::constructNativeErrorConstructor):
963         (JSC::NativeErrorConstructor<errorType>::callNativeErrorConstructor):
964         * runtime/NativeErrorConstructor.h:
965         * runtime/NativeFunction.h:
966         (JSC::NativeFunction::operator()):
967         (JSC::TaggedNativeFunction::operator()):
968         * runtime/NullGetterFunction.cpp:
969         (JSC::NullGetterFunctionInternal::callReturnUndefined):
970         * runtime/NullSetterFunction.cpp:
971         (JSC::NullSetterFunctionInternal::callReturnUndefined):
972         * runtime/NumberConstructor.cpp:
973         (JSC::constructNumberConstructor):
974         (JSC::callNumberConstructor):
975         (JSC::numberConstructorFuncIsInteger):
976         (JSC::numberConstructorFuncIsSafeInteger):
977         * runtime/NumberPrototype.cpp:
978         (JSC::numberProtoFuncToExponential):
979         (JSC::numberProtoFuncToFixed):
980         (JSC::numberProtoFuncToPrecision):
981         (JSC::numberProtoFuncToString):
982         (JSC::numberProtoFuncToLocaleString):
983         (JSC::numberProtoFuncValueOf):
984         * runtime/NumberPrototype.h:
985         * runtime/ObjectConstructor.cpp:
986         (JSC::constructObjectWithNewTarget):
987         (JSC::constructWithObjectConstructor):
988         (JSC::callObjectConstructor):
989         (JSC::objectConstructorGetPrototypeOf):
990         (JSC::objectConstructorSetPrototypeOf):
991         (JSC::objectConstructorGetOwnPropertyDescriptor):
992         (JSC::objectConstructorGetOwnPropertyDescriptors):
993         (JSC::objectConstructorGetOwnPropertyNames):
994         (JSC::objectConstructorGetOwnPropertySymbols):
995         (JSC::objectConstructorKeys):
996         (JSC::objectConstructorAssign):
997         (JSC::objectConstructorValues):
998         (JSC::objectConstructorDefineProperty):
999         (JSC::objectConstructorDefineProperties):
1000         (JSC::objectConstructorCreate):
1001         (JSC::objectConstructorSeal):
1002         (JSC::objectConstructorFreeze):
1003         (JSC::objectConstructorPreventExtensions):
1004         (JSC::objectConstructorIsSealed):
1005         (JSC::objectConstructorIsFrozen):
1006         (JSC::objectConstructorIsExtensible):
1007         (JSC::objectConstructorIs):
1008         (JSC::constructObject): Deleted.
1009         * runtime/ObjectConstructor.h:
1010         * runtime/ObjectPrototype.cpp:
1011         (JSC::objectProtoFuncValueOf):
1012         (JSC::objectProtoFuncHasOwnProperty):
1013         (JSC::objectProtoFuncIsPrototypeOf):
1014         (JSC::objectProtoFuncDefineGetter):
1015         (JSC::objectProtoFuncDefineSetter):
1016         (JSC::objectProtoFuncLookupGetter):
1017         (JSC::objectProtoFuncLookupSetter):
1018         (JSC::objectProtoFuncPropertyIsEnumerable):
1019         (JSC::objectProtoFuncToLocaleString):
1020         (JSC::objectProtoFuncToString):
1021         * runtime/ObjectPrototype.h:
1022         * runtime/ProxyConstructor.cpp:
1023         (JSC::makeRevocableProxy):
1024         (JSC::proxyRevocableConstructorThrowError):
1025         (JSC::constructProxyObject):
1026         (JSC::callProxy):
1027         * runtime/ProxyObject.cpp:
1028         (JSC::performProxyCall):
1029         (JSC::performProxyConstruct):
1030         * runtime/ProxyRevoke.cpp:
1031         (JSC::performProxyRevoke):
1032         * runtime/ReflectObject.cpp:
1033         (JSC::reflectObjectConstruct):
1034         (JSC::reflectObjectDefineProperty):
1035         (JSC::reflectObjectGet):
1036         (JSC::reflectObjectGetOwnPropertyDescriptor):
1037         (JSC::reflectObjectGetPrototypeOf):
1038         (JSC::reflectObjectIsExtensible):
1039         (JSC::reflectObjectOwnKeys):
1040         (JSC::reflectObjectPreventExtensions):
1041         (JSC::reflectObjectSet):
1042         (JSC::reflectObjectSetPrototypeOf):
1043         * runtime/RegExpConstructor.cpp:
1044         (JSC::regExpConstructorDollar):
1045         (JSC::regExpConstructorInput):
1046         (JSC::regExpConstructorMultiline):
1047         (JSC::regExpConstructorLastMatch):
1048         (JSC::regExpConstructorLastParen):
1049         (JSC::regExpConstructorLeftContext):
1050         (JSC::regExpConstructorRightContext):
1051         (JSC::setRegExpConstructorInput):
1052         (JSC::setRegExpConstructorMultiline):
1053         (JSC::esSpecRegExpCreate):
1054         (JSC::constructWithRegExpConstructor):
1055         (JSC::callRegExpConstructor):
1056         * runtime/RegExpConstructor.h:
1057         * runtime/RegExpPrototype.cpp:
1058         (JSC::regExpProtoFuncTestFast):
1059         (JSC::regExpProtoFuncExec):
1060         (JSC::regExpProtoFuncMatchFast):
1061         (JSC::regExpProtoFuncCompile):
1062         (JSC::regExpProtoFuncToString):
1063         (JSC::regExpProtoGetterGlobal):
1064         (JSC::regExpProtoGetterIgnoreCase):
1065         (JSC::regExpProtoGetterMultiline):
1066         (JSC::regExpProtoGetterDotAll):
1067         (JSC::regExpProtoGetterSticky):
1068         (JSC::regExpProtoGetterUnicode):
1069         (JSC::regExpProtoGetterFlags):
1070         (JSC::regExpProtoGetterSource):
1071         (JSC::regExpProtoFuncSearchFast):
1072         (JSC::regExpProtoFuncSplitFast):
1073         * runtime/RegExpPrototype.h:
1074         * runtime/SetConstructor.cpp:
1075         (JSC::callSet):
1076         (JSC::constructSet):
1077         (JSC::setPrivateFuncSetBucketHead):
1078         (JSC::setPrivateFuncSetBucketNext):
1079         (JSC::setPrivateFuncSetBucketKey):
1080         * runtime/SetConstructor.h:
1081         * runtime/SetPrototype.cpp:
1082         (JSC::getSet):
1083         (JSC::setProtoFuncAdd):
1084         (JSC::setProtoFuncClear):
1085         (JSC::setProtoFuncDelete):
1086         (JSC::setProtoFuncHas):
1087         (JSC::setProtoFuncSize):
1088         * runtime/StringConstructor.cpp:
1089         (JSC::stringFromCharCode):
1090         (JSC::stringFromCodePoint):
1091         (JSC::constructWithStringConstructor):
1092         (JSC::callStringConstructor):
1093         * runtime/StringPrototype.cpp:
1094         (JSC::stringProtoFuncRepeatCharacter):
1095         (JSC::stringProtoFuncReplaceUsingRegExp):
1096         (JSC::stringProtoFuncReplaceUsingStringSearch):
1097         (JSC::stringProtoFuncToString):
1098         (JSC::stringProtoFuncCharAt):
1099         (JSC::stringProtoFuncCharCodeAt):
1100         (JSC::stringProtoFuncCodePointAt):
1101         (JSC::stringProtoFuncIndexOf):
1102         (JSC::stringProtoFuncLastIndexOf):
1103         (JSC::stringProtoFuncSlice):
1104         (JSC::stringProtoFuncSplitFast):
1105         (JSC::stringProtoFuncSubstrImpl):
1106         (JSC::stringProtoFuncSubstr):
1107         (JSC::builtinStringSubstrInternal):
1108         (JSC::stringProtoFuncSubstring):
1109         (JSC::stringProtoFuncToLowerCase):
1110         (JSC::stringProtoFuncToUpperCase):
1111         (JSC::stringProtoFuncLocaleCompare):
1112         (JSC::toLocaleCase):
1113         (JSC::stringProtoFuncToLocaleLowerCase):
1114         (JSC::stringProtoFuncToLocaleUpperCase):
1115         (JSC::stringProtoFuncTrim):
1116         (JSC::stringProtoFuncTrimStart):
1117         (JSC::stringProtoFuncTrimEnd):
1118         (JSC::stringProtoFuncStartsWith):
1119         (JSC::stringProtoFuncEndsWith):
1120         (JSC::stringIncludesImpl):
1121         (JSC::stringProtoFuncIncludes):
1122         (JSC::builtinStringIncludesInternal):
1123         (JSC::stringProtoFuncIterator):
1124         (JSC::stringProtoFuncNormalize):
1125         * runtime/StringPrototype.h:
1126         * runtime/SymbolConstructor.cpp:
1127         (JSC::callSymbol):
1128         (JSC::symbolConstructorFor):
1129         (JSC::symbolConstructorKeyFor):
1130         * runtime/SymbolPrototype.cpp:
1131         (JSC::symbolProtoGetterDescription):
1132         (JSC::symbolProtoFuncToString):
1133         (JSC::symbolProtoFuncValueOf):
1134         * runtime/ThrowScope.h:
1135         * runtime/TypedArrayController.h:
1136         * runtime/VM.h:
1137         * runtime/VMTraps.h:
1138         * runtime/Watchdog.h:
1139         * runtime/WeakMapConstructor.cpp:
1140         (JSC::callWeakMap):
1141         (JSC::constructWeakMap):
1142         * runtime/WeakMapPrototype.cpp:
1143         (JSC::getWeakMap):
1144         (JSC::protoFuncWeakMapDelete):
1145         (JSC::protoFuncWeakMapGet):
1146         (JSC::protoFuncWeakMapHas):
1147         (JSC::protoFuncWeakMapSet):
1148         * runtime/WeakObjectRefConstructor.cpp:
1149         (JSC::callWeakRef):
1150         (JSC::constructWeakRef):
1151         * runtime/WeakObjectRefPrototype.cpp:
1152         (JSC::getWeakRef):
1153         (JSC::protoFuncWeakRefDeref):
1154         * runtime/WeakSetConstructor.cpp:
1155         (JSC::callWeakSet):
1156         (JSC::constructWeakSet):
1157         * runtime/WeakSetPrototype.cpp:
1158         (JSC::getWeakSet):
1159         (JSC::protoFuncWeakSetDelete):
1160         (JSC::protoFuncWeakSetHas):
1161         (JSC::protoFuncWeakSetAdd):
1162         * tools/JSDollarVM.cpp:
1163         (JSC::DOMJITGetterComplex::functionEnableException):
1164         (JSC::DOMJITFunctionObject::functionWithTypeCheck):
1165         (JSC::DOMJITCheckSubClassObject::functionWithTypeCheck):
1166         (JSC::functionWasmStreamingParserAddBytes):
1167         (JSC::functionWasmStreamingParserFinalize):
1168         (JSC::functionCrash):
1169         (JSC::functionBreakpoint):
1170         (JSC::functionDFGTrue):
1171         (JSC::functionFTLTrue):
1172         (JSC::functionCpuMfence):
1173         (JSC::functionCpuRdtsc):
1174         (JSC::functionCpuCpuid):
1175         (JSC::functionCpuPause):
1176         (JSC::functionCpuClflush):
1177         (JSC::functionLLintTrue):
1178         (JSC::functionJITTrue):
1179         (JSC::functionNoInline):
1180         (JSC::functionGC):
1181         (JSC::functionEdenGC):
1182         (JSC::functionDumpSubspaceHashes):
1183         (JSC::functionCallFrame):
1184         (JSC::functionCodeBlockForFrame):
1185         (JSC::codeBlockFromArg):
1186         (JSC::functionCodeBlockFor):
1187         (JSC::functionDumpSourceFor):
1188         (JSC::functionDumpBytecodeFor):
1189         (JSC::doPrint):
1190         (JSC::functionDataLog):
1191         (JSC::functionPrint):
1192         (JSC::functionDumpCallFrame):
1193         (JSC::functionDumpStack):
1194         (JSC::functionDumpRegisters):
1195         (JSC::functionDumpCell):
1196         (JSC::functionIndexingMode):
1197         (JSC::functionInlineCapacity):
1198         (JSC::functionValue):
1199         (JSC::functionGetPID):
1200         (JSC::functionHaveABadTime):
1201         (JSC::functionIsHavingABadTime):
1202         (JSC::functionCreateGlobalObject):
1203         (JSC::functionCreateProxy):
1204         (JSC::functionCreateRuntimeArray):
1205         (JSC::functionCreateNullRopeString):
1206         (JSC::functionCreateImpureGetter):
1207         (JSC::functionCreateCustomGetterObject):
1208         (JSC::functionCreateDOMJITNodeObject):
1209         (JSC::functionCreateDOMJITGetterObject):
1210         (JSC::functionCreateDOMJITGetterComplexObject):
1211         (JSC::functionCreateDOMJITFunctionObject):
1212         (JSC::functionCreateDOMJITCheckSubClassObject):
1213         (JSC::functionCreateDOMJITGetterBaseJSObject):
1214         (JSC::functionCreateWasmStreamingParser):
1215         (JSC::functionCreateStaticCustomAccessor):
1216         (JSC::functionSetImpureGetterDelegate):
1217         (JSC::functionCreateBuiltin):
1218         (JSC::functionGetPrivateProperty):
1219         (JSC::functionCreateRoot):
1220         (JSC::functionCreateElement):
1221         (JSC::functionGetElement):
1222         (JSC::functionCreateSimpleObject):
1223         (JSC::functionGetHiddenValue):
1224         (JSC::functionSetHiddenValue):
1225         (JSC::functionShadowChickenFunctionsOnStack):
1226         (JSC::functionSetGlobalConstRedeclarationShouldNotThrow):
1227         (JSC::functionFindTypeForExpression):
1228         (JSC::functionReturnTypeFor):
1229         (JSC::functionFlattenDictionaryObject):
1230         (JSC::functionDumpBasicBlockExecutionRanges):
1231         (JSC::functionHasBasicBlockExecuted):
1232         (JSC::functionBasicBlockExecutionCount):
1233         (JSC::functionEnableExceptionFuzz):
1234         (JSC::functionEnableDebuggerModeWhenIdle):
1235         (JSC::functionDisableDebuggerModeWhenIdle):
1236         (JSC::functionDeleteAllCodeWhenIdle):
1237         (JSC::functionGlobalObjectCount):
1238         (JSC::functionGlobalObjectForObject):
1239         (JSC::functionGetGetterSetter):
1240         (JSC::functionLoadGetterFromGetterSetter):
1241         (JSC::functionCreateCustomTestGetterSetter):
1242         (JSC::functionDeltaBetweenButterflies):
1243         (JSC::functionTotalGCTime):
1244         (JSC::functionParseCount):
1245         (JSC::functionIsWasmSupported):
1246         * wasm/WasmEmbedder.h:
1247         * wasm/js/JSWebAssembly.cpp:
1248         (JSC::webAssemblyCompileFunc):
1249         (JSC::webAssemblyInstantiateFunc):
1250         (JSC::webAssemblyValidateFunc):
1251         (JSC::webAssemblyCompileStreamingInternal):
1252         (JSC::webAssemblyInstantiateStreamingInternal):
1253         * wasm/js/JSWebAssembly.h:
1254         * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
1255         (JSC::constructJSWebAssemblyCompileError):
1256         (JSC::callJSWebAssemblyCompileError):
1257         * wasm/js/WebAssemblyFunction.cpp:
1258         (JSC::callWebAssemblyFunction):
1259         * wasm/js/WebAssemblyInstanceConstructor.cpp:
1260         (JSC::constructJSWebAssemblyInstance):
1261         (JSC::callJSWebAssemblyInstance):
1262         * wasm/js/WebAssemblyInstancePrototype.cpp:
1263         (JSC::webAssemblyInstanceProtoFuncExports):
1264         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
1265         (JSC::constructJSWebAssemblyLinkError):
1266         (JSC::callJSWebAssemblyLinkError):
1267         * wasm/js/WebAssemblyMemoryConstructor.cpp:
1268         (JSC::constructJSWebAssemblyMemory):
1269         (JSC::callJSWebAssemblyMemory):
1270         * wasm/js/WebAssemblyMemoryPrototype.cpp:
1271         (JSC::webAssemblyMemoryProtoFuncGrow):
1272         (JSC::webAssemblyMemoryProtoFuncBuffer):
1273         * wasm/js/WebAssemblyModuleConstructor.cpp:
1274         (JSC::webAssemblyModuleCustomSections):
1275         (JSC::webAssemblyModuleImports):
1276         (JSC::webAssemblyModuleExports):
1277         (JSC::constructJSWebAssemblyModule):
1278         (JSC::callJSWebAssemblyModule):
1279         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
1280         (JSC::constructJSWebAssemblyRuntimeError):
1281         (JSC::callJSWebAssemblyRuntimeError):
1282         * wasm/js/WebAssemblyTableConstructor.cpp:
1283         (JSC::constructJSWebAssemblyTable):
1284         (JSC::callJSWebAssemblyTable):
1285         * wasm/js/WebAssemblyTablePrototype.cpp:
1286         (JSC::webAssemblyTableProtoFuncLength):
1287         (JSC::webAssemblyTableProtoFuncGrow):
1288         (JSC::webAssemblyTableProtoFuncGet):
1289         (JSC::webAssemblyTableProtoFuncSet):
1290         * wasm/js/WebAssemblyWrapperFunction.cpp:
1291         (JSC::callWebAssemblyWrapperFunction):
1292         * yarr/YarrErrorCode.h:
1293
1294 2019-10-07  Matt Lewis  <jlewis3@apple.com>
1295
1296         Unreviewed, rolling out r250750.
1297
1298         Reverting change as this broke interal test over the weekend.
1299
1300         Reverted changeset:
1301
1302         "Allow OSR exit to the LLInt"
1303         https://bugs.webkit.org/show_bug.cgi?id=197993
1304         https://trac.webkit.org/changeset/250750
1305
1306 2019-10-04  Ross Kirsling  <ross.kirsling@sony.com>
1307
1308         Socket-based RWI should base64-encode backend commands on client, not server
1309         https://bugs.webkit.org/show_bug.cgi?id=202605
1310
1311         Reviewed by Don Olmstead.
1312
1313         * inspector/remote/socket/RemoteInspectorServer.cpp:
1314         (Inspector::RemoteInspectorServer::setupInspectorClient):
1315
1316 2019-10-04  Saam Barati  <sbarati@apple.com>
1317
1318         Allow OSR exit to the LLInt
1319         https://bugs.webkit.org/show_bug.cgi?id=197993
1320
1321         Reviewed by Tadeu Zagallo.
1322
1323         This patch makes it so we can OSR exit to the LLInt.
1324         Here are the interesting implementation details:
1325         
1326         1. We no longer baseline compile everything in the inline stack.
1327         
1328         2. When the top frame is a LLInt frame, we exit to the corresponding
1329         LLInt bytecode. However, we need to materialize the LLInt registers
1330         for PC, PB, and metadata.
1331         
1332         3. When dealing with inline call frames where the caller is LLInt, we
1333         need to return to the appropriate place. Let's consider we're exiting
1334         at a place A->B (A calls B), where A is LLInt. If A is a normal call,
1335         we place the return PC in the frame we materialize to B to be right
1336         after the LLInt's inline cache for calls. If A is a varargs call, we place
1337         it at the return location for vararg calls. The interesting scenario here
1338         is where A is a getter/setter. This means that A might be get_by_id,
1339         get_by_val, put_by_id, or put_by_val. Since the LLInt does not have any
1340         form of IC for getters/setters, we make this work by creating new LLInt
1341         "return location" stubs for these opcodes.
1342         
1343         4. We need to update what callee saves we store in the callee if the caller frame
1344         is a LLInt frame. Let's consider an inline stack A->B->C, where A is a LLInt frame.
1345         When we materialize the stack frame for B, we need to ensure that the LLInt callee
1346         saves that A uses is stored into B's preserved callee saves. Specifically, this
1347         is just the PB/metadata registers.
1348         
1349         This patch also fixes offlineasm's macro expansion to allow us to
1350         use computed label names for global labels.
1351         
1352         In a future bug, I'm going to investigate some kind of control system for
1353         throwing away baseline code when we tier up:
1354         https://bugs.webkit.org/show_bug.cgi?id=202503
1355
1356         * JavaScriptCore.xcodeproj/project.pbxproj:
1357         * Sources.txt:
1358         * bytecode/CodeBlock.h:
1359         (JSC::CodeBlock::metadataTable):
1360         (JSC::CodeBlock::instructionsRawPointer):
1361         * dfg/DFGOSRExit.cpp:
1362         (JSC::DFG::OSRExit::executeOSRExit):
1363         (JSC::DFG::reifyInlinedCallFrames):
1364         (JSC::DFG::adjustAndJumpToTarget):
1365         (JSC::DFG::OSRExit::compileOSRExit):
1366         * dfg/DFGOSRExit.h:
1367         (JSC::DFG::OSRExitState::OSRExitState):
1368         * dfg/DFGOSRExitCompilerCommon.cpp:
1369         (JSC::DFG::callerReturnPC):
1370         (JSC::DFG::calleeSaveSlot):
1371         (JSC::DFG::reifyInlinedCallFrames):
1372         (JSC::DFG::adjustAndJumpToTarget):
1373         * dfg/DFGOSRExitCompilerCommon.h:
1374         * dfg/DFGOSRExitPreparation.cpp:
1375         (JSC::DFG::prepareCodeOriginForOSRExit): Deleted.
1376         * dfg/DFGOSRExitPreparation.h:
1377         * ftl/FTLOSRExitCompiler.cpp:
1378         (JSC::FTL::compileFTLOSRExit):
1379         * llint/LLIntData.h:
1380         (JSC::LLInt::getCodePtr):
1381         * llint/LowLevelInterpreter.asm:
1382         * llint/LowLevelInterpreter32_64.asm:
1383         * llint/LowLevelInterpreter64.asm:
1384         * offlineasm/asm.rb:
1385         * offlineasm/transform.rb:
1386         * runtime/OptionsList.h:
1387
1388 2019-10-04  Truitt Savell  <tsavell@apple.com>
1389
1390         Unreviewed, rolling out r250583.
1391
1392         Broke multiple internal API tests
1393
1394         Reverted changeset:
1395
1396         "[JSC] Place VM* in TLS"
1397         https://bugs.webkit.org/show_bug.cgi?id=202391
1398         https://trac.webkit.org/changeset/250583
1399
1400 2019-10-04  Truitt Savell  <tsavell@apple.com>
1401
1402         Unreviewed, rolling out r250594.
1403
1404         Broke multiple internal API tests
1405
1406         Reverted changeset:
1407
1408         "Unreviewed, fix incorrect assertion"
1409         https://bugs.webkit.org/show_bug.cgi?id=202391
1410         https://trac.webkit.org/changeset/250594
1411
1412 2019-10-04  Alex Christensen  <achristensen@webkit.org>
1413
1414         Simplify sandbox enabling macros
1415         https://bugs.webkit.org/show_bug.cgi?id=202536
1416
1417         Reviewed by Brent Fulgham.
1418
1419         * Configurations/FeatureDefines.xcconfig:
1420
1421 2019-10-03  Christopher Reid  <chris.reid@sony.com>
1422
1423         [WinCairo] Remote Inspector doesn't gracefully shutdown
1424         https://bugs.webkit.org/show_bug.cgi?id=202546
1425
1426         Reviewed by Ross Kirsling.
1427
1428         Call shutdown before closesocket in windows to close the connection gracefully.
1429
1430         This also fixes some potential threading issues where m_clientConnection 
1431         is set on a worker thread but cleared on the main thread.
1432         Remove callOnMainThread in the server too since execution gets paused during JS breakpoints.
1433
1434         * inspector/remote/socket/RemoteInspectorServer.cpp:
1435         * inspector/remote/socket/win/RemoteInspectorSocketWin.cpp:
1436
1437 2019-10-03  Mark Lam  <mark.lam@apple.com>
1438
1439         Fix testmasm failure on ASan builds.
1440         https://bugs.webkit.org/show_bug.cgi?id=202554
1441
1442         Reviewed by Yusuke Suzuki.
1443
1444         Gigacage is disabled on ASan builds.  So testmasm is sad.  Make the relevant test
1445         bail gracefully if Gigacage should be disabled.
1446
1447         Also converted some ASSERTs into RELEASE_ASSERTs.  This is a test.  No reason to
1448         not assert always.
1449
1450         * assembler/testmasm.cpp:
1451         (JSC::testCagePreservesPACFailureBit):
1452
1453 2019-10-03  Ross Kirsling  <ross.kirsling@sony.com>
1454
1455         Socket RWI client should acquire backend commands from server
1456         https://bugs.webkit.org/show_bug.cgi?id=202421
1457
1458         Reviewed by Devin Rousso.
1459
1460         * inspector/remote/socket/RemoteInspectorServer.cpp:
1461         (Inspector::RemoteInspectorServer::setupInspectorClient):
1462         (Inspector::RemoteInspectorServer::backendCommands const):
1463         * inspector/remote/socket/RemoteInspectorServer.h:
1464         (Inspector::RemoteInspectorServer::setBackendCommandsPath):
1465         Assuming a path to InspectorBackendCommands.js has been provided,
1466         read the file and send off its base64-encoded contents in a "BackendCommands" message when setting up a client.
1467
1468 2019-10-03  Yury Semikhatsky  <yurys@chromium.org>
1469
1470         Web Inspector: tests under LayoutTests/inspector/debugger are flaky
1471         https://bugs.webkit.org/show_bug.cgi?id=137131
1472         <rdar://problem/18461335>
1473
1474         Reviewed by Devin Rousso.
1475
1476         Changed breakpoint resolution logic to make it consistent across platforms and
1477         better handle the case when there are several DebuggerPausePositions at the same
1478         offset (but with different types).
1479
1480         * bytecode/CodeBlock.cpp:
1481         (JSC::CodeBlock::hasOpDebugForLineAndColumn):
1482         * bytecode/CodeBlock.h:
1483         * debugger/Breakpoint.h: Removed Breakpoint::unspecifiedColumn, Optional<unsigned>
1484         is used instead where needed. It allows to avoid code that relies on (int)UINT_MAX => -1
1485         conversion.
1486
1487         * debugger/Debugger.cpp:
1488         (JSC::Debugger::resolveBreakpoint): clarified that in the map columns are 0-based.
1489         * debugger/DebuggerParseData.cpp:
1490         (JSC::DebuggerPausePositions::breakpointLocationForLineColumn): replaced custom
1491         binary search with std::lower_bound. If there are several pause positions at the
1492         same offset they will be sorted by the type and the algorithm is guaranteed to see
1493         leftmost one first.
1494
1495         (JSC::DebuggerPausePositions::sort): use type as secondary ordering component.
1496         * debugger/DebuggerParseData.h: Rearranged type constants so that Enter < Pause < Leave
1497         this change along with sorting by type should guarantee that in case of several pause
1498         positions at the same line Enter goes before Pause before Leave and the breakpoint
1499         resolution will yield result similar to that when each pause locations has different
1500         position.
1501
1502         * inspector/protocol/Debugger.json: clarified that positions are 0-based.
1503         * parser/ParserTokens.h:
1504         (JSC::JSTextPosition::column const): added helper method for computing column.
1505
1506 2019-10-03  Keith Miller  <keith_miller@apple.com>
1507
1508         Fix assembler on ARM64E
1509         https://bugs.webkit.org/show_bug.cgi?id=202528
1510
1511         Reviewed by Michael Saboff.
1512
1513         * assembler/MacroAssemblerARM64.h:
1514         (JSC::MacroAssemblerARM64::callOperation):
1515         * assembler/MacroAssemblerARM64E.h:
1516         (JSC::MacroAssemblerARM64E::callOperation):
1517
1518 2019-10-02  Yusuke Suzuki  <ysuzuki@apple.com>
1519
1520         [JSC] AsyncGenerator should have internal fields
1521         https://bugs.webkit.org/show_bug.cgi?id=201498
1522
1523         Reviewed by Saam Barati.
1524
1525         This patch introduces JSAsyncGenerator. We did this already for JSGenerator. This patch does the same thing for JSAsyncGenerator
1526         This patch cleans up JSGenerator's code to share it with JSAsyncGenerator, e.g. JSGenerator::initialValues etc.
1527         It improves JetStream2/async-fs by ~10%.
1528
1529         We also fixed the pre-existing bug. We are using OpcodeID for the key of hashmap. And using op_add code as a part of key.
1530         By adding a new bytecode, it suddenly becomes 0. And 0 is not valid key in WTF::HashMap. This patch adds 1 to opcodeID when using
1531         for HashMap's key to fix this issue.
1532
1533         * JavaScriptCore.xcodeproj/project.pbxproj:
1534         * Sources.txt:
1535         * builtins/AsyncGeneratorPrototype.js:
1536         (globalPrivate.asyncGeneratorQueueIsEmpty):
1537         (globalPrivate.asyncGeneratorQueueEnqueue):
1538         (globalPrivate.asyncGeneratorQueueDequeue):
1539         (globalPrivate.isExecutionState):
1540         (globalPrivate.isSuspendYieldState):
1541         (globalPrivate.asyncGeneratorReject):
1542         (globalPrivate.asyncGeneratorResolve):
1543         (asyncGeneratorYieldAwaited):
1544         (globalPrivate.asyncGeneratorYield):
1545         (globalPrivate.doAsyncGeneratorBodyCall):
1546         (globalPrivate.asyncGeneratorResumeNext):
1547         (globalPrivate.asyncGeneratorEnqueue):
1548         * builtins/BuiltinNames.h:
1549         * bytecode/BytecodeIntrinsicRegistry.cpp:
1550         (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
1551         * bytecode/BytecodeIntrinsicRegistry.h:
1552         * bytecode/BytecodeList.rb:
1553         * bytecode/BytecodeUseDef.h:
1554         (JSC::computeUsesForBytecodeOffset):
1555         (JSC::computeDefsForBytecodeOffset):
1556         * bytecode/CodeBlock.cpp:
1557         (JSC::CodeBlock::finalizeLLIntInlineCaches):
1558         * bytecompiler/BytecodeGenerator.cpp:
1559         (JSC::BytecodeGenerator::BytecodeGenerator):
1560         (JSC::BytecodeGenerator::emitPutAsyncGeneratorFields):
1561         (JSC::BytecodeGenerator::emitCreateAsyncGenerator):
1562         (JSC::BytecodeGenerator::emitYieldPoint):
1563         (JSC::BytecodeGenerator::emitYield):
1564         (JSC::BytecodeGenerator::emitAwait):
1565         (JSC::BytecodeGenerator::emitDelegateYield):
1566         (JSC::BytecodeGenerator::emitGeneratorStateChange):
1567         * bytecompiler/BytecodeGenerator.h:
1568         (JSC::BytecodeGenerator::emitIsAsyncGenerator):
1569         * bytecompiler/NodesCodegen.cpp:
1570         (JSC::asyncGeneratorInternalFieldIndex):
1571         (JSC::BytecodeIntrinsicNode::emit_intrinsic_getAsyncGeneratorInternalField):
1572         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putAsyncGeneratorInternalField):
1573         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isAsyncGenerator):
1574         (JSC::YieldExprNode::emitBytecode):
1575         (JSC::AwaitExprNode::emitBytecode):
1576         * dfg/DFGAbstractInterpreterInlines.h:
1577         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1578         * dfg/DFGByteCodeParser.cpp:
1579         (JSC::DFG::ByteCodeParser::parseBlock):
1580         (JSC::DFG::ByteCodeParser::handleCreateInternalFieldObject):
1581         * dfg/DFGCapabilities.cpp:
1582         (JSC::DFG::capabilityLevel):
1583         * dfg/DFGClobberize.h:
1584         (JSC::DFG::clobberize):
1585         * dfg/DFGClobbersExitState.cpp:
1586         (JSC::DFG::clobbersExitState):
1587         * dfg/DFGConstantFoldingPhase.cpp:
1588         (JSC::DFG::ConstantFoldingPhase::foldConstants):
1589         * dfg/DFGDoesGC.cpp:
1590         (JSC::DFG::doesGC):
1591         * dfg/DFGFixupPhase.cpp:
1592         (JSC::DFG::FixupPhase::fixupNode):
1593         * dfg/DFGNode.h:
1594         (JSC::DFG::Node::convertToNewInternalFieldObject):
1595         (JSC::DFG::Node::hasStructure):
1596         (JSC::DFG::Node::convertToNewGenerator): Deleted.
1597         * dfg/DFGNodeType.h:
1598         * dfg/DFGOperations.cpp:
1599         * dfg/DFGOperations.h:
1600         * dfg/DFGPredictionPropagationPhase.cpp:
1601         * dfg/DFGSafeToExecute.h:
1602         (JSC::DFG::safeToExecute):
1603         * dfg/DFGSpeculativeJIT.cpp:
1604         (JSC::DFG::SpeculativeJIT::compileCreateInternalFieldObject):
1605         (JSC::DFG::SpeculativeJIT::compileCreateGenerator):
1606         (JSC::DFG::SpeculativeJIT::compileCreateAsyncGenerator):
1607         (JSC::DFG::SpeculativeJIT::compileNewInternalFieldObject):
1608         (JSC::DFG::SpeculativeJIT::compileNewGenerator):
1609         (JSC::DFG::SpeculativeJIT::compileNewAsyncGenerator):
1610         * dfg/DFGSpeculativeJIT.h:
1611         * dfg/DFGSpeculativeJIT32_64.cpp:
1612         (JSC::DFG::SpeculativeJIT::compile):
1613         * dfg/DFGSpeculativeJIT64.cpp:
1614         (JSC::DFG::SpeculativeJIT::compile):
1615         * dfg/DFGStoreBarrierInsertionPhase.cpp:
1616         * ftl/FTLCapabilities.cpp:
1617         (JSC::FTL::canCompile):
1618         * ftl/FTLLowerDFGToB3.cpp:
1619         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1620         (JSC::FTL::DFG::LowerDFGToB3::compileNewInternalFieldObject):
1621         (JSC::FTL::DFG::LowerDFGToB3::compileNewGenerator):
1622         (JSC::FTL::DFG::LowerDFGToB3::compileNewAsyncGenerator):
1623         (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
1624         (JSC::FTL::DFG::LowerDFGToB3::compileCreateGenerator):
1625         (JSC::FTL::DFG::LowerDFGToB3::compileCreateAsyncGenerator):
1626         * jit/JIT.cpp:
1627         (JSC::JIT::privateCompileMainPass):
1628         (JSC::JIT::privateCompileSlowCases):
1629         * jit/JITInlines.h:
1630         (JSC::JIT::copiedArithProfile):
1631         * jit/JITOperations.cpp:
1632         * jit/JITOperations.h:
1633         * llint/LowLevelInterpreter.asm:
1634         * runtime/CommonSlowPaths.cpp:
1635         (JSC::createInternalFieldObject):
1636         (JSC::SLOW_PATH_DECL):
1637         * runtime/CommonSlowPaths.h:
1638         * runtime/JSAsyncGenerator.cpp: Copied from Source/JavaScriptCore/runtime/JSGenerator.cpp.
1639         (JSC::JSAsyncGenerator::create):
1640         (JSC::JSAsyncGenerator::createStructure):
1641         (JSC::JSAsyncGenerator::JSAsyncGenerator):
1642         (JSC::JSAsyncGenerator::finishCreation):
1643         (JSC::JSAsyncGenerator::visitChildren):
1644         * runtime/JSAsyncGenerator.h: Copied from Source/JavaScriptCore/runtime/JSGenerator.h.
1645         * runtime/JSAsyncGeneratorFunction.h:
1646         * runtime/JSGenerator.cpp:
1647         (JSC::JSGenerator::finishCreation):
1648         * runtime/JSGenerator.h:
1649         * runtime/JSGlobalObject.cpp:
1650         (JSC::JSGlobalObject::init):
1651         (JSC::JSGlobalObject::visitChildren):
1652         * runtime/JSGlobalObject.h:
1653         (JSC::JSGlobalObject::asyncGeneratorStructure const):
1654         * runtime/JSType.cpp:
1655         (WTF::printInternal):
1656         * runtime/JSType.h:
1657
1658 2019-10-02  Keith Miller  <keith_miller@apple.com>
1659
1660         FTL OSR exit shouldn't bother updating get_by_id array profiles that have changed modes
1661         https://bugs.webkit.org/show_bug.cgi?id=202493
1662
1663         Reviewed by Saam Barati.
1664
1665         I added this optimization for DFG but forgot to do it for the FTL
1666         at the same time. This patch rectifies that.
1667
1668         * ftl/FTLOSRExitCompiler.cpp:
1669         (JSC::FTL::compileStub):
1670
1671 2019-10-02  Paulo Matos  <pmatos@igalia.com>
1672
1673         Gardening build fix: Hide store64/load64 functions from 32bit
1674         https://bugs.webkit.org/show_bug.cgi?id=202453
1675
1676         Unreviewed.
1677
1678         Prior patch for bug 202250 breaks 32bit builds because functions
1679         store64 and load64 do not exist. ifdef these functions away from 32bits since
1680         they are not used in 32bit code path.
1681
1682         * jit/AssemblyHelpers.h:
1683
1684 2019-10-01  Yusuke Suzuki  <ysuzuki@apple.com>
1685
1686         Unreviewed, fix incorrect assertion
1687         https://bugs.webkit.org/show_bug.cgi?id=202391
1688
1689         * runtime/JSLock.cpp:
1690         (JSC::JSLock::DropAllLocks::~DropAllLocks):
1691
1692 2019-10-01  Saam Barati  <sbarati@apple.com>
1693
1694         ObjectAllocationSinkingPhase shouldn't insert hints for allocations which are no longer valid
1695         https://bugs.webkit.org/show_bug.cgi?id=199361
1696         <rdar://problem/52454940>
1697
1698         Reviewed by Yusuke Suzuki.
1699
1700         In a prior fix to the object allocation sinking phase, I added code where we
1701         made sure to insert PutHints over Phis for fields of an object at control flow
1702         merge points. However, that code didn't consider that the base of the PutHint
1703         may no longer be a valid heap location. This could cause us to emit invalid
1704         SSA code by referring to a node which does not dominate the PutHint location.
1705         This patch fixes the bug to only emit the PutHints when valid.
1706
1707         This patch also makes it so that DFGValidate actually validates that the graph
1708         is in valid SSA form. E.g, any use of a node N must be dominated by N.
1709
1710         * dfg/DFGObjectAllocationSinkingPhase.cpp:
1711         * dfg/DFGValidate.cpp:
1712
1713 2019-10-01  Yusuke Suzuki  <ysuzuki@apple.com>
1714
1715         [JSC] Place VM* in TLS
1716         https://bugs.webkit.org/show_bug.cgi?id=202391
1717
1718         Reviewed by Mark Lam.
1719
1720         This patch puts VM* in TLS mainly for debugging purpose. In JSLockHolder, we put VM* and save the old VM* in TLS.
1721         And JSLockHolder's destructor restores it. It is possible that we have two VMs A and B. After locking A, we enter
1722         B. In this case, when B's lock is released, we should restore TLS to A. We put the old VM* in JSLockHolder::m_previousVMInTLS
1723         so that we can restore it in JSLockHolder's destructor.
1724
1725         This patch also cleans up Lock<JSLock> / std::lock_guard<JSLock> usage in JSRunLoopTimer and JSManagedValue by introducing
1726         JSLockHolder with LockIfVMIsLive tag. Previously, we are intentionally use `std::lock_guard<JSLock>` since VM* can be dead
1727         at these places. JSLockHolder with LockIfVMIsLive handles this case carefully: it locks JSLock when VM* is live.
1728
1729         * API/JSManagedValue.mm:
1730         (-[JSManagedValue value]):
1731         * API/glib/JSCWeakValue.cpp:
1732         (jsc_weak_value_get_value):
1733         * runtime/InitializeThreading.cpp:
1734         (JSC::initializeThreading):
1735         * runtime/JSLock.cpp:
1736         (JSC::JSLockHolder::JSLockHolder):
1737         (JSC::JSLockHolder::~JSLockHolder):
1738         (JSC::JSLock::DropAllLocks::DropAllLocks):
1739         (JSC::JSLock::DropAllLocks::~DropAllLocks):
1740         * runtime/JSLock.h:
1741         (JSC::JSLockHolder::vm):
1742         * runtime/JSRunLoopTimer.cpp:
1743         (JSC::JSRunLoopTimer::timerDidFire):
1744         * runtime/VM.cpp:
1745         (JSC::VM::initializeTLS):
1746         * runtime/VM.h:
1747         (JSC::VM::exchange):
1748         (JSC::VM::current):
1749
1750 2019-10-01  Michael Saboff  <msaboff@apple.com> and Paulo Matos  <pmatos@igalia.com>
1751
1752         [YARR] Properly handle surrogates when matching back references
1753         https://bugs.webkit.org/show_bug.cgi?id=202041
1754
1755         Reviewed by Keith Miller.
1756
1757         This patch is based on a work in progress patch by Paulo Matos <pmatos@igalia.com>.
1758
1759         When handling back references in Unicode patterns, we can't match un-decoded surrogate characters,
1760         instead we need to read and process surrogate pairs.  Changed matchBackreference() to do this,
1761         including properly incrementing the back reference pattern and search indexes.
1762
1763         In support of this change, on X86_64 we needed to free up r10 to be used exclusively for
1764         "patternIndex".  It was also used as a temp in tryReadUnicodeCharImpl().  Made a new named
1765         temp register, called unicodeTemp, to take the place of regT2(r10) in tryReadUnicodeCharImpl.
1766         This new temp is r14 on X86_64 and X5 on ARM64.  To free up r14 on X86_64, changed the
1767         old leadingSurrogateTag to be a literal.
1768
1769         * yarr/YarrJIT.cpp:
1770         (JSC::Yarr::YarrGenerator::tryReadUnicodeCharImpl):
1771         (JSC::Yarr::YarrGenerator::matchBackreference):
1772         (JSC::Yarr::YarrGenerator::generateEnter):
1773         (JSC::Yarr::YarrGenerator::readCharacterDontDecodeSurrogates): Deleted.
1774
1775 2019-10-01  Keith Miller  <keith_miller@apple.com>
1776
1777         Add support for the Wasm multi-value proposal
1778         https://bugs.webkit.org/show_bug.cgi?id=202250
1779
1780         Reviewed by Saam Barati.
1781
1782         The wasm multi-value proposal makes two major changes to the
1783         spec. The first is that functions may now return more than one
1784         value across calls. When calling to/from JS, if there is more than
1785         one return type we return/receive a JSArray/Iterable,
1786         respectively. In the Wasm calls JS case, if the iteratable object
1787         does not vend the exact number of objects expected by the
1788         signature an error is thrown.
1789
1790         The second major change in the multi-value proposal allows blocks
1791         to have any signature type. This works in a backwards compatible
1792         way by exploiting the fact that the old value-type thunk signatures
1793         (where the block takes no arguments and returns just the value
1794         type i.e. [] -> [type]) were always encoded as a negative
1795         number. If a block has a function signature, it is encoded as a
1796         positive index into the type section. When a block has a function
1797         signature type then the values from the enclosing stack are popped
1798         off that stack and added to the new block's stack. In the case of
1799         a br/br_if to a Loop block the "argument" values should be on the
1800         brancher's stack.
1801
1802         The biggest change in this patch is stripping down the
1803         WasmCallingConventions file into one simpler API that just tells
1804         you where the each argument should be located. It also now handles
1805         adding or subtracting sizeof(CallerFrameAndPC) depending on
1806         whether you are caller or callee. Additionally, when computing
1807         locations for the callee it returns a B3::ValueRep that has the
1808         offsetFromFP rather than offsetFromSP. Since the code has been
1809         cleaned up I tried to also reduce code duplication in the various
1810         stubs for wasm code. This patch also removes the Air specific
1811         calling convention code and moves that logic into the Air IR
1812         generator.
1813
1814         Since blocks can now have arbitrary signatures the control entries
1815         now use a const signature* rather than just the return
1816         type. Additionally, what used to be the result phi is now the phis
1817         for all the results for non-loop blocks and the arguments for a
1818         loop block. Due to the control flow restrictions of wasm
1819         conveniently we don't have to worry about generating non-optimal
1820         SSA, thus we can just use phis directly rather than using a
1821         variable.
1822
1823         Lastly, to help clean up some code in the IR generators new helper
1824         methods were added to create call Patchpoints. These helpers do
1825         most of the boiler-plate initialization.
1826
1827         * JavaScriptCore.xcodeproj/project.pbxproj:
1828         * assembler/AbstractMacroAssembler.h:
1829         (JSC::AbstractMacroAssembler::ImplicitAddress::ImplicitAddress):
1830         * assembler/LinkBuffer.cpp:
1831         (JSC::shouldDumpDisassemblyFor):
1832         * assembler/LinkBuffer.h:
1833         * assembler/MacroAssemblerARM64.h:
1834         (JSC::MacroAssemblerARM64::callOperation):
1835         * assembler/MacroAssemblerX86_64.h:
1836         (JSC::MacroAssemblerX86_64::callOperation):
1837         * b3/B3LowerToAir.cpp:
1838         * b3/B3PatchpointSpecial.cpp:
1839         (JSC::B3::PatchpointSpecial::forEachArg):
1840         (JSC::B3::PatchpointSpecial::isValid):
1841         (JSC::B3::PatchpointSpecial::admitsStack):
1842         (JSC::B3::PatchpointSpecial::generate):
1843         * b3/B3Procedure.h:
1844         (JSC::B3::Procedure::resultCount const):
1845         (JSC::B3::Procedure::typeAtOffset const):
1846         (JSC::B3::Procedure::returnCount const): Deleted.
1847         * b3/B3StackmapGenerationParams.cpp:
1848         (JSC::B3::StackmapGenerationParams::code const):
1849         * b3/B3StackmapGenerationParams.h:
1850         * b3/B3ValueRep.h:
1851         * b3/air/AirHelpers.h: Added.
1852         (JSC::B3::Air::moveForType):
1853         (JSC::B3::Air::relaxedMoveForType):
1854         * jit/AssemblyHelpers.h:
1855         (JSC::AssemblyHelpers::store64FromReg):
1856         (JSC::AssemblyHelpers::store32FromReg):
1857         (JSC::AssemblyHelpers::load64ToReg):
1858         (JSC::AssemblyHelpers::load32ToReg):
1859         * runtime/JSCConfig.h:
1860         * runtime/OptionsList.h:
1861         * tools/JSDollarVM.cpp:
1862         * tools/VMInspector.cpp:
1863         (JSC::VMInspector::dumpValue):
1864         * wasm/WasmAirIRGenerator.cpp:
1865         (JSC::Wasm::ConstrainedTmp::operator bool const):
1866         (JSC::Wasm::TypedTmp::dump const):
1867         (JSC::Wasm::AirIRGenerator::ControlData::ControlData):
1868         (JSC::Wasm::AirIRGenerator::ControlData::dump const):
1869         (JSC::Wasm::AirIRGenerator::ControlData::blockType const):
1870         (JSC::Wasm::AirIRGenerator::ControlData::signature const):
1871         (JSC::Wasm::AirIRGenerator::ControlData::targetBlockForBranch):
1872         (JSC::Wasm::AirIRGenerator::ControlData::convertIfToBlock):
1873         (JSC::Wasm::AirIRGenerator::addEndToUnreachable):
1874         (JSC::Wasm::AirIRGenerator::emitCallPatchpoint):
1875         (JSC::Wasm::AirIRGenerator::validateInst):
1876         (JSC::Wasm::AirIRGenerator::tmpsForSignature):
1877         (JSC::Wasm::AirIRGenerator::emitPatchpoint):
1878         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
1879         (JSC::Wasm::AirIRGenerator::toB3ResultType):
1880         (JSC::Wasm::AirIRGenerator::addBottom):
1881         (JSC::Wasm::AirIRGenerator::emitLoopTierUpCheck):
1882         (JSC::Wasm::AirIRGenerator::addTopLevel):
1883         (JSC::Wasm::AirIRGenerator::addLoop):
1884         (JSC::Wasm::AirIRGenerator::addBlock):
1885         (JSC::Wasm::AirIRGenerator::addIf):
1886         (JSC::Wasm::AirIRGenerator::addElse):
1887         (JSC::Wasm::AirIRGenerator::addElseToUnreachable):
1888         (JSC::Wasm::AirIRGenerator::addReturn):
1889         (JSC::Wasm::AirIRGenerator::addBranch):
1890         (JSC::Wasm::AirIRGenerator::addSwitch):
1891         (JSC::Wasm::AirIRGenerator::endBlock):
1892         (JSC::Wasm::AirIRGenerator::addCall):
1893         (JSC::Wasm::AirIRGenerator::addCallIndirect):
1894         (JSC::Wasm::dumpExpressionStack):
1895         (JSC::Wasm::AirIRGenerator::dump):
1896         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
1897         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
1898         (JSC::Wasm::AirIRGenerator::ControlData::type const): Deleted.
1899         (JSC::Wasm::AirIRGenerator::ControlData::hasNonVoidSignature const): Deleted.
1900         (JSC::Wasm::AirIRGenerator::ControlData::resultForBranch const): Deleted.
1901         * wasm/WasmB3IRGenerator.cpp:
1902         (JSC::Wasm::B3IRGenerator::ControlData::ControlData):
1903         (JSC::Wasm::B3IRGenerator::ControlData::dump const):
1904         (JSC::Wasm::B3IRGenerator::ControlData::blockType const):
1905         (JSC::Wasm::B3IRGenerator::ControlData::hasNonVoidresult const):
1906         (JSC::Wasm::B3IRGenerator::ControlData::targetBlockForBranch):
1907         (JSC::Wasm::B3IRGenerator::ControlData::convertIfToBlock):
1908         (JSC::Wasm::B3IRGenerator::addEndToUnreachable):
1909         (JSC::Wasm::B3IRGenerator::B3IRGenerator):
1910         (JSC::Wasm::B3IRGenerator::framePointer):
1911         (JSC::Wasm::B3IRGenerator::toB3ResultType):
1912         (JSC::Wasm::B3IRGenerator::addArguments):
1913         (JSC::Wasm::B3IRGenerator::addGrowMemory):
1914         (JSC::Wasm::B3IRGenerator::addLoop):
1915         (JSC::Wasm::B3IRGenerator::addTopLevel):
1916         (JSC::Wasm::B3IRGenerator::addBlock):
1917         (JSC::Wasm::B3IRGenerator::addIf):
1918         (JSC::Wasm::B3IRGenerator::addElse):
1919         (JSC::Wasm::B3IRGenerator::addElseToUnreachable):
1920         (JSC::Wasm::B3IRGenerator::addReturn):
1921         (JSC::Wasm::B3IRGenerator::addBranch):
1922         (JSC::Wasm::B3IRGenerator::addSwitch):
1923         (JSC::Wasm::B3IRGenerator::endBlock):
1924         (JSC::Wasm::B3IRGenerator::createCallPatchpoint):
1925         (JSC::Wasm::B3IRGenerator::addCall):
1926         (JSC::Wasm::B3IRGenerator::addCallIndirect):
1927         (JSC::Wasm::B3IRGenerator::ControlData::type const): Deleted.
1928         (JSC::Wasm::B3IRGenerator::ControlData::hasNonVoidSignature const): Deleted.
1929         (JSC::Wasm::B3IRGenerator::ControlData::resultForBranch const): Deleted.
1930         (JSC::Wasm::B3IRGenerator::createStack): Deleted.
1931         * wasm/WasmBBQPlan.cpp:
1932         (JSC::Wasm::BBQPlan::didReceiveFunctionData):
1933         (JSC::Wasm::BBQPlan::parseAndValidateModule):
1934         (JSC::Wasm::BBQPlan::complete):
1935         * wasm/WasmBBQPlan.h:
1936         * wasm/WasmBinding.cpp:
1937         (JSC::Wasm::wasmToWasm):
1938         * wasm/WasmCallingConvention.cpp:
1939         (JSC::Wasm::jsCallingConvention):
1940         (JSC::Wasm::wasmCallingConvention):
1941         (JSC::Wasm::jscCallingConvention): Deleted.
1942         (JSC::Wasm::jscCallingConventionAir): Deleted.
1943         (JSC::Wasm::wasmCallingConventionAir): Deleted.
1944         * wasm/WasmCallingConvention.h:
1945         (JSC::Wasm::CallInformation::CallInformation):
1946         (JSC::Wasm::CallInformation::computeResultsOffsetList):
1947         (JSC::Wasm::WasmCallingConvention::WasmCallingConvention):
1948         (JSC::Wasm::WasmCallingConvention::marshallLocationImpl const):
1949         (JSC::Wasm::WasmCallingConvention::marshallLocation const):
1950         (JSC::Wasm::WasmCallingConvention::callInformationFor const):
1951         (JSC::Wasm::JSCallingConvention::JSCallingConvention):
1952         (JSC::Wasm::JSCallingConvention::marshallLocationImpl const):
1953         (JSC::Wasm::JSCallingConvention::marshallLocation const):
1954         (JSC::Wasm::JSCallingConvention::callInformationFor const):
1955         (JSC::Wasm::CallingConvention::CallingConvention): Deleted.
1956         (JSC::Wasm::CallingConvention::marshallArgumentImpl const): Deleted.
1957         (JSC::Wasm::CallingConvention::marshallArgument const): Deleted.
1958         (JSC::Wasm::CallingConvention::headerSizeInBytes): Deleted.
1959         (JSC::Wasm::CallingConvention::setupFrameInPrologue const): Deleted.
1960         (JSC::Wasm::CallingConvention::loadArguments const): Deleted.
1961         (JSC::Wasm::CallingConvention::setupCall const): Deleted.
1962         (JSC::Wasm::CallingConventionAir::CallingConventionAir): Deleted.
1963         (JSC::Wasm::CallingConventionAir::prologueScratch const): Deleted.
1964         (JSC::Wasm::CallingConventionAir::marshallArgumentImpl const): Deleted.
1965         (JSC::Wasm::CallingConventionAir::marshallArgument const): Deleted.
1966         (JSC::Wasm::CallingConventionAir::headerSizeInBytes): Deleted.
1967         (JSC::Wasm::CallingConventionAir::loadArguments const): Deleted.
1968         (JSC::Wasm::CallingConventionAir::setupCall const): Deleted.
1969         (JSC::Wasm::nextJSCOffset): Deleted.
1970         * wasm/WasmFormat.h:
1971         * wasm/WasmFunctionParser.h:
1972         (JSC::Wasm::splitStack):
1973         (JSC::Wasm::FunctionParser::signature const):
1974         (JSC::Wasm::FunctionParser<Context>::FunctionParser):
1975         (JSC::Wasm::FunctionParser<Context>::parseBody):
1976         (JSC::Wasm::FunctionParser<Context>::parseExpression):
1977         (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
1978         * wasm/WasmInstance.h:
1979         * wasm/WasmMemoryInformation.cpp:
1980         (JSC::Wasm::getPinnedRegisters):
1981         * wasm/WasmOMGForOSREntryPlan.cpp:
1982         (JSC::Wasm::OMGForOSREntryPlan::work):
1983         * wasm/WasmOMGPlan.cpp:
1984         (JSC::Wasm::OMGPlan::work):
1985         * wasm/WasmParser.h:
1986         (JSC::Wasm::FailureHelper::makeString):
1987         (JSC::Wasm::Parser<SuccessType>::Parser):
1988         (JSC::Wasm::Parser<SuccessType>::peekInt7):
1989         (JSC::Wasm::Parser<SuccessType>::parseBlockSignature):
1990         (JSC::Wasm::Parser<SuccessType>::parseValueType):
1991         (JSC::Wasm::Parser<SuccessType>::parseResultType): Deleted.
1992         * wasm/WasmSectionParser.cpp:
1993         (JSC::Wasm::SectionParser::parseType):
1994         (JSC::Wasm::SectionParser::parseStart):
1995         * wasm/WasmSectionParser.h:
1996         * wasm/WasmSignature.cpp:
1997         (JSC::Wasm::Signature::toString const):
1998         (JSC::Wasm::Signature::dump const):
1999         (JSC::Wasm::computeHash):
2000         (JSC::Wasm::Signature::hash const):
2001         (JSC::Wasm::Signature::tryCreate):
2002         (JSC::Wasm::SignatureInformation::SignatureInformation):
2003         (JSC::Wasm::ParameterTypes::hash):
2004         (JSC::Wasm::ParameterTypes::equal):
2005         (JSC::Wasm::ParameterTypes::translate):
2006         (JSC::Wasm::SignatureInformation::signatureFor):
2007         (JSC::Wasm::SignatureInformation::adopt): Deleted.
2008         * wasm/WasmSignature.h:
2009         (JSC::Wasm::Signature::Signature):
2010         (JSC::Wasm::Signature::allocatedSize):
2011         (JSC::Wasm::Signature::returnCount const):
2012         (JSC::Wasm::Signature::returnType const):
2013         (JSC::Wasm::Signature::returnsVoid const):
2014         (JSC::Wasm::Signature::argument const):
2015         (JSC::Wasm::Signature::operator== const):
2016         (JSC::Wasm::Signature::getReturnType):
2017         (JSC::Wasm::Signature::getArgument):
2018         (JSC::Wasm::SignatureHash::SignatureHash):
2019         (JSC::Wasm::SignatureHash::equal):
2020         (JSC::Wasm::SignatureInformation::thunkFor const):
2021         (JSC::Wasm::Signature::returnType): Deleted.
2022         (JSC::Wasm::Signature::argument): Deleted.
2023         * wasm/WasmStreamingParser.cpp:
2024         (JSC::Wasm::StreamingParser::parseCodeSectionSize):
2025         (JSC::Wasm::StreamingParser::parseFunctionPayload):
2026         (JSC::Wasm::StreamingParser::parseSectionPayload):
2027         * wasm/WasmStreamingParser.h:
2028         (JSC::Wasm::StreamingParserClient::didReceiveSectionData):
2029         (JSC::Wasm::StreamingParser::reportError):
2030         (JSC::Wasm::StreamingParserClient::didReceiveFunctionData): Deleted.
2031         * wasm/WasmThunks.cpp:
2032         (JSC::Wasm::throwExceptionFromWasmThunkGenerator):
2033         (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator):
2034         (JSC::Wasm::triggerOMGEntryTierUpThunkGenerator):
2035         * wasm/WasmValidate.cpp:
2036         (JSC::Wasm::Validate::ControlData::ControlData):
2037         (JSC::Wasm::Validate::ControlData::dump const):
2038         (JSC::Wasm::Validate::ControlData::blockType const):
2039         (JSC::Wasm::Validate::ControlData::signature const):
2040         (JSC::Wasm::Validate::ControlData::branchTargetArity const):
2041         (JSC::Wasm::Validate::ControlData::branchTargetType const):
2042         (JSC::Wasm::Validate::fail const):
2043         (JSC::Wasm::Validate::addTableGet):
2044         (JSC::Wasm::Validate::addTableGrow):
2045         (JSC::Wasm::Validate::addTableFill):
2046         (JSC::Wasm::Validate::addRefIsNull):
2047         (JSC::Wasm::Validate::addTopLevel):
2048         (JSC::Wasm::splitStack):
2049         (JSC::Wasm::Validate::addBlock):
2050         (JSC::Wasm::Validate::addLoop):
2051         (JSC::Wasm::Validate::addIf):
2052         (JSC::Wasm::Validate::addElseToUnreachable):
2053         (JSC::Wasm::Validate::addReturn):
2054         (JSC::Wasm::Validate::checkBranchTarget):
2055         (JSC::Wasm::Validate::addSwitch):
2056         (JSC::Wasm::Validate::addGrowMemory):
2057         (JSC::Wasm::Validate::addEndToUnreachable):
2058         (JSC::Wasm::Validate::addCall):
2059         (JSC::Wasm::Validate::addCallIndirect):
2060         (JSC::Wasm::Validate::unify):
2061         (JSC::Wasm::Validate::ControlData::hasNonVoidSignature const): Deleted.
2062         (JSC::Wasm::Validate::ControlData::type const): Deleted.
2063         (JSC::Wasm::Validate::ControlData::branchTargetSignature const): Deleted.
2064         * wasm/generateWasmOpsHeader.py:
2065         * wasm/js/JSToWasm.cpp:
2066         (JSC::Wasm::boxWasmResult):
2067         (JSC::Wasm::allocateResultsArray):
2068         (JSC::Wasm::marshallJSResult):
2069         (JSC::Wasm::createJSToWasmWrapper):
2070         * wasm/js/JSToWasm.h:
2071         * wasm/js/JSWebAssemblyCodeBlock.cpp:
2072         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
2073         * wasm/js/WasmToJS.cpp:
2074         (JSC::Wasm::handleBadI64Use):
2075         (JSC::Wasm::wasmToJS):
2076         * wasm/js/WasmToJS.h:
2077         * wasm/js/WebAssemblyFunction.cpp:
2078         (JSC::callWebAssemblyFunction):
2079         (JSC::WebAssemblyFunction::useTagRegisters const):
2080         (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
2081         * wasm/js/WebAssemblyModuleRecord.cpp:
2082         (JSC::WebAssemblyModuleRecord::link):
2083
2084 2019-09-30  Alex Christensen  <achristensen@webkit.org>
2085
2086         Resurrect Mac CMake build
2087         https://bugs.webkit.org/show_bug.cgi?id=202384
2088
2089         Rubber-stamped by Tim Horton.
2090
2091         * PlatformMac.cmake:
2092
2093 2019-09-30  Alex Christensen  <achristensen@webkit.org>
2094
2095         Rename JSTokenType::EXPORT to EXPORT_ to avoid naming conflict with internal header
2096         https://bugs.webkit.org/show_bug.cgi?id=202385
2097
2098         * parser/Keywords.table:
2099         * parser/Parser.cpp:
2100         (JSC::Parser<LexerType>::parseModuleSourceElements):
2101         (JSC::Parser<LexerType>::parseExportDeclaration):
2102         * parser/ParserTokens.h:
2103
2104 2019-09-30  Tadeu Zagallo  <tzagallo@apple.com>
2105
2106         Make assertion in JSObject::putOwnDataProperty more precise
2107         https://bugs.webkit.org/show_bug.cgi?id=202379
2108         <rdar://problem/49515980>
2109
2110         Reviewed by Yusuke Suzuki.
2111
2112         Currently, we assert that the structure has no accessors/custom accessors, but that assertion is
2113         too conservative. All we need to prove is that the property being inserted either does not exist
2114         in the target object or is neither an accessor nor read-only.
2115
2116         * runtime/JSObject.h:
2117         (JSC::JSObject::putOwnDataProperty): Deleted.
2118         (JSC::JSObject::putOwnDataPropertyMayBeIndex): Deleted.
2119         * runtime/JSObjectInlines.h:
2120         (JSC::JSObject::validatePutOwnDataProperty):
2121         (JSC::JSObject::putOwnDataProperty):
2122         (JSC::JSObject::putOwnDataPropertyMayBeIndex):
2123
2124 2019-09-30  Yusuke Suzuki  <ysuzuki@apple.com>
2125
2126         [JSC] HeapSnapshotBuilder m_rootData should be protected with a lock too
2127         https://bugs.webkit.org/show_bug.cgi?id=202389
2128         <rdar://problem/50717564>
2129
2130         Reviewed by Mark Lam.
2131
2132         While we are protecting HeapSnapshotBuilder::m_edges with a lock, we are not protecting m_rootData, which is also concurrently modified.
2133         This patch protects it.
2134
2135         * heap/HeapSnapshotBuilder.cpp:
2136         (JSC::HeapSnapshotBuilder::setOpaqueRootReachabilityReasonForCell):
2137
2138 2019-09-30  Saam Barati  <sbarati@apple.com>
2139
2140         Inline caching is wrong for custom accessors and custom values
2141         https://bugs.webkit.org/show_bug.cgi?id=201994
2142         <rdar://problem/50850326>
2143
2144         Reviewed by Yusuke Suzuki.
2145
2146         There was an oversight in our inline caching code for custom accessors and
2147         custom values. We used to assume that if an object O had a custom function for
2148         property P, then O will forever respond to the same custom function for
2149         property P.
2150         
2151         This assumption was very wrong. These custom accessors/values might be
2152         properties in JS which are configurable, so they can be rewritten to be
2153         other properties. Our inline caching code would be wrong in the scenarios
2154         where these property descriptors got redefined.
2155         
2156         This patch makes it so that we now properly watchpoint for custom functions
2157         being changed. If the custom accessor has been materialized, we place an
2158         Equivalence watchpoint on the custom accessor. This patch also teaches
2159         StructureStubInfo how to watchpoint on property value equivalence. Before,
2160         we just watchpointed on structure transitions.
2161         
2162         This patch also adds a new property condition kind for when the custom function
2163         exists inside the static property table. This case is really easy to test for
2164         because we just need to see if the structure still has static properties and
2165         the static property table has the entry for a particular property. This
2166         property condition kind just needs to watch for structure transitions because
2167         an entry in the static property table can't be mutated.
2168         
2169         This patch is neutral on the microbenchmarks I've added.
2170
2171         * bytecode/AccessCase.cpp:
2172         (JSC::AccessCase::AccessCase):
2173         (JSC::AccessCase::couldStillSucceed const):
2174         (JSC::AccessCase::generateImpl):
2175         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h:
2176         * bytecode/ObjectPropertyCondition.cpp:
2177         (JSC::ObjectPropertyCondition::structureEnsuresValidityAssumingImpurePropertyWatchpoint const):
2178         * bytecode/ObjectPropertyCondition.h:
2179         (JSC::ObjectPropertyCondition::customFunctionEquivalence):
2180         * bytecode/ObjectPropertyConditionSet.cpp:
2181         (JSC::ObjectPropertyConditionSet::hasOneSlotBaseCondition const):
2182         (JSC::ObjectPropertyConditionSet::slotBaseCondition const):
2183         (JSC::generateConditionsForPrototypePropertyHitCustom):
2184         * bytecode/ObjectPropertyConditionSet.h:
2185         * bytecode/PolyProtoAccessChain.cpp:
2186         (JSC::PolyProtoAccessChain::create):
2187         * bytecode/PolymorphicAccess.cpp:
2188         (JSC::AccessGenerationState::installWatchpoint):
2189         (JSC::PolymorphicAccess::commit):
2190         (JSC::AccessGenerationState::addWatchpoint): Deleted.
2191         * bytecode/PolymorphicAccess.h:
2192         * bytecode/PropertyCondition.cpp:
2193         (JSC::PropertyCondition::dumpInContext const):
2194         (JSC::PropertyCondition::isStillValidAssumingImpurePropertyWatchpoint const):
2195         (JSC::PropertyCondition::validityRequiresImpurePropertyWatchpoint const):
2196         (JSC::PropertyCondition::isStillValid const):
2197         (JSC::PropertyCondition::isWatchableWhenValid const):
2198         (WTF::printInternal):
2199         * bytecode/PropertyCondition.h:
2200         (JSC::PropertyCondition::customFunctionEquivalence):
2201         (JSC::PropertyCondition::hash const):
2202         (JSC::PropertyCondition::operator== const):
2203         * bytecode/StructureStubClearingWatchpoint.cpp:
2204         (JSC::StructureTransitionStructureStubClearingWatchpoint::fireInternal):
2205         (JSC::WatchpointsOnStructureStubInfo::addWatchpoint):
2206         (JSC::WatchpointsOnStructureStubInfo::ensureReferenceAndInstallWatchpoint):
2207         (JSC::WatchpointsOnStructureStubInfo::ensureReferenceAndAddWatchpoint):
2208         (JSC::AdaptiveValueStructureStubClearingWatchpoint::handleFire):
2209         (JSC::StructureStubClearingWatchpoint::fireInternal): Deleted.
2210         * bytecode/StructureStubClearingWatchpoint.h:
2211         * bytecode/Watchpoint.h:
2212         * jit/Repatch.cpp:
2213         (JSC::tryCacheGetByID):
2214         (JSC::tryCachePutByID):
2215         * runtime/ClassInfo.h:
2216         * runtime/JSObject.cpp:
2217         (JSC::JSObject::findPropertyHashEntry const):
2218         * runtime/JSObject.h:
2219         * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
2220         * runtime/Structure.cpp:
2221         (JSC::Structure::findPropertyHashEntry const):
2222         * runtime/Structure.h:
2223         * tools/JSDollarVM.cpp:
2224         (JSC::testStaticAccessorGetter):
2225         (JSC::testStaticAccessorPutter):
2226         (JSC::StaticCustomAccessor::StaticCustomAccessor):
2227         (JSC::StaticCustomAccessor::createStructure):
2228         (JSC::StaticCustomAccessor::create):
2229         (JSC::StaticCustomAccessor::getOwnPropertySlot):
2230         (JSC::functionCreateStaticCustomAccessor):
2231         (JSC::JSDollarVM::finishCreation):
2232
2233 2019-09-30  Yusuke Suzuki  <ysuzuki@apple.com>
2234
2235         [JSC] AI folds CompareEq wrongly when it sees proven Boolean and Number
2236         https://bugs.webkit.org/show_bug.cgi?id=202382
2237         <rdar://problem/52669112>
2238
2239         Reviewed by Saam Barati.
2240
2241         If CompareEq(Untyped, Untyped) finds that it gets proven Boolean and Number types on its arguments,
2242         we fold it to constant False. But this is wrong since `false == 0` is true in JS.
2243         This patch adds leastUpperBoundOfEquivalentSpeculations, which merges Number, BigInt, and Boolean types
2244         if one of them are seen.
2245
2246         * bytecode/SpeculatedType.cpp:
2247         (JSC::leastUpperBoundOfEquivalentSpeculations):
2248         (JSC::valuesCouldBeEqual):
2249
2250 2019-09-28  Adrian Perez de Castro  <aperez@igalia.com>
2251
2252         [GTK][WPE] Fix non-unified build issue caused by r250440
2253         https://bugs.webkit.org/show_bug.cgi?id=202349
2254
2255         Reviewed by Mark Lam.
2256
2257         * dfg/DFGOSRExit.cpp: Add missing inclusion of the BytecodeUseDef.h header.
2258
2259 2019-09-27  Yusuke Suzuki  <ysuzuki@apple.com>
2260
2261         [JSC] Keep JSString::value(ExecState*)'s result as String instead of `const String&`
2262         https://bugs.webkit.org/show_bug.cgi?id=202330
2263
2264         Reviewed by Saam Barati.
2265
2266         In toLocaleLowerCase and toLocaleUpperCase, we get `const String&` from JSString* and use it.
2267         But if this string is newly created one in toLocaleLowerCase and toLocaleUpperCase (like, passing a number, and number.toString() is called
2268         in C++), after getting `const String&`, our C++ code potentially does not have any reference to the owner of this `const String&`. So, this
2269         JSString* can be collected by GC, while `const String&` is used. This makes `const String&` destroyed, and causes crash.
2270
2271         In this patch, we receive it as `String` instead of `const String&` to ref it. This ensures that this string is live even if the owner is collected.
2272         I grepped the source code and make this changes conservatively to places which looks dangerous. And I added error checks more after calling `value(exec)`.
2273
2274         In this patch, I didn't introduce the change like that: `JSString::value(ExecState*)` returns `String` instead of `const String&`. Some of places are
2275         really performance sensitive and we want to use the current behavior when we can ensure the owners are alive. We could figure out these points, and we
2276         can change the default behavior of `JSString::value` function to returning `String`. But for now, I plan it as a future work.
2277
2278         * dfg/DFGOperations.cpp:
2279         * jsc.cpp:
2280         (GlobalObject::moduleLoaderImportModule):
2281         * runtime/DateConstructor.cpp:
2282         (JSC::constructDate):
2283         * runtime/JSCJSValueInlines.h:
2284         (JSC::JSValue::equalSlowCaseInline):
2285         * runtime/RegExpMatchesArray.h:
2286         (JSC::createRegExpMatchesArray):
2287         * runtime/StringPrototype.cpp:
2288         (JSC::toLocaleCase):
2289         (JSC::stringProtoFuncToLocaleLowerCase):
2290         (JSC::stringProtoFuncToLocaleUpperCase):
2291         * tools/JSDollarVM.cpp:
2292         (JSC::functionCreateBuiltin):
2293
2294 2019-09-27  Keith Miller  <keith_miller@apple.com>
2295
2296         OSR exit shouldn't bother updating get_by_id array profiles that have changed modes
2297         https://bugs.webkit.org/show_bug.cgi?id=202324
2298         <rdar://problem/52669110>
2299
2300         Reviewed by Yusuke Suzuki.
2301
2302         This is an optimization that avoids polluting the array profile.
2303
2304         * dfg/DFGOSRExit.cpp:
2305         (JSC::DFG::OSRExit::executeOSRExit):
2306         (JSC::DFG::OSRExit::compileExit):
2307
2308 2019-09-27  Alexey Shvayka  <shvaikalesh@gmail.com>
2309
2310         Non-standard Error properties should not be enumerable
2311         https://bugs.webkit.org/show_bug.cgi?id=198975
2312
2313         Reviewed by Ross Kirsling.
2314
2315         Define non-standard Error properties "line", "column", and "sourceURL" as non-enumerable to match other engines.
2316
2317         * runtime/ErrorInstance.cpp:
2318         (JSC::ErrorInstance::materializeErrorInfoIfNeeded):
2319
2320 2019-09-26  Yusuke Suzuki  <ysuzuki@apple.com>
2321
2322         [JSC] DFG recursive-tail-call optimization should not emit jump to call-frame with varargs
2323         https://bugs.webkit.org/show_bug.cgi?id=202299
2324         <rdar://problem/52669116>
2325
2326         Reviewed by Saam Barati.
2327
2328         When converting recursive-tail-call to jump to the upper call frame, we picked call-frame which is spread by LoadVarargs.
2329         This is wrong since this call-frame does not know the exact number of arguments. We are using InlineCallFrame::argumentCountIncludingThis,
2330         but this is maximal argumentCountIncludingThis when InlineCallFrame is Varargs call-frame. Let's see the simple example.
2331
2332             'use strict';
2333             var count = 0;
2334             function foo() {
2335                 count--;
2336                 if (count === 0)
2337                     return 30;
2338                 return foo(42, 42); // HERE
2339             }
2340
2341             function test() {
2342                 count = 100;
2343                 return foo(...[42, 42]); // THERE
2344             }
2345             noInline(test);
2346
2347         In the above case, currently, we convert HERE's foo call to the jump to the prologue of the foo function inlined by "test". But since foo is called
2348         in a varargs form, "test" emits LoadVarargs, and it also emits `SetArgumentMaybe` for 1st and 2nd arguments. Since HERE's foo call is actually passing
2349         two arguments, we emit a Phi node which Upsilon is from SetArgumentMaybe and 42 Constant. This is wrong since SetArgumentMaybe should not be used. Later,
2350         SSA conversion phase emits Upsilon with SetArgumentMaybe, and since SetArgumentMaybe is simply removed in SSA conversion phase, it ends up emitting
2351         Upsilon without a child.
2352
2353         We are currently only performing recursive-tail-call optimization when argument count matches. Given this condition, we should not pick varargs CallFrame
2354         as a jump target.
2355
2356         * dfg/DFGByteCodeParser.cpp:
2357         (JSC::DFG::ByteCodeParser::handleRecursiveTailCall):
2358         * dfg/DFGSSAConversionPhase.cpp:
2359         (JSC::DFG::SSAConversionPhase::run):
2360
2361 2019-09-26  Alexey Shvayka  <shvaikalesh@gmail.com>
2362
2363         toExponential, toFixed, and toPrecision should allow arguments up to 100
2364         https://bugs.webkit.org/show_bug.cgi?id=199163
2365
2366         Reviewed by Ross Kirsling.
2367
2368         Previously, the spec gave fixed range of [0,20] for Number.prototype.{toExponential,toFixed} argument and
2369         range of [1,21] for Number.prototype.toPrecision argument, but allowed implementations to permit a larger range.
2370         Historically, only SpiderMonkey accepted a larger range, and other implementations threw a RangeError outside the range.
2371         Later the spec was changed (see https://github.com/tc39/ecma262/pull/857) to specify the SpiderMonkey behavior.
2372
2373         * runtime/NumberPrototype.cpp:
2374         (JSC::numberProtoFuncToExponential): Accept arguments between 0 and 100.
2375         (JSC::numberProtoFuncToFixed): Accept arguments between 0 and 100.
2376         (JSC::numberProtoFuncToPrecision): Accept arguments between 1 and 100.
2377         (JSC::getIntegerArgumentInRange): Inline to improve readability.
2378
2379 2019-09-26  Mark Lam  <mark.lam@apple.com>
2380
2381         We need to initialize the Gigacage first in setJITEnabled() when disabling the JIT.
2382         https://bugs.webkit.org/show_bug.cgi?id=202257
2383
2384         Reviewed by Saam Barati.
2385
2386         Because of an OS quirk, even after the JIT region has been unmapped, the OS thinks
2387         that region is reserved, and as such, can cause Gigacage allocation to fail.  We
2388         work around this by initializing the Gigacage first.
2389
2390         Note: when called, setJITEnabled() is always called extra early in the process
2391         bootstrap.  Under normal operation (when setJITEnabled() isn't called at all), we
2392         will naturally initialize the Gigacage before we allocate the JIT region. 
2393         Hence, this workaround is merely ensuring the same behavior of allocation ordering.
2394
2395         This patch only applies to iOS.
2396
2397         * jit/ExecutableAllocator.cpp:
2398         (JSC::ExecutableAllocator::setJITEnabled):
2399
2400 2019-09-25  Guillaume Emont  <guijemont@igalia.com>
2401
2402         testapi: slow devices need more time before watchdog fires
2403         https://bugs.webkit.org/show_bug.cgi?id=202149
2404
2405         Reviewed by Mark Lam.
2406
2407         In testExecutionTimeLimit(), the time that we leave for the watchdog
2408         to fire is often not enough on (slower) arm and mips devices, creating
2409         a testapi failure.
2410         This change also skips FTL-specific testing when FTL is disabled.
2411
2412         * API/tests/ExecutionTimeLimitTest.cpp:
2413         (testExecutionTimeLimit):
2414
2415 2019-09-24  Christopher Reid  <chris.reid@sony.com>
2416
2417         [WinCairo] Start RemoteInspectorServer
2418         https://bugs.webkit.org/show_bug.cgi?id=199938
2419         <rdar://problem/53323048>
2420
2421         Reviewed by Fujii Hironori.
2422
2423         * inspector/remote/socket/RemoteInspectorSocket.cpp:
2424         * inspector/remote/socket/win/RemoteInspectorSocketWin.cpp:
2425           - Fixed some network byte order issues
2426           - Need to check for POLLHUP in isReadable as closed windows sockets don't have POLLIN set
2427
2428 2019-09-24  Alexey Shvayka  <shvaikalesh@gmail.com>
2429
2430         [ES6] Come up with a test for Proxy.[[GetOwnProperty]] that tests the isExtensible error when the  result of the trap is undefined
2431         https://bugs.webkit.org/show_bug.cgi?id=154376
2432
2433         Reviewed by Ross Kirsling.
2434
2435         * runtime/ProxyObject.cpp:
2436         (JSC::ProxyObject::performInternalMethodGetOwnProperty): Remove resolved FIXME comments.
2437
2438 2019-09-24  Alexey Proskuryakov  <ap@apple.com>
2439
2440         JavaScriptCore (still) doesn't unlock the engineering keychain
2441         https://bugs.webkit.org/show_bug.cgi?id=202123
2442
2443         Reviewed by Dan Bernstein.
2444
2445         Unlike WebKit, JavaScriptCore only defines CODE_SIGN_IDENTITY in ToolExecutable
2446         configuration, not in DebugRelease. As a result, it's not defined when running
2447         the script for Unlock Keychain phase.
2448
2449         Fix this by moving CODE_SIGN_IDENTITY to DebugRelease configuration, matching
2450         WebKit. As a result, we are now using consistent signing options in all targets.
2451
2452         * Configurations/DebugRelease.xcconfig:
2453         * Configurations/ToolExecutable.xcconfig:
2454         When moving, removed a special case for Production, as that's never used with
2455         DebugRelease (also, the Profile case was incorrect).
2456
2457 2019-09-24  Caio Lima  <ticaiolima@gmail.com>
2458
2459         [BigInt] Add ValueBitRShift into DFG
2460         https://bugs.webkit.org/show_bug.cgi?id=192663
2461
2462         Reviewed by Robin Morisset.
2463
2464         We are introducing a new node called ValueBitRShift that is
2465         responsible to handle speculation of `UntypedUse` and `BigIntUse` during
2466         DFG. Following the approach of other bitwise operations, we
2467         now have 2 nodes to handle ">>" operator during JIT, mainly because
2468         of the introduction of BigInt, that makes this operator result into
2469         Int32 or BigInt. We renamed `BitRShift` to `ArithBitRShift` and such
2470         node handles Integers and Numbers speculation and can only return
2471         Int32 values.
2472
2473         * bytecode/BytecodeList.rb:
2474         * bytecode/CodeBlock.cpp:
2475         (JSC::CodeBlock::finishCreation):
2476         * bytecode/Opcode.h:
2477
2478         Adding support to ValueProfile to `op_rshift` to be used during
2479         prediction propagation.
2480
2481         * dfg/DFGAbstractInterpreterInlines.h:
2482         (JSC::DFG::AbstractInterpreter<AbstractStateType>::handleConstantBinaryBitwiseOp):
2483         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2484
2485         Adding support to still do constant propagation of ValueBitRShift when
2486         it is `UntypedUse`.
2487
2488         * dfg/DFGBackwardsPropagationPhase.cpp:
2489         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
2490         (JSC::DFG::BackwardsPropagationPhase::propagate):
2491         * dfg/DFGByteCodeParser.cpp:
2492         (JSC::DFG::ByteCodeParser::parseBlock):
2493         * dfg/DFGClobberize.h:
2494         (JSC::DFG::clobberize):
2495         * dfg/DFGDoesGC.cpp:
2496         (JSC::DFG::doesGC):
2497
2498         `ValueBitRshift` can trigger GC when it is `BigIntUse` because the
2499         operation `JSBigInt::signedRightShift` potentially allocates new
2500         JSBigInts. It also can trigger GC when it is `UntypedUse` because it
2501         can execute arbitrary code.
2502
2503         * dfg/DFGFixupPhase.cpp:
2504         (JSC::DFG::FixupPhase::fixupNode):
2505
2506         The fixup rule of `ValueBitRShift` checks if it should fixup for
2507         `BigIntUse` or `UntypedUse`. If those checks fail, we fallback to
2508         `ArithBitRShift`.
2509
2510         * dfg/DFGNode.h:
2511         (JSC::DFG::Node::hasNumericResult):
2512         (JSC::DFG::Node::hasHeapPrediction):
2513         * dfg/DFGNodeType.h:
2514         * dfg/DFGOperations.cpp:
2515         * dfg/DFGOperations.h:
2516         * dfg/DFGPredictionPropagationPhase.cpp:
2517
2518         We are using the same rule used by `ValueBitLShift` to propagate
2519         types. We try to propagate the type based on operation's input, but
2520         fallback to `getHeapPrediction()` if this is not possible.
2521
2522         * dfg/DFGSafeToExecute.h:
2523         (JSC::DFG::safeToExecute):
2524         * dfg/DFGSpeculativeJIT.cpp:
2525         (JSC::DFG::SpeculativeJIT::emitUntypedRightShiftBitOp):
2526         (JSC::DFG::SpeculativeJIT::compileValueBitRShift):
2527         (JSC::DFG::SpeculativeJIT::compileShiftOp):
2528         * dfg/DFGSpeculativeJIT.h:
2529         (JSC::DFG::SpeculativeJIT::shiftOp):
2530         * dfg/DFGSpeculativeJIT32_64.cpp:
2531         (JSC::DFG::SpeculativeJIT::compile):
2532         * dfg/DFGSpeculativeJIT64.cpp:
2533         (JSC::DFG::SpeculativeJIT::compile):
2534         * dfg/DFGStrengthReductionPhase.cpp:
2535         (JSC::DFG::StrengthReductionPhase::handleNode):
2536         * ftl/FTLCapabilities.cpp:
2537         (JSC::FTL::canCompile):
2538         * ftl/FTLLowerDFGToB3.cpp:
2539         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
2540         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitRShift):
2541         (JSC::FTL::DFG::LowerDFGToB3::compileArithBitRShift):
2542         (JSC::FTL::DFG::LowerDFGToB3::compileBitRShift): Deleted.
2543         * llint/LowLevelInterpreter64.asm:
2544         * runtime/CommonSlowPaths.cpp:
2545         (JSC::SLOW_PATH_DECL):
2546
2547 2019-09-24  Mark Lam  <mark.lam@apple.com>
2548
2549         Refactor cellSize() out of VMInspector::verifyCellSize().
2550         https://bugs.webkit.org/show_bug.cgi?id=202132
2551
2552         Reviewed by Saam Barati.
2553
2554         * CMakeLists.txt:
2555         * JavaScriptCore.xcodeproj/project.pbxproj:
2556         * runtime/CellSize.h: Added.
2557         (JSC::isDynamicallySizedType):
2558         (JSC::cellSize):
2559         * runtime/DirectArguments.h:
2560         * runtime/JSBigInt.h:
2561         * runtime/JSModuleNamespaceObject.h:
2562         * runtime/JSType.h:
2563         (JSC::isDynamicallySizedType): Deleted.
2564         * tools/VMInspectorInlines.h:
2565         (JSC::VMInspector::verifyCellSize):
2566
2567 2019-09-23  Mark Lam  <mark.lam@apple.com>
2568
2569         Introducing Integrity audit functions.
2570         https://bugs.webkit.org/show_bug.cgi?id=202085
2571
2572         Reviewed by Saam Barati.
2573
2574         This patch's main goal is to introduce the Integrity audit functions.  They can
2575         be used wherever we want to audit a cell to probabilistically ensure it is not
2576         corrupted.  However, to keep this patch small, we will only introduce the audit
2577         tool here with one example use in SlotVisitor.  We'll follow up later with more
2578         patches to deploy this tool throughout the VM.
2579
2580         1. Introduced Integrity audit functions that can be configured at several
2581            AuditLevels:
2582                None - don't do any audits.
2583                Minimal - do a minimal quick audit (minimize perf impact).
2584                Full - do a full audit of the many aspects of a cell.
2585                Random - randomly do a full audit with a probability dictated by
2586                     Options::randomIntegrityAuditRate() between 0.0 (never audit) and
2587                     1.0 (audit at every chance).
2588
2589            The default AuditLevel for Debug builds is Random.
2590            The default AuditLevel for Release builds is None.
2591            The default Options::randomIntegrityAuditRate() is 0.05.
2592
2593            How full audits work?
2594            ====================
2595            The full audit uses the VMInspector::verifyCell() template function to do its
2596            job.  The reason for keeping this separate is to allow the template function
2597            to be used later for debug checks that want to take some custom action on
2598            verification failure instead of crashing with a RELEASE_ASSERT.
2599
2600            Full audit of a cell pointer includes:
2601            a. Verify that a cell designated as a LargeAllocation is in the heap's
2602               set of LargeAllocations.
2603
2604            b. Verify that a cell not designated as a LargeAllocation is actually in its
2605               MarkedBlock's bounds.
2606
2607            c. Verify that the cell's container (LargeAllocation / MarkedBlock) actually
2608               belongs to the current VM.
2609
2610            d. Verify that a cell in a MarkedBlock is properly aligned on the block's
2611               allocation unit size.
2612
2613            e. If the cell is not an ImmutableButterfly, verify that it is not located in
2614               the Gigacage.
2615
2616            f. Verify that the cell's JSType matches its StructureBlob's JSType.
2617
2618            g. Verify that the cell size as dictated by the cell ClassInfo does not exceed
2619               the size of the allocation unit size (as expected by the container
2620               MarkedBlock or LargeAllocation).
2621
2622               Some cells are dynamically size (see isDynamicallySizedType()).  For these
2623               cells, we compute their sizes and verify that the size does not exceed the
2624               allocation unit size.  Their sizes should also be greater or equal to the
2625               static cell size as dictated by their ClassInfo.
2626
2627            h. If a cell has a butterfly, verify that the butterfly is in its the JSValue
2628               Gigacage.
2629
2630            We can add more verifications later, or make some these more robust, but this
2631            is a start for now.
2632
2633            How random audits work?
2634            ======================
2635            Random audits are triggered by the m_triggerBits bits in VM::m_integrityRandom.
2636            m_triggerBits is a 64-bit bitfield.
2637
2638            If Options::randomIntegrityAuditRate() is 0, m_triggerBits will always be 0,
2639            and no audits will be done.
2640
2641            If Options::randomIntegrityAuditRate() is non-zero, m_triggerBits will be
2642            initialized as follows:
2643
2644                 | 1 reload bit | ... 63 trigger bits ... |
2645
2646            The reload bit is always set (more details below).
2647            Each of the 63 trigger bits are randomly set depending if the following is true
2648            for the bit:
2649
2650                 VM::random() <= Options::randomIntegrityAuditRate() * UINT_MAX
2651
2652            When Integrity::auditCell() is called, we take the bottom bit as the trigger
2653            bit for the current cell, and shifts the rest down by 1.
2654
2655            If m_triggerBits is non-null after the shift, the taken trigger bit will dictate
2656            whether we do a full audit on the current cell or not.
2657
2658            Once the reload bit reaches the bottom, we call a reload function to
2659            re-initialize m_triggerBits.  The reload function also returns a bool
2660            indicating whether to trigger a full audit of the current cell.
2661
2662            With this scheme, we only need to call the reload function once every 64 calls
2663            to Integrity::auditCell(), and can efficiently determine whether to trigger
2664            the audit the other 63 times with the probability specified in
2665            Options::randomIntegrityAuditRate().
2666
2667         2. Embedded the C++ class size of JSCells into their ClassInfo.  This is used in
2668            the full audits to verify cell sizes.
2669
2670         3. Added isDynamicallySizedType() to check if a JSType has a dynamic size allocation
2671            i.e. the size of instances of this type is not determined by the static C++
2672            size of its class, but rather, depends on some runtime variable.
2673
2674         4. Made the VMInspector a friend of several classes so that it can access their
2675            private methods and fields.
2676
2677         5. Moved the inline function JSBigInt::allocationSize() from BigInt.cpp to its
2678            header file so that we can use it in VMInspector::verifyCellSize().
2679
2680         6. Gave the JSModuleNamespaceObject() its own JSType so that we can identify it
2681            as a dynamically sized object.
2682
2683         7. Increased the randomness of VM::random() (which is implemented with WeakRandom)
2684            by re-seeding it with a cryptographically random number each GC.
2685
2686         8. Called Integrity::auditCell() on SlotVisitor::appendJSCellOrAuxiliary()'s cell
2687            as an example use of auditCell().  More uses will be added in later patches to
2688            follow.
2689
2690         * CMakeLists.txt:
2691         * JavaScriptCore.xcodeproj/project.pbxproj:
2692         * Sources.txt:
2693         * heap/Heap.cpp:
2694         (JSC::Heap::runBeginPhase):
2695         * heap/SlotVisitor.cpp:
2696         (JSC::SlotVisitor::appendJSCellOrAuxiliary):
2697         * runtime/ClassInfo.h:
2698         * runtime/DirectArguments.h:
2699         * runtime/JSBigInt.cpp:
2700         (JSC::JSBigInt::allocationSize): Deleted.
2701         * runtime/JSBigInt.h:
2702         (JSC::JSBigInt::allocationSize):
2703         * runtime/JSModuleNamespaceObject.h:
2704         * runtime/JSType.cpp:
2705         (WTF::printInternal):
2706         * runtime/JSType.h:
2707         (JSC::isDynamicallySizedType):
2708         * runtime/Options.cpp:
2709         (JSC::recomputeDependentOptions):
2710         * runtime/OptionsList.h:
2711         * runtime/Structure.h:
2712         * runtime/VM.cpp:
2713         (JSC::VM::VM):
2714         * runtime/VM.h:
2715         (JSC::VM::random):
2716         (JSC::VM::integrityRandom):
2717         * tools/Integrity.cpp: Added.
2718         (JSC::Integrity::Random::Random):
2719         (JSC::Integrity::Random::reloadAndCheckShouldAuditSlow):
2720         (JSC::Integrity::auditCellFully):
2721         (JSC::Integrity::auditCellMinimallySlow):
2722         * tools/Integrity.h: Added.
2723         (JSC::Integrity::auditCell):
2724         * tools/IntegrityInlines.h: Added.
2725         (JSC::Integrity::Random::shouldAudit):
2726         (JSC::Integrity::auditCellMinimally):
2727         (JSC::Integrity::auditCellRandomly):
2728         * tools/VMInspector.h:
2729         (JSC::VMInspector::unusedVerifier):
2730         (JSC::VMInspector::verifyCellSize):
2731         * tools/VMInspectorInlines.h: Added.
2732         (JSC::VMInspector::verifyCellSize):
2733         (JSC::VMInspector::verifyCell):
2734
2735 2019-09-23  Commit Queue  <commit-queue@webkit.org>
2736
2737         Unreviewed, rolling out r250262.
2738         https://bugs.webkit.org/show_bug.cgi?id=202126
2739
2740         "Breaks Win64 builds because of MSVC bug" (Requested by mlam|a
2741         on #webkit).
2742
2743         Reverted changeset:
2744
2745         "Reduce the amount of memory needed to store Options."
2746         https://bugs.webkit.org/show_bug.cgi?id=202105
2747         https://trac.webkit.org/changeset/250262
2748
2749 2019-09-23  Ross Kirsling  <ross.kirsling@sony.com>
2750
2751         Array methods should throw TypeError upon attempting to modify a string
2752         https://bugs.webkit.org/show_bug.cgi?id=201910
2753
2754         Reviewed by Keith Miller.
2755
2756         We currently allow Array prototype methods to modify strings that they are called upon in certain cases.
2757         (In particular, we're inconsistent about permitting writes to the length property.)
2758
2759         According to section 22.1.3 of the ES spec, this should result in a TypeError.
2760         https://tc39.es/ecma262/#sec-properties-of-the-array-prototype-object
2761         (Test262 cases are needed, but the key is that all such methods use Set(..., true) which throws on failure.)
2762
2763         * runtime/ArrayPrototype.cpp:
2764         (JSC::putLength):
2765         (JSC::setLength):
2766         Never update the length property of a non-JSArray without checking whether we're actually allowed to.
2767
2768 2019-09-23  Mark Lam  <mark.lam@apple.com>
2769
2770         Lazy JSGlobalObject property materialization should not use putDirectWithoutTransition.
2771         https://bugs.webkit.org/show_bug.cgi?id=202122
2772         <rdar://problem/55535249>
2773
2774         Reviewed by Yusuke Suzuki.
2775
2776         * runtime/JSGlobalObject.cpp:
2777         (JSC::JSGlobalObject::init):
2778
2779 2019-09-23  Mark Lam  <mark.lam@apple.com>
2780
2781         Reduce the amount of memory needed to store Options.
2782         https://bugs.webkit.org/show_bug.cgi?id=202105
2783
2784         Reviewed by Yusuke Suzuki.
2785
2786         The size of the JSC::Config needed to store the Options is now reduced to 4K
2787         instead of 16K, enabled by constexpr template magic.
2788
2789         1. Instead of all options in a large array of OptionEntry (which is a union of
2790            all the option types), we now have separate arrays for each of the types of
2791            options.  For example,
2792
2793                 Removed g_jscConfig.options[].
2794                 Added g_jscConfig.typeBoolOptions[].
2795                 Added g_jscConfig.typeInt32Options[].
2796                 Added g_jscConfig.typeDoubleOptions[].
2797                 ...
2798
2799            We used to find the storage for the option using g_jscConfig.options[Options::ID].
2800            We now find the storage for each type of option using
2801            g_jscConfig.options[optionTypeSpecificIndex<OptionTypeID, OptionID>()].  For
2802            example, Options::useJIT() used to be implemented as:
2803
2804                inline bool& Options::useJIT()
2805                {
2806                     return g_jscConfig.options[Options::useJITID];
2807                }
2808
2809            ... which is now replaced with:
2810
2811                inline bool& Options::useJIT()
2812                {
2813                     return g_jscConfig.typeBoolOptions[optionTypeSpecificIndex<OptionTypeID::Bool, OptionID::useJIT>()];
2814                }
2815
2816         2. Introduce the optionTypeSpecificIndex() constexpr template function for
2817            computing the index of each option in their respective type specific options
2818            array.
2819
2820         3. Introduce OptionTypes, OptionTypeID, and OptionID.
2821
2822            The OptionTypes namespace replaces OptionEntry as the container of option types.
2823            The OptionID enum class replaces Options::ID.
2824            The OptionTypeID enum class is new and is used together with OptionID in
2825                constexpr templates to compute the typeSpecificIndex of options.
2826
2827         4. Removed the OptionEntry struct and OptionEntry.h.  After (1), this struct is
2828            only used in the Option class.  We just moved the union of option types (that
2829            OptionEntry embeds) into the Option class.
2830
2831            Moved class OptionRange into OptionsList.h.
2832
2833         5. Removed the large OptionEntry arrays from JSC::Config.
2834            Added type specific options arrays.
2835            Also ordered these arrays to maximize compactness and minimize internal fragmentation.
2836
2837         6. Changed scaleJITPolicy() to go directly to g_jscConfig.typeInt32Options[]
2838            instead of going through the Option wrapper object.  This allows us to simplify
2839            things and make the Option class a read only interface of options.
2840
2841         7. Changed Options::initialize() to only compute the option default value once.
2842            The default value specified in the OptionsList may not always be a constant.
2843            Sometimes, it is a function call.
2844
2845         8. The Option class now only gives read only access to the options.
2846
2847            The Option class' role is to provide an interface for reading an option at any
2848            given OptionID without first knowing about the type of the specific option.
2849            It is useful for iterating options, and is currently only used by
2850            Options::dumpOption().
2851
2852            Technically, we could merge all the Option class code into its single client.
2853            We opted not to do this because the amount of code is non-trivial, and the
2854            Option class does a good job of encapsulating this functionality.
2855
2856         * API/glib/JSCOptions.cpp:
2857         (jscOptionsSetValue):
2858         (jscOptionsGetValue):
2859         (jsc_options_foreach):
2860         (jsc_options_get_option_group):
2861         * CMakeLists.txt:
2862         * JavaScriptCore.xcodeproj/project.pbxproj:
2863         * runtime/JSCConfig.h:
2864         * runtime/OptionEntry.h: Removed.
2865         * runtime/Options.cpp:
2866         (JSC::Options::isAvailable):
2867         (JSC::overrideOptionWithHeuristic):
2868         (JSC::scaleJITPolicy):
2869         (JSC::recomputeDependentOptions):
2870         (JSC::Options::initialize):
2871         (JSC::Options::setOptionWithoutAlias):
2872         (JSC::Options::dumpAllOptions):
2873         (JSC::Options::dumpOption):
2874         (JSC::Option::Option):
2875         (JSC::Option::defaultOption const):
2876         (JSC::Option::dump const):
2877         (JSC::Option::operator== const):
2878         * runtime/Options.h:
2879         (JSC::Option::id const):
2880         (JSC::Option::name const):
2881         (JSC::Option::description const):
2882         (JSC::Option::type const):
2883         (JSC::Option::availability const):
2884         (JSC::Option::isOverridden const):
2885         (JSC::Option::Option):
2886         (JSC::Option::idIndex const):
2887         (JSC::Option::defaultOption const): Deleted.
2888         (JSC::Option::boolVal): Deleted.
2889         (JSC::Option::unsignedVal): Deleted.
2890         (JSC::Option::doubleVal): Deleted.
2891         (JSC::Option::int32Val): Deleted.
2892         (JSC::Option::optionRangeVal): Deleted.
2893         (JSC::Option::optionStringVal): Deleted.
2894         (JSC::Option::gcLogLevelVal): Deleted.
2895         * runtime/OptionsList.h:
2896         (JSC::OptionRange::operator= ):
2897         (JSC::OptionRange::rangeString const):
2898         (JSC::optionTypeSpecificIndex):
2899         (JSC::countNumberOfJSCOptionsOfType):
2900
2901 2019-09-23  Devin Rousso  <drousso@apple.com>
2902
2903         Web Inspector: Canvas: show WebGPU shader pipelines
2904         https://bugs.webkit.org/show_bug.cgi?id=201675
2905         <rdar://problem/55543450>
2906
2907         Reviewed by Joseph Pecoraro.
2908
2909         * inspector/protocol/Canvas.json:
2910         Add a `ProgramType` enum that conveys the type of shader program/pipeline when notifying the
2911         frontend of a new program
2912
2913 2019-09-23  Zan Dobersek  <zdobersek@igalia.com>
2914
2915         testmasm: integer operands loaded as unsigned values
2916         https://bugs.webkit.org/show_bug.cgi?id=202099
2917
2918         Reviewed by Mark Lam.
2919
2920         Suppress GCC warnings about comparing signed and unsigned values in
2921         test cases introduced in r247913 by using signed integer types for
2922         loading 32-bit and 64-bit integer operand values.
2923
2924         * assembler/testmasm.cpp:
2925         (JSC::testBranchTestBit32RegReg):
2926         (JSC::testBranchTestBit32RegImm):
2927         (JSC::testBranchTestBit32AddrImm):
2928         (JSC::testBranchTestBit64RegReg):
2929         (JSC::testBranchTestBit64RegImm):
2930         (JSC::testBranchTestBit64AddrImm):
2931
2932 2019-09-22  Yusuke Suzuki  <ysuzuki@apple.com>
2933
2934         [JSC] Int52Rep(DoubleRepAnyIntUse) should not call operation function
2935         https://bugs.webkit.org/show_bug.cgi?id=202072
2936
2937         Reviewed by Mark Lam.
2938
2939         Inline doubleToStrictInt52 in FTL since it is very simple function.
2940         This change improves JetStream2/stanford-crypto-sha256 by ~5%.
2941
2942         * ftl/FTLLowerDFGToB3.cpp:
2943         (JSC::FTL::DFG::LowerDFGToB3::doubleToStrictInt52):
2944         * ftl/FTLOutput.cpp:
2945         (JSC::FTL::Output::doubleToInt64):
2946         * ftl/FTLOutput.h:
2947
2948 2019-09-22  Yusuke Suzuki  <ysuzuki@apple.com>
2949
2950         Unreviewed, follow-up change after r250198
2951         https://bugs.webkit.org/show_bug.cgi?id=201633
2952
2953         * b3/testb3_5.cpp:
2954         (testCheckAddRemoveCheckWithSExt16):
2955
2956 2019-09-21  Yusuke Suzuki  <ysuzuki@apple.com>
2957
2958         [JSC] Remove CheckAdd in JetStream2/async-fs's Math.random function
2959         https://bugs.webkit.org/show_bug.cgi?id=201633
2960
2961         Reviewed by Mark Lam.
2962
2963         Int52Rep is used in DFG and FTL to calculate Int52 things faster. This is typically used when user code see uint32_t type.
2964         In JS, we handles Int32 well, but if the value exceeds Int32 range (like, using 0xffffffff), we use Int52 instead not to fallback to Double.
2965
2966         The problem is that we do not have optimizations for Int52's overflow checks. This emits many ArithAdd(Int52Rep x 2, CheckOverflow). Each
2967         of them emits OSR exit, which prevents dead-store-elimination in B3, and makes ValueToInt32(Int52) alive if it is referenced from some variable which
2968         can be seen if OSR exit occurs.
2969
2970         In this patch, we perform strength-reduction for CheckAdd, converting to Add. We already have such a thing. But the existing one does not handle instructions
2971         well emitted when Int52 is used.
2972
2973         When Int52 is used, we typically have the sequence like,
2974
2975             Int64 @78 = SExt32(@73, DFG:@67<Int52>) // Widen Int32 to Int64
2976             Int64 @81 = Shl(@78, $12(@80), DFG:@162<Int52>) // Convert Int32 to Int52
2977
2978         While we have Shl handling for integer-range optimization in B3ReduceStrength, we lack handling of SExt32 while it is very easy.
2979         This patch adds SExt8, SExt16, SExt32, and ZExt32 handling to B3ReduceStrength's integer range analysis.
2980         This converts many CheckAdd in JetStream2/async-fs's hot function to simple Add, and removes a bunch of unnecessary instructions which exist because of this OSR exit.
2981         We can see ~5% improvement in JetStream2/async-fs.
2982
2983         * b3/B3ReduceStrength.cpp:
2984         * b3/testb3.h:
2985         (int16Operands):
2986         (int8Operands):
2987         * b3/testb3_1.cpp:
2988         (run):
2989         * b3/testb3_5.cpp:
2990         (testCheckAddRemoveCheckWithSExt8):
2991         (testCheckAddRemoveCheckWithSExt16):
2992         (testCheckAddRemoveCheckWithSExt32):
2993         (testCheckAddRemoveCheckWithZExt32):
2994
2995 2019-09-21  Mark Lam  <mark.lam@apple.com>
2996
2997         Move JSLexicalEnvironment, DirectArguments, and ScopedArguments cells out of the Gigacage.
2998         https://bugs.webkit.org/show_bug.cgi?id=202082
2999
3000         Reviewed by Tadeu Zagallo.
3001
3002         They are not being caged anyway.
3003
3004         * runtime/DirectArguments.h:
3005         * runtime/JSLexicalEnvironment.h:
3006         (JSC::JSLexicalEnvironment::subspaceFor):
3007         * runtime/ScopedArguments.h:
3008         * runtime/VM.cpp:
3009         (JSC::VM::VM):
3010         * runtime/VM.h:
3011
3012 2019-09-21  Tadeu Zagallo  <tzagallo@apple.com>
3013
3014         AccessCase should strongly visit its dependencies while on stack
3015         https://bugs.webkit.org/show_bug.cgi?id=201986
3016         <rdar://problem/55521953>
3017
3018         Reviewed by Saam Barati and Yusuke Suzuki.
3019
3020         AccessCase::doesCalls is responsible for specifying the cells it depends on, so that
3021         MarkingGCAwareJITStubRoutine can strongly visit them while the stub is on stack. However,
3022         it was missing most of its dependencies, which led to it being collected while on stack.
3023         This manifested in the flaky test stress/ftl-put-by-id-setter-exception-interesting-live-state.js
3024         as the PolymorphicAccess being collected and removing its exception handler from the code
3025         block, which led to exception propagating past the try/catch.
3026
3027         In order to fix this, we abstract the dependency gathering logic from AccessCase into
3028         forEachDependentCell and use it to implement visitWeak as well as doesCalls in order to
3029         guarantee that their implementation is consistent.
3030
3031         * bytecode/AccessCase.cpp:
3032         (JSC::AccessCase::forEachDependentCell const):
3033         (JSC::AccessCase::doesCalls const):
3034         (JSC::AccessCase::visitWeak const):
3035         * bytecode/AccessCase.h:
3036         * bytecode/CallLinkInfo.cpp:
3037         (JSC::CallLinkInfo::lastSeenCallee const):
3038         (JSC::CallLinkInfo::haveLastSeenCallee const):
3039         (JSC::CallLinkInfo::lastSeenCallee): Deleted.
3040         (JSC::CallLinkInfo::haveLastSeenCallee): Deleted.
3041         * bytecode/CallLinkInfo.h:
3042         (JSC::CallLinkInfo::isDirect const):
3043         (JSC::CallLinkInfo::isLinked const):
3044         (JSC::CallLinkInfo::stub const):
3045         (JSC::CallLinkInfo::forEachDependentCell const):
3046         (JSC::CallLinkInfo::isLinked): Deleted.
3047         (JSC::CallLinkInfo::stub): Deleted.
3048         * bytecode/ObjectPropertyCondition.cpp:
3049         (JSC::ObjectPropertyCondition::isStillLive const):
3050         * bytecode/ObjectPropertyCondition.h:
3051         (JSC::ObjectPropertyCondition::forEachDependentCell const):
3052         * bytecode/ObjectPropertyConditionSet.cpp:
3053         (JSC::ObjectPropertyConditionSet::areStillLive const):
3054         * bytecode/ObjectPropertyConditionSet.h:
3055         (JSC::ObjectPropertyConditionSet::forEachDependentCell const):
3056         * bytecode/PropertyCondition.cpp:
3057         (JSC::PropertyCondition::isStillLive const):
3058         * bytecode/PropertyCondition.h:
3059         (JSC::PropertyCondition::forEachDependentCell const):
3060         * jit/PolymorphicCallStubRoutine.cpp:
3061         (JSC::PolymorphicCallStubRoutine::visitWeak):
3062         * jit/PolymorphicCallStubRoutine.h:
3063         (JSC::PolymorphicCallStubRoutine::forEachDependentCell):
3064
3065 2019-09-21  David Kilzer  <ddkilzer@apple.com>
3066
3067         clang-tidy: Fix unnecessary copy/ref churn of for loop variables in WTF/JavaScriptCore
3068         <https://webkit.org/b/202069>
3069
3070         Reviewed by Mark Lam.
3071
3072         Fix unwanted copying/ref churn of loop variables by making them
3073         const references.
3074
3075         * bytecode/CodeBlock.cpp:
3076         (JSC::CodeBlock::setConstantIdentifierSetRegisters):
3077         * bytecompiler/BytecodeGenerator.cpp:
3078         (JSC::BytecodeGenerator::prepareLexicalScopeForNextForLoopIteration):
3079         * dfg/DFGGraph.cpp:
3080         (JSC::DFG::Graph::dump):
3081         * inspector/agents/InspectorAgent.cpp:
3082         (Inspector::InspectorAgent::activateExtraDomains):
3083         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
3084         (Inspector::RemoteInspector::stopInternal):
3085         (Inspector::RemoteInspector::xpcConnectionFailed):
3086         (Inspector::RemoteInspector::pushListingsNow):
3087         * parser/Parser.h:
3088         (JSC::Scope::computeLexicallyCapturedVariablesAndPurgeCandidates):
3089         * runtime/ProxyObject.cpp:
3090         (JSC::ProxyObject::performGetOwnPropertyNames):
3091         * runtime/SamplingProfiler.cpp:
3092         (JSC::SamplingProfiler::registerForReportAtExit):
3093         (JSC::SamplingProfiler::reportTopFunctions):
3094         (JSC::SamplingProfiler::reportTopBytecodes):
3095         * runtime/TypeSet.cpp:
3096         (JSC::StructureShape::inspectorRepresentation):
3097         (JSC::StructureShape::merge):
3098
3099 2019-09-20  Keith Miller  <keith_miller@apple.com>
3100
3101         eliding a move in Air O0 needs to mark the dest's old reg as available
3102         https://bugs.webkit.org/show_bug.cgi?id=202066
3103
3104         Reviewed by Saam Barati.
3105
3106         Also adds a new release method that handles all the invariants of
3107         returning a register to the available register pool.
3108
3109         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
3110         (JSC::B3::Air::GenerateAndAllocateRegisters::release):
3111         (JSC::B3::Air::GenerateAndAllocateRegisters::spill):
3112         (JSC::B3::Air::GenerateAndAllocateRegisters::freeDeadTmpsIfNeeded):
3113         (JSC::B3::Air::GenerateAndAllocateRegisters::generate):
3114         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h:
3115
3116 2019-09-20  Mark Lam  <mark.lam@apple.com>
3117
3118         Harden assertion in StructureIDTable::get().
3119         https://bugs.webkit.org/show_bug.cgi?id=202067
3120         <rdar://problem/55577923>
3121
3122         Reviewed by Keith Miller.
3123
3124         * runtime/StructureIDTable.h:
3125         (JSC::StructureIDTable::get):
3126
3127 2019-09-20  Truitt Savell  <tsavell@apple.com>
3128
3129         Unreviewed, rolling out r250114.
3130
3131         Broke ~16 webgpu/ tests on Mojave wk2
3132
3133         Reverted changeset:
3134
3135         "Web Inspector: Canvas: show WebGPU shader pipelines"
3136         https://bugs.webkit.org/show_bug.cgi?id=201675
3137         https://trac.webkit.org/changeset/250114
3138
3139 2019-09-20  Paulo Matos  <pmatos@igalia.com>
3140
3141         Implement memory monitoring functions for Linux OS
3142         https://bugs.webkit.org/show_bug.cgi?id=200391
3143
3144         Reviewed by Žan Doberšek.
3145
3146         * jsc.cpp:
3147
3148 2019-09-20  Devin Rousso  <drousso@apple.com>
3149
3150         ASSERT NOT REACHED in Inspector::InjectedScriptModule::ensureInjected() seen with inspector/heap/getRemoteObject.html
3151         https://bugs.webkit.org/show_bug.cgi?id=201713
3152         <rdar://problem/55290349>
3153
3154         Reviewed by Joseph Pecoraro.
3155
3156         Expose the `Exception` object by leveraging an `Expected` of `JSValue` as the return value
3157         instead of using a referenced `bool` (which wouldn't include any of the exception's info).
3158
3159         * bindings/ScriptFunctionCall.h:
3160         * bindings/ScriptFunctionCall.cpp:
3161         (Deprecated::ScriptFunctionCall::call):
3162
3163         * inspector/InjectedScript.cpp:
3164         (Inspector::InjectedScript::wrapCallFrames const):
3165         (Inspector::InjectedScript::wrapObject const):
3166         (Inspector::InjectedScript::wrapJSONString const):
3167         (Inspector::InjectedScript::wrapTable const):
3168         (Inspector::InjectedScript::previewValue const):
3169         (Inspector::InjectedScript::findObjectById const):
3170         (Inspector::InjectedScript::releaseObjectGroup):
3171
3172         * inspector/InjectedScriptBase.h:
3173         * inspector/InjectedScriptBase.cpp:
3174         (Inspector::InjectedScriptBase::callFunctionWithEvalEnabled const):
3175         (Inspector::InjectedScriptBase::makeCall):
3176         (Inspector::InjectedScriptBase::makeAsyncCall):
3177
3178         * inspector/InjectedScriptManager.h:
3179         * inspector/InjectedScriptManager.cpp:
3180         (Inspector::InjectedScriptManager::createInjectedScript):
3181         (Inspector::InjectedScriptManager::injectedScriptFor):
3182
3183         * inspector/InjectedScriptModule.cpp:
3184         (Inspector::InjectedScriptModule::ensureInjected):
3185
3186 2019-09-19  Yusuke Suzuki  <ysuzuki@apple.com>
3187
3188         [JSC] DFG op_call_varargs should not assume that one-previous-local of freeReg is usable
3189         https://bugs.webkit.org/show_bug.cgi?id=202014
3190
3191         Reviewed by Saam Barati.
3192
3193         Let's look into the bytecode generated by the test.
3194
3195             [   0] enter
3196             [   1] get_scope          loc4
3197             [   3] mov                loc5, loc4
3198             [   6] check_traps
3199             [   7] mov                loc6, callee
3200             [  10] create_direct_arguments loc7
3201             [  12] to_this            this
3202             [  15] mov                loc8, loc7
3203             [  18] mov                loc9, loc6
3204             [  21] mov                loc12, Undefined(const0)
3205             [  24] get_by_id          loc11, loc6, 0
3206             [  29] jneq_ptr           loc11, ApplyFunction, 18(->47)
3207             [  34] mov                loc11, loc6
3208             [  37] call_varargs       loc11, loc11, this, loc8, loc13, 0
3209             [  45] jmp                17(->62)
3210             [  47] mov                loc16, loc6
3211             [  50] mov                loc15, this
3212             [  53] mov                loc14, loc8
3213             [  56] call               loc11, loc11, 3, 22
3214             ...
3215
3216         call_varargs uses loc13 as firstFreeReg (first usable bottom register in the current stack-frame to spread variadic arguments after this).
3217         This is correct. And call_varargs uses |this| as this argument for the call_varargs. This |this| argument is not in a region starting from loc13.
3218         And it is not in the previous place to loc13 (|this| is not loc12).
3219
3220         On the other hand, DFG::ByteCodeParser's inlining path is always assuming that the previous to firstFreeReg is usable and part of arguments.
3221         But this is wrong. loc12 in the above bytecode is used for `[  56] call               loc11, loc11, 3, 22`'s argument later, and this call assumes
3222         that loc12 is not clobbered by call_varargs. But DFG and FTL clobbers it.
3223
3224         The test is recursively calling the same function, and we inline the same function one-level. And stack-overflow error happens when inlined
3225         CallForwardVarargs (from op_call_varargs) is called. FTL recovers the frames, and at this point, outer function's loc12 is recovered to garbage since
3226         LoadVarargs clobbers it. And we eventually use it and crash.
3227
3228             60:<!0:-> LoadVarargs(Check:Untyped:Kill:@30, MustGen, start = loc13, count = loc15, machineStart = loc7, machineCount = loc9, offset = 0, mandatoryMinimum = 0, limit = 2, R:World, W:Stack(-16),Stack(-14),Stack(-13),Heap, Exits, ClobbersExit, bc#37, ExitValid)
3229
3230         This LoadVarargs clobbers loc12, loc13, and loc15 while loc12 is used.
3231
3232         In all the tiers, op_call_varargs first allocates enough region to hold varargs including |this|. And we store |this| value to a correct place.
3233         DFG should not assume that the previous register to firstFreeReg is used for |this|.
3234
3235         This patch fixes DFG::ByteCodeParser's stack region calculation for op_call_varargs inlining. And we rename maxNumArguments to maxArgumentCountIncludingThis to
3236         represent that `maxArgumentCountIncludingThis` includes |this| count.
3237
3238         * bytecode/CallLinkInfo.cpp:
3239         (JSC::CallLinkInfo::setMaxArgumentCountIncludingThis):
3240         (JSC::CallLinkInfo::setMaxNumArguments): Deleted.
3241         * bytecode/CallLinkInfo.h:
3242         (JSC::CallLinkInfo::addressOfMaxArgumentCountIncludingThis):
3243         (JSC::CallLinkInfo::maxArgumentCountIncludingThis):
3244         (JSC::CallLinkInfo::addressOfMaxNumArguments): Deleted.
3245         (JSC::CallLinkInfo::maxNumArguments): Deleted.
3246         * bytecode/CallLinkStatus.cpp:
3247         (JSC::CallLinkStatus::computeFor):
3248         (JSC::CallLinkStatus::dump const):
3249         * bytecode/CallLinkStatus.h:
3250         (JSC::CallLinkStatus::maxArgumentCountIncludingThis const):
3251         (JSC::CallLinkStatus::maxNumArguments const): Deleted.
3252         * dfg/DFGByteCodeParser.cpp:
3253         (JSC::DFG::ByteCodeParser::handleVarargsInlining):
3254         * dfg/DFGSpeculativeJIT32_64.cpp:
3255         (JSC::DFG::SpeculativeJIT::emitCall):
3256         * dfg/DFGSpeculativeJIT64.cpp:
3257         (JSC::DFG::SpeculativeJIT::emitCall):
3258         * ftl/FTLLowerDFGToB3.cpp:
3259         (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
3260         * jit/JITCall.cpp:
3261         (JSC::JIT::compileSetupFrame):
3262         * jit/JITCall32_64.cpp:
3263         (JSC::JIT::compileSetupFrame):
3264         * jit/JITOperations.cpp:
3265
3266 2019-09-19  Devin Rousso  <drousso@apple.com>
3267
3268         Web Inspector: Canvas: show WebGPU shader pipelines
3269         https://bugs.webkit.org/show_bug.cgi?id=201675
3270
3271         Reviewed by Joseph Pecoraro.
3272
3273         * inspector/protocol/Canvas.json:
3274         Add a `ProgramType` enum that conveys the type of shader program/pipeline when notifying the
3275         frontend of a new program
3276
3277 2019-09-19  Mark Lam  <mark.lam@apple.com>
3278
3279         Rename VMInspector::m_list to m_vmList.
3280         https://bugs.webkit.org/show_bug.cgi?id=202015
3281
3282         Reviewed by Yusuke Suzuki.
3283
3284         m_vmList is more descriptive, and this rename helps grep-ability by disambiguating
3285         it from other m_lists in the code base.
3286
3287         * tools/VMInspector.cpp:
3288         (JSC::VMInspector::add):
3289         (JSC::VMInspector::remove):
3290         * tools/VMInspector.h:
3291         (JSC::VMInspector::iterate):
3292
3293 2019-09-19  Mark Lam  <mark.lam@apple.com>
3294
3295         Reduce the number of required tag bits for the JSValue.
3296         https://bugs.webkit.org/show_bug.cgi?id=201990
3297
3298         Reviewed by Yusuke Suzuki.
3299
3300         We're reducing the number of tag bits to 15.  It should just work.
3301
3302         How did we arrive at 15 bits?
3303         ============================
3304         Currently, the minimum number of top bits used by doubles is 13-bits.  The
3305         highest double bit encoding are:
3306
3307             "negative" pureNaN: starts with 0xfff8
3308             negative infinity:  starts with 0xfff0
3309             highest number:     starts with 0xffe*
3310             lowest number:      starts with 0x0000
3311
3312         Requirements:
3313         1. We need tags for 2 range of numbers: pointers (all 0s at the top), and ints
3314            (all 1s at the top).
3315
3316         2. We want to be able to add an offset to double bits and ensure that they never
3317            end up in the ranges for pointers and ints.
3318
3319         3. The int tag must be higher than whatever value is produced in the top bits
3320            when boxing a double.  We have code that relies on this relationship being
3321            true and checks if a JSValue is an int by checking if the tag bits are above
3322            or equal to the int tag.
3323