performProxyCall should toThis the value passed to its handler
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2018-06-22  Keith Miller  <keith_miller@apple.com>
2
3         performProxyCall should toThis the value passed to its handler
4         https://bugs.webkit.org/show_bug.cgi?id=186951
5
6         Reviewed by Mark Lam.
7
8         * runtime/ProxyObject.cpp:
9         (JSC::performProxyCall):
10
11 2018-06-22  Saam Barati  <sbarati@apple.com>
12
13         ensureWritableX should only convert away from CoW when it will succeed
14         https://bugs.webkit.org/show_bug.cgi?id=186898
15
16         Reviewed by Keith Miller.
17
18         Otherwise, when we OSR exit, we'll end up profiling the array after
19         it has been converted away from CoW. It's better for the ArrayProfile
20         to see the array as it's still in CoW mode.
21         
22         This patch also renames ensureWritableX to tryMakeWritableX since these
23         were never really "ensure" operations -- they may fail and return null.
24
25         * dfg/DFGOperations.cpp:
26         * runtime/JSObject.cpp:
27         (JSC::JSObject::tryMakeWritableInt32Slow):
28         (JSC::JSObject::tryMakeWritableDoubleSlow):
29         (JSC::JSObject::tryMakeWritableContiguousSlow):
30         (JSC::JSObject::ensureWritableInt32Slow): Deleted.
31         (JSC::JSObject::ensureWritableDoubleSlow): Deleted.
32         (JSC::JSObject::ensureWritableContiguousSlow): Deleted.
33         * runtime/JSObject.h:
34         (JSC::JSObject::tryMakeWritableInt32):
35         (JSC::JSObject::tryMakeWritableDouble):
36         (JSC::JSObject::tryMakeWritableContiguous):
37         (JSC::JSObject::ensureWritableInt32): Deleted.
38         (JSC::JSObject::ensureWritableDouble): Deleted.
39         (JSC::JSObject::ensureWritableContiguous): Deleted.
40
41 2018-06-22  Keith Miller  <keith_miller@apple.com>
42
43         We should call visitChildren on Base not the exact typename
44         https://bugs.webkit.org/show_bug.cgi?id=186928
45
46         Reviewed by Mark Lam.
47
48         A lot of places were not properly calling visitChildren on their
49         superclass. For most of them it didn't matter because they had
50         immortal structures. If code changed in the future this might
51         break things however.
52
53         Also, block off more of the MethodTable for GetterSetter objects.
54
55         * bytecode/CodeBlock.cpp:
56         (JSC::CodeBlock::visitChildren):
57         * bytecode/ExecutableToCodeBlockEdge.cpp:
58         (JSC::ExecutableToCodeBlockEdge::visitChildren):
59         * debugger/DebuggerScope.cpp:
60         (JSC::DebuggerScope::visitChildren):
61         * runtime/EvalExecutable.cpp:
62         (JSC::EvalExecutable::visitChildren):
63         * runtime/FunctionExecutable.cpp:
64         (JSC::FunctionExecutable::visitChildren):
65         * runtime/FunctionRareData.cpp:
66         (JSC::FunctionRareData::visitChildren):
67         * runtime/GenericArgumentsInlines.h:
68         (JSC::GenericArguments<Type>::visitChildren):
69         * runtime/GetterSetter.cpp:
70         (JSC::GetterSetter::visitChildren):
71         * runtime/GetterSetter.h:
72         * runtime/InferredType.cpp:
73         (JSC::InferredType::visitChildren):
74         * runtime/InferredTypeTable.cpp:
75         (JSC::InferredTypeTable::visitChildren):
76         * runtime/InferredValue.cpp:
77         (JSC::InferredValue::visitChildren):
78         * runtime/JSArrayBufferView.cpp:
79         (JSC::JSArrayBufferView::visitChildren):
80         * runtime/JSGenericTypedArrayViewInlines.h:
81         (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
82         * runtime/ModuleProgramExecutable.cpp:
83         (JSC::ModuleProgramExecutable::visitChildren):
84         * runtime/ProgramExecutable.cpp:
85         (JSC::ProgramExecutable::visitChildren):
86         * runtime/ScopedArguments.cpp:
87         (JSC::ScopedArguments::visitChildren):
88         * runtime/ScopedArguments.h:
89         * runtime/Structure.cpp:
90         (JSC::Structure::visitChildren):
91         * runtime/StructureRareData.cpp:
92         (JSC::StructureRareData::visitChildren):
93         * runtime/SymbolTable.cpp:
94         (JSC::SymbolTable::visitChildren):
95
96 2018-06-20  Darin Adler  <darin@apple.com>
97
98         [Cocoa] Use the isDirectory: variants of NSURL methods more to eliminate unnecessary file system activity
99         https://bugs.webkit.org/show_bug.cgi?id=186875
100
101         Reviewed by Anders Carlsson.
102
103         * API/tests/testapi.mm:
104         (testObjectiveCAPIMain): Use isDirectory:NO when creating a URL for a JavaScript file.
105
106 2018-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>
107
108         [GTK] WebDriver: use a dictionary for session capabilities in StartAutomationSession message
109         https://bugs.webkit.org/show_bug.cgi?id=186915
110
111         Reviewed by Žan Doberšek.
112
113         Update StartAutomationSession message handling to receive a dictionary of session capabilities.
114
115         * inspector/remote/glib/RemoteInspectorServer.cpp:
116         (Inspector::processSessionCapabilities): Helper method to process the session capabilities.
117
118 2018-06-21  Mark Lam  <mark.lam@apple.com>
119
120         WebKit (JavaScriptCore) compilation error with Clang ≥ 6.
121         https://bugs.webkit.org/show_bug.cgi?id=185947
122         <rdar://problem/40131933>
123
124         Reviewed by Saam Barati.
125
126         Newer Clang versions (due to C++17 support) is not happy with how I implemented
127         conversions between CodeLocation types.  We'll fix this by adding a conversion
128         operator for converting between CodeLocation types.
129
130         * assembler/CodeLocation.h:
131         (JSC::CodeLocationCommon::operator T):
132
133 2018-06-21  Saam Barati  <sbarati@apple.com>
134
135         Do some CoW cleanup
136         https://bugs.webkit.org/show_bug.cgi?id=186896
137
138         Reviewed by Mark Lam.
139
140         * bytecode/UnlinkedCodeBlock.h:
141         (JSC::UnlinkedCodeBlock::decompressArrayAllocationProfile):
142         We don't need to WTFMove() ints
143
144         * dfg/DFGByteCodeParser.cpp:
145         (JSC::DFG::ByteCodeParser::parseBlock):
146         remove a TODO.
147
148         * runtime/JSObject.cpp:
149         (JSC::JSObject::putByIndex):
150         We were checking for isCopyOnWrite even after we converted away
151         from CoW in above code.
152         (JSC::JSObject::ensureWritableInt32Slow):
153         Model this in the same way the other ensureWritableXSlow are modeled.
154
155 2018-06-20  Keith Miller  <keith_miller@apple.com>
156
157         flattenDictionaryStruture needs to zero inline storage.
158         https://bugs.webkit.org/show_bug.cgi?id=186869
159
160         Reviewed by Saam Barati.
161
162         This patch also adds the assetion that unused property storage is
163         zero or JSValue() to putDirectInternal. Additionally, functions
164         have been added to $vm that flatten dictionary objects and return
165         the inline capacity of an object.
166
167         * runtime/JSObjectInlines.h:
168         (JSC::JSObject::putDirectInternal):
169         * runtime/Structure.cpp:
170         (JSC::Structure::flattenDictionaryStructure):
171         * tools/JSDollarVM.cpp:
172         (JSC::functionInlineCapacity):
173         (JSC::functionFlattenDictionaryObject):
174         (JSC::JSDollarVM::finishCreation):
175
176 2018-06-21  Mark Lam  <mark.lam@apple.com>
177
178         Use IsoCellSets to track Executables with clearable code.
179         https://bugs.webkit.org/show_bug.cgi?id=186877
180
181         Reviewed by Filip Pizlo.
182
183         Here’s an example of the results that this fix may yield: 
184         1. The workload: load cnn.com, wait for it to fully load, scroll down and up.
185         2. Statistics on memory touched and memory freed by VM::deleteAllCode():
186
187            Visiting Executables:
188                                                         Old             New
189            Number of objects visited:                   70897           14264
190            Number of objects with deletable code:       14264 (20.1%)   14264 (100%)
191            Number of memory pages visited:              3224            1602
192            Number of memory pages with deletable code:  1602 (49.7%)    1602 (100%)
193
194            Visitng UnlinkedFunctionExecutables:
195                                                         Old             New
196            Number of objects visited:                   105454          17231
197            Number of objects with deletable code:       42319 (20.1%)   17231 (100%) **
198            Number of memory pages visited:              4796            1349
199            Number of memory pages with deletable code:  4013 (83.7%)    1349 (100%)
200
201         ** The number of objects differ because the old code only visit unlinked
202            executables indirectly via linked executables, whereas the new behavior visit
203            all unlinked executables with deletable code directly.  This means:
204
205            a. we used to not visit unlinked executables that have not been linked yet
206               i.e. deleteAllCode() may not delete all code (especially code that is not
207               used).
208            b. we had to visit all linked executables to check if they of type
209               FunctionExecutable, before going on to visit their unlinked executable, and
210               this includes the ones that do not have deletable code.  This means that we
211               would touch more memory in the process.
212
213            Both of these these issues are now fixed with the new code.
214
215         This code was tested with manually inserted instrumentation to track the above
216         statistics.  It is not feasible to write an automated test for this without
217         leaving a lot of invasive instrumentation in the code.
218
219         * bytecode/UnlinkedFunctionExecutable.cpp:
220         (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
221         * bytecode/UnlinkedFunctionExecutable.h:
222         * heap/CodeBlockSetInlines.h:
223         (JSC::CodeBlockSet::iterateViaSubspaces):
224         * heap/Heap.cpp:
225         (JSC::Heap::deleteAllCodeBlocks):
226         (JSC::Heap::deleteAllUnlinkedCodeBlocks):
227         (JSC::Heap::deleteUnmarkedCompiledCode):
228         (JSC::Heap::clearUnmarkedExecutables): Deleted.
229         (JSC::Heap::addExecutable): Deleted.
230         * heap/Heap.h:
231         * runtime/DirectEvalExecutable.h:
232
233         * runtime/ExecutableBase.cpp:
234         (JSC::ExecutableBase::hasClearableCode const):
235         - this is written based on the implementation of ExecutableBase::clearCode().
236
237         * runtime/ExecutableBase.h:
238         * runtime/FunctionExecutable.h:
239         * runtime/IndirectEvalExecutable.h:
240         * runtime/ModuleProgramExecutable.h:
241         * runtime/ProgramExecutable.h:
242         * runtime/ScriptExecutable.cpp:
243         (JSC::ScriptExecutable::clearCode):
244         (JSC::ScriptExecutable::installCode):
245         * runtime/ScriptExecutable.h:
246         (JSC::ScriptExecutable::finishCreation):
247         * runtime/VM.cpp:
248         (JSC::VM::VM):
249         * runtime/VM.h:
250         (JSC::VM::ScriptExecutableSpaceAndSet::ScriptExecutableSpaceAndSet):
251         (JSC::VM::ScriptExecutableSpaceAndSet::clearableCodeSetFor):
252         (JSC::VM::forEachScriptExecutableSpace):
253         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::UnlinkedFunctionExecutableSpaceAndSet):
254         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::clearableCodeSetFor):
255
256 2018-06-21  Zan Dobersek  <zdobersek@igalia.com>
257
258         [GTK] WebDriver: allow applying host-specific TLS certificates for automated sessions
259         https://bugs.webkit.org/show_bug.cgi?id=186884
260
261         Reviewed by Carlos Garcia Campos.
262
263         Add a tuple array input parameter to the StartAutomationSession DBus
264         message, representing a list of host-and-certificate pairs that have to
265         be allowed for a given session. This array is then unpacked and used to
266         fill out the certificates Vector object in the SessionCapabilities
267         struct.
268
269         * inspector/remote/RemoteInspector.h: Add a GLib-specific Vector of
270         String pairs representing hosts and the certificate file paths.
271         * inspector/remote/glib/RemoteInspectorServer.cpp:
272
273 2018-06-20  Keith Miller  <keith_miller@apple.com>
274
275         Expand concurrent GC assertion to accept JSValue() or 0
276         https://bugs.webkit.org/show_bug.cgi?id=186855
277
278         Reviewed by Mark Lam.
279
280         We tend to set unused property slots to either JSValue() or 0
281         depending on the context. On 64-bit these are the same but on
282         32-bit JSValue() has a NaN tag. This patch makes it so we
283         the accept either JSValue() or 0.
284
285         * runtime/JSObjectInlines.h:
286         (JSC::JSObject::prepareToPutDirectWithoutTransition):
287
288 2018-06-20  Guillaume Emont  <guijemont@igalia.com>
289
290         [Armv7] Linkbuffer: executableOffsetFor() fails for location 2
291         https://bugs.webkit.org/show_bug.cgi?id=186765
292
293         Reviewed by Michael Saboff.
294
295         This widens the check for 0 so that we handle that case more correctly.
296
297         * assembler/LinkBuffer.h:
298         (JSC::LinkBuffer::executableOffsetFor):
299
300 2018-06-19  Keith Miller  <keith_miller@apple.com>
301
302         Fix broken assertion on 32-bit
303         https://bugs.webkit.org/show_bug.cgi?id=186830
304
305         Reviewed by Mark Lam.
306
307         The assertion was intended to catch concurrent GC issues. We don't
308         run them on 32-bit so we don't need this assertion there. The
309         assertion was broken because zero is not JSValue() on 32-bit.
310
311         * runtime/JSObjectInlines.h:
312         (JSC::JSObject::prepareToPutDirectWithoutTransition):
313
314 2018-06-19  Keith Miller  <keith_miller@apple.com>
315
316         flattenDictionaryStructure needs to zero properties that have been compressed away
317         https://bugs.webkit.org/show_bug.cgi?id=186828
318
319         Reviewed by Mark Lam.
320
321         This patch fixes a bunch of crashing Mozilla tests on the bots.
322
323         * runtime/Structure.cpp:
324         (JSC::Structure::flattenDictionaryStructure):
325
326 2018-06-19  Saam Barati  <sbarati@apple.com>
327
328         DirectArguments::create needs to initialize to undefined instead of the empty value
329         https://bugs.webkit.org/show_bug.cgi?id=186818
330         <rdar://problem/38415177>
331
332         Reviewed by Filip Pizlo.
333
334         The bug here is that we will emit code that just loads from DirectArguments as
335         long as the index is within the known capacity of the arguments object (op_get_from_arguments).
336         The arguments object has at least enough capacity to hold the declared parameters.
337         When we materialized this object in OSR exit, we initialized up to to the capacity
338         with JSValue(). In OSR exit, though, we only filled up to the length of the
339         object with actual values. So we'd end up with a DirectArguments object with
340         capacity minus length slots of JSValue(). To fix this, we need initialize up to
341         capacity with jsUndefined during construction. The invariant of this object is
342         that the capacity minus length slots at the end are filled in with jsUndefined.
343
344         * runtime/DirectArguments.cpp:
345         (JSC::DirectArguments::create):
346
347 2018-06-19  Michael Saboff  <msaboff@apple.com>
348
349         Crash in sanitizeStackForVMImpl sometimes when switching threads with same VM
350         https://bugs.webkit.org/show_bug.cgi?id=186827
351
352         Reviewed by Saam Barati.
353
354         Need to set VM::lastStackTop before any possible calls to sanitizeStack().
355
356         * runtime/JSLock.cpp:
357         (JSC::JSLock::didAcquireLock):
358
359 2018-06-19  Tadeu Zagallo  <tzagallo@apple.com>
360
361         ShadowChicken crashes with stack overflow in the LLInt
362         https://bugs.webkit.org/show_bug.cgi?id=186540
363         <rdar://problem/39682133>
364
365         Reviewed by Saam Barati.
366
367         Stack overflows in the LLInt were crashing in ShadowChicken when compiling
368         with debug opcodes because it was accessing the scope of the incomplete top
369         frame, which hadn't been set yet. Check that we have moved past the first
370         opcode (enter) and that the scope is not undefined (enter will
371         initialize it to undefined).
372
373         * interpreter/ShadowChicken.cpp:
374         (JSC::ShadowChicken::update):
375
376 2018-06-19  Keith Miller  <keith_miller@apple.com>
377
378         constructArray variants should take the slow path for subclasses of Array
379         https://bugs.webkit.org/show_bug.cgi?id=186812
380
381         Reviewed by Saam Barati and Mark Lam.
382
383         This patch fixes a crashing test in ObjectInitializationScope where we would
384         allocate a new structure for an indexing type change while initializing
385         a subclass of Array. Since the new array hasn't been fully initialized
386         if the GC ran it would see garbage and we might crash.
387
388         * runtime/JSArray.cpp:
389         (JSC::constructArray):
390         (JSC::constructArrayNegativeIndexed):
391         * runtime/JSArray.h:
392         (JSC::constructArray): Deleted.
393         (JSC::constructArrayNegativeIndexed): Deleted.
394
395 2018-06-19  Saam Barati  <sbarati@apple.com>
396
397         Wasm: Any function argument of type Void should be a validation error
398         https://bugs.webkit.org/show_bug.cgi?id=186794
399         <rdar://problem/41140257>
400
401         Reviewed by Keith Miller.
402
403         * wasm/WasmModuleParser.cpp:
404         (JSC::Wasm::ModuleParser::parseType):
405
406 2018-06-18  Keith Miller  <keith_miller@apple.com>
407
408         JSImmutableButterfly should assert m_header is adjacent to the data
409         https://bugs.webkit.org/show_bug.cgi?id=186795
410
411         Reviewed by Saam Barati.
412
413         * runtime/JSImmutableButterfly.cpp:
414         * runtime/JSImmutableButterfly.h:
415
416 2018-06-18  Keith Miller  <keith_miller@apple.com>
417
418         Unreviewed, fix the build...
419
420         * runtime/JSArray.cpp:
421         (JSC::JSArray::tryCreateUninitializedRestricted):
422
423 2018-06-18  Keith Miller  <keith_miller@apple.com>
424
425         Unreviewed, remove bad assertion.
426
427         * runtime/JSArray.cpp:
428         (JSC::JSArray::tryCreateUninitializedRestricted):
429
430 2018-06-18  Keith Miller  <keith_miller@apple.com>
431
432         Properly zero unused property storage offsets
433         https://bugs.webkit.org/show_bug.cgi?id=186692
434
435         Reviewed by Filip Pizlo.
436
437         Since the concurrent GC might see a property slot before the mutator has actually
438         stored the value there, we need to ensure that slot doesn't have garbage in it.
439
440         Right now when calling constructConvertedArrayStorageWithoutCopyingElements
441         or creating a RegExp matches array, we never cleared the unused
442         property storage. ObjectIntializationScope has also been upgraded
443         to look for our invariants around property storage. Additionally,
444         a new assertion has been added to check for JSValue() when adding
445         a new property.
446
447         We used to put undefined into deleted property offsets. To
448         make things simpler, this patch causes us to store JSValue() there
449         instead.
450
451         Lastly, this patch fixes an issue where we would initialize the
452         array storage of RegExpMatchesArray twice. First with 0 and
453         secondly with the actual result. Now we only zero memory between
454         vector length and public length.
455
456         * runtime/Butterfly.h:
457         (JSC::Butterfly::offsetOfVectorLength):
458         * runtime/ButterflyInlines.h:
459         (JSC::Butterfly::tryCreateUninitialized):
460         (JSC::Butterfly::createUninitialized):
461         (JSC::Butterfly::tryCreate):
462         (JSC::Butterfly::create):
463         (JSC::Butterfly::createOrGrowPropertyStorage):
464         (JSC::Butterfly::createOrGrowArrayRight):
465         (JSC::Butterfly::growArrayRight):
466         (JSC::Butterfly::resizeArray):
467         * runtime/JSArray.cpp:
468         (JSC::JSArray::tryCreateUninitializedRestricted):
469         (JSC::createArrayButterflyInDictionaryIndexingMode): Deleted.
470         * runtime/JSArray.h:
471         (JSC::tryCreateArrayButterfly):
472         * runtime/JSObject.cpp:
473         (JSC::JSObject::createArrayStorageButterfly):
474         (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements):
475         (JSC::JSObject::deleteProperty):
476         (JSC::JSObject::shiftButterflyAfterFlattening):
477         * runtime/JSObject.h:
478         * runtime/JSObjectInlines.h:
479         (JSC::JSObject::prepareToPutDirectWithoutTransition):
480         * runtime/ObjectInitializationScope.cpp:
481         (JSC::ObjectInitializationScope::verifyPropertiesAreInitialized):
482         * runtime/ObjectInitializationScope.h:
483         (JSC::ObjectInitializationScope::release):
484         * runtime/RegExpMatchesArray.h:
485         (JSC::tryCreateUninitializedRegExpMatchesArray):
486         (JSC::createRegExpMatchesArray):
487
488         * runtime/Butterfly.h:
489         (JSC::Butterfly::offsetOfVectorLength):
490         * runtime/ButterflyInlines.h:
491         (JSC::Butterfly::tryCreateUninitialized):
492         (JSC::Butterfly::createUninitialized):
493         (JSC::Butterfly::tryCreate):
494         (JSC::Butterfly::create):
495         (JSC::Butterfly::createOrGrowPropertyStorage):
496         (JSC::Butterfly::createOrGrowArrayRight):
497         (JSC::Butterfly::growArrayRight):
498         (JSC::Butterfly::resizeArray):
499         * runtime/JSArray.cpp:
500         (JSC::JSArray::tryCreateUninitializedRestricted):
501         (JSC::createArrayButterflyInDictionaryIndexingMode): Deleted.
502         * runtime/JSArray.h:
503         (JSC::tryCreateArrayButterfly):
504         * runtime/JSObject.cpp:
505         (JSC::JSObject::createArrayStorageButterfly):
506         (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements):
507         (JSC::JSObject::deleteProperty):
508         (JSC::JSObject::shiftButterflyAfterFlattening):
509         * runtime/JSObject.h:
510         * runtime/JSObjectInlines.h:
511         (JSC::JSObject::prepareToPutDirectWithoutTransition):
512         * runtime/ObjectInitializationScope.cpp:
513         (JSC::ObjectInitializationScope::verifyPropertiesAreInitialized):
514         * runtime/RegExpMatchesArray.cpp:
515         (JSC::createEmptyRegExpMatchesArray):
516         * runtime/RegExpMatchesArray.h:
517         (JSC::tryCreateUninitializedRegExpMatchesArray):
518         (JSC::createRegExpMatchesArray):
519
520 2018-06-18  Tadeu Zagallo  <tzagallo@apple.com>
521
522         Share structure across instances of classes exported through the ObjC API
523         https://bugs.webkit.org/show_bug.cgi?id=186579
524         <rdar://problem/40969212>
525
526         Reviewed by Saam Barati.
527
528         A new structure was being created for each instance of exported ObjC
529         classes due to setting the prototype in the structure for every object,
530         since prototype transitions are not cached by the structure. Cache the
531         Structure in the JSObjcClassInfo to avoid the transition.
532
533         * API/JSWrapperMap.mm:
534         (-[JSObjCClassInfo wrapperForObject:inContext:]):
535         (-[JSObjCClassInfo structureInContext:]):
536         * API/tests/JSWrapperMapTests.h: Added.
537         * API/tests/JSWrapperMapTests.mm: Added.
538         (+[JSWrapperMapTests testStructureIdentity]):
539         (runJSWrapperMapTests):
540         * API/tests/testapi.mm:
541         (testObjectiveCAPIMain):
542         * JavaScriptCore.xcodeproj/project.pbxproj:
543
544 2018-06-18  Michael Saboff  <msaboff@apple.com>
545
546         Support Unicode 11 in RegExp
547         https://bugs.webkit.org/show_bug.cgi?id=186685
548
549         Reviewed by Mark Lam.
550
551         Updated the UCD tables used to generate RegExp property tables to version 11.0.
552
553         * Scripts/generateYarrUnicodePropertyTables.py:
554         * ucd/CaseFolding.txt:
555         * ucd/DerivedBinaryProperties.txt:
556         * ucd/DerivedCoreProperties.txt:
557         * ucd/DerivedNormalizationProps.txt:
558         * ucd/PropList.txt:
559         * ucd/PropertyAliases.txt:
560         * ucd/PropertyValueAliases.txt:
561         * ucd/ScriptExtensions.txt:
562         * ucd/Scripts.txt:
563         * ucd/UnicodeData.txt:
564         * ucd/emoji-data.txt:
565
566 2018-06-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>
567
568         [WTF] Remove workarounds needed to support libstdc++-4
569         https://bugs.webkit.org/show_bug.cgi?id=186762
570
571         Reviewed by Michael Catanzaro.
572
573         Revert r226299, r226300 r226301 and r226302.
574
575         * API/tests/TypedArrayCTest.cpp:
576         (assertEqualsAsNumber):
577
578 2018-06-16  Michael Catanzaro  <mcatanzaro@igalia.com>
579
580         REGRESSION(r227717): Hardcoded page size causing JSC crashes on platforms with page size bigger than 16 KB
581         https://bugs.webkit.org/show_bug.cgi?id=182923
582
583         Reviewed by Mark Lam.
584
585         The blockSize used by MarkedBlock is incorrect on platforms with pages larger than 16 KB.
586         Upstream Fedora's patch to use a safer 64 KB default. This fixes PowerPC and s390x.
587
588         * heap/MarkedBlock.h:
589
590 2018-06-16  Yusuke Suzuki  <utatane.tea@gmail.com>
591
592         [JSC] Inline JSArray::pushInline and Structure::nonPropertyTransition
593         https://bugs.webkit.org/show_bug.cgi?id=186723
594
595         Reviewed by Mark Lam.
596
597         Now, CoW -> non-CoW transition is heavy path. We inline the part of Structure::nonPropertyTransition
598         to catch the major path. And we also inline JSArray::pushInline well to spread this in operationArrayPushMultiple.
599
600         This patch improves SixSpeed/spread-literal.es5.
601
602                                      baseline                  patched
603
604         spread-literal.es5      114.4140+-4.5146     ^    104.5475+-3.6157        ^ definitely 1.0944x faster
605
606         * runtime/JSArrayInlines.h:
607         (JSC::JSArray::pushInline):
608         * runtime/Structure.cpp:
609         (JSC::Structure::nonPropertyTransitionSlow):
610         (JSC::Structure::nonPropertyTransition): Deleted.
611         * runtime/Structure.h:
612         * runtime/StructureInlines.h:
613         (JSC::Structure::nonPropertyTransition):
614
615 2018-06-16  Yusuke Suzuki  <utatane.tea@gmail.com>
616
617         [DFG] Reduce OSRExit for Kraken/crypto-aes due to CoW array
618         https://bugs.webkit.org/show_bug.cgi?id=186721
619
620         Reviewed by Keith Miller.
621
622         We still have several other OSRExits, but this patch reduces that.
623
624         1. While ArraySlice code accepts CoW arrays, it always emits CheckStructure without CoW Array structures.
625         So DFG emits ArraySlice onto CoW arrays, and always performs OSRExits.
626
627         2. The CoW patch removed ArrayAllocationProfile updates. This makes allocated JSImmutableButterfly
628         non-appropriate.
629
630         These changes a bit fix Kraken/crypto-aes regression.
631
632                                       baseline                  patched
633
634         stanford-crypto-aes        63.718+-2.312      ^      56.140+-0.966         ^ definitely 1.1350x faster
635
636
637         * dfg/DFGByteCodeParser.cpp:
638         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
639         * ftl/FTLOperations.cpp:
640         (JSC::FTL::operationMaterializeObjectInOSR):
641         * runtime/CommonSlowPaths.cpp:
642         (JSC::SLOW_PATH_DECL):
643
644 2018-06-15  Yusuke Suzuki  <utatane.tea@gmail.com>
645
646         [DFG][FTL] Spread onto PhantomNewArrayBuffer assumes JSFixedArray, but JSImmutableButterfly is returned
647         https://bugs.webkit.org/show_bug.cgi?id=186460
648
649         Reviewed by Saam Barati.
650
651         Spread(PhantomNewArrayBuffer) returns JSImmutableButterfly. But it is wrong.
652         We should return JSFixedArray for Spread. This patch adds a code generating
653         a JSFixedArray from JSImmutableButterfly.
654
655         Merging JSFixedArray into JSImmutableButterfly is possible future extension.
656
657         * ftl/FTLLowerDFGToB3.cpp:
658         (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
659         * runtime/JSFixedArray.h:
660
661 2018-06-15  Saam Barati  <sbarati@apple.com>
662
663         Annotate shrinkFootprintWhenIdle with NS_AVAILABLE
664         https://bugs.webkit.org/show_bug.cgi?id=186687
665         <rdar://problem/40071332>
666
667         Reviewed by Keith Miller.
668
669         * API/JSVirtualMachinePrivate.h:
670
671 2018-06-15  Saam Barati  <sbarati@apple.com>
672
673         Make ForceOSRExit CFG pruning in bytecode parser more aggressive by making the original block to ignore be the plan's osrEntryBytecodeIndex
674         https://bugs.webkit.org/show_bug.cgi?id=186648
675
676         Reviewed by Michael Saboff.
677
678         This patch is neutral on SunSpider/bitops-bitwise-and. That test originally
679         regressed with my first version of ForceOSRExit CFG pruning. This patch makes
680         ForceOSRExit CFG pruning more aggressive by not ignoring everything that
681         can reach any loop_hint, but only ignoring blocks that can reach a loop_hint
682         if it's the plan's osr entry bytecode target. The goal is to get a speedometer
683         2 speedup with this change on iOS.
684
685         * dfg/DFGByteCodeParser.cpp:
686         (JSC::DFG::ByteCodeParser::parse):
687
688 2018-06-15  Michael Catanzaro  <mcatanzaro@igalia.com>
689
690         Unreviewed, rolling out r232816.
691
692         Suggested by Caitlin:
693         "this patch clearly does get some things wrong, and it's not
694         easy to find what those things are"
695
696         Reverted changeset:
697
698         "[LLInt] use loadp consistently for
699         get_from_scope/put_to_scope"
700         https://bugs.webkit.org/show_bug.cgi?id=132333
701         https://trac.webkit.org/changeset/232816
702
703 2018-06-14  Michael Saboff  <msaboff@apple.com>
704
705         REGRESSION(232741): Crash running ARES-6
706         https://bugs.webkit.org/show_bug.cgi?id=186630
707
708         Reviewed by Saam Barati.
709
710         The de-duplicating work in r232741 caused a bug in breakCriticalEdge() where it
711         treated edges between identical predecessor->successor pairs independently.
712         This fixes the issue by handling such edges once, using the added intermediate
713         pad for all instances of the edges between the same pairs.
714
715         * dfg/DFGCriticalEdgeBreakingPhase.cpp:
716         (JSC::DFG::CriticalEdgeBreakingPhase::run):
717         (JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge): Deleted.
718
719 2018-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>
720
721         [GTK][WPE] WebDriver: handle acceptInsecureCertificates capability
722         https://bugs.webkit.org/show_bug.cgi?id=186560
723
724         Reviewed by Brian Burg.
725
726         Add SessionCapabilities struct to Client class and unify requestAutomationSession() methods into a single one
727         that always receives the session capabilities.
728
729         * inspector/remote/RemoteInspector.h:
730         * inspector/remote/RemoteInspectorConstants.h:
731         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
732         (Inspector::RemoteInspector::receivedAutomationSessionRequestMessage): Move the parsing of mac capabilities from
733         WebKit here and fill the SessionCapabilities instead.
734         * inspector/remote/glib/RemoteInspectorGlib.cpp:
735         (Inspector::RemoteInspector::requestAutomationSession): Pass SessionCapabilities to the client.
736         * inspector/remote/glib/RemoteInspectorServer.cpp:
737         (Inspector::RemoteInspectorServer::startAutomationSession): Process SessionCapabilities.
738         * inspector/remote/glib/RemoteInspectorServer.h:
739
740 2018-06-13  Adrian Perez de Castro  <aperez@igalia.com>
741
742         [WPE] Trying to access the remote inspector hits an assertion in the UIProcess
743         https://bugs.webkit.org/show_bug.cgi?id=186588
744
745         Reviewed by Carlos Garcia Campos.
746
747         Make both the WPE and GTK+ ports use /org/webkit/inspector as base prefix
748         for resource paths, which avoids needing a switcheroo depending on the port.
749
750         * inspector/remote/glib/RemoteInspectorUtils.cpp:
751
752 2018-06-13  Caitlin Potter  <caitp@igalia.com>
753
754         [LLInt] use loadp consistently for get_from_scope/put_to_scope
755         https://bugs.webkit.org/show_bug.cgi?id=132333
756
757         Reviewed by Mark Lam.
758
759         Using `loadis` for register indexes and `loadp` for constant scopes /
760         symboltables makes sense, but is problematic for big-endian
761         architectures.
762
763         Consistently treating the operand as a pointer simplifies determining
764         how to access the operand, and helps avoid bad accesses and crashes on
765         big-endian ports.
766
767         * bytecode/CodeBlock.cpp:
768         (JSC::CodeBlock::finishCreation):
769         * bytecode/Instruction.h:
770         * jit/JITOperations.cpp:
771         * llint/LLIntSlowPaths.cpp:
772         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
773         * llint/LowLevelInterpreter32_64.asm:
774         * llint/LowLevelInterpreter64.asm:
775         * runtime/CommonSlowPaths.h:
776         (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
777         (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
778
779 2018-06-13  Keith Miller  <keith_miller@apple.com>
780
781         AutomaticThread should have a way to provide a thread name
782         https://bugs.webkit.org/show_bug.cgi?id=186604
783
784         Reviewed by Filip Pizlo.
785
786         Add names for JSC's automatic threads.
787
788         * dfg/DFGWorklist.cpp:
789         * heap/Heap.cpp:
790         * jit/JITWorklist.cpp:
791         * runtime/VMTraps.cpp:
792         * wasm/WasmWorklist.cpp:
793
794 2018-06-13  Saam Barati  <sbarati@apple.com>
795
796         CFGSimplificationPhase should de-dupe jettisonedBlocks
797         https://bugs.webkit.org/show_bug.cgi?id=186583
798
799         Reviewed by Filip Pizlo.
800
801         When making the predecessors list unique in r232741, it revealed a bug inside
802         of CFG simplification, where we try to remove the same predecessor more than
803         once from a blocks predecessors list. We built the list of blocks to remove
804         from the list of successors, which is not unique, causing us to try to remove
805         the same predecessor more than once. The solution here is to just add to this
806         list of blocks to remove only if the block is not already in the list.
807
808         * dfg/DFGCFGSimplificationPhase.cpp:
809         (JSC::DFG::CFGSimplificationPhase::run):
810
811 2018-06-13  Yusuke Suzuki  <utatane.tea@gmail.com>
812
813         [JSC] Always use Nuke & Set procedure for x86
814         https://bugs.webkit.org/show_bug.cgi?id=186592
815
816         Reviewed by Keith Miller.
817
818         We always use nukeStructureAndStoreButterfly for Contiguous -> ArrayStorage conversion if the architecture is x86.
819         By doing so, we can concurrently load structure and butterfly at least in x86 environment even in non-collector
820         threads.
821
822         * runtime/JSObject.cpp:
823         (JSC::JSObject::convertContiguousToArrayStorage):
824
825 2018-06-12  Saam Barati  <sbarati@apple.com>
826
827         Remove JSVirtualMachine shrinkFootprint when clients move to shrinkFootprintWhenIdle
828         https://bugs.webkit.org/show_bug.cgi?id=186071
829
830         Reviewed by Mark Lam.
831
832         * API/JSVirtualMachine.mm:
833         (-[JSVirtualMachine shrinkFootprint]): Deleted.
834         * API/JSVirtualMachinePrivate.h:
835
836 2018-06-11  Saam Barati  <sbarati@apple.com>
837
838         Reduce graph size by replacing terminal nodes in blocks that have a ForceOSRExit with Unreachable
839         https://bugs.webkit.org/show_bug.cgi?id=181409
840         <rdar://problem/36383749>
841
842         Reviewed by Keith Miller.
843
844         This patch is me redoing r226655. This is a patch I wrote when
845         profiling Speedometer. Fil rolled this change out in r230928. He
846         showed this slowed down a sunspider tests by ~2x. This sunspider
847         regression revealed a real performance bug in the original change:
848         we would kill blocks that reached OSR entry targets, sometimes leading
849         us to not do OSR entry into the DFG, since we could end up deleting
850         entire loops from the CFG. The reason for this is that code that has run
851         ~once and that reaches loops often has ForceOSRExits inside of it. The
852         solution to this is to not perform this optimization on blocks that can
853         reach OSR entry targets.
854         
855         The reason I'm redoing this patch is that it turns out Fil rolling
856         out the change was a Speedometer 2 regression.
857         
858         This is a modified version of the original ChangeLog I wrote in r226655:
859         
860         When I was looking at profiler data for Speedometer, I noticed that one of
861         the hottest functions in Speedometer is around 1100 bytecode operations long.
862         Only about 100 of those bytecode ops ever execute. However, we ended up
863         spending a lot of time compiling basic blocks that never executed. We often
864         plant ForceOSRExit nodes when we parse bytecodes that have a null value profile.
865         This is the case when such a node never executes.
866         
867         This patch makes it so that anytime a block has a ForceOSRExit, and that block
868         can not reach an OSR entry target, we replace its terminal node with an Unreachable
869         node, and remove all nodes after the ForceOSRExit. This cuts down the graph
870         size since it removes control flow edges from the CFG. This allows us to get
871         rid of huge chunks of the CFG in certain programs. When doing this transformation,
872         we also insert Flushes/PhantomLocals to ensure we can recover values that are bytecode
873         live-in to the ForceOSRExit.
874         
875         Using ForceOSRExit as the signal for this is a bit of a hack. It definitely
876         does not get rid of all the CFG that it could. If we decide it's worth
877         it, we could use additional inputs into this mechanism. For example, we could
878         profile if a basic block ever executes inside the LLInt/Baseline, and
879         remove parts of the CFG based on that.
880         
881         When running Speedometer with the concurrent JIT turned off, this patch
882         improves DFG/FTL compile times by around 5%.
883
884         * dfg/DFGByteCodeParser.cpp:
885         (JSC::DFG::ByteCodeParser::addToGraph):
886         (JSC::DFG::ByteCodeParser::inlineCall):
887         (JSC::DFG::ByteCodeParser::parse):
888         * dfg/DFGGraph.cpp:
889         (JSC::DFG::Graph::blocksInPostOrder):
890
891 2018-06-11  Saam Barati  <sbarati@apple.com>
892
893         The NaturalLoops algorithm only works when the list of blocks in a loop is de-duplicated
894         https://bugs.webkit.org/show_bug.cgi?id=184829
895
896         Reviewed by Michael Saboff.
897
898         This patch codifies that a BasicBlock's list of predecessors is de-duplicated.
899         In B3/Air, this just meant writing a validation rule. In DFG, this meant
900         ensuring this property when building up the predecessors list, and also adding
901         a validation rule. The NaturalLoops algorithm relies on this property.
902
903         * b3/B3Validate.cpp:
904         * b3/air/AirValidate.cpp:
905         * b3/testb3.cpp:
906         (JSC::B3::testLoopWithMultipleHeaderEdges):
907         (JSC::B3::run):
908         * dfg/DFGGraph.cpp:
909         (JSC::DFG::Graph::handleSuccessor):
910         * dfg/DFGValidate.cpp:
911
912 2018-06-11  Keith Miller  <keith_miller@apple.com>
913
914         Loading cnn.com in MiniBrowser hits Structure::dump() under DFG::AdaptiveInferredPropertyValueWatchpoint::handleFire  which churns 65KB of memory
915         https://bugs.webkit.org/show_bug.cgi?id=186467
916
917         Reviewed by Simon Fraser.
918
919         This patch adds a LazyFireDetail that wraps ScopedLambda so that
920         we don't actually malloc any strings for firing unless those
921         Strings are actually going to be printed.
922
923         * bytecode/Watchpoint.h:
924         (JSC::LazyFireDetail::LazyFireDetail):
925         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:
926         (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::handleFire):
927         * dfg/DFGAdaptiveStructureWatchpoint.cpp:
928         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
929         * runtime/ArrayPrototype.cpp:
930         (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::handleFire):
931
932 2018-06-11  Mark Lam  <mark.lam@apple.com>
933
934         Add support for webkit-test-runner jscOptions in DumpRenderTree and WebKitTestRunner.
935         https://bugs.webkit.org/show_bug.cgi?id=186451
936         <rdar://problem/40875792>
937
938         Reviewed by Tim Horton.
939
940         Enhance setOptions() to be able to take a comma separated options string in
941         addition to white space separated options strings.
942
943         * runtime/Options.cpp:
944         (JSC::isSeparator):
945         (JSC::Options::setOptions):
946
947 2018-06-11  Michael Saboff  <msaboff@apple.com>
948
949         JavaScriptCore: Disable 32-bit JIT on Windows
950         https://bugs.webkit.org/show_bug.cgi?id=185989
951
952         Reviewed by Mark Lam.
953
954         Fixed the CLOOP so it can work when COMPUTED_GOTOs are not supported.
955
956         * llint/LLIntData.h:
957         (JSC::LLInt::getCodePtr): Used a reinterpret_cast since Opcode could be an int.
958         * llint/LowLevelInterpreter.cpp: Changed the definition of OFFLINE_ASM_GLOBAL_LABEL to not
959         have a case label because these aren't opcodes.
960         * runtime/Options.cpp: Made assembler related Windows conditional code also conditional
961         on the JIT being enabled.
962         (JSC::recomputeDependentOptions):
963
964 2018-06-11  Michael Saboff  <msaboff@apple.com>
965
966         Test js/regexp-zero-length-alternatives.html fails when RegExpJIT is disabled
967         https://bugs.webkit.org/show_bug.cgi?id=186477
968
969         Reviewed by Filip Pizlo.
970
971         Fixed bug where we were using the wrong frame size for TypeParenthesesSubpatternTerminalBegin
972         YARR interpreter nodes.  This caused us to overwrite other frame information.
973
974         Added frame offset debugging code to YARR interpreter.
975
976         * yarr/YarrInterpreter.cpp:
977         (JSC::Yarr::ByteCompiler::emitDisjunction):
978         (JSC::Yarr::ByteCompiler::dumpDisjunction):
979
980 2018-06-10  Yusuke Suzuki  <utatane.tea@gmail.com>
981
982         [JSC] Array.prototype.sort should rejects null comparator
983         https://bugs.webkit.org/show_bug.cgi?id=186458
984
985         Reviewed by Keith Miller.
986
987         This relaxed behavior is once introduced in r216169 to fix some pages by aligning
988         the behavior to Chrome and Firefox.
989
990         However, now Chrome, Firefox and Edge reject a null comparator. So only JavaScriptCore
991         accepts it. This patch reverts r216169 to align JSC to the other engines and fix
992         the spec issue.
993
994         * builtins/ArrayPrototype.js:
995         (sort):
996
997 2018-06-09  Dan Bernstein  <mitz@apple.com>
998
999         [Xcode] Clean up and modernize some build setting definitions
1000         https://bugs.webkit.org/show_bug.cgi?id=186463
1001
1002         Reviewed by Sam Weinig.
1003
1004         * Configurations/Base.xcconfig: Removed definition for macOS 10.11. Simplified the
1005           definition of WK_PRIVATE_FRAMEWORK_STUBS_DIR now that WK_XCODE_SUPPORTS_TEXT_BASED_STUBS
1006           is true for all supported Xcode versions.
1007         * Configurations/DebugRelease.xcconfig: Removed definition for macOS 10.11.
1008         * Configurations/FeatureDefines.xcconfig: Simplified the definitions of ENABLE_APPLE_PAY and
1009           ENABLE_VIDEO_PRESENTATION_MODE now macOS 10.12 is the earliest supported version.
1010         * Configurations/Version.xcconfig: Removed definition for macOS 10.11.
1011         * Configurations/WebKitTargetConditionals.xcconfig: Removed definitions for macOS 10.11.
1012
1013 2018-06-09  Dan Bernstein  <mitz@apple.com>
1014
1015         Added missing file references to the Configuration group.
1016
1017         * JavaScriptCore.xcodeproj/project.pbxproj:
1018
1019 2018-06-08  Darin Adler  <darin@apple.com>
1020
1021         [Cocoa] Remove all uses of NSAutoreleasePool as part of preparation for ARC
1022         https://bugs.webkit.org/show_bug.cgi?id=186436
1023
1024         Reviewed by Anders Carlsson.
1025
1026         * heap/Heap.cpp: Include FoundationSPI.h rather than directly including
1027         objc-internal.h and explicitly declaring the alternative.
1028
1029 2018-06-08  Wenson Hsieh  <wenson_hsieh@apple.com>
1030
1031         [WebKit on watchOS] Upstream watchOS source additions to OpenSource (Part 1)
1032         https://bugs.webkit.org/show_bug.cgi?id=186442
1033         <rdar://problem/40879364>
1034
1035         Reviewed by Tim Horton.
1036
1037         * Configurations/FeatureDefines.xcconfig:
1038
1039 2018-06-08  Tadeu Zagallo  <tzagallo@apple.com>
1040
1041         jumpTrueOrFalse only takes the fast path for boolean false on 64bit LLInt 
1042         https://bugs.webkit.org/show_bug.cgi?id=186446
1043         <rdar://problem/40949995>
1044
1045         Reviewed by Mark Lam.
1046
1047         On 64bit LLInt, jumpTrueOrFalse did a mask check to take the fast path for
1048         boolean literals, but it would only work for false. Change it so that it
1049         takes the fast path for true, false, null and undefined.
1050
1051         * llint/LowLevelInterpreter.asm:
1052         * llint/LowLevelInterpreter64.asm:
1053
1054 2018-06-08  Brian Burg  <bburg@apple.com>
1055
1056         [Cocoa] Web Automation: include browser name and version in listing for automation targets
1057         https://bugs.webkit.org/show_bug.cgi?id=186204
1058         <rdar://problem/36950423>
1059
1060         Reviewed by Darin Adler.
1061
1062         Ask the client what the reported browser name and version should be, then
1063         send this as part of the listing for an automation target.
1064
1065         * inspector/remote/RemoteInspectorConstants.h:
1066         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
1067         (Inspector::RemoteInspector::listingForAutomationTarget const):
1068
1069 2018-06-07  Chris Dumez  <cdumez@apple.com>
1070
1071         Add base class to get WeakPtrFactory member and avoid some boilerplate code
1072         https://bugs.webkit.org/show_bug.cgi?id=186407
1073
1074         Reviewed by Brent Fulgham.
1075
1076         Add CanMakeWeakPtr base class to get WeakPtrFactory member and its getter, in
1077         order to avoid some boilerplate code in every class needing a WeakPtrFactory.
1078         This also gets rid of old-style createWeakPtr() methods in favor of the newer
1079         makeWeakPtr().
1080
1081         * wasm/WasmInstance.h:
1082         * wasm/WasmMemory.cpp:
1083         (JSC::Wasm::Memory::registerInstance):
1084
1085 2018-06-07  Tadeu Zagallo  <tzagallo@apple.com>
1086
1087         Don't try to allocate JIT memory if we don't have the JIT entitlement
1088         https://bugs.webkit.org/show_bug.cgi?id=182605
1089         <rdar://problem/38271229>
1090
1091         Reviewed by Mark Lam.
1092
1093         Check that the current process has the correct entitlements before
1094         trying to allocate JIT memory to silence warnings.
1095
1096         * jit/ExecutableAllocator.cpp:
1097         (JSC::allowJIT): Helper that checks entitlements on iOS and returns true in other platforms
1098         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator): check allowJIT before trying to allocate
1099
1100 2018-06-07  Saam Barati  <sbarati@apple.com>
1101
1102         TierUpCheckInjectionPhase systematically never puts the outer-most loop in an inner loop's vector of outer loops
1103         https://bugs.webkit.org/show_bug.cgi?id=186386
1104
1105         Reviewed by Filip Pizlo.
1106
1107         This looks like an 8% speedup on Kraken's imaging-gaussian-blur subtest.
1108
1109         * dfg/DFGTierUpCheckInjectionPhase.cpp:
1110         (JSC::DFG::TierUpCheckInjectionPhase::run):
1111
1112 2018-06-02  Filip Pizlo  <fpizlo@apple.com>
1113
1114         FunctionRareData::m_objectAllocationProfileWatchpoint is racy
1115         https://bugs.webkit.org/show_bug.cgi?id=186237
1116
1117         Reviewed by Saam Barati.
1118
1119         We initialize it blind and let it go into auto-watch mode once the DFG adds a watchpoint, but
1120         that means that we never notice that it fired if it fires between when the DFG decides to
1121         watch it and when it actually adds the watchpoint.
1122         
1123         Most watchpoints are initialized watched for this purpose. This one had a somewhat good
1124         reason for being initialized blind: that's how we knew to ignore changes to the prototype
1125         before the first allocation. However, that functionality also arose out of the fact that the
1126         rare data is created lazily and usually won't exist until the first allocation.
1127         
1128         The fix here is to make the watchpoint go into watched mode as soon as we initialize the
1129         object allocation profile.
1130         
1131         It's hard to repro this race, however it started causing spurious test failures for me after
1132         bug 164904.
1133
1134         * runtime/FunctionRareData.cpp:
1135         (JSC::FunctionRareData::FunctionRareData):
1136         (JSC::FunctionRareData::initializeObjectAllocationProfile):
1137
1138 2018-06-07  Saam Barati  <sbarati@apple.com>
1139
1140         Make DFG to FTL OSR entry code more sane by removing bad RELEASE_ASSERTS and making it trigger compiles in outer loops before inner ones
1141         https://bugs.webkit.org/show_bug.cgi?id=186218
1142         <rdar://problem/38449540>
1143
1144         Reviewed by Filip Pizlo.
1145
1146         This patch makes tierUpCommon a tad bit more sane. There are a few things
1147         that I did:
1148         - There were a few release asserts that were crashing. Those release asserts
1149         were incorrect. They were making assumptions about how the code and data
1150         structures were ordered that were wrong. This patch removes them. The code
1151         was using the loop hierarchy vector to make assumptions about which loop we
1152         were currently executing in, which is incorrect. The only information that
1153         can be used about where we're currently executing is the bytecode index we're
1154         at.
1155         - This makes it so that we go back to trying to compile outer loops before
1156         inner loops. JF accidentally reverted this behavior that Ben implemented.
1157         JF made it so that we just compiled the inner most loop. I make this
1158         functionality work by first triggering a compile for the outer most loop
1159         that the code is currently executing in and that can perform OSR entry.
1160         However, some programs can get stuck in inner loops. The code works by
1161         progressively asking inner loops to compile if program execution has not
1162         yet reached an outer loop.
1163
1164         * dfg/DFGOperations.cpp:
1165
1166 2018-06-06  Guillaume Emont  <guijemont@igalia.com>
1167
1168         ArityFixup should adjust SP first on 32-bit platforms too
1169         https://bugs.webkit.org/show_bug.cgi?id=186351
1170
1171         Reviewed by Yusuke Suzuki.
1172
1173         * jit/ThunkGenerators.cpp:
1174         (JSC::arityFixupGenerator):
1175
1176 2018-06-06  Yusuke Suzuki  <utatane.tea@gmail.com>
1177
1178         [DFG] Compare operations do not respect negative zeros
1179         https://bugs.webkit.org/show_bug.cgi?id=183729
1180
1181         Reviewed by Saam Barati.
1182
1183         Compare operations do not respect negative zeros. So propagating this can
1184         reduce the size of the produced code for negative zero case. This pattern
1185         can be seen in Kraken stanford-crypto-aes.
1186
1187         This also causes an existing bug which converts CompareEq(Int32Only, NonIntAsdouble) to false.
1188         However, NonIntAsdouble includes negative zero, which can be equal to Int32 positive zero.
1189         This issue is covered by fold-based-on-int32-proof-mul-branch.js, and we fix this.
1190
1191         * bytecode/SpeculatedType.cpp:
1192         (JSC::leastUpperBoundOfStrictlyEquivalentSpeculations):
1193         SpecNonIntAsDouble includes negative zero (-0.0), which can be equal to 0 and 0.0.
1194         To emphasize this, we use SpecAnyIntAsDouble | SpecNonIntAsDouble directly instead of
1195         SpecDoubleReal.
1196
1197         * dfg/DFGBackwardsPropagationPhase.cpp:
1198         (JSC::DFG::BackwardsPropagationPhase::propagate):
1199
1200 2018-06-06  Saam Barati  <sbarati@apple.com>
1201
1202         generateConditionsForInstanceOf needs to see if the object has a poly proto structure before assuming it has a constant prototype
1203         https://bugs.webkit.org/show_bug.cgi?id=186363
1204
1205         Rubber-stamped by Filip Pizlo.
1206
1207         The code was assuming that the object it was creating an OPC for always
1208         had a non-poly-proto structure. However, this assumption was wrong. For
1209         example, an object in the prototype chain could be poly proto. That type 
1210         of object graph would cause a crash in this code. This patch makes it so
1211         that we fail to generate an ObjectPropertyConditionSet if we see a poly proto
1212         object as we traverse the prototype chain.
1213
1214         * bytecode/ObjectPropertyConditionSet.cpp:
1215         (JSC::generateConditionsForInstanceOf):
1216
1217 2018-06-05  Brent Fulgham  <bfulgham@apple.com>
1218
1219         Adjust compile and runtime flags to match shippable state of features
1220         https://bugs.webkit.org/show_bug.cgi?id=186319
1221         <rdar://problem/40352045>
1222
1223         Reviewed by Maciej Stachowiak, Jon Lee, and others.
1224
1225         This patch revises the compile time and runtime state for various features to match their
1226         suitability for end-user releases.
1227
1228         * Configurations/DebugRelease.xcconfig: Update to match WebKit definition of
1229         WK_RELOCATABLE_FRAMEWORKS so that ENABLE(EXPERIMENTAL_FEATURES) is defined properly for
1230         Cocoa builds.
1231         * Configurations/FeatureDefines.xcconfig: Don't build ENABLE_INPUT_TYPE_COLOR
1232         or ENABLE_INPUT_TYPE_COLOR_POPOVER.
1233         * runtime/Options.h: Only enable INTL_NUMBER_FORMAT_TO_PARTS and INTL_PLURAL_RULES
1234         at runtime for non-production builds.
1235
1236 2018-06-05  Brent Fulgham  <bfulgham@apple.com>
1237
1238         Revise DEFAULT_EXPERIMENTAL_FEATURES_ENABLED to work properly on Apple builds
1239         https://bugs.webkit.org/show_bug.cgi?id=186286
1240         <rdar://problem/40782992>
1241
1242         Reviewed by Dan Bernstein.
1243
1244         Use the WK_RELOCATABLE_FRAMEWORKS flag (which is always defined for non-production builds)
1245         to define ENABLE(EXPERIMENTAL_FEATURES) so that we do not need to manually
1246         change this flag when preparing for a production release.
1247
1248         * Configurations/FeatureDefines.xcconfig: Use WK_RELOCATABLE_FRAMEWORKS to determine
1249         whether experimental features should be enabled, and use it to properly define the
1250         feature flag.
1251
1252 2018-06-05  Darin Adler  <darin@apple.com>
1253
1254         [Cocoa] Update some JavaScriptCore code to be more ready for ARC
1255         https://bugs.webkit.org/show_bug.cgi?id=186301
1256
1257         Reviewed by Anders Carlsson.
1258
1259         * API/JSContext.mm:
1260         (-[JSContext evaluateScript:withSourceURL:]): Use __bridge for typecast.
1261         (-[JSContext setName:]): Removed unnecessary call to copy, since the
1262         JSStringCreateWithCFString function already reads the characters out
1263         of the string and does not retain the string, so there is no need to
1264         make an immutable copy. And used __bridge for typecast.
1265         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
1266         (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage):
1267         Ditto.
1268
1269         * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
1270         (Inspector::RemoteInspectorXPCConnection::deserializeMessage):
1271         Use CFBridgingRelease instead of autorelease for a CF dictionary that
1272         we return as an NSDictionary.
1273
1274 2018-06-04  Keith Miller  <keith_miller@apple.com>
1275
1276         Remove missing files from JavaScriptCore Xcode project
1277         https://bugs.webkit.org/show_bug.cgi?id=186297
1278
1279         Reviewed by Saam Barati.
1280
1281         * JavaScriptCore.xcodeproj/project.pbxproj:
1282
1283 2018-06-04  Keith Miller  <keith_miller@apple.com>
1284
1285         Add test for CoW conversions in the DFG/FTL
1286         https://bugs.webkit.org/show_bug.cgi?id=186295
1287
1288         Reviewed by Saam Barati.
1289
1290         Add a function to $vm that returns a JSString containing the
1291         dataLog dump of the indexingMode of an Object.
1292
1293         * tools/JSDollarVM.cpp:
1294         (JSC::functionIndexingMode):
1295         (JSC::JSDollarVM::finishCreation):
1296
1297 2018-06-04  Saam Barati  <sbarati@apple.com>
1298
1299         Set the activeLength of all ScratchBuffers to zero when exiting the VM
1300         https://bugs.webkit.org/show_bug.cgi?id=186284
1301         <rdar://problem/40780738>
1302
1303         Reviewed by Keith Miller.
1304
1305         Simon recently found instances where we leak global objects from the
1306         ScratchBuffer. Yusuke found that we forgot to set the active length
1307         back to zero when doing catch OSR entry in the DFG/FTL. His solution
1308         to this was adding a node that cleared the active length. This is
1309         a good node to have, but it's not a complete solution: the DFG/FTL
1310         could OSR exit before that node executes, which would cause us to leak
1311         the data in it.
1312         
1313         This patch makes it so that we set each scratch buffer's active length
1314         to zero on VM exit. This helps prevent leaks for JS code that eventually
1315         exits the VM (which is essentially all code on the web and all API users).
1316
1317         * runtime/VM.cpp:
1318         (JSC::VM::clearScratchBuffers):
1319         * runtime/VM.h:
1320         * runtime/VMEntryScope.cpp:
1321         (JSC::VMEntryScope::~VMEntryScope):
1322
1323 2018-06-04  Keith Miller  <keith_miller@apple.com>
1324
1325         JSLock should clear last exception when releasing the lock
1326         https://bugs.webkit.org/show_bug.cgi?id=186277
1327
1328         Reviewed by Mark Lam.
1329
1330         If we don't clear the last exception we essentially leak the
1331         object and everything referenced by it until another exception is
1332         thrown.
1333
1334         * runtime/JSLock.cpp:
1335         (JSC::JSLock::willReleaseLock):
1336
1337 2018-06-04  Yusuke Suzuki  <utatane.tea@gmail.com>
1338
1339         Get rid of UnconditionalFinalizers and WeakReferenceHarvesters
1340         https://bugs.webkit.org/show_bug.cgi?id=180248
1341
1342         Reviewed by Sam Weinig.
1343
1344         As a final step, this patch removes ListableHandler from JSC.
1345         Nobody uses UnconditionalFinalizers and WeakReferenceHarvesters now.
1346
1347         * CMakeLists.txt:
1348         * JavaScriptCore.xcodeproj/project.pbxproj:
1349         * heap/Heap.h:
1350         * heap/ListableHandler.h: Removed.
1351
1352 2018-06-03  Yusuke Suzuki  <utatane.tea@gmail.com>
1353
1354         LayoutTests/fast/css/parsing-css-matches-7.html always abandons its Document (disabling JIT fixes it)
1355         https://bugs.webkit.org/show_bug.cgi?id=186223
1356
1357         Reviewed by Keith Miller.
1358
1359         After preparing catchOSREntryBuffer, we do not clear the active length of this scratch buffer.
1360         It makes this buffer conservative GC root, and allows it to hold GC objects unnecessarily long.
1361
1362         This patch introduces DFG ClearCatchLocals node, which clears catchOSREntryBuffer's active length.
1363         We model ExtractCatchLocal and ClearCatchLocals appropriately in DFG clobberize too to make
1364         this ClearCatchLocals valid.
1365
1366         The existing tests for ExtractCatchLocal just pass.
1367
1368         * dfg/DFGAbstractHeap.h:
1369         * dfg/DFGAbstractInterpreterInlines.h:
1370         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1371         * dfg/DFGByteCodeParser.cpp:
1372         (JSC::DFG::ByteCodeParser::parseBlock):
1373         * dfg/DFGClobberize.h:
1374         (JSC::DFG::clobberize):
1375         * dfg/DFGDoesGC.cpp:
1376         (JSC::DFG::doesGC):
1377         * dfg/DFGFixupPhase.cpp:
1378         (JSC::DFG::FixupPhase::fixupNode):
1379         * dfg/DFGMayExit.cpp:
1380         * dfg/DFGNodeType.h:
1381         * dfg/DFGOSREntry.cpp:
1382         (JSC::DFG::prepareCatchOSREntry):
1383         * dfg/DFGPredictionPropagationPhase.cpp:
1384         * dfg/DFGSafeToExecute.h:
1385         (JSC::DFG::safeToExecute):
1386         * dfg/DFGSpeculativeJIT.cpp:
1387         (JSC::DFG::SpeculativeJIT::compileClearCatchLocals):
1388         * dfg/DFGSpeculativeJIT.h:
1389         * dfg/DFGSpeculativeJIT32_64.cpp:
1390         (JSC::DFG::SpeculativeJIT::compile):
1391         * dfg/DFGSpeculativeJIT64.cpp:
1392         (JSC::DFG::SpeculativeJIT::compile):
1393         * ftl/FTLCapabilities.cpp:
1394         (JSC::FTL::canCompile):
1395         * ftl/FTLLowerDFGToB3.cpp:
1396         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1397         (JSC::FTL::DFG::LowerDFGToB3::compileClearCatchLocals):
1398
1399 2018-06-02  Darin Adler  <darin@apple.com>
1400
1401         [Cocoa] Update some code to be more ARC-compatible to prepare for future ARC adoption
1402         https://bugs.webkit.org/show_bug.cgi?id=186227
1403
1404         Reviewed by Dan Bernstein.
1405
1406         * API/JSContext.mm:
1407         (-[JSContext name]): Use CFBridgingRelease instead of autorelease.
1408         * API/JSValue.mm:
1409         (valueToObjectWithoutCopy): Use CFBridgingRelease instead of autorelease.
1410         (containerValueToObject): Use adoptCF instead of autorelease. This is not only more
1411         ARC-compatible, but more efficient.
1412         (valueToString): Use CFBridgingRelease instead of autorelease.
1413
1414 2018-06-02  Caio Lima  <ticaiolima@gmail.com>
1415
1416         [ESNext][BigInt] Implement support for addition operations
1417         https://bugs.webkit.org/show_bug.cgi?id=179002
1418
1419         Reviewed by Yusuke Suzuki.
1420
1421         This patch is implementing support to BigInt Operands into binary "+"
1422         and binary "-" operators. Right now, we have limited support to DFG
1423         and FTL JIT layers, but we plan to fix this support in future
1424         patches.
1425
1426         * jit/JITOperations.cpp:
1427         * runtime/CommonSlowPaths.cpp:
1428         (JSC::SLOW_PATH_DECL):
1429         * runtime/JSBigInt.cpp:
1430         (JSC::JSBigInt::parseInt):
1431         (JSC::JSBigInt::stringToBigInt):
1432         (JSC::JSBigInt::toString):
1433         (JSC::JSBigInt::multiply):
1434         (JSC::JSBigInt::divide):
1435         (JSC::JSBigInt::remainder):
1436         (JSC::JSBigInt::add):
1437         (JSC::JSBigInt::sub):
1438         (JSC::JSBigInt::absoluteAdd):
1439         (JSC::JSBigInt::absoluteSub):
1440         (JSC::JSBigInt::toStringGeneric):
1441         (JSC::JSBigInt::allocateFor):
1442         (JSC::JSBigInt::toNumber const):
1443         (JSC::JSBigInt::getPrimitiveNumber const):
1444         * runtime/JSBigInt.h:
1445         * runtime/JSCJSValueInlines.h:
1446         * runtime/Operations.cpp:
1447         (JSC::jsAddSlowCase):
1448         * runtime/Operations.h:
1449         (JSC::jsSub):
1450
1451 2018-06-02  Commit Queue  <commit-queue@webkit.org>
1452
1453         Unreviewed, rolling out r232439.
1454         https://bugs.webkit.org/show_bug.cgi?id=186238
1455
1456         It breaks gtk-linux-32-release (Requested by caiolima on
1457         #webkit).
1458
1459         Reverted changeset:
1460
1461         "[ESNext][BigInt] Implement support for addition operations"
1462         https://bugs.webkit.org/show_bug.cgi?id=179002
1463         https://trac.webkit.org/changeset/232439
1464
1465 2018-06-01  Yusuke Suzuki  <utatane.tea@gmail.com>
1466
1467         Baseline op_jtrue emits an insane amount of code
1468         https://bugs.webkit.org/show_bug.cgi?id=185708
1469
1470         Reviewed by Filip Pizlo.
1471
1472         op_jtrue / op_jfalse bloats massive amount of code. This patch attempts to reduce the size of this code by,
1473
1474         1. op_jtrue / op_jfalse immediately jumps if the condition met. We add AssemblyHelpers::branchIf{Truthy,Falsey}
1475            to jump directly. This tightens the code.
1476
1477         2. Align our emitConvertValueToBoolean implementation to FTL's boolify function. It emits less code.
1478
1479         This reduces the code size of op_jtrue in x64 from 220 bytes to 164 bytes.
1480
1481         [  12] jtrue             arg1, 6(->18)
1482               0x7f233170162c: mov 0x30(%rbp), %rax
1483               0x7f2331701630: mov %rax, %rsi
1484               0x7f2331701633: xor $0x6, %rsi
1485               0x7f2331701637: test $0xfffffffffffffffe, %rsi
1486               0x7f233170163e: jnz 0x7f2331701654
1487               0x7f2331701644: cmp $0x7, %eax
1488               0x7f2331701647: setz %sil
1489               0x7f233170164b: movzx %sil, %esi
1490               0x7f233170164f: jmp 0x7f2331701705
1491               0x7f2331701654: test %rax, %r14
1492               0x7f2331701657: jz 0x7f233170169c
1493               0x7f233170165d: cmp %r14, %rax
1494               0x7f2331701660: jb 0x7f2331701675
1495               0x7f2331701666: test %eax, %eax
1496               0x7f2331701668: setnz %sil
1497               0x7f233170166c: movzx %sil, %esi
1498               0x7f2331701670: jmp 0x7f2331701705
1499               0x7f2331701675: lea (%r14,%rax), %rsi
1500               0x7f2331701679: movq %rsi, %xmm0
1501               0x7f233170167e: xorps %xmm1, %xmm1
1502               0x7f2331701681: ucomisd %xmm1, %xmm0
1503               0x7f2331701685: jz 0x7f2331701695
1504               0x7f233170168b: mov $0x1, %esi
1505               0x7f2331701690: jmp 0x7f2331701705
1506               0x7f2331701695: xor %esi, %esi
1507               0x7f2331701697: jmp 0x7f2331701705
1508               0x7f233170169c: test %rax, %r15
1509               0x7f233170169f: jnz 0x7f2331701703
1510               0x7f23317016a5: cmp $0x1, 0x5(%rax)
1511               0x7f23317016a9: jnz 0x7f23317016c1
1512               0x7f23317016af: mov 0x8(%rax), %esi
1513               0x7f23317016b2: test %esi, %esi
1514               0x7f23317016b4: setnz %sil
1515               0x7f23317016b8: movzx %sil, %esi
1516               0x7f23317016bc: jmp 0x7f2331701705
1517               0x7f23317016c1: test $0x1, 0x6(%rax)
1518               0x7f23317016c5: jz 0x7f23317016f9
1519               0x7f23317016cb: mov (%rax), %esi
1520               0x7f23317016cd: mov $0x7f23315000c8, %rdx
1521               0x7f23317016d7: mov (%rdx), %rdx
1522               0x7f23317016da: mov (%rdx,%rsi,8), %rsi
1523               0x7f23317016de: mov $0x7f2330de0000, %rdx
1524               0x7f23317016e8: cmp %rdx, 0x18(%rsi)
1525               0x7f23317016ec: jnz 0x7f23317016f9
1526               0x7f23317016f2: xor %esi, %esi
1527               0x7f23317016f4: jmp 0x7f2331701705
1528               0x7f23317016f9: mov $0x1, %esi
1529               0x7f23317016fe: jmp 0x7f2331701705
1530               0x7f2331701703: xor %esi, %esi
1531               0x7f2331701705: test %esi, %esi
1532               0x7f2331701707: jnz 0x7f233170171b
1533
1534         [  12] jtrue             arg1, 6(->18)
1535               0x7f6c8710156c: mov 0x30(%rbp), %rax
1536               0x7f6c87101570: test %rax, %r15
1537               0x7f6c87101573: jnz 0x7f6c871015c8
1538               0x7f6c87101579: cmp $0x1, 0x5(%rax)
1539               0x7f6c8710157d: jnz 0x7f6c87101592
1540               0x7f6c87101583: cmp $0x0, 0x8(%rax)
1541               0x7f6c87101587: jnz 0x7f6c87101623
1542               0x7f6c8710158d: jmp 0x7f6c87101615
1543               0x7f6c87101592: test $0x1, 0x6(%rax)
1544               0x7f6c87101596: jz 0x7f6c87101623
1545               0x7f6c8710159c: mov (%rax), %esi
1546               0x7f6c8710159e: mov $0x7f6c86f000e0, %rdx
1547               0x7f6c871015a8: mov (%rdx), %rdx
1548               0x7f6c871015ab: mov (%rdx,%rsi,8), %rsi
1549               0x7f6c871015af: mov $0x7f6c867e0000, %rdx
1550               0x7f6c871015b9: cmp %rdx, 0x18(%rsi)
1551               0x7f6c871015bd: jnz 0x7f6c87101623
1552               0x7f6c871015c3: jmp 0x7f6c87101615
1553               0x7f6c871015c8: cmp %r14, %rax
1554               0x7f6c871015cb: jb 0x7f6c871015de
1555               0x7f6c871015d1: test %eax, %eax
1556               0x7f6c871015d3: jnz 0x7f6c87101623
1557               0x7f6c871015d9: jmp 0x7f6c87101615
1558               0x7f6c871015de: test %rax, %r14
1559               0x7f6c871015e1: jz 0x7f6c87101602
1560               0x7f6c871015e7: lea (%r14,%rax), %rsi
1561               0x7f6c871015eb: movq %rsi, %xmm0
1562               0x7f6c871015f0: xorps %xmm1, %xmm1
1563               0x7f6c871015f3: ucomisd %xmm1, %xmm0
1564               0x7f6c871015f7: jz 0x7f6c87101615
1565               0x7f6c871015fd: jmp 0x7f6c87101623
1566               0x7f6c87101602: mov $0x7, %r11
1567               0x7f6c8710160c: cmp %r11, %rax
1568               0x7f6c8710160f: jz 0x7f6c87101623
1569
1570         * dfg/DFGSpeculativeJIT32_64.cpp:
1571         (JSC::DFG::SpeculativeJIT::emitBranch):
1572         * dfg/DFGSpeculativeJIT64.cpp:
1573         (JSC::DFG::SpeculativeJIT::emitBranch):
1574         * jit/AssemblyHelpers.cpp:
1575         (JSC::AssemblyHelpers::emitConvertValueToBoolean):
1576         (JSC::AssemblyHelpers::branchIfValue):
1577         * jit/AssemblyHelpers.h:
1578         (JSC::AssemblyHelpers::branchIfTruthy):
1579         (JSC::AssemblyHelpers::branchIfFalsey):
1580         * jit/JIT.h:
1581         * jit/JITInlines.h:
1582         (JSC::JIT::addJump):
1583         * jit/JITOpcodes.cpp:
1584         (JSC::JIT::emit_op_jfalse):
1585         (JSC::JIT::emit_op_jtrue):
1586         * jit/JITOpcodes32_64.cpp:
1587         (JSC::JIT::emit_op_jfalse):
1588         (JSC::JIT::emit_op_jtrue):
1589
1590 2018-06-02  Yusuke Suzuki  <utatane.tea@gmail.com>
1591
1592         [JSC] Remove WeakReferenceHarvester
1593         https://bugs.webkit.org/show_bug.cgi?id=186102
1594
1595         Reviewed by Filip Pizlo.
1596
1597         After several cleanups, now JSWeakMap becomes the last user of WeakReferenceHarvester.
1598         Since JSWeakMap is already managed in IsoSubspace, we can iterate marked JSWeakMap
1599         by using output constraints & Subspace iteration.
1600
1601         This patch removes WeakReferenceHarvester. Instead of managing this linked-list, our
1602         output constraint set iterates marked JSWeakMap by using Subspace.
1603
1604         And we also add locking for JSWeakMap's rehash and output constraint visiting.
1605
1606         Attached microbenchmark does not show any regression.
1607
1608         * API/JSAPIWrapperObject.h:
1609         * CMakeLists.txt:
1610         * JavaScriptCore.xcodeproj/project.pbxproj:
1611         * heap/Heap.cpp:
1612         (JSC::Heap::endMarking):
1613         (JSC::Heap::addCoreConstraints):
1614         * heap/Heap.h:
1615         * heap/SlotVisitor.cpp:
1616         (JSC::SlotVisitor::addWeakReferenceHarvester): Deleted.
1617         * heap/SlotVisitor.h:
1618         * heap/WeakReferenceHarvester.h: Removed.
1619         * runtime/WeakMapImpl.cpp:
1620         (JSC::WeakMapImpl<WeakMapBucket>::visitChildren):
1621         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKey>>::visitOutputConstraints):
1622         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitOutputConstraints):
1623         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKey>>::visitWeakReferences): Deleted.
1624         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitWeakReferences): Deleted.
1625         * runtime/WeakMapImpl.h:
1626         (JSC::WeakMapImpl::WeakMapImpl):
1627         (JSC::WeakMapImpl::finishCreation):
1628         (JSC::WeakMapImpl::rehash):
1629         (JSC::WeakMapImpl::makeAndSetNewBuffer):
1630         (JSC::WeakMapImpl::DeadKeyCleaner::target): Deleted.
1631
1632 2018-06-02  Yusuke Suzuki  <utatane.tea@gmail.com>
1633
1634         [JSC] Object.create should have intrinsic
1635         https://bugs.webkit.org/show_bug.cgi?id=186200
1636
1637         Reviewed by Filip Pizlo.
1638
1639         Object.create is used in various JS code. `Object.create(null)` is particularly used
1640         to create empty plain object with null [[Prototype]]. We can find `Object.create(null)`
1641         call in ARES-6/Babylon code.
1642
1643         This patch adds ObjectCreateIntrinsic to JSC. DFG recognizes it and produces ObjectCreate
1644         DFG node. DFG AI and constant folding attempt to convert it to NewObject when prototype
1645         object is null. It offers significant performance boost for `Object.create(null)`.
1646
1647                                                          baseline                  patched
1648
1649         object-create-null                           53.7940+-1.5297     ^     19.8846+-0.6584        ^ definitely 2.7053x faster
1650         object-create-unknown-object-prototype       38.9977+-1.1364     ^     37.2207+-0.6143        ^ definitely 1.0477x faster
1651         object-create-untyped-prototype              22.5632+-0.6917           22.2539+-0.6876          might be 1.0139x faster
1652
1653         * dfg/DFGAbstractInterpreterInlines.h:
1654         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1655         * dfg/DFGByteCodeParser.cpp:
1656         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
1657         * dfg/DFGClobberize.h:
1658         (JSC::DFG::clobberize):
1659         * dfg/DFGConstantFoldingPhase.cpp:
1660         (JSC::DFG::ConstantFoldingPhase::foldConstants):
1661         * dfg/DFGDoesGC.cpp:
1662         (JSC::DFG::doesGC):
1663         * dfg/DFGFixupPhase.cpp:
1664         (JSC::DFG::FixupPhase::fixupNode):
1665         * dfg/DFGNode.h:
1666         (JSC::DFG::Node::convertToNewObject):
1667         * dfg/DFGNodeType.h:
1668         * dfg/DFGOperations.cpp:
1669         * dfg/DFGOperations.h:
1670         * dfg/DFGPredictionPropagationPhase.cpp:
1671         * dfg/DFGSafeToExecute.h:
1672         (JSC::DFG::safeToExecute):
1673         * dfg/DFGSpeculativeJIT.cpp:
1674         (JSC::DFG::SpeculativeJIT::compileObjectCreate):
1675         * dfg/DFGSpeculativeJIT.h:
1676         * dfg/DFGSpeculativeJIT32_64.cpp:
1677         (JSC::DFG::SpeculativeJIT::compile):
1678         * dfg/DFGSpeculativeJIT64.cpp:
1679         (JSC::DFG::SpeculativeJIT::compile):
1680         * ftl/FTLCapabilities.cpp:
1681         (JSC::FTL::canCompile):
1682         * ftl/FTLLowerDFGToB3.cpp:
1683         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1684         (JSC::FTL::DFG::LowerDFGToB3::compileObjectCreate):
1685         * runtime/Intrinsic.cpp:
1686         (JSC::intrinsicName):
1687         * runtime/Intrinsic.h:
1688         * runtime/JSGlobalObject.cpp:
1689         (JSC::JSGlobalObject::init):
1690         (JSC::JSGlobalObject::visitChildren):
1691         * runtime/JSGlobalObject.h:
1692         (JSC::JSGlobalObject::nullPrototypeObjectStructure const):
1693         * runtime/ObjectConstructor.cpp:
1694
1695 2018-06-02  Caio Lima  <ticaiolima@gmail.com>
1696
1697         [ESNext][BigInt] Implement support for addition operations
1698         https://bugs.webkit.org/show_bug.cgi?id=179002
1699
1700         Reviewed by Yusuke Suzuki.
1701
1702         This patch is implementing support to BigInt Operands into binary "+"
1703         and binary "-" operators. Right now, we have limited support to DFG
1704         and FTL JIT layers, but we plan to fix this support in future
1705         patches.
1706
1707         * jit/JITOperations.cpp:
1708         * runtime/CommonSlowPaths.cpp:
1709         (JSC::SLOW_PATH_DECL):
1710         * runtime/JSBigInt.cpp:
1711         (JSC::JSBigInt::parseInt):
1712         (JSC::JSBigInt::stringToBigInt):
1713         (JSC::JSBigInt::toString):
1714         (JSC::JSBigInt::multiply):
1715         (JSC::JSBigInt::divide):
1716         (JSC::JSBigInt::remainder):
1717         (JSC::JSBigInt::add):
1718         (JSC::JSBigInt::sub):
1719         (JSC::JSBigInt::absoluteAdd):
1720         (JSC::JSBigInt::absoluteSub):
1721         (JSC::JSBigInt::toStringGeneric):
1722         (JSC::JSBigInt::allocateFor):
1723         (JSC::JSBigInt::toNumber const):
1724         (JSC::JSBigInt::getPrimitiveNumber const):
1725         * runtime/JSBigInt.h:
1726         * runtime/JSCJSValueInlines.h:
1727         * runtime/Operations.cpp:
1728         (JSC::jsAddSlowCase):
1729         * runtime/Operations.h:
1730         (JSC::jsSub):
1731
1732 2018-06-01  Wenson Hsieh  <wenson_hsieh@apple.com>
1733
1734         Fix the watchOS build after r232385
1735         https://bugs.webkit.org/show_bug.cgi?id=186203
1736
1737         Reviewed by Keith Miller.
1738
1739         Add a missing header include for JSImmutableButterfly.
1740
1741         * runtime/ArrayPrototype.cpp:
1742
1743 2018-05-29  Yusuke Suzuki  <utatane.tea@gmail.com>
1744
1745         [JSC] Add Symbol.prototype.description getter
1746         https://bugs.webkit.org/show_bug.cgi?id=186053
1747
1748         Reviewed by Keith Miller.
1749
1750         Symbol.prototype.description accessor  is now stage 3[1].
1751         This adds a getter to retrieve [[Description]] value from Symbol.
1752         Previously, Symbol#toString() returns `Symbol(${description})` value.
1753         So users need to extract `description` part if they want it.
1754
1755         [1]: https://tc39.github.io/proposal-Symbol-description/
1756
1757         * runtime/Symbol.cpp:
1758         (JSC::Symbol::description const):
1759         * runtime/Symbol.h:
1760         * runtime/SymbolPrototype.cpp:
1761         (JSC::tryExtractSymbol):
1762         (JSC::symbolProtoGetterDescription):
1763         (JSC::symbolProtoFuncToString):
1764         (JSC::symbolProtoFuncValueOf):
1765
1766 2018-06-01  Yusuke Suzuki  <utatane.tea@gmail.com>
1767
1768         [JSC] Correct values and members of JSBigInt appropriately
1769         https://bugs.webkit.org/show_bug.cgi?id=186196
1770
1771         Reviewed by Darin Adler.
1772
1773         This patch cleans up a bit to select more appropriate values and members of JSBigInt.
1774
1775         1. JSBigInt's structure should be StructureIsImmortal.
1776         2. JSBigInt::allocationSize should be annotated with `inline`.
1777         3. Remove JSBigInt::visitChildren since it is completely the same to JSCell::visitChildren.
1778         4. Remove JSBigInt::finishCreation since it is completely the same to JSCell::finishCreation.
1779
1780         * runtime/JSBigInt.cpp:
1781         (JSC::JSBigInt::allocationSize):
1782         (JSC::JSBigInt::allocateFor):
1783         (JSC::JSBigInt::compareToDouble):
1784         (JSC::JSBigInt::visitChildren): Deleted.
1785         (JSC::JSBigInt::finishCreation): Deleted.
1786         * runtime/JSBigInt.h:
1787
1788 2018-05-30  Yusuke Suzuki  <utatane.tea@gmail.com>
1789
1790         [DFG] InById should be converted to MatchStructure
1791         https://bugs.webkit.org/show_bug.cgi?id=185803
1792
1793         Reviewed by Keith Miller.
1794
1795         MatchStructure is introduced for instanceof optimization. But this node
1796         is also useful for InById node. This patch converts InById to MatchStructure
1797         node with CheckStructures if possible by using InByIdStatus.
1798
1799         Added microbenchmarks show improvements.
1800
1801                                    baseline                  patched
1802
1803         in-by-id-removed       18.1196+-0.8108     ^     16.1702+-0.9773        ^ definitely 1.1206x faster
1804         in-by-id-match         16.3912+-0.2608     ^     15.2736+-0.8173        ^ definitely 1.0732x faster
1805
1806         * JavaScriptCore.xcodeproj/project.pbxproj:
1807         * Sources.txt:
1808         * bytecode/InByIdStatus.cpp: Added.
1809         (JSC::InByIdStatus::appendVariant):
1810         (JSC::InByIdStatus::computeFor):
1811         (JSC::InByIdStatus::hasExitSite):
1812         (JSC::InByIdStatus::computeForStubInfo):
1813         (JSC::InByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
1814         (JSC::InByIdStatus::filter):
1815         (JSC::InByIdStatus::dump const):
1816         * bytecode/InByIdStatus.h: Added.
1817         (JSC::InByIdStatus::InByIdStatus):
1818         (JSC::InByIdStatus::state const):
1819         (JSC::InByIdStatus::isSet const):
1820         (JSC::InByIdStatus::operator bool const):
1821         (JSC::InByIdStatus::isSimple const):
1822         (JSC::InByIdStatus::numVariants const):
1823         (JSC::InByIdStatus::variants const):
1824         (JSC::InByIdStatus::at const):
1825         (JSC::InByIdStatus::operator[] const):
1826         (JSC::InByIdStatus::takesSlowPath const):
1827         * bytecode/InByIdVariant.cpp: Added.
1828         (JSC::InByIdVariant::InByIdVariant):
1829         (JSC::InByIdVariant::attemptToMerge):
1830         (JSC::InByIdVariant::dump const):
1831         (JSC::InByIdVariant::dumpInContext const):
1832         * bytecode/InByIdVariant.h: Added.
1833         (JSC::InByIdVariant::isSet const):
1834         (JSC::InByIdVariant::operator bool const):
1835         (JSC::InByIdVariant::structureSet const):
1836         (JSC::InByIdVariant::structureSet):
1837         (JSC::InByIdVariant::conditionSet const):
1838         (JSC::InByIdVariant::offset const):
1839         (JSC::InByIdVariant::isHit const):
1840         * bytecode/PolyProtoAccessChain.h:
1841         * dfg/DFGByteCodeParser.cpp:
1842         (JSC::DFG::ByteCodeParser::parseBlock):
1843
1844 2018-06-01  Keith Miller  <keith_miller@apple.com>
1845
1846         move should only emit the move if it's actually needed
1847         https://bugs.webkit.org/show_bug.cgi?id=186123
1848
1849         Reviewed by Saam Barati.
1850
1851         This patch relpaces move with moveToDestinationIfNeeded. This
1852         will prevent us from emiting moves to the same location. The old
1853         move, has been renamed to emitMove and made private.
1854
1855         * bytecompiler/BytecodeGenerator.cpp:
1856         (JSC::BytecodeGenerator::BytecodeGenerator):
1857         (JSC::BytecodeGenerator::emitMove):
1858         (JSC::BytecodeGenerator::emitGetGlobalPrivate):
1859         (JSC::BytecodeGenerator::emitGetAsyncIterator):
1860         (JSC::BytecodeGenerator::move): Deleted.
1861         * bytecompiler/BytecodeGenerator.h:
1862         (JSC::BytecodeGenerator::move):
1863         (JSC::BytecodeGenerator::moveToDestinationIfNeeded): Deleted.
1864         * bytecompiler/NodesCodegen.cpp:
1865         (JSC::ThisNode::emitBytecode):
1866         (JSC::SuperNode::emitBytecode):
1867         (JSC::NewTargetNode::emitBytecode):
1868         (JSC::ResolveNode::emitBytecode):
1869         (JSC::TaggedTemplateNode::emitBytecode):
1870         (JSC::ArrayNode::emitBytecode):
1871         (JSC::ObjectLiteralNode::emitBytecode):
1872         (JSC::EvalFunctionCallNode::emitBytecode):
1873         (JSC::FunctionCallResolveNode::emitBytecode):
1874         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect):
1875         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
1876         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByValDirect):
1877         (JSC::BytecodeIntrinsicNode::emit_intrinsic_toNumber):
1878         (JSC::BytecodeIntrinsicNode::emit_intrinsic_toString):
1879         (JSC::BytecodeIntrinsicNode::emit_intrinsic_toObject):
1880         (JSC::BytecodeIntrinsicNode::emit_intrinsic_idWithProfile):
1881         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isJSArray):
1882         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isProxyObject):
1883         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isRegExpObject):
1884         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isObject):
1885         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isDerivedArray):
1886         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isMap):
1887         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isSet):
1888         (JSC::CallFunctionCallDotNode::emitBytecode):
1889         (JSC::ApplyFunctionCallDotNode::emitBytecode):
1890         (JSC::emitPostIncOrDec):
1891         (JSC::PostfixNode::emitBracket):
1892         (JSC::PostfixNode::emitDot):
1893         (JSC::PrefixNode::emitResolve):
1894         (JSC::PrefixNode::emitBracket):
1895         (JSC::PrefixNode::emitDot):
1896         (JSC::LogicalOpNode::emitBytecode):
1897         (JSC::ReadModifyResolveNode::emitBytecode):
1898         (JSC::AssignResolveNode::emitBytecode):
1899         (JSC::AssignDotNode::emitBytecode):
1900         (JSC::AssignBracketNode::emitBytecode):
1901         (JSC::FunctionNode::emitBytecode):
1902         (JSC::ClassExprNode::emitBytecode):
1903         (JSC::DestructuringAssignmentNode::emitBytecode):
1904         (JSC::ArrayPatternNode::emitDirectBinding):
1905         (JSC::ObjectPatternNode::bindValue const):
1906         (JSC::AssignmentElementNode::bindValue const):
1907         (JSC::ObjectSpreadExpressionNode::emitBytecode):
1908
1909 2018-05-31  Yusuke Suzuki  <utatane.tea@gmail.com>
1910
1911         [Baseline] Store constant directly in emit_op_mov
1912         https://bugs.webkit.org/show_bug.cgi?id=186182
1913
1914         Reviewed by Saam Barati.
1915
1916         In the old code, we first move a constant to a register and store it to the specified address.
1917         But in 64bit JSC, we can directly store a constant to the specified address. This reduces the
1918         generated code size. Since the old code was emitting a constant in a code anyway, this change
1919         never increases the size of the generated code.
1920
1921         * jit/JITInlines.h:
1922         (JSC::JIT::emitGetVirtualRegister):
1923         We remove this obsolete comment. Our OSR relies on the fact that values are stored and loaded
1924         from the stack. If we transfer values in registers without loading values from the stack, it
1925         breaks this assumption.
1926
1927         * jit/JITOpcodes.cpp:
1928         (JSC::JIT::emit_op_mov):
1929
1930 2018-05-31  Caio Lima  <ticaiolima@gmail.com>
1931
1932         [ESNext][BigInt] Implement support for "=<" and ">=" relational operation
1933         https://bugs.webkit.org/show_bug.cgi?id=185929
1934
1935         Reviewed by Yusuke Suzuki.
1936
1937         This patch is introducing support to BigInt operands into ">=" and
1938         "<=" operators.
1939         Here we introduce ```bigIntCompareResult``` that is a helper function
1940         to reuse code between "less than" and "less than or equal" operators.
1941
1942         * runtime/JSBigInt.h:
1943         * runtime/Operations.h:
1944         (JSC::bigIntCompareResult):
1945         (JSC::bigIntCompare):
1946         (JSC::jsLess):
1947         (JSC::jsLessEq):
1948         (JSC::bigIntCompareLess): Deleted.
1949
1950 2018-05-31  Saam Barati  <sbarati@apple.com>
1951
1952         Cache toString results for CoW arrays
1953         https://bugs.webkit.org/show_bug.cgi?id=186160
1954
1955         Reviewed by Keith Miller.
1956
1957         This patch makes it so that we cache the result of toString on
1958         arrays with a CoW butterfly. This cache lives on Heap and is
1959         cleared after every GC. We only cache the toString result when
1960         the CoW butterfly doesn't have a hole (currently, all CoW arrays
1961         have a hole, but this isn't an invariant we want to rely on). The
1962         reason for this is that if there is a hole, the value may be loaded
1963         from the prototype, and the cache may produce a stale result.
1964         
1965         This is a ~4% speedup on the ML subtest in ARES. And is a ~1% overall
1966         progression on ARES.
1967
1968         * heap/Heap.cpp:
1969         (JSC::Heap::finalize):
1970         (JSC::Heap::addCoreConstraints):
1971         * heap/Heap.h:
1972         * runtime/ArrayPrototype.cpp:
1973         (JSC::canUseFastJoin):
1974         (JSC::holesMustForwardToPrototype):
1975         (JSC::isHole):
1976         (JSC::containsHole):
1977         (JSC::fastJoin):
1978         (JSC::arrayProtoFuncToString):
1979
1980 2018-05-31  Saam Barati  <sbarati@apple.com>
1981
1982         PutStructure AI rule needs to call didFoldClobberStructures when the incoming value's structure set is clear
1983         https://bugs.webkit.org/show_bug.cgi?id=186169
1984
1985         Reviewed by Mark Lam.
1986
1987         If we don't do this, the CFA validation rule about StructureID being
1988         clobbered but AI not clobbering or folding a clobber will cause us
1989         to crash. Simon was running into this yesterday on arstechnica.com.
1990         I couldn't come up with a test case for this, but it's obvious
1991         what the issue is by looking at the IR dump at the time of the crash.
1992
1993         * dfg/DFGAbstractInterpreterInlines.h:
1994         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1995
1996 2018-05-31  Saam Barati  <sbarati@apple.com>
1997
1998         JSImmutableButterfly should align its variable storage
1999         https://bugs.webkit.org/show_bug.cgi?id=186159
2000
2001         Reviewed by Mark Lam.
2002
2003         I'm also making the use of reinterpret_cast and bitwise_cast consistent
2004         inside of JSImmutableButterfly. I switched everything to use bitwise_cast.
2005
2006         * runtime/JSImmutableButterfly.h:
2007         (JSC::JSImmutableButterfly::toButterfly const):
2008         (JSC::JSImmutableButterfly::fromButterfly):
2009         (JSC::JSImmutableButterfly::offsetOfData):
2010         (JSC::JSImmutableButterfly::allocationSize):
2011
2012 2018-05-31  Keith Miller  <keith_miller@apple.com>
2013
2014         DFGArrayModes needs to know more about CoW arrays
2015         https://bugs.webkit.org/show_bug.cgi?id=186162
2016
2017         Reviewed by Filip Pizlo.
2018
2019         This patch fixes two issues in DFGArrayMode.
2020
2021         1) fromObserved was missing switch cases for when the only observed ArrayModes are CopyOnWrite.
2022         2) DFGArrayModes needs to track if the ArrayClass is an OriginalCopyOnWriteArray in order
2023         to vend an accurate original structure.
2024
2025         Additionally, this patch fixes some places in Bytecode parsing where we told the array mode
2026         we were doing a read but actually doing a write. Also, DFGArrayMode will now print the
2027         action it is expecting when being dumped.
2028
2029         * bytecode/ArrayProfile.h:
2030         (JSC::hasSeenWritableArray):
2031         * dfg/DFGArrayMode.cpp:
2032         (JSC::DFG::ArrayMode::fromObserved):
2033         (JSC::DFG::ArrayMode::refine const):
2034         (JSC::DFG::ArrayMode::originalArrayStructure const):
2035         (JSC::DFG::arrayActionToString):
2036         (JSC::DFG::arrayClassToString):
2037         (JSC::DFG::ArrayMode::dump const):
2038         (WTF::printInternal):
2039         * dfg/DFGArrayMode.h:
2040         (JSC::DFG::ArrayMode::withProfile const):
2041         (JSC::DFG::ArrayMode::isJSArray const):
2042         (JSC::DFG::ArrayMode::isJSArrayWithOriginalStructure const):
2043         (JSC::DFG::ArrayMode::arrayModesWithIndexingShape const):
2044         * dfg/DFGByteCodeParser.cpp:
2045         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
2046         (JSC::DFG::ByteCodeParser::parseBlock):
2047         * dfg/DFGFixupPhase.cpp:
2048         (JSC::DFG::FixupPhase::fixupNode):
2049         * dfg/DFGSpeculativeJIT.cpp:
2050         (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
2051         * ftl/FTLLowerDFGToB3.cpp:
2052         (JSC::FTL::DFG::LowerDFGToB3::isArrayTypeForArrayify):
2053
2054 2018-05-30  Yusuke Suzuki  <utatane.tea@gmail.com>
2055
2056         [JSC] Pass VM& parameter as much as possible
2057         https://bugs.webkit.org/show_bug.cgi?id=186085
2058
2059         Reviewed by Saam Barati.
2060
2061         JSCell::vm() is slow compared to ExecState::vm(). That's why we have bunch of functions in JSCell/JSObject that take VM& as a parameter.
2062         For example, we have JSCell::structure() and JSCell::structure(VM&), the former retrieves VM& from the cell and invokes structure(VM&).
2063         If we can get VM& from ExecState* or the other place, it reduces the inlined code size.
2064         This patch attempts to pass VM& parameter to such functions as much as possible.
2065
2066         * API/APICast.h:
2067         (toJS):
2068         (toJSForGC):
2069         * API/JSCallbackObjectFunctions.h:
2070         (JSC::JSCallbackObject<Parent>::getOwnPropertySlotByIndex):
2071         (JSC::JSCallbackObject<Parent>::deletePropertyByIndex):
2072         (JSC::JSCallbackObject<Parent>::staticFunctionGetter):
2073         * API/JSObjectRef.cpp:
2074         (JSObjectIsConstructor):
2075         * API/JSTypedArray.cpp:
2076         (JSObjectGetTypedArrayBuffer):
2077         * API/JSValueRef.cpp:
2078         (JSValueIsInstanceOfConstructor):
2079         * bindings/ScriptFunctionCall.cpp:
2080         (Deprecated::ScriptFunctionCall::call):
2081         * bindings/ScriptValue.cpp:
2082         (Inspector::jsToInspectorValue):
2083         * bytecode/AccessCase.cpp:
2084         (JSC::AccessCase::generateImpl):
2085         * bytecode/CodeBlock.cpp:
2086         (JSC::CodeBlock::CodeBlock):
2087         * bytecode/ObjectAllocationProfileInlines.h:
2088         (JSC::ObjectAllocationProfile::possibleDefaultPropertyCount):
2089         * bytecode/ObjectPropertyConditionSet.cpp:
2090         (JSC::generateConditionsForInstanceOf):
2091         * bytecode/PropertyCondition.cpp:
2092         (JSC::PropertyCondition::isWatchableWhenValid const):
2093         (JSC::PropertyCondition::attemptToMakeEquivalenceWithoutBarrier const):
2094         * bytecode/StructureStubClearingWatchpoint.cpp:
2095         (JSC::StructureStubClearingWatchpoint::fireInternal):
2096         * debugger/Debugger.cpp:
2097         (JSC::Debugger::detach):
2098         * debugger/DebuggerScope.cpp:
2099         (JSC::DebuggerScope::create):
2100         (JSC::DebuggerScope::put):
2101         (JSC::DebuggerScope::deleteProperty):
2102         (JSC::DebuggerScope::getOwnPropertyNames):
2103         (JSC::DebuggerScope::defineOwnProperty):
2104         * dfg/DFGAbstractInterpreterInlines.h:
2105         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2106         * dfg/DFGAbstractValue.cpp:
2107         (JSC::DFG::AbstractValue::mergeOSREntryValue):
2108         * dfg/DFGArgumentsEliminationPhase.cpp:
2109         * dfg/DFGArrayMode.cpp:
2110         (JSC::DFG::ArrayMode::refine const):
2111         * dfg/DFGByteCodeParser.cpp:
2112         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
2113         (JSC::DFG::ByteCodeParser::handleTypedArrayConstructor):
2114         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
2115         (JSC::DFG::ByteCodeParser::check):
2116         * dfg/DFGConstantFoldingPhase.cpp:
2117         (JSC::DFG::ConstantFoldingPhase::foldConstants):
2118         (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
2119         * dfg/DFGFixupPhase.cpp:
2120         (JSC::DFG::FixupPhase::fixupNode):
2121         * dfg/DFGGraph.cpp:
2122         (JSC::DFG::Graph::tryGetConstantProperty):
2123         * dfg/DFGOperations.cpp:
2124         * dfg/DFGSpeculativeJIT.cpp:
2125         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
2126         * dfg/DFGStrengthReductionPhase.cpp:
2127         (JSC::DFG::StrengthReductionPhase::handleNode):
2128         * ftl/FTLLowerDFGToB3.cpp:
2129         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
2130         * ftl/FTLOperations.cpp:
2131         (JSC::FTL::operationPopulateObjectInOSR):
2132         * inspector/InjectedScriptManager.cpp:
2133         (Inspector::InjectedScriptManager::createInjectedScript):
2134         * inspector/JSJavaScriptCallFrame.cpp:
2135         (Inspector::JSJavaScriptCallFrame::caller const):
2136         (Inspector::JSJavaScriptCallFrame::scopeChain const):
2137         * interpreter/CallFrame.cpp:
2138         (JSC::CallFrame::wasmAwareLexicalGlobalObject):
2139         * interpreter/Interpreter.cpp:
2140         (JSC::Interpreter::executeProgram):
2141         (JSC::Interpreter::executeCall):
2142         (JSC::Interpreter::executeConstruct):
2143         (JSC::Interpreter::execute):
2144         (JSC::Interpreter::executeModuleProgram):
2145         * jit/JITOperations.cpp:
2146         (JSC::getByVal):
2147         * jit/Repatch.cpp:
2148         (JSC::tryCacheInByID):
2149         * jsc.cpp:
2150         (functionDollarAgentReceiveBroadcast):
2151         (functionHasCustomProperties):
2152         * llint/LLIntSlowPaths.cpp:
2153         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2154         (JSC::LLInt::setupGetByIdPrototypeCache):
2155         (JSC::LLInt::getByVal):
2156         (JSC::LLInt::handleHostCall):
2157         (JSC::LLInt::llint_throw_stack_overflow_error):
2158         * runtime/AbstractModuleRecord.cpp:
2159         (JSC::AbstractModuleRecord::finishCreation):
2160         * runtime/ArrayConstructor.cpp:
2161         (JSC::constructArrayWithSizeQuirk):
2162         * runtime/ArrayPrototype.cpp:
2163         (JSC::speciesWatchpointIsValid):
2164         (JSC::arrayProtoFuncToString):
2165         (JSC::arrayProtoFuncToLocaleString):
2166         (JSC::ArrayPrototype::tryInitializeSpeciesWatchpoint):
2167         * runtime/AsyncFunctionConstructor.cpp:
2168         (JSC::callAsyncFunctionConstructor):
2169         (JSC::constructAsyncFunctionConstructor):
2170         * runtime/AsyncGeneratorFunctionConstructor.cpp:
2171         (JSC::callAsyncGeneratorFunctionConstructor):
2172         (JSC::constructAsyncGeneratorFunctionConstructor):
2173         * runtime/BooleanConstructor.cpp:
2174         (JSC::constructWithBooleanConstructor):
2175         * runtime/ClonedArguments.cpp:
2176         (JSC::ClonedArguments::createEmpty):
2177         (JSC::ClonedArguments::createWithInlineFrame):
2178         (JSC::ClonedArguments::createWithMachineFrame):
2179         (JSC::ClonedArguments::createByCopyingFrom):
2180         (JSC::ClonedArguments::getOwnPropertySlot):
2181         (JSC::ClonedArguments::materializeSpecials):
2182         * runtime/CommonSlowPaths.cpp:
2183         (JSC::SLOW_PATH_DECL):
2184         * runtime/CommonSlowPaths.h:
2185         (JSC::CommonSlowPaths::tryCachePutToScopeGlobal):
2186         (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal):
2187         (JSC::CommonSlowPaths::canAccessArgumentIndexQuickly):
2188         * runtime/ConstructData.cpp:
2189         (JSC::construct):
2190         * runtime/DateConstructor.cpp:
2191         (JSC::constructWithDateConstructor):
2192         * runtime/DatePrototype.cpp:
2193         (JSC::dateProtoFuncToJSON):
2194         * runtime/DirectArguments.cpp:
2195         (JSC::DirectArguments::overrideThings):
2196         * runtime/Error.cpp:
2197         (JSC::getStackTrace):
2198         * runtime/ErrorConstructor.cpp:
2199         (JSC::Interpreter::constructWithErrorConstructor):
2200         (JSC::Interpreter::callErrorConstructor):
2201         * runtime/FunctionConstructor.cpp:
2202         (JSC::constructWithFunctionConstructor):
2203         (JSC::callFunctionConstructor):
2204         * runtime/GeneratorFunctionConstructor.cpp:
2205         (JSC::callGeneratorFunctionConstructor):
2206         (JSC::constructGeneratorFunctionConstructor):
2207         * runtime/GenericArgumentsInlines.h:
2208         (JSC::GenericArguments<Type>::getOwnPropertySlot):
2209         * runtime/InferredStructureWatchpoint.cpp:
2210         (JSC::InferredStructureWatchpoint::fireInternal):
2211         * runtime/InferredType.cpp:
2212         (JSC::InferredType::removeStructure):
2213         * runtime/InferredType.h:
2214         * runtime/InferredTypeInlines.h:
2215         (JSC::InferredType::finalizeUnconditionally):
2216         * runtime/IntlCollator.cpp:
2217         (JSC::IntlCollator::initializeCollator):
2218         * runtime/IntlCollatorConstructor.cpp:
2219         (JSC::IntlCollatorConstructorFuncSupportedLocalesOf):
2220         * runtime/IntlCollatorPrototype.cpp:
2221         (JSC::IntlCollatorPrototypeGetterCompare):
2222         * runtime/IntlDateTimeFormat.cpp:
2223         (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
2224         (JSC::IntlDateTimeFormat::formatToParts):
2225         * runtime/IntlDateTimeFormatConstructor.cpp:
2226         (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf):
2227         * runtime/IntlDateTimeFormatPrototype.cpp:
2228         (JSC::IntlDateTimeFormatPrototypeGetterFormat):
2229         * runtime/IntlNumberFormat.cpp:
2230         (JSC::IntlNumberFormat::initializeNumberFormat):
2231         (JSC::IntlNumberFormat::formatToParts):
2232         * runtime/IntlNumberFormatConstructor.cpp:
2233         (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf):
2234         * runtime/IntlNumberFormatPrototype.cpp:
2235         (JSC::IntlNumberFormatPrototypeGetterFormat):
2236         * runtime/IntlObject.cpp:
2237         (JSC::canonicalizeLocaleList):
2238         (JSC::defaultLocale):
2239         (JSC::lookupSupportedLocales):
2240         (JSC::intlObjectFuncGetCanonicalLocales):
2241         * runtime/IntlPluralRules.cpp:
2242         (JSC::IntlPluralRules::initializePluralRules):
2243         (JSC::IntlPluralRules::resolvedOptions):
2244         * runtime/IntlPluralRulesConstructor.cpp:
2245         (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf):
2246         * runtime/IteratorOperations.cpp:
2247         (JSC::iteratorNext):
2248         (JSC::iteratorClose):
2249         (JSC::iteratorForIterable):
2250         * runtime/JSArray.cpp:
2251         (JSC::JSArray::shiftCountWithArrayStorage):
2252         (JSC::JSArray::unshiftCountWithArrayStorage):
2253         (JSC::JSArray::isIteratorProtocolFastAndNonObservable):
2254         * runtime/JSArrayBufferConstructor.cpp:
2255         (JSC::JSArrayBufferConstructor::finishCreation):
2256         (JSC::constructArrayBuffer):
2257         * runtime/JSArrayBufferPrototype.cpp:
2258         (JSC::arrayBufferProtoFuncSlice):
2259         * runtime/JSArrayBufferView.cpp:
2260         (JSC::JSArrayBufferView::unsharedJSBuffer):
2261         (JSC::JSArrayBufferView::possiblySharedJSBuffer):
2262         * runtime/JSAsyncFunction.cpp:
2263         (JSC::JSAsyncFunction::createImpl):
2264         (JSC::JSAsyncFunction::create):
2265         (JSC::JSAsyncFunction::createWithInvalidatedReallocationWatchpoint):
2266         * runtime/JSAsyncGeneratorFunction.cpp:
2267         (JSC::JSAsyncGeneratorFunction::createImpl):
2268         (JSC::JSAsyncGeneratorFunction::create):
2269         (JSC::JSAsyncGeneratorFunction::createWithInvalidatedReallocationWatchpoint):
2270         * runtime/JSBoundFunction.cpp:
2271         (JSC::boundThisNoArgsFunctionCall):
2272         (JSC::boundFunctionCall):
2273         (JSC::boundThisNoArgsFunctionConstruct):
2274         (JSC::boundFunctionConstruct):
2275         (JSC::getBoundFunctionStructure):
2276         (JSC::JSBoundFunction::create):
2277         (JSC::JSBoundFunction::boundArgsCopy):
2278         * runtime/JSCJSValue.cpp:
2279         (JSC::JSValue::putToPrimitive):
2280         * runtime/JSCellInlines.h:
2281         (JSC::JSCell::setStructure):
2282         (JSC::JSCell::methodTable const):
2283         (JSC::JSCell::toBoolean const):
2284         * runtime/JSFunction.h:
2285         (JSC::JSFunction::createImpl):
2286         * runtime/JSGeneratorFunction.cpp:
2287         (JSC::JSGeneratorFunction::createImpl):
2288         (JSC::JSGeneratorFunction::create):
2289         (JSC::JSGeneratorFunction::createWithInvalidatedReallocationWatchpoint):
2290         * runtime/JSGenericTypedArrayViewConstructorInlines.h:
2291         (JSC::constructGenericTypedArrayViewWithArguments):
2292         (JSC::constructGenericTypedArrayView):
2293         * runtime/JSGenericTypedArrayViewInlines.h:
2294         (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex):
2295         (JSC::JSGenericTypedArrayView<Adaptor>::putByIndex):
2296         (JSC::JSGenericTypedArrayView<Adaptor>::deletePropertyByIndex):
2297         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory):
2298         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
2299         (JSC::genericTypedArrayViewProtoFuncSlice):
2300         (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
2301         * runtime/JSGlobalObject.cpp:
2302         (JSC::JSGlobalObject::init):
2303         (JSC::JSGlobalObject::exposeDollarVM):
2304         (JSC::JSGlobalObject::finishCreation):
2305         * runtime/JSGlobalObject.h:
2306         * runtime/JSGlobalObjectFunctions.cpp:
2307         (JSC::globalFuncEval):
2308         * runtime/JSInternalPromise.cpp:
2309         (JSC::JSInternalPromise::then):
2310         * runtime/JSInternalPromiseConstructor.cpp:
2311         (JSC::constructPromise):
2312         * runtime/JSJob.cpp:
2313         (JSC::JSJobMicrotask::run):
2314         * runtime/JSLexicalEnvironment.cpp:
2315         (JSC::JSLexicalEnvironment::getOwnPropertySlot):
2316         (JSC::JSLexicalEnvironment::put):
2317         * runtime/JSMap.cpp:
2318         (JSC::JSMap::isIteratorProtocolFastAndNonObservable):
2319         * runtime/JSMapIterator.cpp:
2320         (JSC::JSMapIterator::createPair):
2321         * runtime/JSModuleLoader.cpp:
2322         (JSC::JSModuleLoader::provideFetch):
2323         (JSC::JSModuleLoader::loadAndEvaluateModule):
2324         (JSC::JSModuleLoader::loadModule):
2325         (JSC::JSModuleLoader::linkAndEvaluateModule):
2326         (JSC::JSModuleLoader::requestImportModule):
2327         * runtime/JSONObject.cpp:
2328         (JSC::JSONProtoFuncParse):
2329         * runtime/JSObject.cpp:
2330         (JSC::JSObject::putInlineSlow):
2331         (JSC::JSObject::putByIndex):
2332         (JSC::JSObject::notifyPresenceOfIndexedAccessors):
2333         (JSC::JSObject::createInitialIndexedStorage):
2334         (JSC::JSObject::createArrayStorage):
2335         (JSC::JSObject::convertUndecidedToArrayStorage):
2336         (JSC::JSObject::convertInt32ToArrayStorage):
2337         (JSC::JSObject::convertDoubleToArrayStorage):
2338         (JSC::JSObject::convertContiguousToArrayStorage):
2339         (JSC::JSObject::convertFromCopyOnWrite):
2340         (JSC::JSObject::ensureWritableInt32Slow):
2341         (JSC::JSObject::ensureWritableDoubleSlow):
2342         (JSC::JSObject::ensureWritableContiguousSlow):
2343         (JSC::JSObject::ensureArrayStorageSlow):
2344         (JSC::JSObject::setPrototypeDirect):
2345         (JSC::JSObject::deleteProperty):
2346         (JSC::callToPrimitiveFunction):
2347         (JSC::JSObject::hasInstance):
2348         (JSC::JSObject::getOwnNonIndexPropertyNames):
2349         (JSC::JSObject::preventExtensions):
2350         (JSC::JSObject::isExtensible):
2351         (JSC::JSObject::reifyAllStaticProperties):
2352         (JSC::JSObject::fillGetterPropertySlot):
2353         (JSC::JSObject::defineOwnIndexedProperty):
2354         (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes):
2355         (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
2356         (JSC::JSObject::putByIndexBeyondVectorLength):
2357         (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
2358         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength):
2359         (JSC::JSObject::getNewVectorLength):
2360         (JSC::JSObject::increaseVectorLength):
2361         (JSC::JSObject::reallocateAndShrinkButterfly):
2362         (JSC::JSObject::shiftButterflyAfterFlattening):
2363         (JSC::JSObject::anyObjectInChainMayInterceptIndexedAccesses const):
2364         (JSC::JSObject::prototypeChainMayInterceptStoreTo):
2365         (JSC::JSObject::needsSlowPutIndexing const):
2366         (JSC::JSObject::suggestedArrayStorageTransition const):
2367         * runtime/JSObject.h:
2368         (JSC::JSObject::mayInterceptIndexedAccesses):
2369         (JSC::JSObject::hasIndexingHeader const):
2370         (JSC::JSObject::hasCustomProperties):
2371         (JSC::JSObject::hasGetterSetterProperties):
2372         (JSC::JSObject::hasCustomGetterSetterProperties):
2373         (JSC::JSObject::isExtensibleImpl):
2374         (JSC::JSObject::isStructureExtensible):
2375         (JSC::JSObject::indexingShouldBeSparse):
2376         (JSC::JSObject::staticPropertiesReified):
2377         (JSC::JSObject::globalObject const):
2378         (JSC::JSObject::finishCreation):
2379         (JSC::JSNonFinalObject::finishCreation):
2380         (JSC::getCallData):
2381         (JSC::getConstructData):
2382         (JSC::JSObject::getOwnNonIndexPropertySlot):
2383         (JSC::JSObject::putOwnDataProperty):
2384         (JSC::JSObject::putOwnDataPropertyMayBeIndex):
2385         (JSC::JSObject::butterflyPreCapacity):
2386         (JSC::JSObject::butterflyTotalSize):
2387         * runtime/JSObjectInlines.h:
2388         (JSC::JSObject::putDirectInternal):
2389         * runtime/JSPromise.cpp:
2390         (JSC::JSPromise::initialize):
2391         (JSC::JSPromise::resolve):
2392         * runtime/JSPromiseConstructor.cpp:
2393         (JSC::constructPromise):
2394         * runtime/JSPromiseDeferred.cpp:
2395         (JSC::newPromiseCapability):
2396         (JSC::callFunction):
2397         * runtime/JSScope.cpp:
2398         (JSC::abstractAccess):
2399         * runtime/JSScope.h:
2400         (JSC::JSScope::globalObject): Deleted.
2401         Remove this JSScope::globalObject function since it is completely the same to JSObject::globalObject().
2402
2403         * runtime/JSSet.cpp:
2404         (JSC::JSSet::isIteratorProtocolFastAndNonObservable):
2405         * runtime/JSSetIterator.cpp:
2406         (JSC::JSSetIterator::createPair):
2407         * runtime/JSStringIterator.cpp:
2408         (JSC::JSStringIterator::clone):
2409         * runtime/Lookup.cpp:
2410         (JSC::reifyStaticAccessor):
2411         (JSC::setUpStaticFunctionSlot):
2412         * runtime/Lookup.h:
2413         (JSC::getStaticPropertySlotFromTable):
2414         (JSC::replaceStaticPropertySlot):
2415         (JSC::reifyStaticProperty):
2416         * runtime/MapConstructor.cpp:
2417         (JSC::constructMap):
2418         * runtime/NumberConstructor.cpp:
2419         (JSC::NumberConstructor::finishCreation):
2420         * runtime/ObjectConstructor.cpp:
2421         (JSC::constructObject):
2422         (JSC::objectConstructorAssign):
2423         (JSC::toPropertyDescriptor):
2424         * runtime/ObjectPrototype.cpp:
2425         (JSC::objectProtoFuncDefineGetter):
2426         (JSC::objectProtoFuncDefineSetter):
2427         (JSC::objectProtoFuncToLocaleString):
2428         * runtime/Operations.cpp:
2429         (JSC::jsIsFunctionType): Deleted.
2430         Replace it with JSValue::isFunction(VM&).
2431
2432         * runtime/Operations.h:
2433         * runtime/ProgramExecutable.cpp:
2434         (JSC::ProgramExecutable::initializeGlobalProperties):
2435         * runtime/RegExpConstructor.cpp:
2436         (JSC::constructWithRegExpConstructor):
2437         (JSC::callRegExpConstructor):
2438         * runtime/SamplingProfiler.cpp:
2439         (JSC::SamplingProfiler::processUnverifiedStackTraces):
2440         (JSC::SamplingProfiler::StackFrame::nameFromCallee):
2441         * runtime/ScopedArguments.cpp:
2442         (JSC::ScopedArguments::overrideThings):
2443         * runtime/ScriptExecutable.cpp:
2444         (JSC::ScriptExecutable::newCodeBlockFor):
2445         (JSC::ScriptExecutable::prepareForExecutionImpl):
2446         * runtime/SetConstructor.cpp:
2447         (JSC::constructSet):
2448         * runtime/SparseArrayValueMap.cpp:
2449         (JSC::SparseArrayValueMap::putEntry):
2450         (JSC::SparseArrayValueMap::putDirect):
2451         * runtime/StringConstructor.cpp:
2452         (JSC::constructWithStringConstructor):
2453         * runtime/StringPrototype.cpp:
2454         (JSC::replaceUsingRegExpSearch):
2455         (JSC::replaceUsingStringSearch):
2456         (JSC::stringProtoFuncIterator):
2457         * runtime/Structure.cpp:
2458         (JSC::Structure::materializePropertyTable):
2459         (JSC::Structure::willStoreValueSlow):
2460         * runtime/StructureCache.cpp:
2461         (JSC::StructureCache::emptyStructureForPrototypeFromBaseStructure):
2462         * runtime/StructureInlines.h:
2463         (JSC::Structure::get):
2464         * runtime/WeakMapConstructor.cpp:
2465         (JSC::constructWeakMap):
2466         * runtime/WeakSetConstructor.cpp:
2467         (JSC::constructWeakSet):
2468         * tools/HeapVerifier.cpp:
2469         (JSC::HeapVerifier::reportCell):
2470         * tools/JSDollarVM.cpp:
2471         (JSC::functionGlobalObjectForObject):
2472         (JSC::JSDollarVM::finishCreation):
2473         * wasm/js/JSWebAssemblyInstance.cpp:
2474         (JSC::JSWebAssemblyInstance::finalizeCreation):
2475         * wasm/js/WasmToJS.cpp:
2476         (JSC::Wasm::handleBadI64Use):
2477         (JSC::Wasm::wasmToJSException):
2478         * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
2479         (JSC::constructJSWebAssemblyCompileError):
2480         (JSC::callJSWebAssemblyCompileError):
2481         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
2482         (JSC::constructJSWebAssemblyLinkError):
2483         (JSC::callJSWebAssemblyLinkError):
2484         * wasm/js/WebAssemblyModuleRecord.cpp:
2485         (JSC::WebAssemblyModuleRecord::evaluate):
2486         * wasm/js/WebAssemblyPrototype.cpp:
2487         (JSC::instantiate):
2488         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
2489         (JSC::constructJSWebAssemblyRuntimeError):
2490         (JSC::callJSWebAssemblyRuntimeError):
2491         * wasm/js/WebAssemblyToJSCallee.cpp:
2492         (JSC::WebAssemblyToJSCallee::create):
2493
2494 2018-05-30  Saam Barati  <sbarati@apple.com>
2495
2496         DFG combined liveness needs to say that the machine CodeBlock's arguments are live
2497         https://bugs.webkit.org/show_bug.cgi?id=186121
2498         <rdar://problem/39377796>
2499
2500         Reviewed by Keith Miller.
2501
2502         DFG's combined liveness was reporting that the machine CodeBlock's |this|
2503         argument was dead at certain points in the program. However, a CodeBlock's
2504         arguments are considered live for the entire function. This fixes a bug
2505         where object allocation sinking phase skipped materializing an allocation
2506         because it thought that the argument it was associated with, |this|, was dead.
2507
2508         * dfg/DFGCombinedLiveness.cpp:
2509         (JSC::DFG::liveNodesAtHead):
2510
2511 2018-05-30  Daniel Bates  <dabates@apple.com>
2512
2513         Web Inspector: Annotate Same-Site cookies
2514         https://bugs.webkit.org/show_bug.cgi?id=184897
2515         <rdar://problem/35178209>
2516
2517         Reviewed by Brian Burg.
2518
2519         Update protocol to include cookie Same-Site policy.
2520
2521         * inspector/protocol/Page.json:
2522
2523 2018-05-29  Keith Miller  <keith_miller@apple.com>
2524
2525         Error instances should not strongly hold onto StackFrames
2526         https://bugs.webkit.org/show_bug.cgi?id=185996
2527
2528         Reviewed by Mark Lam.
2529
2530         Previously, we would hold onto all the StackFrames until the the user
2531         looked at one of the properties on the Error object. This patch makes us
2532         only weakly retain the StackFrames and collect all the information
2533         if we are about to collect any frame.
2534
2535         This patch also adds a method to $vm that returns the heaps count
2536         of live global objects.
2537
2538         * heap/Heap.cpp:
2539         (JSC::Heap::finalizeUnconditionalFinalizers):
2540         * interpreter/Interpreter.cpp:
2541         (JSC::Interpreter::stackTraceAsString):
2542         * interpreter/Interpreter.h:
2543         * runtime/Error.cpp:
2544         (JSC::addErrorInfo):
2545         * runtime/ErrorInstance.cpp:
2546         (JSC::ErrorInstance::finalizeUnconditionally):
2547         (JSC::ErrorInstance::computeErrorInfo):
2548         (JSC::ErrorInstance::materializeErrorInfoIfNeeded):
2549         (JSC::ErrorInstance::visitChildren): Deleted.
2550         * runtime/ErrorInstance.h:
2551         (JSC::ErrorInstance::subspaceFor):
2552         * runtime/JSFunction.cpp:
2553         (JSC::getCalculatedDisplayName):
2554         * runtime/StackFrame.h:
2555         (JSC::StackFrame::isMarked const):
2556         * runtime/VM.cpp:
2557         (JSC::VM::VM):
2558         * runtime/VM.h:
2559         * tools/JSDollarVM.cpp:
2560         (JSC::functionGlobalObjectCount):
2561         (JSC::JSDollarVM::finishCreation):
2562
2563 2018-05-30  Keith Miller  <keith_miller@apple.com>
2564
2565         LLInt get_by_id prototype caching doesn't properly handle changes
2566         https://bugs.webkit.org/show_bug.cgi?id=186112
2567
2568         Reviewed by Filip Pizlo.
2569
2570         The caching would sometimes fail to track that a prototype had changed
2571         and wouldn't update its set of watchpoints.
2572
2573         * bytecode/CodeBlock.cpp:
2574         (JSC::CodeBlock::finalizeLLIntInlineCaches):
2575         * bytecode/CodeBlock.h:
2576         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
2577         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::key const):
2578         * bytecode/ObjectPropertyConditionSet.h:
2579         (JSC::ObjectPropertyConditionSet::size const):
2580         * bytecode/Watchpoint.h:
2581         (JSC::Watchpoint::Watchpoint): Deleted.
2582         * llint/LLIntSlowPaths.cpp:
2583         (JSC::LLInt::setupGetByIdPrototypeCache):
2584
2585 2018-05-30  Caio Lima  <ticaiolima@gmail.com>
2586
2587         [ESNext][BigInt] Implement support for "%" operation
2588         https://bugs.webkit.org/show_bug.cgi?id=184327
2589
2590         Reviewed by Yusuke Suzuki.
2591
2592         We are introducing the support of BigInt into remainder (a.k.a mod)
2593         operation.
2594
2595         * runtime/CommonSlowPaths.cpp:
2596         (JSC::SLOW_PATH_DECL):
2597         * runtime/JSBigInt.cpp:
2598         (JSC::JSBigInt::remainder):
2599         (JSC::JSBigInt::rightTrim):
2600         * runtime/JSBigInt.h:
2601
2602 2018-05-30  Saam Barati  <sbarati@apple.com>
2603
2604         AI for Atomics.load() is too conservative in always clobbering world
2605         https://bugs.webkit.org/show_bug.cgi?id=185738
2606         <rdar://problem/40342214>
2607
2608         Reviewed by Yusuke Suzuki.
2609
2610         It fails the assertion that Fil added for catching disagreements between
2611         AI and clobberize. This patch fixes that. You'd run into this if you
2612         manually enabled SAB in a build and ran any SAB tests.
2613
2614         * dfg/DFGAbstractInterpreterInlines.h:
2615         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2616
2617 2018-05-30  Michael Saboff  <msaboff@apple.com>
2618
2619         REGRESSION(r232212): Broke Win32 Builds
2620         https://bugs.webkit.org/show_bug.cgi?id=186061
2621
2622         Reviewed by Yusuke Suzuki.
2623
2624         Changed Windows builds with the JIT disabled to generate and use LLIntAssembly.h
2625         instead of LowLevelInterpreterWin.asm.
2626
2627         * CMakeLists.txt:
2628
2629 2018-05-30  Dominik Infuehr  <dinfuehr@igalia.com>
2630
2631         [MIPS] Fix build on MIPS32r1
2632         https://bugs.webkit.org/show_bug.cgi?id=185944
2633
2634         Reviewed by Yusuke Suzuki.
2635
2636         Only use instructions on MIPS32r2 or later. mthc1 and mfhc1 are not supported
2637         on MIPS32r1.
2638
2639         * offlineasm/mips.rb:
2640
2641 2018-05-29  Saam Barati  <sbarati@apple.com>
2642
2643         Add a version of JSVirtualMachine shrinkFootprint that runs when the VM goes idle
2644         https://bugs.webkit.org/show_bug.cgi?id=186064
2645
2646         Reviewed by Mark Lam.
2647
2648         shrinkFootprint was implemented as:
2649         ```
2650         sanitizeStackForVM(this);
2651         deleteAllCode(DeleteAllCodeIfNotCollecting);
2652         heap.collectNow(Synchronousness::Sync);
2653         WTF::releaseFastMallocFreeMemory();
2654         ```
2655         
2656         However, for correctness reasons, deleteAllCode is implemented to do
2657         work when the VM is idle: no JS is running on the stack. This means
2658         that if shrinkFootprint is called when JS is running on the stack, it
2659         ends up freeing less memory than it could have if it waited to run until
2660         the VM goes idle.
2661         
2662         This patch makes it so we wait until idle before doing work. I'm seeing a
2663         10% footprint progression when testing this against a client of the JSC SPI.
2664         
2665         Because this is a semantic change in how the SPI works, this patch
2666         adds new SPI named shrinkFootprintWhenIdle. The plan is to move
2667         all clients of the shrinkFootprint SPI to shrinkFootprintWhenIdle.
2668         Once that happens, we will delete shrinkFootprint. Until then,
2669         we make shrinkFootprint do exactly what shrinkFootprintWhenIdle does.
2670
2671         * API/JSVirtualMachine.mm:
2672         (-[JSVirtualMachine shrinkFootprint]):
2673         (-[JSVirtualMachine shrinkFootprintWhenIdle]):
2674         * API/JSVirtualMachinePrivate.h:
2675         * runtime/VM.cpp:
2676         (JSC::VM::shrinkFootprintWhenIdle):
2677         (JSC::VM::shrinkFootprint): Deleted.
2678         * runtime/VM.h:
2679
2680 2018-05-29  Saam Barati  <sbarati@apple.com>
2681
2682         shrinkFootprint needs to request a full collection
2683         https://bugs.webkit.org/show_bug.cgi?id=186069
2684
2685         Reviewed by Mark Lam.
2686
2687         * runtime/VM.cpp:
2688         (JSC::VM::shrinkFootprint):
2689
2690 2018-05-29  Caio Lima  <ticaiolima@gmail.com>
2691
2692         [ESNext][BigInt] Implement support for "<" and ">" relational operation
2693         https://bugs.webkit.org/show_bug.cgi?id=185379
2694
2695         Reviewed by Yusuke Suzuki.
2696
2697         This patch is changing the ``jsLess``` operation to follow the
2698         semantics of Abstract Relational Comparison[1] that supports BigInt.
2699         For that, we create 2 new helper functions ```bigIntCompareLess``` and
2700         ```toPrimitiveNumeric``` that considers BigInt as a valid type to be
2701         compared.
2702
2703         [1] - https://tc39.github.io/proposal-bigint/#sec-abstract-relational-comparison
2704
2705         * runtime/JSBigInt.cpp:
2706         (JSC::JSBigInt::unequalSign):
2707         (JSC::JSBigInt::absoluteGreater):
2708         (JSC::JSBigInt::absoluteLess):
2709         (JSC::JSBigInt::compare):
2710         (JSC::JSBigInt::absoluteCompare):
2711         * runtime/JSBigInt.h:
2712         * runtime/JSCJSValueInlines.h:
2713         (JSC::JSValue::isPrimitive const):
2714         * runtime/Operations.h:
2715         (JSC::bigIntCompareLess):
2716         (JSC::toPrimitiveNumeric):
2717         (JSC::jsLess):
2718
2719 2018-05-29  Yusuke Suzuki  <utatane.tea@gmail.com>
2720
2721         [Baseline] Merge loading functionalities
2722         https://bugs.webkit.org/show_bug.cgi?id=185907
2723
2724         Reviewed by Saam Barati.
2725
2726         This patch unifies emitXXXLoad functions in 32bit and 64bit.
2727
2728         * jit/JITInlines.h:
2729         (JSC::JIT::emitDoubleGetByVal):
2730         * jit/JITPropertyAccess.cpp:
2731         (JSC::JIT::emitDoubleLoad):
2732         (JSC::JIT::emitContiguousLoad):
2733         (JSC::JIT::emitArrayStorageLoad):
2734         (JSC::JIT::emitIntTypedArrayGetByVal):
2735         (JSC::JIT::emitFloatTypedArrayGetByVal):
2736         Define register usage first, and share the same code in 32bit and 64bit.
2737
2738         * jit/JITPropertyAccess32_64.cpp:
2739         (JSC::JIT::emitSlow_op_put_by_val):
2740         Now C-stack is always enabled in JIT platform and temporary registers increases from 5 to 6 in x86.
2741         We can remove this special handling.
2742
2743         (JSC::JIT::emitContiguousLoad): Deleted.
2744         (JSC::JIT::emitDoubleLoad): Deleted.
2745         (JSC::JIT::emitArrayStorageLoad): Deleted.
2746
2747 2018-05-29  Saam Barati  <sbarati@apple.com>
2748
2749         JSC should put bmalloc's scavenger into mini mode
2750         https://bugs.webkit.org/show_bug.cgi?id=185988
2751
2752         Reviewed by Michael Saboff.
2753
2754         When we InitializeThreading, we'll now enable bmalloc's mini mode
2755         if the VM is in mini mode. This is an 8-10% progression on the footprint
2756         at end score in run-testmem, making it a 4-5% memory score progression.
2757         It's between a 0-1% regression in its time score.
2758
2759         * runtime/InitializeThreading.cpp:
2760         (JSC::initializeThreading):
2761
2762 2018-05-29  Caitlin Potter  <caitp@igalia.com>
2763
2764         [JSC] Fix Array.prototype.concat fast case when single argument is Proxy
2765         https://bugs.webkit.org/show_bug.cgi?id=184267
2766
2767         Reviewed by Saam Barati.
2768
2769         Before this patch, the fast case for Array.prototype.concat was taken if
2770         there was a single argument passed to the function, which is either a
2771         non-JSCell, or an ObjectType JSCell not marked as concat-spreadable.
2772         This incorrectly prevented Proxy objects from being spread when
2773         they were the only argument passed to A.prototype.concat(), violating ECMA-262.
2774
2775         * builtins/ArrayPrototype.js:
2776         (concat):
2777
2778 2018-05-27  Yusuke Suzuki  <utatane.tea@gmail.com>
2779
2780         [JSC] JSBigInt::digitDiv has undefined behavior which causes test failures
2781         https://bugs.webkit.org/show_bug.cgi?id=186022
2782
2783         Reviewed by Darin Adler.
2784
2785         digitDiv performs Value64Bit >> 64 / Value32Bit >> 32, which is undefined behavior. And zero mask
2786         creation has an issue (`s` should be casted to signed one before negating). They cause test failures
2787         in non x86 / x86_64 environments. x86 and x86_64 work well since they have a fast path written
2788         in asm.
2789
2790         This patch fixes digitDiv by carefully avoiding undefined behaviors. We mask the left value of the
2791         rshift with `digitBits - 1`, which makes `digitBits` 0 while it keeps 0 <= n < digitBits values.
2792         This makes the target rshift well-defined in C++. While produced value by the rshift covers 0 <= `s` < 64 (32
2793         in 32bit envirnoment) cases, this rshift does not shift if `s` is 0. sZeroMask clears the value
2794         if `s` is 0, so that `s == 0` case is also covered. Note that `s == 64` never happens since `divisor`
2795         is never 0 here. We add assertion for that. We also fixes `sZeroMask` calculation.
2796
2797         This patch also fixes naming convention for constant values.
2798
2799         * runtime/JSBigInt.cpp:
2800         (JSC::JSBigInt::digitMul):
2801         (JSC::JSBigInt::digitDiv):
2802         * runtime/JSBigInt.h:
2803
2804 2018-05-27  Yusuke Suzuki  <utatane.tea@gmail.com>
2805
2806         [WTF] Add clz32 / clz64 for MSVC
2807         https://bugs.webkit.org/show_bug.cgi?id=186023
2808
2809         Reviewed by Daniel Bates.
2810
2811         Move clz32 and clz64 to WTF.
2812
2813         * runtime/MathCommon.h:
2814         (JSC::clz32): Deleted.
2815         (JSC::clz64): Deleted.
2816
2817 2018-05-27  Caio Lima  <ticaiolima@gmail.com>
2818
2819         [ESNext][BigInt] Implement "+" and "-" unary operation
2820         https://bugs.webkit.org/show_bug.cgi?id=182214
2821
2822         Reviewed by Yusuke Suzuki.
2823
2824         This Patch is implementing support to "-" unary operation on BigInt.
2825         It is also changing the logic of ASTBuilder::makeNegateNode to
2826         calculate BigInt literals with properly sign, avoiding
2827         unecessary operation. It required a refactoring into
2828         JSBigInt::parseInt to consider the sign as parameter.
2829
2830         We are also introducing a new DFG Node called ValueNegate to handle BigInt negate
2831         operations. With the introduction of BigInt, it is not true
2832         that every negate operation returns a Number. As ArithNegate is a
2833         node that considers its result is always a Number, like all other
2834         Arith<Operation>, we decided to keep this consistency and use ValueNegate when
2835         speculation indicates that the operand is a BigInt.
2836         This design is following the same distinction between ArithAdd and
2837         ValueAdd. Also, this new node will make simpler the introduction of
2838         optimizations when we create speculation paths for BigInt in future
2839         patches.
2840
2841         In the case of "+" unary operation on BigInt, the current semantic we already have
2842         is correctly, since it needs to throw TypeError because of ToNumber call[1].
2843         In such case, we are adding tests to verify other edge cases.
2844
2845         [1] - https://tc39.github.io/proposal-bigint/#sec-unary-plus-operator
2846
2847         * bytecompiler/BytecodeGenerator.cpp:
2848         (JSC::BytecodeGenerator::addBigIntConstant):
2849         * bytecompiler/BytecodeGenerator.h:
2850         * bytecompiler/NodesCodegen.cpp:
2851         (JSC::BigIntNode::jsValue const):
2852         * dfg/DFGAbstractInterpreterInlines.h:
2853         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2854         * dfg/DFGByteCodeParser.cpp:
2855         (JSC::DFG::ByteCodeParser::makeSafe):
2856         (JSC::DFG::ByteCodeParser::parseBlock):
2857         * dfg/DFGClobberize.h:
2858         (JSC::DFG::clobberize):
2859         * dfg/DFGDoesGC.cpp:
2860         (JSC::DFG::doesGC):
2861         * dfg/DFGFixupPhase.cpp:
2862         (JSC::DFG::FixupPhase::fixupNode):
2863         * dfg/DFGNode.h:
2864         (JSC::DFG::Node::arithNodeFlags):
2865         * dfg/DFGNodeType.h:
2866         * dfg/DFGPredictionPropagationPhase.cpp:
2867         * dfg/DFGSafeToExecute.h:
2868         (JSC::DFG::safeToExecute):
2869         * dfg/DFGSpeculativeJIT.cpp:
2870         (JSC::DFG::SpeculativeJIT::compileValueNegate):
2871         (JSC::DFG::SpeculativeJIT::compileArithNegate):
2872         * dfg/DFGSpeculativeJIT.h:
2873         * dfg/DFGSpeculativeJIT32_64.cpp:
2874         (JSC::DFG::SpeculativeJIT::compile):
2875         * dfg/DFGSpeculativeJIT64.cpp:
2876         (JSC::DFG::SpeculativeJIT::compile):
2877         * ftl/FTLCapabilities.cpp:
2878         (JSC::FTL::canCompile):
2879         * ftl/FTLLowerDFGToB3.cpp:
2880         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
2881         (JSC::FTL::DFG::LowerDFGToB3::compileValueNegate):
2882         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate):
2883         * jit/JITOperations.cpp:
2884         * parser/ASTBuilder.h:
2885         (JSC::ASTBuilder::createBigIntWithSign):
2886         (JSC::ASTBuilder::createBigIntFromUnaryOperation):
2887         (JSC::ASTBuilder::makeNegateNode):
2888         * parser/NodeConstructors.h:
2889         (JSC::BigIntNode::BigIntNode):
2890         * parser/Nodes.h:
2891         * runtime/CommonSlowPaths.cpp:
2892         (JSC::updateArithProfileForUnaryArithOp):
2893         (JSC::SLOW_PATH_DECL):
2894         * runtime/JSBigInt.cpp:
2895         (JSC::JSBigInt::parseInt):
2896         * runtime/JSBigInt.h:
2897         * runtime/JSCJSValueInlines.h:
2898         (JSC::JSValue::strictEqualSlowCaseInline):
2899
2900 2018-05-27  Dan Bernstein  <mitz@apple.com>
2901
2902         Tried to fix the 32-bit !ASSERT_DISABLED build after r232211.
2903
2904         * jit/JITOperations.cpp:
2905
2906 2018-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>
2907
2908         [JSC] Rename Array#flatten to flat
2909         https://bugs.webkit.org/show_bug.cgi?id=186012
2910
2911         Reviewed by Saam Barati.
2912
2913         Rename Array#flatten to Array#flat. This rename is done in TC39 since flatten
2914         conflicts with the mootools' function name.
2915
2916         * builtins/ArrayPrototype.js:
2917         (globalPrivate.flatIntoArray):
2918         (flat):
2919         (globalPrivate.flatIntoArrayWithCallback):
2920         (flatMap):
2921         (globalPrivate.flattenIntoArray): Deleted.
2922         (flatten): Deleted.
2923         (globalPrivate.flattenIntoArrayWithCallback): Deleted.
2924         * runtime/ArrayPrototype.cpp:
2925         (JSC::ArrayPrototype::finishCreation):
2926
2927 2018-05-25  Mark Lam  <mark.lam@apple.com>
2928
2929         for-in loops should preserve and restore the TDZ stack for each of its internal loops.
2930         https://bugs.webkit.org/show_bug.cgi?id=185995
2931         <rdar://problem/40173142>
2932
2933         Reviewed by Saam Barati.
2934
2935         This is because there's no guarantee that any of the loop bodies will be
2936         executed.  Hence, there's no guarantee that the TDZ variables will have been
2937         initialized after each loop body.
2938
2939         * bytecompiler/BytecodeGenerator.cpp:
2940         (JSC::BytecodeGenerator::preserveTDZStack):
2941         (JSC::BytecodeGenerator::restoreTDZStack):
2942         * bytecompiler/BytecodeGenerator.h:
2943         * bytecompiler/NodesCodegen.cpp:
2944         (JSC::ForInNode::emitBytecode):
2945
2946 2018-05-25  Mark Lam  <mark.lam@apple.com>
2947
2948         MachineContext's instructionPointer() should handle null PCs correctly.
2949         https://bugs.webkit.org/show_bug.cgi?id=186004
2950         <rdar://problem/40570067>
2951
2952         Reviewed by Saam Barati.
2953
2954         instructionPointer() returns a MacroAssemblerCodePtr<CFunctionPtrTag>.  However,
2955         MacroAssemblerCodePtr's constructor does not accept a null pointer value and will
2956         assert accordingly with a debug ASSERT.  This is inconsequential for release
2957         builds, but to avoid this assertion failure, we should check for a null PC and
2958         return MacroAssemblerCodePtr<CFunctionPtrTag>(nullptr) instead (which uses the
2959         MacroAssemblerCodePtr(std::nullptr_t) version of the constructor instead).
2960
2961         Alternatively, we can change all of MacroAssemblerCodePtr's constructors to check
2962         for null pointers, but I rather not do that yet.  In general,
2963         MacroAssemblerCodePtrs are constructed with non-null pointers, and I prefer to
2964         leave it that way for now.
2965
2966         Note: this assertion failure only manifests when we have signal traps enabled,
2967         and encounter a null pointer deref.
2968
2969         * runtime/MachineContext.h:
2970         (JSC::MachineContext::instructionPointer):
2971
2972 2018-05-25  Mark Lam  <mark.lam@apple.com>
2973
2974         Enforce invariant that GetterSetter objects are invariant.
2975         https://bugs.webkit.org/show_bug.cgi?id=185968
2976         <rdar://problem/40541416>
2977
2978         Reviewed by Saam Barati.
2979
2980         The code already assumes the invariant that GetterSetter objects are immutable.
2981         For example, the use of @tryGetById in builtins expect this invariant to be true.
2982         The existing code mostly enforces this except for one case: JSObject's
2983         validateAndApplyPropertyDescriptor, where it will re-use the same GetterSetter
2984         object.
2985
2986         This patch enforces this invariant by removing the setGetter and setSetter methods
2987         of GetterSetter, and requiring the getter/setter callback functions to be
2988         specified at construction time.
2989
2990         * jit/JITOperations.cpp:
2991         * llint/LLIntSlowPaths.cpp:
2992         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2993         * runtime/GetterSetter.cpp:
2994         (JSC::GetterSetter::withGetter): Deleted.
2995         (JSC::GetterSetter::withSetter): Deleted.
2996         * runtime/GetterSetter.h:
2997         * runtime/JSGlobalObject.cpp:
2998         (JSC::JSGlobalObject::init):
2999         * runtime/JSObject.cpp:
3000         (JSC::JSObject::putIndexedDescriptor):
3001         (JSC::JSObject::putDirectNativeIntrinsicGetter):
3002         (JSC::putDescriptor):
3003         (JSC::validateAndApplyPropertyDescriptor):
3004         * runtime/JSTypedArrayViewPrototype.cpp:
3005         (JSC::JSTypedArrayViewPrototype::finishCreation):
3006         * runtime/Lookup.cpp:
3007         (JSC::reifyStaticAccessor):
3008         * runtime/PropertyDescriptor.cpp:
3009         (JSC::PropertyDescriptor::slowGetterSetter):
3010
3011 2018-05-25  Saam Barati  <sbarati@apple.com>
3012
3013         Make JSC have a mini mode that kicks in when the JIT is disabled
3014         https://bugs.webkit.org/show_bug.cgi?id=185931
3015
3016         Reviewed by Mark Lam.
3017
3018         This patch makes JSC have a mini VM mode. This currently only kicks in
3019         when the process can't JIT. Mini VM now means a few things:
3020         - We always use a 1.27x heap growth factor. This number was the best tradeoff
3021           between memory use progression and time regression in run-testmem. We may
3022           want to tune this more in the future as we make other mini VM changes.
3023         - We always sweep synchronously.
3024         - We disable generational GC.
3025         
3026         I'm going to continue to extend what mini VM mode means in future changes.
3027         
3028         This patch is a 50% memory progression and an ~8-9% time regression
3029         on run-testmem when running in mini VM mode with the JIT disabled.
3030
3031         * heap/Heap.cpp:
3032         (JSC::Heap::collectNow):
3033         (JSC::Heap::finalize):
3034         (JSC::Heap::useGenerationalGC):
3035         (JSC::Heap::shouldSweepSynchronously):
3036         (JSC::Heap::shouldDoFullCollection):
3037         * heap/Heap.h:
3038         * runtime/Options.h:
3039         * runtime/VM.cpp:
3040         (JSC::VM::isInMiniMode):
3041         * runtime/VM.h:
3042
3043 2018-05-25  Saam Barati  <sbarati@apple.com>
3044
3045         Have a memory test where we can validate JSCs mini memory mode
3046         https://bugs.webkit.org/show_bug.cgi?id=185932
3047
3048         Reviewed by Mark Lam.
3049
3050         This patch adds the testmem CLI. It takes as input a file to run
3051         and the number of iterations to run it (by default it runs it
3052         20 times). Each iteration runs in a new JSContext. Each JSContext
3053         belongs to a VM that is created once. When finished, the CLI dumps
3054         out the peak memory usage of the process, the memory usage at the end
3055         of running all the iterations of the process, and the total time it
3056         took to run all the iterations.
3057
3058         * JavaScriptCore.xcodeproj/project.pbxproj:
3059         * testmem: Added.
3060         * testmem/testmem.mm: Added.
3061         (description):
3062         (Footprint::now):
3063         (main):
3064
3065 2018-05-25  David Kilzer  <ddkilzer@apple.com>
3066
3067         Fix issues with -dealloc methods found by clang static analyzer
3068         <https://webkit.org/b/185887>
3069
3070         Reviewed by Joseph Pecoraro.
3071
3072         * API/JSValue.mm:
3073         (-[JSValue dealloc]):
3074         (-[JSValue description]):
3075         - Move method implementations from (Internal) category to the
3076           main category since these are public API.  This fixes the
3077           false positive warning about a missing -dealloc method.
3078
3079 2018-05-24  Yusuke Suzuki  <utatane.tea@gmail.com>
3080
3081         [Baseline] Remove a hack for DCE removal of NewFunction
3082         https://bugs.webkit.org/show_bug.cgi?id=185945
3083
3084         Reviewed by Saam Barati.
3085
3086         This `undefined` check in baseline is originally introduced in r177871. The problem was,
3087         when NewFunction is removed in DFG DCE, its referencing scope DFG node  is also removed.
3088         While op_new_func_xxx want to have scope for function creation, DFG OSR exit cannot
3089         retrieve this into the stack since the scope is not referenced from anywhere.
3090
3091         In r177871, we fixed this by accepting `undefined` scope in the baseline op_new_func_xxx
3092         implementation. But rather than that, just emitting `Phantom` for this scope is clean
3093         and consistent to the other DFG nodes like GetClosureVar.
3094
3095         This patch emits Phantom instead, and removes unnecessary `undefined` check in baseline.
3096         While we emit Phantom, it is not testable since NewFunction is guarded by MovHint which
3097         is not removed in DFG. And in FTL, NewFunction will be converted to PhantomNewFunction
3098         if it is not referenced. And scope node is kept by PutHint. But emitting Phantom is nice
3099         since it conservatively guards the scope, and it does not introduce any additional overhead
3100         compared to the current status.
3101
3102         * dfg/DFGByteCodeParser.cpp:
3103         (JSC::DFG::ByteCodeParser::parseBlock):
3104         * jit/JITOpcodes.cpp:
3105         (JSC::JIT::emitNewFuncExprCommon):
3106
3107 2018-05-23  Keith Miller  <keith_miller@apple.com>
3108
3109         Expose $vm if window.internals is exposed
3110         https://bugs.webkit.org/show_bug.cgi?id=185900
3111
3112         Reviewed by Mark Lam.
3113
3114         This is useful for testing vm internals when running LayoutTests.
3115
3116         * runtime/JSGlobalObject.cpp:
3117         (JSC::JSGlobalObject::init):
3118         (JSC::JSGlobalObject::visitChildren):
3119         (JSC::JSGlobalObject::exposeDollarVM):
3120         * runtime/JSGlobalObject.h:
3121
3122 2018-05-23  Keith Miller  <keith_miller@apple.com>
3123
3124         Define length on CoW array should properly convert to writable
3125         https://bugs.webkit.org/show_bug.cgi?id=185927
3126
3127         Reviewed by Yusuke Suzuki.
3128
3129         * runtime/JSArray.cpp:
3130         (JSC::JSArray::setLength):
3131
3132 2018-05-23  Keith Miller  <keith_miller@apple.com>
3133
3134         InPlaceAbstractState should filter variables at the tail from a GetLocal by their flush format
3135         https://bugs.webkit.org/show_bug.cgi?id=185923
3136
3137         Reviewed by Saam Barati.
3138
3139         Previously, we could confuse AI by overly broadening a type. This happens when a block in a
3140         loop has a local mutated following a GetLocal but never SetLocaled to the stack. For example,
3141
3142         Block 1:
3143         @1: GetLocal(loc42, FlushedInt32);
3144         @2: PutStructure(Check: Cell: @1);
3145         @3: Jump(Block 1);
3146
3147         Would cause us to claim that loc42 could be either an int32 or a some cell. However,
3148         the type of an local cannot change without writing to it.
3149
3150         This fixes a crash in destructuring-rest-element.js
3151
3152         * dfg/DFGInPlaceAbstractState.cpp:
3153         (JSC::DFG::InPlaceAbstractState::endBasicBlock):
3154
3155 2018-05-23  Filip Pizlo  <fpizlo@apple.com>
3156
3157         Speed up JetStream/base64
3158         https://bugs.webkit.org/show_bug.cgi?id=185914
3159
3160         Reviewed by Michael Saboff.
3161         
3162         Make allocation fast paths ALWAYS_INLINE.
3163         
3164         This is a 1% speed-up on SunSpider, mostly because of base64. It also speeds up pdfjs by
3165         ~6%.
3166
3167         * CMakeLists.txt:
3168         * JavaScriptCore.xcodeproj/project.pbxproj:
3169         * heap/AllocatorInlines.h:
3170         (JSC::Allocator::allocate const):
3171         * heap/CompleteSubspace.cpp:
3172         (JSC::CompleteSubspace::allocateNonVirtual): Deleted.
3173         * heap/CompleteSubspace.h:
3174         * heap/CompleteSubspaceInlines.h: Added.
3175         (JSC::CompleteSubspace::allocateNonVirtual):
3176         * heap/FreeListInlines.h:
3177         (JSC::FreeList::allocate):
3178         * heap/IsoSubspace.cpp:
3179         (JSC::IsoSubspace::allocateNonVirtual): Deleted.
3180         * heap/IsoSubspace.h:
3181         (JSC::IsoSubspace::allocatorForNonVirtual):
3182         * heap/IsoSubspaceInlines.h: Added.
3183         (JSC::IsoSubspace::allocateNonVirtual):
3184         * runtime/JSCellInlines.h:
3185         * runtime/VM.h:
3186
3187 2018-05-23  Rick Waldron  <waldron.rick@gmail.com>
3188
3189         Conversion misspelled "Convertion" in error message string
3190         https://bugs.webkit.org/show_bug.cgi?id=185436
3191
3192         Reviewed by Saam Barati, Michael Saboff
3193
3194         * runtime/JSBigInt.cpp:
3195         (JSC::JSBigInt::toNumber const):
3196
3197 2018-05-22  Yusuke Suzuki  <utatane.tea@gmail.com>
3198
3199         [JSC] Clean up stringGetByValStubGenerator
3200         https://bugs.webkit.org/show_bug.cgi?id=185864
3201
3202         Reviewed by Saam Barati.
3203
3204         We clean up stringGetByValStubGenerator.
3205
3206         1. Unify 32bit and 64bit implementations.
3207         2. Rename stringGetByValStubGenerator to stringGetByValGenerator, move it to ThunkGenerators.cpp.
3208         3. Remove string type check since this code is invoked only when we know regT0 is JSString*.
3209         4. Do not tag Cell in stringGetByValGenerator side. 32bit code stores Cell with tag in JITPropertyAccess32_64 side.
3210         5. Fix invalid use of loadPtr for StringImpl::flags. Should use load32.
3211
3212         * jit/JIT.h:
3213         * jit/JITPropertyAccess.cpp:
3214         (JSC::JIT::emitSlow_op_get_by_val):
3215         (JSC::JIT::stringGetByValStubGenerator): Deleted.
3216         * jit/JITPropertyAccess32_64.cpp:
3217         (JSC::JIT::emit_op_get_by_val):
3218         (JSC::JIT::emitSlow_op_get_by_val):
3219         (JSC::JIT::stringGetByValStubGenerator): Deleted.
3220         * jit/ThunkGenerators.cpp:
3221         (JSC::stringGetByValGenerator):
3222         * jit/ThunkGenerators.h:
3223
3224 2018-05-22  Yusuke Suzuki  <utatane.tea@gmail.com>
3225
3226         [JSC] Use branchIfString/branchIfNotString instead of structure checkings
3227         https://bugs.webkit.org/show_bug.cgi?id=185810
3228
3229         Reviewed by Saam Barati.
3230
3231         Let's use branchIfString/branchIfNotString helper functions instead of
3232         checking structure with jsString's structure. It's easy to read. And
3233         it emits less code since we do not need to embed string structure's
3234         raw pointer in 32bit environment.
3235
3236         * jit/JIT.h:
3237         * jit/JITInlines.h:
3238         (JSC::JIT::emitLoadCharacterString):
3239         (JSC::JIT::checkStructure): Deleted.
3240         * jit/JITOpcodes32_64.cpp:
3241         (JSC::JIT::emitSlow_op_eq):
3242         (JSC::JIT::compileOpEqJumpSlow):
3243         (JSC::JIT::emitSlow_op_neq):
3244         * jit/JITPropertyAccess.cpp:
3245         (JSC::JIT::stringGetByValStubGenerator):
3246         (JSC::JIT::emitSlow_op_get_by_val):
3247         (JSC::JIT::emitByValIdentifierCheck):
3248         * jit/JITPropertyAccess32_64.cpp:
3249         (JSC::JIT::stringGetByValStubGenerator):
3250         (JSC::JIT::emitSlow_op_get_by_val):
3251         * jit/JSInterfaceJIT.h:
3252         (JSC::ThunkHelpers::jsStringLengthOffset): Deleted.
3253         (JSC::ThunkHelpers::jsStringValueOffset): Deleted.
3254         * jit/SpecializedThunkJIT.h:
3255         (JSC::SpecializedThunkJIT::loadJSStringArgument):
3256         * jit/ThunkGenerators.cpp:
3257         (JSC::stringCharLoad):
3258         (JSC::charCodeAtThunkGenerator):
3259         (JSC::charAtThunkGenerator):
3260         * runtime/JSString.h:
3261
3262 2018-05-22  Mark Lam  <mark.lam@apple.com>
3263
3264         BytecodeGeneratorification shouldn't add a ValueProfile if the JIT is disabled.
3265         https://bugs.webkit.org/show_bug.cgi?id=185896
3266         <rdar://problem/40471403>
3267
3268         Reviewed by Saam Barati.
3269
3270         * bytecode/BytecodeGeneratorification.cpp:
3271         (JSC::BytecodeGeneratorification::run):
3272
3273 2018-05-22  Yusuke Suzuki  <utatane.tea@gmail.com>
3274
3275         [JSC] Fix CachedCall's argument count if RegExp has named captures
3276         https://bugs.webkit.org/show_bug.cgi?id=185587
3277
3278         Reviewed by Mark Lam.
3279
3280         If the given RegExp has named captures, the argument count of CachedCall in String#replace
3281         should be increased by one. This causes crash with assertion in test262. This patch corrects
3282         the argument count.
3283
3284         This patch also unifies source.is8Bit()/!source.is8Bit() code since they are now completely
3285         the same.
3286
3287         * runtime/StringPrototype.cpp:
3288         (JSC::replaceUsingRegExpSearch):
3289
3290 2018-05-22  Mark Lam  <mark.lam@apple.com>
3291
3292         StringImpl utf8 conversion should not fail silently.
3293         https://bugs.webkit.org/show_bug.cgi?id=185888
3294         <rdar://problem/40464506>
3295
3296         Reviewed by Filip Pizlo.
3297
3298         * dfg/DFGLazyJSValue.cpp:
3299         (JSC::DFG::LazyJSValue::dumpInContext const):
3300         * runtime/DateConstructor.cpp:
3301         (JSC::constructDate):
3302         (JSC::dateParse):
3303         * runtime/JSDateMath.cpp:
3304         (JSC::parseDate):
3305         * runtime/JSDateMath.h:
3306
3307 2018-05-22  Keith Miller  <keith_miller@apple.com>
3308
3309         Remove the UnconditionalFinalizer class
3310         https://bugs.webkit.org/show_bug.cgi?id=185881
3311
3312         Reviewed by Filip Pizlo.
3313
3314         The only remaining user of this API is
3315         JSWebAssemblyCodeBlock. This patch changes, JSWebAssemblyCodeBlock
3316         to use the newer template based API and removes the old class.
3317
3318         * JavaScriptCore.xcodeproj/project.pbxproj:
3319         * bytecode/CodeBlock.h:
3320         * heap/Heap.cpp:
3321         (JSC::Heap::finalizeUnconditionalFinalizers):
3322         * heap/Heap.h:
3323         * heap/SlotVisitor.cpp:
3324         (JSC::SlotVisitor::addUnconditionalFinalizer): Deleted.
3325         * heap/SlotVisitor.h:
3326         * heap/UnconditionalFinalizer.h: Removed.
3327         * wasm/js/JSWebAssemblyCodeBlock.cpp:
3328         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
3329         (JSC::JSWebAssemblyCodeBlock::visitChildren):
3330         (JSC::JSWebAssemblyCodeBlock::finalizeUnconditionally):
3331         (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
3332         * wasm/js/JSWebAssemblyCodeBlock.h:
3333         * wasm/js/JSWebAssemblyModule.h:
3334
3335         * CMakeLists.txt:
3336         * JavaScriptCore.xcodeproj/project.pbxproj:
3337         * bytecode/CodeBlock.h:
3338         * heap/Heap.cpp:
3339         (JSC::Heap::finalizeUnconditionalFinalizers):
3340         * heap/Heap.h:
3341         * heap/SlotVisitor.cpp:
3342         (JSC::SlotVisitor::addUnconditionalFinalizer): Deleted.
3343         * heap/SlotVisitor.h:
3344         * heap/UnconditionalFinalizer.h: Removed.
3345         * wasm/js/JSWebAssemblyCodeBlock.cpp:
3346         (JSC::JSWebAssemblyCodeBlock::JSWebAssemblyCodeBlock):
3347         (JSC::JSWebAssemblyCodeBlock::visitChildren):
3348         (JSC::JSWebAssemblyCodeBlock::finalizeUnconditionally):
3349         (JSC::JSWebAssemblyCodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted.
3350         * wasm/js/JSWebAssemblyCodeBlock.h:
3351         * wasm/js/JSWebAssemblyModule.h:
3352
3353 2018-05-22  Keith Miller  <keith_miller@apple.com>
3354
3355         Unreviewed, fix internal build.
3356
3357         * runtime/JSImmutableButterfly.cpp:
3358
3359 2018-05-22  Saam Barati  <sbarati@apple.com>
3360
3361         DFG::LICMPhase should attempt to hoist edge type checks if hoisting the whole node fails
3362         https://bugs.webkit.org/show_bug.cgi?id=144525
3363
3364         Reviewed by Filip Pizlo.
3365
3366         This patch teaches LICM to fall back to hoisting a node's type checks when
3367         hoisting the entire node fails.
3368         
3369         This patch follow the same principles we use when deciding to hoist nodes in general:
3370         - If the pre header is control equivalent to where the current check is, we
3371         go ahead and hoist the check.
3372         - Otherwise, if hoisting hasn't failed before, we go ahead and gamble and
3373         hoist the&nbs