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