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