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