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