Fix bug in testMulImm32SignExtend
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2019-08-01  Keith Miller  <keith_miller@apple.com>
2
3         Fix bug in testMulImm32SignExtend
4         https://bugs.webkit.org/show_bug.cgi?id=200358
5
6         Reviewed by Mark Lam.
7
8         Also, have it run in more configurations.
9
10         * b3/testb3_2.cpp:
11         (testMulImm32SignExtend):
12         * b3/testb3_3.cpp:
13         (addArgTests):
14
15 2019-07-31  Mark Lam  <mark.lam@apple.com>
16
17         Rename DOMJIT safe/unsafeFunction to functionWithTypeChecks and functionWithoutTypeChecks.
18         https://bugs.webkit.org/show_bug.cgi?id=200323
19
20         Reviewed by Yusuke Suzuki.
21
22         The DOMJIT has a notion of a safeFunction and an unsafeFunction.  The safeFunction
23         is effectively the same as the unsafeFunction with added type check.  The DFG/FTL
24         will emit code to call the unsafeFunction if it has already emitted the needed
25         type check or proven that it isn't needed.  Otherwise, the DFG/FTL will emit
26         code to call the safeFunction (which does its own type check) instead.
27
28         This patch renames these functions to better describe their difference.
29
30         * dfg/DFGSpeculativeJIT.cpp:
31         (JSC::DFG::SpeculativeJIT::compileCallDOM):
32         * domjit/DOMJITSignature.h:
33         (JSC::DOMJIT::Signature::Signature):
34         * ftl/FTLLowerDFGToB3.cpp:
35         (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
36         * tools/JSDollarVM.cpp:
37         (JSC::DOMJITFunctionObject::functionWithTypeCheck):
38         (JSC::DOMJITFunctionObject::functionWithoutTypeCheck):
39         (JSC::DOMJITFunctionObject::finishCreation):
40         (JSC::DOMJITCheckSubClassObject::functionWithTypeCheck):
41         (JSC::DOMJITCheckSubClassObject::functionWithoutTypeCheck):
42         (JSC::DOMJITCheckSubClassObject::finishCreation):
43         (JSC::DOMJITFunctionObject::safeFunction): Deleted.
44         (JSC::DOMJITFunctionObject::unsafeFunction): Deleted.
45         (JSC::DOMJITCheckSubClassObject::safeFunction): Deleted.
46         (JSC::DOMJITCheckSubClassObject::unsafeFunction): Deleted.
47
48 2019-07-31  Alex Christensen  <achristensen@webkit.org>
49
50         Begin organizing b3 tests
51         https://bugs.webkit.org/show_bug.cgi?id=200330
52
53         Reviewed by Keith Miller.
54
55         * b3/testb3.h:
56         * b3/testb3_1.cpp:
57         (run):
58         (zero): Deleted.
59         (negativeZero): Deleted.
60         * b3/testb3_2.cpp:
61         (testBitXorTreeArgs):
62         (testBitXorTreeArgsEven):
63         (testBitXorTreeArgImm):
64         (testBitAndTreeArg32):
65         (testBitOrTreeArg32):
66         (testBitAndArgs):
67         (testBitAndSameArg):
68         (testBitAndNotNot):
69         (testBitAndNotImm):
70         (testBitAndImms):
71         (testBitAndArgImm):
72         (testBitAndImmArg):
73         (testBitAndBitAndArgImmImm):
74         (testBitAndImmBitAndArgImm):
75         (testBitAndArgs32):
76         (testBitAndSameArg32):
77         (testBitAndImms32):
78         (testBitAndArgImm32):
79         (testBitAndImmArg32):
80         (testBitAndBitAndArgImmImm32):
81         (testBitAndImmBitAndArgImm32):
82         (testBitAndWithMaskReturnsBooleans):
83         (testBitAndArgDouble):
84         (testBitAndArgsDouble):
85         (testBitAndArgImmDouble):
86         (testBitAndImmsDouble):
87         (testBitAndArgFloat):
88         (testBitAndArgsFloat):
89         (testBitAndArgImmFloat):
90         (testBitAndImmsFloat):
91         (testBitAndArgsFloatWithUselessDoubleConversion):
92         (testBitOrArgs):
93         (testBitOrSameArg):
94         (testBitOrAndAndArgs):
95         (testBitOrAndSameArgs):
96         (testBitOrNotNot):
97         (testBitOrNotImm):
98         (testBitOrImms):
99         (testBitOrArgImm):
100         (testBitOrImmArg):
101         (testBitOrBitOrArgImmImm):
102         (testBitOrImmBitOrArgImm):
103         (testBitOrArgs32):
104         (testBitOrSameArg32):
105         (testBitOrImms32):
106         (testBitOrArgImm32):
107         (testBitOrImmArg32):
108         (addBitTests):
109         * b3/testb3_3.cpp:
110         (testSShrArgs):
111         (testSShrImms):
112         (testSShrArgImm):
113         (testSShrArg32):
114         (testSShrArgs32):
115         (testSShrImms32):
116         (testSShrArgImm32):
117         (testZShrArgs):
118         (testZShrImms):
119         (testZShrArgImm):
120         (testZShrArg32):
121         (testZShrArgs32):
122         (testZShrImms32):
123         (testZShrArgImm32):
124         (zero):
125         (negativeZero):
126         (addArgTests):
127         (addCallTests):
128         (addShrTests):
129         * b3/testb3_4.cpp:
130         (addSExtTests):
131         * b3/testb3_6.cpp:
132         (testSShrShl32):
133         (testSShrShl64):
134         (addSShrShTests):
135
136 2019-07-31  Devin Rousso  <drousso@apple.com>
137
138         Web Inspector: Debugger: support emulateUserGesture parameter in Debugger.evaluateOnCallFrame
139         https://bugs.webkit.org/show_bug.cgi?id=200272
140
141         Reviewed by Joseph Pecoraro.
142
143         When paused, evaluating in the console should still respect the "Emulate User Gesture" checkbox.
144
145         * inspector/protocol/Debugger.json:
146         * inspector/agents/InspectorDebuggerAgent.h:
147         * inspector/agents/InspectorDebuggerAgent.cpp:
148         (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame):
149
150 2019-07-31  Alex Christensen  <achristensen@webkit.org>
151
152         Split testb3 into multiple files
153         https://bugs.webkit.org/show_bug.cgi?id=200326
154
155         Reviewed by Keith Miller.
156
157         * JavaScriptCore.xcodeproj/project.pbxproj:
158         * b3/testb3.cpp: Removed.
159         * b3/testb3.h: Added.
160         (hiddenTruthBecauseNoReturnIsStupid):
161         (usage):
162         (shouldBeVerbose):
163         (compileProc):
164         (invoke):
165         (compileAndRun):
166         (lowerToAirForTesting):
167         (checkDisassembly):
168         (checkUsesInstruction):
169         (checkDoesNotUseInstruction):
170         (populateWithInterestingValues):
171         (floatingPointOperands):
172         (int64Operands):
173         (int32Operands):
174         (add32):
175         (modelLoad):
176         (float>):
177         (double>):
178         * b3/testb3_1.cpp: Added.
179         (zero):
180         (negativeZero):
181         (shouldRun):
182         (testRotR):
183         (testRotL):
184         (testRotRWithImmShift):
185         (testRotLWithImmShift):
186         (testComputeDivisionMagic):
187         (run):
188         (main):
189         (dllLauncherEntryPoint):
190         * b3/testb3_2.cpp: Added.
191         (test42):
192         (testLoad42):
193         (testLoadAcq42):
194         (testLoadWithOffsetImpl):
195         (testLoadOffsetImm9Max):
196         (testLoadOffsetImm9MaxPlusOne):
197         (testLoadOffsetImm9MaxPlusTwo):
198         (testLoadOffsetImm9Min):
199         (testLoadOffsetImm9MinMinusOne):
200         (testLoadOffsetScaledUnsignedImm12Max):
201         (testLoadOffsetScaledUnsignedOverImm12Max):
202         (testBitXorTreeArgs):
203         (testBitXorTreeArgsEven):
204         (testBitXorTreeArgImm):
205         (testAddTreeArg32):
206         (testMulTreeArg32):
207         (testBitAndTreeArg32):
208         (testBitOrTreeArg32):
209         (testArg):
210         (testReturnConst64):
211         (testReturnVoid):
212         (testAddArg):
213         (testAddArgs):
214         (testAddArgImm):
215         (testAddImmArg):
216         (testAddArgMem):
217         (testAddMemArg):
218         (testAddImmMem):
219         (testAddArg32):
220         (testAddArgs32):
221         (testAddArgMem32):
222         (testAddMemArg32):
223         (testAddImmMem32):
224         (testAddNeg1):
225         (testAddNeg2):
226         (testAddArgZeroImmZDef):
227         (testAddLoadTwice):
228         (testAddArgDouble):
229         (testAddArgsDouble):
230         (testAddArgImmDouble):
231         (testAddImmArgDouble):
232         (testAddImmsDouble):
233         (testAddArgFloat):
234         (testAddArgsFloat):
235         (testAddFPRArgsFloat):
236         (testAddArgImmFloat):
237         (testAddImmArgFloat):
238         (testAddImmsFloat):
239         (testAddArgFloatWithUselessDoubleConversion):
240         (testAddArgsFloatWithUselessDoubleConversion):
241         (testAddArgsFloatWithEffectfulDoubleConversion):
242         (testAddMulMulArgs):
243         (testMulArg):
244         (testMulArgStore):
245         (testMulAddArg):
246         (testMulArgs):
247         (testMulArgNegArg):
248         (testMulNegArgArg):
249         (testMulArgImm):
250         (testMulImmArg):
251         (testMulArgs32):
252         (testMulArgs32SignExtend):
253         (testMulImm32SignExtend):
254         (testMulLoadTwice):
255         (testMulAddArgsLeft):
256         (testMulAddArgsRight):
257         (testMulAddArgsLeft32):
258         (testMulAddArgsRight32):
259         (testMulSubArgsLeft):
260         (testMulSubArgsRight):
261         (testMulSubArgsLeft32):
262         (testMulSubArgsRight32):
263         (testMulNegArgs):
264         (testMulNegArgs32):
265         (testMulArgDouble):
266         (testMulArgsDouble):
267         (testMulArgImmDouble):
268         (testMulImmArgDouble):
269         (testMulImmsDouble):
270         (testMulArgFloat):
271         (testMulArgsFloat):
272         (testMulArgImmFloat):
273         (testMulImmArgFloat):
274         (testMulImmsFloat):
275         (testMulArgFloatWithUselessDoubleConversion):
276         (testMulArgsFloatWithUselessDoubleConversion):
277         (testMulArgsFloatWithEffectfulDoubleConversion):
278         (testDivArgDouble):
279         (testDivArgsDouble):
280         (testDivArgImmDouble):
281         (testDivImmArgDouble):
282         (testDivImmsDouble):
283         (testDivArgFloat):
284         (testDivArgsFloat):
285         (testDivArgImmFloat):
286         (testDivImmArgFloat):
287         (testDivImmsFloat):
288         (testModArgDouble):
289         (testModArgsDouble):
290         (testModArgImmDouble):
291         (testModImmArgDouble):
292         (testModImmsDouble):
293         (testModArgFloat):
294         (testModArgsFloat):
295         (testModArgImmFloat):
296         (testModImmArgFloat):
297         (testModImmsFloat):
298         (testDivArgFloatWithUselessDoubleConversion):
299         (testDivArgsFloatWithUselessDoubleConversion):
300         (testDivArgsFloatWithEffectfulDoubleConversion):
301         (testUDivArgsInt32):
302         (testUDivArgsInt64):
303         (testUModArgsInt32):
304         (testUModArgsInt64):
305         (testSubArg):
306         (testSubArgs):
307         (testSubArgImm):
308         (testSubNeg):
309         (testNegSub):
310         (testNegValueSubOne):
311         (testSubSub):
312         (testSubSub2):
313         (testSubAdd):
314         (testSubFirstNeg):
315         (testSubImmArg):
316         (testSubArgMem):
317         (testSubMemArg):
318         (testSubImmMem):
319         (testSubMemImm):
320         (testSubArgs32):
321         (testSubArgImm32):
322         (testSubImmArg32):
323         (testSubMemArg32):
324         (testSubArgMem32):
325         (testSubImmMem32):
326         (testSubMemImm32):
327         (testNegValueSubOne32):
328         (testNegMulArgImm):
329         (testSubMulMulArgs):
330         (testSubArgDouble):
331         (testSubArgsDouble):
332         (testSubArgImmDouble):
333         (testSubImmArgDouble):
334         (testSubImmsDouble):
335         (testSubArgFloat):
336         (testSubArgsFloat):
337         (testSubArgImmFloat):
338         (testSubImmArgFloat):
339         (testSubImmsFloat):
340         (testSubArgFloatWithUselessDoubleConversion):
341         (testSubArgsFloatWithUselessDoubleConversion):
342         (testSubArgsFloatWithEffectfulDoubleConversion):
343         (testTernarySubInstructionSelection):
344         (testNegDouble):
345         (testNegFloat):
346         (testNegFloatWithUselessDoubleConversion):
347         (testBitAndArgs):
348         (testBitAndSameArg):
349         (testBitAndNotNot):
350         (testBitAndNotImm):
351         (testBitAndImms):
352         (testBitAndArgImm):
353         (testBitAndImmArg):
354         (testBitAndBitAndArgImmImm):
355         (testBitAndImmBitAndArgImm):
356         (testBitAndArgs32):
357         (testBitAndSameArg32):
358         (testBitAndImms32):
359         (testBitAndArgImm32):
360         (testBitAndImmArg32):
361         (testBitAndBitAndArgImmImm32):
362         (testBitAndImmBitAndArgImm32):
363         (testBitAndWithMaskReturnsBooleans):
364         (bitAndDouble):
365         (testBitAndArgDouble):
366         (testBitAndArgsDouble):
367         (testBitAndArgImmDouble):
368         (testBitAndImmsDouble):
369         (bitAndFloat):
370         (testBitAndArgFloat):
371         (testBitAndArgsFloat):
372         (testBitAndArgImmFloat):
373         (testBitAndImmsFloat):
374         (testBitAndArgsFloatWithUselessDoubleConversion):
375         (testBitOrArgs):
376         (testBitOrSameArg):
377         (testBitOrAndAndArgs):
378         (testBitOrAndSameArgs):
379         (testBitOrNotNot):
380         (testBitOrNotImm):
381         (testBitOrImms):
382         (testBitOrArgImm):
383         (testBitOrImmArg):
384         (testBitOrBitOrArgImmImm):
385         (testBitOrImmBitOrArgImm):
386         (testBitOrArgs32):
387         (testBitOrSameArg32):
388         (testBitOrImms32):
389         (testBitOrArgImm32):
390         (testBitOrImmArg32):
391         * b3/testb3_3.cpp: Added.
392         (testBitOrBitOrArgImmImm32):
393         (testBitOrImmBitOrArgImm32):
394         (bitOrDouble):
395         (testBitOrArgDouble):
396         (testBitOrArgsDouble):
397         (testBitOrArgImmDouble):
398         (testBitOrImmsDouble):
399         (bitOrFloat):
400         (testBitOrArgFloat):
401         (testBitOrArgsFloat):
402         (testBitOrArgImmFloat):
403         (testBitOrImmsFloat):
404         (testBitOrArgsFloatWithUselessDoubleConversion):
405         (testBitXorArgs):
406         (testBitXorSameArg):
407         (testBitXorAndAndArgs):
408         (testBitXorAndSameArgs):
409         (testBitXorImms):
410         (testBitXorArgImm):
411         (testBitXorImmArg):
412         (testBitXorBitXorArgImmImm):
413         (testBitXorImmBitXorArgImm):
414         (testBitXorArgs32):
415         (testBitXorSameArg32):
416         (testBitXorImms32):
417         (testBitXorArgImm32):
418         (testBitXorImmArg32):
419         (testBitXorBitXorArgImmImm32):
420         (testBitXorImmBitXorArgImm32):
421         (testBitNotArg):
422         (testBitNotImm):
423         (testBitNotMem):
424         (testBitNotArg32):
425         (testBitNotImm32):
426         (testBitNotMem32):
427         (testNotOnBooleanAndBranch32):
428         (testBitNotOnBooleanAndBranch32):
429         (testShlArgs):
430         (testShlImms):
431         (testShlArgImm):
432         (testShlSShrArgImm):
433         (testShlArg32):
434         (testShlArgs32):
435         (testShlImms32):
436         (testShlArgImm32):
437         (testShlZShrArgImm32):
438         (testSShrArgs):
439         (testSShrImms):
440         (testSShrArgImm):
441         (testSShrArg32):
442         (testSShrArgs32):
443         (testSShrImms32):
444         (testSShrArgImm32):
445         (testZShrArgs):
446         (testZShrImms):
447         (testZShrArgImm):
448         (testZShrArg32):
449         (testZShrArgs32):
450         (testZShrImms32):
451         (testZShrArgImm32):
452         (countLeadingZero):
453         (testClzArg64):
454         (testClzMem64):
455         (testClzArg32):
456         (testClzMem32):
457         (testAbsArg):
458         (testAbsImm):
459         (testAbsMem):
460         (testAbsAbsArg):
461         (testAbsNegArg):
462         (testAbsBitwiseCastArg):
463         (testBitwiseCastAbsBitwiseCastArg):
464         (testAbsArgWithUselessDoubleConversion):
465         (testAbsArgWithEffectfulDoubleConversion):
466         (testCeilArg):
467         (testCeilImm):
468         (testCeilMem):
469         (testCeilCeilArg):
470         (testFloorCeilArg):
471         (testCeilIToD64):
472         (testCeilIToD32):
473         (testCeilArgWithUselessDoubleConversion):
474         (testCeilArgWithEffectfulDoubleConversion):
475         (testFloorArg):
476         (testFloorImm):
477         (testFloorMem):
478         (testFloorFloorArg):
479         (testCeilFloorArg):
480         (testFloorIToD64):
481         (testFloorIToD32):
482         (testFloorArgWithUselessDoubleConversion):
483         (testFloorArgWithEffectfulDoubleConversion):
484         (correctSqrt):
485         (testSqrtArg):
486         (testSqrtImm):
487         (testSqrtMem):
488         (testSqrtArgWithUselessDoubleConversion):
489         (testSqrtArgWithEffectfulDoubleConversion):
490         (testCompareTwoFloatToDouble):
491         (testCompareOneFloatToDouble):
492         (testCompareFloatToDoubleThroughPhi):
493         (testDoubleToFloatThroughPhi):
494         (testReduceFloatToDoubleValidates):
495         (testDoubleProducerPhiToFloatConversion):
496         (testDoubleProducerPhiToFloatConversionWithDoubleConsumer):
497         (testDoubleProducerPhiWithNonFloatConst):
498         (testDoubleArgToInt64BitwiseCast):
499         (testDoubleImmToInt64BitwiseCast):
500         (testTwoBitwiseCastOnDouble):
501         (testBitwiseCastOnDoubleInMemory):
502         (testBitwiseCastOnDoubleInMemoryIndexed):
503         (testInt64BArgToDoubleBitwiseCast):
504         (testInt64BImmToDoubleBitwiseCast):
505         (testTwoBitwiseCastOnInt64):
506         (testBitwiseCastOnInt64InMemory):
507         (testBitwiseCastOnInt64InMemoryIndexed):
508         (testFloatImmToInt32BitwiseCast):
509         (testBitwiseCastOnFloatInMemory):
510         (testInt32BArgToFloatBitwiseCast):
511         (testInt32BImmToFloatBitwiseCast):
512         (testTwoBitwiseCastOnInt32):
513         (testBitwiseCastOnInt32InMemory):
514         (testConvertDoubleToFloatArg):
515         (testConvertDoubleToFloatImm):
516         (testConvertDoubleToFloatMem):
517         (testConvertFloatToDoubleArg):
518         (testConvertFloatToDoubleImm):
519         (testConvertFloatToDoubleMem):
520         (testConvertDoubleToFloatToDoubleToFloat):
521         (testLoadFloatConvertDoubleConvertFloatStoreFloat):
522         (testFroundArg):
523         (testFroundMem):
524         (testIToD64Arg):
525         (testIToF64Arg):
526         (testIToD32Arg):
527         (testIToF32Arg):
528         (testIToD64Mem):
529         (testIToF64Mem):
530         (testIToD32Mem):
531         (testIToF32Mem):
532         (testIToD64Imm):
533         (testIToF64Imm):
534         (testIToD32Imm):
535         (testIToF32Imm):
536         (testIToDReducedToIToF64Arg):
537         (testIToDReducedToIToF32Arg):
538         (testStore32):
539         (testStoreConstant):
540         (testStoreConstantPtr):
541         (testStore8Arg):
542         (testStore8Imm):
543         (testStorePartial8BitRegisterOnX86):
544         (testStore16Arg):
545         (testStore16Imm):
546         (testTrunc):
547         (testAdd1):
548         (testAdd1Ptr):
549         (testNeg32):
550         (testNegPtr):
551         (testStoreAddLoad32):
552         * b3/testb3_4.cpp: Added.
553         (testStoreRelAddLoadAcq32):
554         (testStoreAddLoadImm32):
555         (testStoreAddLoad8):
556         (testStoreRelAddLoadAcq8):
557         (testStoreRelAddFenceLoadAcq8):
558         (testStoreAddLoadImm8):
559         (testStoreAddLoad16):
560         (testStoreRelAddLoadAcq16):
561         (testStoreAddLoadImm16):
562         (testStoreAddLoad64):
563         (testStoreRelAddLoadAcq64):
564         (testStoreAddLoadImm64):
565         (testStoreAddLoad32Index):
566         (testStoreAddLoadImm32Index):
567         (testStoreAddLoad8Index):
568         (testStoreAddLoadImm8Index):
569         (testStoreAddLoad16Index):
570         (testStoreAddLoadImm16Index):
571         (testStoreAddLoad64Index):
572         (testStoreAddLoadImm64Index):
573         (testStoreSubLoad):
574         (testStoreAddLoadInterference):
575         (testStoreAddAndLoad):
576         (testStoreNegLoad32):
577         (testStoreNegLoadPtr):
578         (testAdd1Uncommuted):
579         (testLoadOffset):
580         (testLoadOffsetNotConstant):
581         (testLoadOffsetUsingAdd):
582         (testLoadOffsetUsingAddInterference):
583         (testLoadOffsetUsingAddNotConstant):
584         (testLoadAddrShift):
585         (testFramePointer):
586         (testOverrideFramePointer):
587         (testStackSlot):
588         (testLoadFromFramePointer):
589         (testStoreLoadStackSlot):
590         (testStoreFloat):
591         (testStoreDoubleConstantAsFloat):
592         (testSpillGP):
593         (testSpillFP):
594         (testInt32ToDoublePartialRegisterStall):
595         (testInt32ToDoublePartialRegisterWithoutStall):
596         (testBranch):
597         (testBranchPtr):
598         (testDiamond):
599         (testBranchNotEqual):
600         (testBranchNotEqualCommute):
601         (testBranchNotEqualNotEqual):
602         (testBranchEqual):
603         (testBranchEqualEqual):
604         (testBranchEqualCommute):
605         (testBranchEqualEqual1):
606         (testBranchEqualOrUnorderedArgs):
607         (testBranchNotEqualAndOrderedArgs):
608         (testBranchEqualOrUnorderedDoubleArgImm):
609         (testBranchEqualOrUnorderedFloatArgImm):
610         (testBranchEqualOrUnorderedDoubleImms):
611         (testBranchEqualOrUnorderedFloatImms):
612         (testBranchEqualOrUnorderedFloatWithUselessDoubleConversion):
613         (testBranchFold):
614         (testDiamondFold):
615         (testBranchNotEqualFoldPtr):
616         (testBranchEqualFoldPtr):
617         (testBranchLoadPtr):
618         (testBranchLoad32):
619         (testBranchLoad8S):
620         (testBranchLoad8Z):
621         (testBranchLoad16S):
622         (testBranchLoad16Z):
623         (testBranch8WithLoad8ZIndex):
624         (testComplex):
625         (testBranchBitTest32TmpImm):
626         (testBranchBitTest32AddrImm):
627         (testBranchBitTest32TmpTmp):
628         (testBranchBitTest64TmpTmp):
629         (testBranchBitTest64AddrTmp):
630         (testBranchBitTestNegation):
631         (testBranchBitTestNegation2):
632         (testSimplePatchpoint):
633         (testSimplePatchpointWithoutOuputClobbersGPArgs):
634         (testSimplePatchpointWithOuputClobbersGPArgs):
635         (testSimplePatchpointWithoutOuputClobbersFPArgs):
636         (testSimplePatchpointWithOuputClobbersFPArgs):
637         (testPatchpointWithEarlyClobber):
638         (testPatchpointCallArg):
639         (testPatchpointFixedRegister):
640         (testPatchpointAny):
641         (testPatchpointGPScratch):
642         (testPatchpointFPScratch):
643         (testPatchpointLotsOfLateAnys):
644         (testPatchpointAnyImm):
645         * b3/testb3_5.cpp: Added.
646         (testPatchpointManyImms):
647         (testPatchpointWithRegisterResult):
648         (testPatchpointWithStackArgumentResult):
649         (testPatchpointWithAnyResult):
650         (testSimpleCheck):
651         (testCheckFalse):
652         (testCheckTrue):
653         (testCheckLessThan):
654         (testCheckMegaCombo):
655         (testCheckTrickyMegaCombo):
656         (testCheckTwoMegaCombos):
657         (testCheckTwoNonRedundantMegaCombos):
658         (testCheckAddImm):
659         (testCheckAddImmCommute):
660         (testCheckAddImmSomeRegister):
661         (testCheckAdd):
662         (testCheckAdd64):
663         (testCheckAddFold):
664         (testCheckAddFoldFail):
665         (testCheckAddArgumentAliasing64):
666         (testCheckAddArgumentAliasing32):
667         (testCheckAddSelfOverflow64):
668         (testCheckAddSelfOverflow32):
669         (testCheckSubImm):
670         (testCheckSubBadImm):
671         (testCheckSub):
672         (doubleSub):
673         (testCheckSub64):
674         (testCheckSubFold):
675         (testCheckSubFoldFail):
676         (testCheckNeg):
677         (testCheckNeg64):
678         (testCheckMul):
679         (testCheckMulMemory):
680         (testCheckMul2):
681         (testCheckMul64):
682         (testCheckMulFold):
683         (testCheckMulFoldFail):
684         (testCheckMulArgumentAliasing64):
685         (testCheckMulArgumentAliasing32):
686         (testCheckMul64SShr):
687         (genericTestCompare):
688         (modelCompare):
689         (testCompareLoad):
690         (testCompareImpl):
691         (testCompare):
692         (testEqualDouble):
693         (simpleFunction):
694         (testCallSimple):
695         (testCallRare):
696         (testCallRareLive):
697         (testCallSimplePure):
698         (functionWithHellaArguments):
699         (testCallFunctionWithHellaArguments):
700         (functionWithHellaArguments2):
701         (testCallFunctionWithHellaArguments2):
702         (functionWithHellaArguments3):
703         (testCallFunctionWithHellaArguments3):
704         (testReturnDouble):
705         (testReturnFloat):
706         (simpleFunctionDouble):
707         (testCallSimpleDouble):
708         (simpleFunctionFloat):
709         (testCallSimpleFloat):
710         (functionWithHellaDoubleArguments):
711         (testCallFunctionWithHellaDoubleArguments):
712         (functionWithHellaFloatArguments):
713         (testCallFunctionWithHellaFloatArguments):
714         (testLinearScanWithCalleeOnStack):
715         (testChillDiv):
716         (testChillDivTwice):
717         (testChillDiv64):
718         (testModArg):
719         (testModArgs):
720         (testModImms):
721         (testModArg32):
722         (testModArgs32):
723         (testModImms32):
724         (testChillModArg):
725         (testChillModArgs):
726         (testChillModImms):
727         (testChillModArg32):
728         (testChillModArgs32):
729         (testChillModImms32):
730         (testLoopWithMultipleHeaderEdges):
731         (testSwitch):
732         (testSwitchSameCaseAsDefault):
733         (testSwitchChillDiv):
734         (testSwitchTargettingSameBlock):
735         (testSwitchTargettingSameBlockFoldPathConstant):
736         (testTruncFold):
737         (testZExt32):
738         (testZExt32Fold):
739         (testSExt32):
740         (testSExt32Fold):
741         (testTruncZExt32):
742         (testTruncSExt32):
743         (testSExt8):
744         (testSExt8Fold):
745         (testSExt8SExt8):
746         (testSExt8SExt16):
747         (testSExt8BitAnd):
748         (testBitAndSExt8):
749         (testSExt16):
750         (testSExt16Fold):
751         (testSExt16SExt16):
752         (testSExt16SExt8):
753         (testSExt16BitAnd):
754         (testBitAndSExt16):
755         (testSExt32BitAnd):
756         * b3/testb3_6.cpp: Added.
757         (testBitAndSExt32):
758         (testBasicSelect):
759         (testSelectTest):
760         (testSelectCompareDouble):
761         (testSelectCompareFloat):
762         (testSelectCompareFloatToDouble):
763         (testSelectDouble):
764         (testSelectDoubleTest):
765         (testSelectDoubleCompareDouble):
766         (testSelectDoubleCompareFloat):
767         (testSelectFloatCompareFloat):
768         (testSelectDoubleCompareDoubleWithAliasing):
769         (testSelectFloatCompareFloatWithAliasing):
770         (testSelectFold):
771         (testSelectInvert):
772         (testCheckSelect):
773         (testCheckSelectCheckSelect):
774         (testCheckSelectAndCSE):
775         (b3Pow):
776         (testPowDoubleByIntegerLoop):
777         (testTruncOrHigh):
778         (testTruncOrLow):
779         (testBitAndOrHigh):
780         (testBitAndOrLow):
781         (testBranch64Equal):
782         (testBranch64EqualImm):
783         (testBranch64EqualMem):
784         (testBranch64EqualMemImm):
785         (testStore8Load8Z):
786         (testStore16Load16Z):
787         (testSShrShl32):
788         (testSShrShl64):
789         (testTrivialInfiniteLoop):
790         (testFoldPathEqual):
791         (testLShiftSelf32):
792         (testRShiftSelf32):
793         (testURShiftSelf32):
794         (testLShiftSelf64):
795         (testRShiftSelf64):
796         (testURShiftSelf64):
797         (testPatchpointDoubleRegs):
798         (testSpillDefSmallerThanUse):
799         (testSpillUseLargerThanDef):
800         (testLateRegister):
801         (interpreterPrint):
802         (testInterpreter):
803         (testReduceStrengthCheckBottomUseInAnotherBlock):
804         (testResetReachabilityDanglingReference):
805         (testEntrySwitchSimple):
806         (testEntrySwitchNoEntrySwitch):
807         (testEntrySwitchWithCommonPaths):
808         (testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint):
809         (testEntrySwitchLoop):
810         (testSomeEarlyRegister):
811         (testBranchBitAndImmFusion):
812         (testTerminalPatchpointThatNeedsToBeSpilled):
813         (testTerminalPatchpointThatNeedsToBeSpilled2):
814         (testPatchpointTerminalReturnValue):
815         (testMemoryFence):
816         (testStoreFence):
817         (testLoadFence):
818         (testTrappingLoad):
819         (testTrappingStore):
820         (testTrappingLoadAddStore):
821         (testTrappingLoadDCE):
822         (testTrappingStoreElimination):
823         (testMoveConstants):
824         (testPCOriginMapDoesntInsertNops):
825         * b3/testb3_7.cpp: Added.
826         (testPinRegisters):
827         (testX86LeaAddAddShlLeft):
828         (testX86LeaAddAddShlRight):
829         (testX86LeaAddAdd):
830         (testX86LeaAddShlRight):
831         (testX86LeaAddShlLeftScale1):
832         (testX86LeaAddShlLeftScale2):
833         (testX86LeaAddShlLeftScale4):
834         (testX86LeaAddShlLeftScale8):
835         (testAddShl32):
836         (testAddShl64):
837         (testAddShl65):
838         (testReduceStrengthReassociation):
839         (testLoadBaseIndexShift2):
840         (testLoadBaseIndexShift32):
841         (testOptimizeMaterialization):
842         (generateLoop):
843         (makeArrayForLoops):
844         (generateLoopNotBackwardsDominant):
845         (oneFunction):
846         (noOpFunction):
847         (testLICMPure):
848         (testLICMPureSideExits):
849         (testLICMPureWritesPinned):
850         (testLICMPureWrites):
851         (testLICMReadsLocalState):
852         (testLICMReadsPinned):
853         (testLICMReads):
854         (testLICMPureNotBackwardsDominant):
855         (testLICMPureFoiledByChild):
856         (testLICMPureNotBackwardsDominantFoiledByChild):
857         (testLICMExitsSideways):
858         (testLICMWritesLocalState):
859         (testLICMWrites):
860         (testLICMFence):
861         (testLICMWritesPinned):
862         (testLICMControlDependent):
863         (testLICMControlDependentNotBackwardsDominant):
864         (testLICMControlDependentSideExits):
865         (testLICMReadsPinnedWritesPinned):
866         (testLICMReadsWritesDifferentHeaps):
867         (testLICMReadsWritesOverlappingHeaps):
868         (testLICMDefaultCall):
869         (testDepend32):
870         (testDepend64):
871         (testWasmBoundsCheck):
872         (testWasmAddress):
873         (testFastTLSLoad):
874         (testFastTLSStore):
875         (doubleEq):
876         (doubleNeq):
877         (doubleGt):
878         (doubleGte):
879         (doubleLt):
880         (doubleLte):
881         (testDoubleLiteralComparison):
882         (testFloatEqualOrUnorderedFolding):
883         (testFloatEqualOrUnorderedFoldingNaN):
884         (testFloatEqualOrUnorderedDontFold):
885         (functionNineArgs):
886         (testShuffleDoesntTrashCalleeSaves):
887         (testDemotePatchpointTerminal):
888         (testReportUsedRegistersLateUseFollowedByEarlyDefDoesNotMarkUseAsDead):
889         (testInfiniteLoopDoesntCauseBadHoisting):
890         * b3/testb3_8.cpp: Added.
891         (testAtomicWeakCAS):
892         (testAtomicStrongCAS):
893         (testAtomicXchg):
894         (addAtomicTests):
895         (testLoad):
896         (addLoadTests):
897
898 2019-07-30  Yusuke Suzuki  <ysuzuki@apple.com>
899
900         [JSC] Emit write barrier after storing instead of before storing
901         https://bugs.webkit.org/show_bug.cgi?id=200193
902
903         Reviewed by Saam Barati.
904
905         I reviewed tricky GC-related code including visitChildren and manual writeBarrier, and I found that we have several problems with write-barriers.
906
907         1. Some write-barriers are emitted before stores happen
908
909             Some code like LazyProperty emits write-barrier before we store the value. This is wrong since JSC has concurrent collector. Let's consider the situation like this.
910
911                 1. Cell "A" is not marked yet
912                 2. Write-barrier is emitted onto "A"
913                 3. Concurrent collector scans "A"
914                 4. Store to "A"'s field happens
915                 5. (4)'s field is not rescaned
916
917             We should emit write-barrier after stores. This patch places write-barriers after stores happen.
918
919         2. Should emit write-barrier after the stored fields are reachable from the owner.
920
921             We have code that is logically the same to the following.
922
923                 ```
924                 auto data = std::make_unique<XXX>();
925                 data->m_field.set(vm, owner, value);
926
927                 storeStoreBarrier();
928                 owner->m_data = WTFMove(data);
929                 ```
930
931             This is not correct. When write-barrier is emitted, the owner cannot reach to the field that is stored.
932             The actual example is AccessCase. We are emitting write-barriers with owner when creating AccessCase, but this is not
933             effective until this AccessCase is chained to StructureStubInfo, which is reachable from CodeBlock.
934
935             I don't think this is actually an issue because currently AccessCase generation is guarded by CodeBlock->m_lock. And CodeBlock::visitChildren takes this lock.
936             But emitting a write-barrier at the right place is still better. This patch places write-barriers when StructureStubInfo::addAccessCase is called.
937
938         Speculative GC fix, it was hard to reproduce the crash since we need to control concurrent collector and main thread's scheduling in an instruction-level.
939
940         * bytecode/BytecodeList.rb:
941         * bytecode/CodeBlock.cpp:
942         (JSC::CodeBlock::finishCreation):
943         * bytecode/StructureStubInfo.cpp:
944         (JSC::StructureStubInfo::addAccessCase):
945         * bytecode/StructureStubInfo.h:
946         (JSC::StructureStubInfo::considerCaching):
947         * dfg/DFGPlan.cpp:
948         (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
949         * jit/JITOperations.cpp:
950         * llint/LLIntSlowPaths.cpp:
951         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
952         (JSC::LLInt::setupGetByIdPrototypeCache):
953         * runtime/CommonSlowPaths.cpp:
954         (JSC::SLOW_PATH_DECL):
955         * runtime/LazyPropertyInlines.h:
956         (JSC::ElementType>::setMayBeNull):
957         * runtime/RegExpCachedResult.h:
958         (JSC::RegExpCachedResult::record):
959
960 2019-07-30  Yusuke Suzuki  <ysuzuki@apple.com>
961
962         [JSC] Make StructureChain less-tricky by using Auxiliary Buffer
963         https://bugs.webkit.org/show_bug.cgi?id=200192
964
965         Reviewed by Saam Barati.
966
967         StructureChain has a bit tricky write barrier / mutator fence to use UniqueArray for its underlying storage.
968         But, since the size of StructureChain is fixed at initialization, we should allocate an underlying storage from auxiliary memory and
969         set it in its constructor instead of finishCreation. We can store values in the finishCreation so that we do not need to have
970         a hacky write-barrier and mutator fence. Furthermore, we can make StructureChain non-destructible.
971
972         This patch leverages auxiliary buffer for the implementation of StructureChain. And it also adds a test that stresses StructureChain creation.
973
974         * runtime/StructureChain.cpp:
975         (JSC::StructureChain::StructureChain):
976         (JSC::StructureChain::create):
977         (JSC::StructureChain::finishCreation):
978         (JSC::StructureChain::visitChildren):
979         (JSC::StructureChain::destroy): Deleted.
980         * runtime/StructureChain.h:
981
982 2019-07-29  Yusuke Suzuki  <ysuzuki@apple.com>
983
984         [JSC] Increment bytecode age only when SlotVisitor is first-visit
985         https://bugs.webkit.org/show_bug.cgi?id=200196
986
987         Reviewed by Robin Morisset.
988
989         WriteBarrier can cause multiple visits for the same UnlinkedCodeBlock. But this does not mean that we are having multiple cycles of GC.
990         We should increment the age of the UnlinkedCodeBlock only when the SlotVisitor is saying that this is the first visit.
991
992         In practice,this almost never happens. Multiple visits can happen only when the marked UnlinkedCodeBlock gets a write-barrier. But, mutation
993         of UnlinkedCodeBlock is rare or none after it is initialized. I ran all the JSTests and I cannot find any tests that get re-visiting of UnlinkedCodeBlock.
994         This patch extends JSTests/stress/reparsing-unlinked-codeblock.js to ensure that UnlinkedCodeBlockJettisoning feature is working after this change.
995
996         * bytecode/UnlinkedCodeBlock.cpp:
997         (JSC::UnlinkedCodeBlock::visitChildren):
998         * heap/SlotVisitor.h:
999         (JSC::SlotVisitor::isFirstVisit const):
1000         * parser/Parser.cpp:
1001         * parser/Parser.h:
1002         (JSC::parse):
1003         (JSC::parseFunctionForFunctionConstructor):
1004         * runtime/Options.h:
1005         * tools/JSDollarVM.cpp:
1006         (JSC::functionParseCount):
1007         (JSC::JSDollarVM::finishCreation):
1008
1009 2019-07-28  Commit Queue  <commit-queue@webkit.org>
1010
1011         Unreviewed, rolling out r247886.
1012         https://bugs.webkit.org/show_bug.cgi?id=200214
1013
1014         "Causes PLT5 regression on some machines" (Requested by mlam|a
1015         on #webkit).
1016
1017         Reverted changeset:
1018
1019         "Add crash diagnostics for debugging unexpected zapped cells."
1020         https://bugs.webkit.org/show_bug.cgi?id=200149
1021         https://trac.webkit.org/changeset/247886
1022
1023 2019-07-27  Justin Michaud  <justin_michaud@apple.com>
1024
1025         [X86] Emit BT instruction for shift + mask in B3
1026         https://bugs.webkit.org/show_bug.cgi?id=199891
1027
1028         Reviewed by Keith Miller.
1029
1030         - Add a new BranchTestBit air opcode, matching the intel bt instruction
1031         - Select this instruction for the following patterns:
1032           if (a & (1<<b))
1033           if ((a>>b)&1)
1034           if ((~a>>b)&1)
1035           if (~a & (1<<b))
1036         - 15% perf progression on the nonconstant microbenchmark, neutral otherwise.
1037         - Note: we cannot fuse loads when we have bitBase=Load, bitOffset=Tmp, since the X86 instruction has 
1038           different behaviour in this mode. It will read past the current dword/qword instead of wrapping around.
1039
1040         * assembler/MacroAssemblerX86Common.h:
1041         (JSC::MacroAssemblerX86Common::branchTestBit32):
1042         * assembler/MacroAssemblerX86_64.h:
1043         (JSC::MacroAssemblerX86_64::branchTestBit64):
1044         * assembler/X86Assembler.h:
1045         (JSC::X86Assembler::bt_ir):
1046         (JSC::X86Assembler::bt_im):
1047         (JSC::X86Assembler::btw_ir):
1048         (JSC::X86Assembler::btw_im):
1049         * assembler/testmasm.cpp:
1050         (JSC::int64Operands):
1051         (JSC::testBranchTestBit32RegReg):
1052         (JSC::testBranchTestBit32RegImm):
1053         (JSC::testBranchTestBit32AddrImm):
1054         (JSC::testBranchTestBit64RegReg):
1055         (JSC::testBranchTestBit64RegImm):
1056         (JSC::testBranchTestBit64AddrImm):
1057         (JSC::run):
1058         * b3/B3LowerToAir.cpp:
1059         * b3/air/AirOpcode.opcodes:
1060         * b3/testb3.cpp:
1061         (JSC::B3::testBranchBitTest32TmpImm):
1062         (JSC::B3::testBranchBitTest32AddrImm):
1063         (JSC::B3::testBranchBitTest32TmpTmp):
1064         (JSC::B3::testBranchBitTest64TmpTmp):
1065         (JSC::B3::testBranchBitTest64AddrTmp):
1066         (JSC::B3::run):
1067
1068 2019-07-26  Yusuke Suzuki  <ysuzuki@apple.com>
1069
1070         [JSC] Potential GC fix for JSPropertyNameEnumerator
1071         https://bugs.webkit.org/show_bug.cgi?id=200151
1072
1073         Reviewed by Mark Lam.
1074
1075         We have been seeing some JSPropertyNameEnumerator::visitChildren crashes for a long time. The crash frequency itself is not high, but it has existed for a long time.
1076         The crash happens when visiting m_propertyNames. It is also possible that this crash is caused by random corruption somewhere, but JSPropertyNameEnumerator
1077         has some tricky (and potentially dangerous) implementations anyway.
1078
1079         1. JSPropertyNameEnumerator have Vector<WriteBarrier<JSString>> and it is extended in finishCreation with a lock.
1080            We should use Auxiliary memory for this use case. And we should set this memory in the constructor so that
1081            we do not extend it in finishCreation, and we do not need a lock.
1082         2. JSPropertyNameEnumerator gets StructureID before allocating JSPropertyNameEnumerator. This is potentially dangerous because the conservative scan
1083            cannot find the Structure* since we could only have StructureID. Since allocation code happens after StructureID is retrieved, it is possible that
1084            the allocation causes GC and Structure* is collected.
1085
1086         In this patch, we align JSPropertyNameEnumerator implementation to the modern one to avoid using Vector<WriteBarrier<JSString>>. And we can make JSPropertyNameEnumerator
1087         a non-destructible cell. Since JSCell's destructor is one of the cause of various issues, we should avoid it if we can.
1088
1089         No behavior change. This patch adds a test stressing JSPropertyNameEnumerator.
1090
1091         * dfg/DFGOperations.cpp:
1092         * runtime/CommonSlowPaths.cpp:
1093         (JSC::SLOW_PATH_DECL):
1094         * runtime/JSPropertyNameEnumerator.cpp:
1095         (JSC::JSPropertyNameEnumerator::create):
1096         (JSC::JSPropertyNameEnumerator::JSPropertyNameEnumerator):
1097         (JSC::JSPropertyNameEnumerator::finishCreation):
1098         (JSC::JSPropertyNameEnumerator::visitChildren):
1099         (JSC::JSPropertyNameEnumerator::destroy): Deleted.
1100         * runtime/JSPropertyNameEnumerator.h:
1101         * runtime/VM.cpp:
1102         (JSC::VM::emptyPropertyNameEnumeratorSlow):
1103         * runtime/VM.h:
1104         (JSC::VM::emptyPropertyNameEnumerator):
1105
1106 2019-07-26  Mark Lam  <mark.lam@apple.com>
1107
1108         Add crash diagnostics for debugging unexpected zapped cells.
1109         https://bugs.webkit.org/show_bug.cgi?id=200149
1110         <rdar://problem/53570112>
1111
1112         Reviewed by Yusuke Suzuki, Saam Barati, and Michael Saboff.
1113
1114         Add a check for zapped cells in SlotVisitor::appendToMarkStack() and
1115         SlotVisitor::visitChildren().  If a zapped cell is detected, we will crash with
1116         some diagnostic info.
1117
1118         To facilitate this, we've made the following changes:
1119         1. Changed FreeCell to preserve the 1st 8 bytes.  This is fine to do because all
1120            cells are at least 16 bytes long.
1121         2. Changed HeapCell::zap() to only zap the structureID.  Leave the rest of the
1122            cell header info intact (including the cell JSType).
1123         3. Changed HeapCell::zap() to record the reason for zapping the cell.  We stash
1124            the reason immediately after the first 8 bytes.  This is the same location as
1125            FreeCell::scrambledNext.  However, since a cell is not expected to be zapped
1126            and on the free list at the same time, it is also fine to do this.
1127         4. Added a few utility functions to MarkedBlock for checking if a cell points
1128            into the block.
1129         5. Added VMInspector and JSDollarVM utilities to dump in-use subspace hashes.
1130         6. Added some comments to document the hashes of known subspaces.
1131
1132         * heap/FreeList.h:
1133         (JSC::FreeCell::offsetOfScrambledNext):
1134         * heap/HeapCell.h:
1135         (JSC::HeapCell::zap):
1136         (JSC::HeapCell::isZapped const):
1137         * heap/MarkedBlock.cpp:
1138         (JSC::MarkedBlock::Handle::stopAllocating):
1139         * heap/MarkedBlock.h:
1140         (JSC::MarkedBlock::Handle::start const):
1141         (JSC::MarkedBlock::Handle::end const):
1142         (JSC::MarkedBlock::Handle::contains const):
1143         * heap/MarkedBlockInlines.h:
1144         (JSC::MarkedBlock::Handle::specializedSweep):
1145         * heap/MarkedSpace.h:
1146         (JSC::MarkedSpace::forEachSubspace):
1147         * heap/SlotVisitor.cpp:
1148         (JSC::SlotVisitor::appendToMarkStack):
1149         (JSC::SlotVisitor::visitChildren):
1150         (JSC::SlotVisitor::reportZappedCellAndCrash):
1151         * heap/SlotVisitor.h:
1152         * jit/AssemblyHelpers.cpp:
1153         (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator):
1154         * runtime/VM.cpp:
1155         (JSC::VM::VM):
1156         * tools/JSDollarVM.cpp:
1157         (JSC::functionDumpSubspaceHashes):
1158         (JSC::JSDollarVM::finishCreation):
1159         * tools/VMInspector.cpp:
1160         (JSC::VMInspector::dumpSubspaceHashes):
1161         * tools/VMInspector.h:
1162
1163 2019-07-25  Yusuke Suzuki  <ysuzuki@apple.com>
1164
1165         [JSC] Use unalignedLoad for JSRopeString fiber accesses
1166         https://bugs.webkit.org/show_bug.cgi?id=200148
1167
1168         Reviewed by Mark Lam.
1169
1170         JSRopeString always have some subsequent bytes that can be accessible because MarkedBlock has Footer.
1171         We use WTF::unalignedLoad to get fibers. And it will be converted to one load CPU instruction.
1172
1173         * heap/MarkedBlock.h:
1174         * runtime/JSString.h:
1175
1176 2019-07-25  Ross Kirsling  <ross.kirsling@sony.com>
1177
1178         Legacy numeric literals should not permit separators or BigInt
1179         https://bugs.webkit.org/show_bug.cgi?id=199984
1180
1181         Reviewed by Keith Miller.
1182
1183         * parser/Lexer.cpp:
1184         (JSC::Lexer<T>::parseOctal):
1185         (JSC::Lexer<T>::parseDecimal):
1186
1187 2019-07-25  Yusuke Suzuki  <ysuzuki@apple.com>
1188
1189         Unreviewed, build fix due to C++17's std::invoke_result_t
1190         https://bugs.webkit.org/show_bug.cgi?id=200139
1191
1192         Use std::result_of for now until all the supported environments implement it.
1193
1194         * heap/IsoSubspace.h:
1195
1196 2019-07-25  Yusuke Suzuki  <ysuzuki@apple.com>
1197
1198         [JSC] Ensure PackedCellPtr only takes non-large-allocation pointers
1199         https://bugs.webkit.org/show_bug.cgi?id=200139
1200
1201         Reviewed by Mark Lam.
1202
1203         PackedCellPtr will compact a pointer by leveraging the fact that JSCell pointers are 16byte aligned.
1204         But this fact only holds when the JSCell is not large allocation. Currently, we are using PackedCellPtr
1205         only for the cell types which meets the above requirement. But we would like to ensure that statically.
1206
1207         In this patch, we add additional static/runtime assertions to ensure this invariant. We accept a cell
1208         type of either (1) it is "final" annotated and sizeof(T) is <= MarkedSpace::largeCutoff or (2) it
1209         is allocated from IsoSubspace.
1210
1211         This patch does not change any behaviors. It just adds extra static/runtime assertions.
1212
1213         * bytecode/CodeBlock.h:
1214         (JSC::CodeBlock::subspaceFor):
1215         * bytecode/CodeBlockJettisoningWatchpoint.h:
1216         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
1217         * dfg/DFGAdaptiveStructureWatchpoint.h:
1218         * heap/IsoSubspace.h:
1219         * heap/PackedCellPtr.h:
1220         (JSC::PackedCellPtr::PackedCellPtr):
1221         * runtime/FunctionRareData.h:
1222         (JSC::FunctionRareData::createAllocationProfileClearingWatchpoint):
1223         * runtime/ObjectToStringAdaptiveStructureWatchpoint.h:
1224
1225 2019-07-25  Yusuke Suzuki  <ysuzuki@apple.com>
1226
1227         [JSC] Make visitChildren implementation more idiomatic
1228         https://bugs.webkit.org/show_bug.cgi?id=200121
1229
1230         Reviewed by Mark Lam.
1231
1232         This patch makes visitChildren implementations more idiomatic: cast, assert, and calling Base::visitChildren.
1233         While this does not find interesting issues, it is still nice to have consistent implementations.
1234         StructureChain::visitChildren missed Base::visitChildren, but it does not have much effect since StructureChain
1235         is immortal cell.
1236
1237         * bytecode/ExecutableToCodeBlockEdge.cpp:
1238         (JSC::ExecutableToCodeBlockEdge::visitChildren):
1239         * runtime/AbstractModuleRecord.cpp:
1240         (JSC::AbstractModuleRecord::visitChildren):
1241         * runtime/FunctionRareData.cpp:
1242         (JSC::FunctionRareData::visitChildren):
1243         * runtime/JSArrayBufferView.cpp:
1244         (JSC::JSArrayBufferView::visitChildren):
1245         * runtime/JSGenericTypedArrayViewInlines.h:
1246         (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
1247         * runtime/JSImmutableButterfly.cpp:
1248         (JSC::JSImmutableButterfly::visitChildren):
1249         * runtime/JSModuleEnvironment.cpp:
1250         (JSC::JSModuleEnvironment::visitChildren):
1251         * runtime/JSModuleRecord.cpp:
1252         (JSC::JSModuleRecord::visitChildren):
1253         * runtime/JSPropertyNameEnumerator.cpp:
1254         (JSC::JSPropertyNameEnumerator::visitChildren):
1255         * runtime/JSString.cpp:
1256         (JSC::JSString::visitChildren):
1257         * runtime/SparseArrayValueMap.cpp:
1258         (JSC::SparseArrayValueMap::visitChildren):
1259         * runtime/StructureChain.cpp:
1260         (JSC::StructureChain::visitChildren):
1261         * runtime/SymbolTable.cpp:
1262         (JSC::SymbolTable::visitChildren):
1263         * tools/JSDollarVM.cpp:
1264         (JSC::Root::visitChildren):
1265         (JSC::ImpureGetter::visitChildren):
1266         * wasm/js/WebAssemblyModuleRecord.cpp:
1267         (JSC::WebAssemblyModuleRecord::visitChildren):
1268
1269 2019-07-25  Ross Kirsling  <ross.kirsling@sony.com>
1270
1271         [ESNext] Implement nullish coalescing
1272         https://bugs.webkit.org/show_bug.cgi?id=200072
1273
1274         Reviewed by Darin Adler.
1275
1276         Implement the nullish coalescing proposal, which has now reached Stage 3 at TC39.
1277
1278         This introduces a ?? operator which:
1279           - acts like || but checks for nullishness instead of truthiness
1280           - has a precedence lower than || (or any other binary operator)
1281           - must be disambiguated with parentheses when combined with || or &&
1282
1283         * bytecompiler/NodesCodegen.cpp:
1284         (JSC::CoalesceNode::emitBytecode): Added.
1285         Bytecode must use OpIsUndefinedOrNull and not OpNeqNull because of document.all.
1286
1287         * parser/ASTBuilder.h:
1288         (JSC::ASTBuilder::makeBinaryNode):
1289         * parser/Lexer.cpp:
1290         (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
1291         * parser/NodeConstructors.h:
1292         (JSC::CoalesceNode::CoalesceNode): Added.
1293         * parser/Nodes.h:
1294         Introduce new token and AST node.
1295
1296         * parser/Parser.cpp:
1297         (JSC::Parser<LexerType>::parseBinaryExpression):
1298         Implement early error.
1299
1300         * parser/ParserTokens.h:
1301         Since this patch needs to shift the value of every binary operator token anyway,
1302         let's only bother to increment their LSBs when we actually have a precedence conflict.
1303
1304         * parser/ResultType.h:
1305         (JSC::ResultType::definitelyIsNull const): Added.
1306         (JSC::ResultType::mightBeUndefinedOrNull const): Added.
1307         (JSC::ResultType::forCoalesce): Added.
1308         We can do better than forLogicalOp here; let's be as accurate as possible.
1309
1310         * runtime/Options.h:
1311         Add runtime feature flag.
1312
1313 2019-07-24  Alexey Shvayka  <shvaikalesh@gmail.com>
1314
1315         Three checks are missing in Proxy internal methods
1316         https://bugs.webkit.org/show_bug.cgi?id=198630
1317
1318         Reviewed by Darin Adler.
1319
1320         Add three missing checks in Proxy internal methods.
1321         These checks are necessary to maintain the invariants of the essential internal methods.
1322         (https://github.com/tc39/ecma262/pull/666)
1323
1324         1. [[GetOwnProperty]] shouldn't return non-configurable and non-writable descriptor when the target's property is writable.
1325         2. [[Delete]] should return `false` when the target has property and is not extensible.
1326         3. [[DefineOwnProperty]] should return `true` for a non-writable input descriptor when the target's property is non-configurable and writable.
1327
1328         Shipping in SpiderMonkey since https://hg.mozilla.org/integration/autoland/rev/3a06bc818bc4 (version 69)
1329         Shipping in V8 since https://chromium.googlesource.com/v8/v8.git/+/e846ad9fa5109428be50b1989314e0e4e7267919
1330
1331         * runtime/ProxyObject.cpp:
1332         (JSC::ProxyObject::performInternalMethodGetOwnProperty): Add writability check.
1333         (JSC::ProxyObject::performDelete): Add extensibility check.
1334         (JSC::ProxyObject::performDefineOwnProperty): Add writability check.
1335
1336 2019-07-24  Mark Lam  <mark.lam@apple.com>
1337
1338         Remove some unused code.
1339         https://bugs.webkit.org/show_bug.cgi?id=200101
1340
1341         Reviewed by Yusuke Suzuki.
1342
1343         * heap/MarkedBlock.cpp:
1344         (JSC::MarkedBlock::Handle::zap): Deleted.
1345         * heap/MarkedBlock.h:
1346         * heap/SlotVisitor.cpp:
1347         (JSC::SlotVisitor::appendToMutatorMarkStack): Deleted.
1348         * heap/SlotVisitor.h:
1349
1350 2019-07-24  Mark Lam  <mark.lam@apple.com>
1351
1352         performJITMemcpy should be PACed with a non-zero diversifier when passed and called via a pointer.
1353         https://bugs.webkit.org/show_bug.cgi?id=200100
1354         <rdar://problem/53474939>
1355
1356         Reviewed by Yusuke Suzuki.
1357
1358         * assembler/ARM64Assembler.h:
1359         (JSC::ARM64Assembler::CopyFunction::CopyFunction):
1360         (JSC::ARM64Assembler::CopyFunction::operator()):
1361         - I choose to use ptrauth_auth_function() here instead of retagCodePtr() because
1362           retagCodePtr() would auth, assert, and re-pac the pointer.  This is needed in
1363           general because retagCodePtr() doesn't know that you will consume the pointer
1364           immediately (and therefore crash imminently if a failed auth is encountered).
1365           Since we know here that we will call with the auth'ed pointer immediately, we
1366           can skip the assert.
1367
1368           This also has the benefit of letting Clang do a peephole optimization to emit
1369           a blrab instruction with the intended diversifier, instead of emitting multiple
1370           instructions to auth the pointer into a C function, and then using a blraaz to
1371           do a C function call.
1372
1373         (JSC::ARM64Assembler::linkJumpOrCall):
1374         (JSC::ARM64Assembler::linkCompareAndBranch):
1375         (JSC::ARM64Assembler::linkConditionalBranch):
1376         (JSC::ARM64Assembler::linkTestAndBranch):
1377         * assembler/LinkBuffer.cpp:
1378         (JSC::LinkBuffer::copyCompactAndLinkCode):
1379         * runtime/JSCPtrTag.h:
1380
1381 2019-07-24  Devin Rousso  <drousso@apple.com>
1382
1383         Web Inspector: print the target of `console.screenshot` last so the target is the closest item to the image
1384         https://bugs.webkit.org/show_bug.cgi?id=199308
1385
1386         Reviewed by Joseph Pecoraro.
1387
1388         * inspector/ConsoleMessage.h:
1389         (Inspector::ConsoleMessage::arguments const):
1390
1391         * inspector/ScriptArguments.h:
1392         * inspector/ScriptArguments.cpp:
1393         (Inspector::ScriptArguments::getFirstArgumentAsString const): Added.
1394         (Inspector::ScriptArguments::getFirstArgumentAsString): Deleted.
1395
1396 2019-07-23  Justin Michaud  <justin_michaud@apple.com>
1397
1398         Sometimes we miss removable CheckInBounds
1399         https://bugs.webkit.org/show_bug.cgi?id=200018
1400
1401         Reviewed by Saam Barati.
1402
1403         We failed to remove the CheckInBounds bounds because we did not see that the index was nonnegative. This is because we do not see the relationship between the two
1404         separate zero constants that appear in the IR for the given test case. This patch re-adds the hack to de-duplicate m_zero that was removed in 
1405         <https://trac.webkit.org/changeset/241228/webkit>.
1406
1407         * dfg/DFGIntegerRangeOptimizationPhase.cpp:
1408
1409 2019-07-22  Yusuke Suzuki  <ysuzuki@apple.com>
1410
1411         [bmalloc] Each IsoPage gets 1MB VA because VMHeap::tryAllocateLargeChunk rounds up
1412         https://bugs.webkit.org/show_bug.cgi?id=200024
1413
1414         Reviewed by Saam Barati.
1415
1416         Discussed and we decided to use this VM tag for IsoHeap instead of CLoop stack.
1417
1418         * interpreter/CLoopStack.cpp:
1419         (JSC::CLoopStack::CLoopStack):
1420
1421 2019-07-22  Saam Barati  <sbarati@apple.com>
1422
1423         Turn off Wasm fast memory on iOS
1424         https://bugs.webkit.org/show_bug.cgi?id=200016
1425         <rdar://problem/53417726>
1426
1427         Reviewed by Yusuke Suzuki.
1428
1429         We turned them on when we disabled Gigacage on iOS. However, we re-enabled
1430         Gigacage on iOS, but forgot to turn wasm fast memories back off.
1431
1432         * runtime/Options.h:
1433
1434 2019-07-22  Ross Kirsling  <ross.kirsling@sony.com>
1435
1436         Unreviewed non-unified build fix.
1437
1438         * runtime/CachedTypes.h:
1439
1440 2019-07-20  Yusuke Suzuki  <ysuzuki@apple.com>
1441
1442         [JSC] Make DFG Local CSE and AI conservative for huge basic block
1443         https://bugs.webkit.org/show_bug.cgi?id=199929
1444         <rdar://problem/49309924>
1445
1446         Reviewed by Filip Pizlo.
1447
1448         In CNN page, the main thread hangs several seconds. On less-powerful devices (like iPhone7), it hangs for ~11 seconds. This is not an acceptable behavior.
1449         The reason of this is that the DFG compiler takes too long time in the compilation for a particular function. It takes 8765 ms even in powerful x64 machine!
1450         DFG compiler is concurrent one. However, when GC requires all the peripheral threads to be stopped, the main thread needs to wait for the DFG compiler's stop.
1451         DFG compiler stops at GC safepoints, and they are inserted between DFG phases. So, if some of DFG phases take very long time, the main thread is blocked during that.
1452         As a result, the main thread is blocked due to this pathological compilation.
1453
1454         By measuring the time taken in each DFG phase, we found that our AI and CSE phase have a problem having quadratic complexity for # of DFG nodes in a basic block.
1455         In this patch, we add a threshold for # of DFG nodes in a basic block. If a basic block exceeds this threshold, we use conservative but O(1) algorithm for AI and Local CSE phase.
1456         We did not add this threshold for Global CSE since FTL has another bytecode cost threshold which prevents us from compiling the large functions. But on the other hand,
1457         DFG should compile them because DFG is intended to be a fast compiler even for a bit larger CodeBlock.
1458
1459         We first attempted to reduce the threshold for DFG compilation. We are using 100000 bytecode cost for DFG compilation and it is very large. However, we found that bytecode cost
1460         is not the problem in CNN page. The problematic function has 67904 cost, and it takes 8765 ms in x64 machine. However, JetStream2/octane-zlib has 61949 function and it only takes
1461         ~400 ms. This difference comes from the # of DFG nodes in a basic block. The problematic function has 43297 DFG nodes in one basic block and it makes AI and Local CSE super time-consuming.
1462         Rather than relying on the bytecode cost which a bit indirectly related to this pathological compile-time, we should look into # of DFG nodes in a basic block which is more directly
1463         related to this problem. And we also found that 61949's Octane-zlib function is very critical for performance. This fact makes a bit hard to pick a right threshold: 67904 causes the problem,
1464         and 61949 must be compiled. This is why this patch is introducing conservative analysis instead of adjusting the threshold for DFG.
1465
1466         This patch has two changes.
1467
1468         1. DFG AI has structure transition tracking which has quadratic complexity
1469
1470         Structure transition tracking takes very long time since its complexity is O(N^2) where N is # of DFG nodes in a basic block.
1471         CNN has very pathological script and it shows 43297 DFG nodes. We should reduce the complexity of this algorithm.
1472         For now, we just say "structures are clobbered" if # of DFG nodes in a basic block exceeds the threshold (20000).
1473         We could improve the current algorithm from O(N^2) to O(2N) without being conservative, and I'm tracking this in [1].
1474
1475         2. DFG Local CSE has quadratic complexity
1476
1477         Local CSE's clobbering iterates all the impure heap values to remove the clobbered one. Since # of impure heap values tend to be proportional to # of DFG nodes we visited,
1478         each CSE for a basic block gets O(N^2) complexity. To avoid this, we introduce HugeMap. This has the same interface to LargeMap and SmallMap in CSE, but its clobbering
1479         implementation just clears the map completely. We can further make this O(N) without introducing conservative behavior by using epochs. For now, we do not see such a huge basic block in
1480         JetStream2 and Speedometer2 so I'll track it in a separate bug[2].
1481
1482         This patch reduces the compilation time from ~11 seconds to ~200 ms.
1483
1484         [1]: https://bugs.webkit.org/show_bug.cgi?id=199959
1485         [2]: https://bugs.webkit.org/show_bug.cgi?id=200014
1486
1487         * dfg/DFGAbstractInterpreterInlines.h:
1488         (JSC::DFG::AbstractInterpreter<AbstractStateType>::observeTransition):
1489         (JSC::DFG::AbstractInterpreter<AbstractStateType>::observeTransitions):
1490         * dfg/DFGCSEPhase.cpp:
1491         * runtime/Options.h:
1492
1493 2019-07-22  Zhifei Fang  <zhifei_fang@apple.com>
1494
1495         Need to skip test cache directory data vault for non internal build
1496         https://bugs.webkit.org/show_bug.cgi?id=199951
1497
1498         Reviewed by Alexey Proskuryakov.
1499
1500         * API/tests/testapi.mm:
1501         (testBytecodeCacheValidation): "Cache directory `/private/tmp` is not a data vault" this error message will only be created for internal build see JSScript.mm:97
1502
1503 2019-07-17  Antoine Quint  <graouts@apple.com>
1504
1505         Disable Pointer Events prior to watchOS 6
1506         https://bugs.webkit.org/show_bug.cgi?id=199890
1507         <rdar://problem/53206113>
1508
1509         Reviewed by Dean Jackson.
1510
1511         * Configurations/FeatureDefines.xcconfig:
1512
1513 2019-07-17  Keith Miller  <keith_miller@apple.com>
1514
1515         Force useLLInt to true on arm64_32
1516         https://bugs.webkit.org/show_bug.cgi?id=199882
1517         <rdar://problem/53207586>
1518
1519         Reviewed by Yusuke Suzuki.
1520
1521         Some jsc tests set useLLInt=false but on arm64_32 we don't support the JIT.
1522         This causes the option coherency checker to get angry. We should force
1523         useLLInt=true on arm64_32 unless useJIT=true.
1524
1525         * runtime/Options.cpp:
1526         (JSC::recomputeDependentOptions):
1527
1528 2019-07-17  Christopher Reid  <chris.reid@sony.com>
1529
1530         Bytecode cache should use FileSystem
1531         https://bugs.webkit.org/show_bug.cgi?id=199759
1532
1533         Reviewed by Yusuke Suzuki.
1534
1535         Update bytecode cache to use platform generic FileSystem calls.
1536
1537         * API/JSScript.mm:
1538         * CMakeLists.txt:
1539         * jsc.cpp:
1540         * runtime/CachePayload.cpp:
1541         * runtime/CachePayload.h:
1542         * runtime/CachedBytecode.h:
1543         * runtime/CachedTypes.cpp:
1544         * runtime/CachedTypes.h:
1545         * runtime/CodeCache.cpp:
1546         * runtime/CodeCache.h:
1547         * runtime/Completion.cpp:
1548         * runtime/Completion.h:
1549
1550 2019-07-17  Mark Lam  <mark.lam@apple.com>
1551
1552         ArgumentsEliminationPhase should insert KillStack nodes before PutStack nodes that it adds.
1553         https://bugs.webkit.org/show_bug.cgi?id=199821
1554         <rdar://problem/52452328>
1555
1556         Reviewed by Filip Pizlo.
1557
1558         Excluding the ArgumentsEliminationPhase, PutStack nodes are converted from SetLocal
1559         nodes in the SSAConversionPhase.  SetLocal nodes are always preceded by MovHint nodes,
1560         and the SSAConversionPhase always inserts a KillStack node before a MovHint node.
1561         Hence, a PutStack node is always preceded by a KillStack node.
1562
1563         However, the ArgumentsEliminationPhase can convert LoadVarargs nodes into a series
1564         of one or more PutStacks nodes, and it prepends MovHint nodes before the PutStack
1565         nodes.  However, it neglects to prepend KillStack nodes as well.  Since the
1566         ArgumentsEliminationPhase runs after the SSAConversionPhase, the PutStack nodes
1567         added during ArgumentsElimination will not be preceded by KillStack nodes.
1568
1569         This patch fixes this by inserting a KillStack in the ArgumentsEliminationPhase
1570         before it inserts a MovHint and a PutStack node.
1571
1572         Consider this test case which can manifest the above issue as a crash:
1573
1574             function inlinee(value) {
1575                 ...
1576                 let tmp = value + 1;
1577             }
1578
1579             function reflect() {
1580                 return inlinee.apply(undefined, arguments);
1581             }
1582
1583             function test(arr) {
1584                 let object = inlinee.apply(undefined, arr);   // Uses a lot of SetArgumentMaybe nodes.
1585                 reflect();    // Calls with a LoadVararg, which gets converted into a PutStack of a constant.
1586             }
1587
1588         In this test case, we have a scenario where a SetArgumentMaybe's stack
1589         slot is reused as the stack slot for a PutStack later.  Here, the PutStack will
1590         put a constant undefined value.  Coincidentally, the SetArgumentMaybe may also
1591         initialize that stack slot to a constant undefined value.  Note that by the time
1592         the PutStack executes, the SetArgumentMaybe's stack slot is dead.  The liveness of
1593         these 2 values are distinct.
1594
1595         However, because we were missing a KillStack before the PutStack, OSR availability
1596         analysis gets misled into thinking that the PutStack constant value is still in the
1597         stack slot because the value left there by the SetArgumentMaybe hasn't been killed
1598         off yet.  As a result, OSR exit code will attempt to recover the PutStack's undefined
1599         constant by loading from the stack slot instead of materializing it.  Since
1600         SetArgumentMaybe may not actually initialize the stack slot, we get a crash in OSR
1601         exit when we try to recover the PutStack constant value from the stack slot, and
1602         end up using what ever junk value we read from there.
1603
1604         Fixing the ArgumentsEliminationPhase to insert KillStack before the PutStack
1605         removes this conflation of the PutStack's constant value with the SetArgumentMaybe's
1606         constant value in the same stack slot.  And, OSR availability analysis will no
1607         longer be misled to load the PutStack's constant value from the stack, but will
1608         materialize the constant instead.
1609
1610         * dfg/DFGArgumentsEliminationPhase.cpp:
1611
1612 2019-07-17  Commit Queue  <commit-queue@webkit.org>
1613
1614         Unreviewed, rolling out r247505.
1615         https://bugs.webkit.org/show_bug.cgi?id=199871
1616
1617         "Caused failed ASSERT in stress test" (Requested by creid on
1618         #webkit).
1619
1620         Reverted changeset:
1621
1622         "Bytecode cache should use FileSystem"
1623         https://bugs.webkit.org/show_bug.cgi?id=199759
1624         https://trac.webkit.org/changeset/247505
1625
1626 2019-07-16  Christopher Reid  <chris.reid@sony.com>
1627
1628         Bytecode cache should use FileSystem
1629         https://bugs.webkit.org/show_bug.cgi?id=199759
1630
1631         Reviewed by Yusuke Suzuki.
1632
1633         Update bytecode cache to use platform generic FileSystem calls.
1634
1635         * API/JSScript.mm:
1636         * CMakeLists.txt:
1637         * jsc.cpp:
1638         * runtime/CachePayload.cpp:
1639         * runtime/CachePayload.h:
1640         * runtime/CachedBytecode.h:
1641         * runtime/CachedTypes.cpp:
1642         * runtime/CachedTypes.h:
1643         * runtime/CodeCache.cpp:
1644         * runtime/CodeCache.h:
1645         * runtime/Completion.cpp:
1646         * runtime/Completion.h:
1647
1648 2019-07-16  Joonghun Park  <pjh0718@gmail.com>
1649
1650         [GTK] Fix a build warning in JavaScriptCore/API/tests/testapi.c
1651         https://bugs.webkit.org/show_bug.cgi?id=199824
1652
1653         Reviewed by Alex Christensen.
1654
1655         * API/tests/testapi.c:
1656         (main):
1657
1658 2019-07-15  Keith Miller  <keith_miller@apple.com>
1659
1660         JSGlobalObject type macros should support feature flags and WeakRef should have one
1661         https://bugs.webkit.org/show_bug.cgi?id=199601
1662
1663         Reviewed by Mark Lam.
1664
1665         This patch refactors the various builtin type macros to have a
1666         parameter, which is the feature flag enabling it.  Since most
1667         builtin types are enabled by default this patch adds a new global
1668         bool typeExposedByDefault for clarity. Note, because static hash
1669         tables have no concept of feature flags we can't use feature flags
1670         with lazy properties. This is probably not a big deal as features
1671         that are off by default won't be allocated anywhere we care about
1672         memory usage anyway.
1673
1674         * runtime/CommonIdentifiers.h:
1675         * runtime/JSGlobalObject.cpp:
1676         (JSC::JSGlobalObject::init):
1677         (JSC::JSGlobalObject::visitChildren):
1678         * runtime/JSGlobalObject.h:
1679         (JSC::JSGlobalObject::stringObjectStructure const):
1680         (JSC::JSGlobalObject::bigIntObjectStructure const): Deleted.
1681         * runtime/Options.h:
1682         * wasm/js/JSWebAssembly.cpp:
1683
1684 2019-07-15  Keith Miller  <keith_miller@apple.com>
1685
1686         A Possible Issue of Object.create method
1687         https://bugs.webkit.org/show_bug.cgi?id=199744
1688
1689         Reviewed by Yusuke Suzuki.
1690
1691         We should call toObject on the properties argument if it was not undefined.
1692         See: https://tc39.es/ecma262/#sec-object.create
1693
1694         * runtime/ObjectConstructor.cpp:
1695         (JSC::objectConstructorCreate):
1696
1697 2019-07-15  Saagar Jha  <saagarjha@apple.com>
1698
1699         Keyword lookup can use memcmp to get around unaligned load undefined behavior
1700         https://bugs.webkit.org/show_bug.cgi?id=199650
1701
1702         Reviewed by Yusuke Suzuki.
1703
1704         Replace KeywordLookup's hand-rolled "memcmp" with the standard version, which reduces the need to deal with
1705         endianness and unaligned loads.
1706
1707         * KeywordLookupGenerator.py:
1708         (Trie.printSubTreeAsC): Use memcmp instead of macros to test for matches.
1709         (Trie.printAsC): Unspecialize Lexer::parseKeyword as templating over the character type reduces the amount of
1710         code we need to generate and moves this task out of the Python script and into the C++ compiler.
1711
1712 2019-07-15  Yusuke Suzuki  <ysuzuki@apple.com>
1713
1714         [JSC] Improve wasm wpt test results by fixing miscellaneous issues
1715         https://bugs.webkit.org/show_bug.cgi?id=199783
1716
1717         Reviewed by Mark Lam.
1718
1719         This patch fixes miscellaneous issues in our Wasm JS API implementation to improve WPT score.
1720         I picked trivial ones in this patch to make this easily reviewable.
1721
1722         1. Remove WebAssemblyPrototype. It does not exist in the spec. Merging WebAssemblyPrototype into JSWebAssembly.
1723         2. Fix various attributes. It does not match to the usual JSC builtin's convention. But this change
1724            is correct because they are changed to be matched against WebIDL definition, and WebAssembly implementation
1725            follows WebIDL. In the future, we could move WebCore WebIDL things into WTF layer and even use (or leverage
1726            some of utility functions) in our WebAssembly JS API implementation.
1727         3. Fix how we interpret "present" in WebAssembly spec. This does not mean [[HasProperty]] result. It follows to
1728            WebIDL spec, and it means that [[Get]] result is not undefined.
1729         4. Add argument count check to Module.customSections, which is required because the method is defined in WebIDL.
1730         5. Fix toNonWrappingUint32 to match it to WebIDL's conversion rule.
1731
1732         * CMakeLists.txt:
1733         * DerivedSources-input.xcfilelist:
1734         * DerivedSources-output.xcfilelist:
1735         * DerivedSources.make:
1736         * JavaScriptCore.xcodeproj/project.pbxproj:
1737         * Sources.txt:
1738         * builtins/WebAssembly.js: Renamed from Source/JavaScriptCore/builtins/WebAssemblyPrototype.js.
1739         * jit/Repatch.cpp:
1740         * runtime/JSGlobalObject.cpp:
1741         (JSC::JSGlobalObject::init):
1742         * runtime/JSModuleLoader.cpp:
1743         (JSC::moduleLoaderParseModule):
1744         * wasm/js/JSWebAssembly.cpp:
1745         (JSC::JSWebAssembly::create):
1746         (JSC::JSWebAssembly::finishCreation):
1747         (JSC::reject):
1748         (JSC::webAssemblyModuleValidateAsyncInternal):
1749         (JSC::webAssemblyCompileFunc):
1750         (JSC::resolve):
1751         (JSC::JSWebAssembly::webAssemblyModuleValidateAsync):
1752         (JSC::instantiate):
1753         (JSC::compileAndInstantiate):
1754         (JSC::JSWebAssembly::instantiate):
1755         (JSC::webAssemblyModuleInstantinateAsyncInternal):
1756         (JSC::JSWebAssembly::webAssemblyModuleInstantinateAsync):
1757         (JSC::webAssemblyInstantiateFunc):
1758         (JSC::webAssemblyValidateFunc):
1759         (JSC::webAssemblyCompileStreamingInternal):
1760         (JSC::webAssemblyInstantiateStreamingInternal):
1761         * wasm/js/JSWebAssembly.h:
1762         * wasm/js/JSWebAssemblyHelpers.h:
1763         (JSC::toNonWrappingUint32):
1764         * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
1765         (JSC::WebAssemblyCompileErrorConstructor::finishCreation):
1766         * wasm/js/WebAssemblyInstanceConstructor.cpp:
1767         (JSC::WebAssemblyInstanceConstructor::finishCreation):
1768         * wasm/js/WebAssemblyInstancePrototype.cpp:
1769         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
1770         (JSC::WebAssemblyLinkErrorConstructor::finishCreation):
1771         * wasm/js/WebAssemblyMemoryConstructor.cpp:
1772         (JSC::constructJSWebAssemblyMemory):
1773         (JSC::WebAssemblyMemoryConstructor::finishCreation):
1774         * wasm/js/WebAssemblyMemoryPrototype.cpp:
1775         * wasm/js/WebAssemblyModuleConstructor.cpp:
1776         (JSC::webAssemblyModuleCustomSections):
1777         (JSC::WebAssemblyModuleConstructor::finishCreation):
1778         * wasm/js/WebAssemblyPrototype.cpp: Removed.
1779         * wasm/js/WebAssemblyPrototype.h: Removed.
1780         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
1781         (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):
1782         * wasm/js/WebAssemblyTableConstructor.cpp:
1783         (JSC::constructJSWebAssemblyTable):
1784         (JSC::WebAssemblyTableConstructor::finishCreation):
1785         * wasm/js/WebAssemblyTablePrototype.cpp:
1786
1787 2019-07-15  Michael Catanzaro  <mcatanzaro@igalia.com>
1788
1789         Unreviewed, rolling out r247440.
1790
1791         Broke builds
1792
1793         Reverted changeset:
1794
1795         "[JSC] Improve wasm wpt test results by fixing miscellaneous
1796         issues"
1797         https://bugs.webkit.org/show_bug.cgi?id=199783
1798         https://trac.webkit.org/changeset/247440
1799
1800 2019-07-15  Yusuke Suzuki  <ysuzuki@apple.com>
1801
1802         [JSC] Improve wasm wpt test results by fixing miscellaneous issues
1803         https://bugs.webkit.org/show_bug.cgi?id=199783
1804
1805         Reviewed by Mark Lam.
1806
1807         This patch fixes miscellaneous issues in our Wasm JS API implementation to improve WPT score.
1808         I picked trivial ones in this patch to make this easily reviewable.
1809
1810         1. Remove WebAssemblyPrototype. It does not exist in the spec. Merging WebAssemblyPrototype into JSWebAssembly.
1811         2. Fix various attributes. It does not match to the usual JSC builtin's convention. But this change
1812            is correct because they are changed to be matched against WebIDL definition, and WebAssembly implementation
1813            follows WebIDL. In the future, we could move WebCore WebIDL things into WTF layer and even use (or leverage
1814            some of utility functions) in our WebAssembly JS API implementation.
1815         3. Fix how we interpret "present" in WebAssembly spec. This does not mean [[HasProperty]] result. It follows to
1816            WebIDL spec, and it means that [[Get]] result is not undefined.
1817         4. Add argument count check to Module.customSections, which is required because the method is defined in WebIDL.
1818         5. Fix toNonWrappingUint32 to match it to WebIDL's conversion rule.
1819
1820         * CMakeLists.txt:
1821         * DerivedSources-input.xcfilelist:
1822         * DerivedSources-output.xcfilelist:
1823         * DerivedSources.make:
1824         * JavaScriptCore.xcodeproj/project.pbxproj:
1825         * Sources.txt:
1826         * builtins/WebAssembly.js: Renamed from Source/JavaScriptCore/builtins/WebAssemblyPrototype.js.
1827         * jit/Repatch.cpp:
1828         * runtime/JSGlobalObject.cpp:
1829         (JSC::JSGlobalObject::init):
1830         * runtime/JSModuleLoader.cpp:
1831         (JSC::moduleLoaderParseModule):
1832         * wasm/js/JSWebAssembly.cpp:
1833         (JSC::JSWebAssembly::create):
1834         (JSC::JSWebAssembly::finishCreation):
1835         (JSC::reject):
1836         (JSC::webAssemblyModuleValidateAsyncInternal):
1837         (JSC::webAssemblyCompileFunc):
1838         (JSC::resolve):
1839         (JSC::JSWebAssembly::webAssemblyModuleValidateAsync):
1840         (JSC::instantiate):
1841         (JSC::compileAndInstantiate):
1842         (JSC::JSWebAssembly::instantiate):
1843         (JSC::webAssemblyModuleInstantinateAsyncInternal):
1844         (JSC::JSWebAssembly::webAssemblyModuleInstantinateAsync):
1845         (JSC::webAssemblyInstantiateFunc):
1846         (JSC::webAssemblyValidateFunc):
1847         (JSC::webAssemblyCompileStreamingInternal):
1848         (JSC::webAssemblyInstantiateStreamingInternal):
1849         * wasm/js/JSWebAssembly.h:
1850         * wasm/js/JSWebAssemblyHelpers.h:
1851         (JSC::toNonWrappingUint32):
1852         * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
1853         (JSC::WebAssemblyCompileErrorConstructor::finishCreation):
1854         * wasm/js/WebAssemblyInstanceConstructor.cpp:
1855         (JSC::WebAssemblyInstanceConstructor::finishCreation):
1856         * wasm/js/WebAssemblyInstancePrototype.cpp:
1857         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
1858         (JSC::WebAssemblyLinkErrorConstructor::finishCreation):
1859         * wasm/js/WebAssemblyMemoryConstructor.cpp:
1860         (JSC::constructJSWebAssemblyMemory):
1861         (JSC::WebAssemblyMemoryConstructor::finishCreation):
1862         * wasm/js/WebAssemblyMemoryPrototype.cpp:
1863         * wasm/js/WebAssemblyModuleConstructor.cpp:
1864         (JSC::webAssemblyModuleCustomSections):
1865         (JSC::WebAssemblyModuleConstructor::finishCreation):
1866         * wasm/js/WebAssemblyPrototype.cpp: Removed.
1867         * wasm/js/WebAssemblyPrototype.h: Removed.
1868         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
1869         (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):
1870         * wasm/js/WebAssemblyTableConstructor.cpp:
1871         (JSC::constructJSWebAssemblyTable):
1872         (JSC::WebAssemblyTableConstructor::finishCreation):
1873         * wasm/js/WebAssemblyTablePrototype.cpp:
1874
1875 2019-07-15  Youenn Fablet  <youenn@apple.com>
1876
1877         Enable a debug WebRTC mode without any encryption
1878         https://bugs.webkit.org/show_bug.cgi?id=199177
1879         <rdar://problem/52074986>
1880
1881         Reviewed by Eric Carlson.
1882
1883         * inspector/protocol/Page.json:
1884
1885 2019-07-15  Ryan Haddad  <ryanhaddad@apple.com>
1886
1887         Unreviewed, attempt to fix production builds after r247403.
1888
1889         * JavaScriptCore.xcodeproj/project.pbxproj:
1890
1891 2019-07-15  Tadeu Zagallo  <tzagallo@apple.com>
1892
1893         Concurrent GC should not rely on current phase to determine if it's safe to steal conn
1894         https://bugs.webkit.org/show_bug.cgi?id=199786
1895         <rdar://problem/52505197>
1896
1897         Reviewed by Saam Barati.
1898
1899         In r246507, we fixed a race condition in the concurrent GC where the mutator might steal
1900         the conn from the collector thread while it transitions from the End phase to NotRunning.
1901         However, that fix was not sufficient. In the case that the mutator steals the conn, and the
1902         execution interleaves long enough for the mutator to progress to a different collection phase,
1903         the collector will resume in a phase other than NotRunning, and hence the check added to
1904         NotRunning will not suffice. To fix that, we add a new variable to track whether the collector
1905         thread is running (m_collectorThreadIsRunning) and use it to determine whether it's safe to
1906         steal the conn, rather than relying on m_currentPhase.
1907
1908         * heap/Heap.cpp:
1909         (JSC::Heap::runNotRunningPhase):
1910         (JSC::Heap::requestCollection):
1911         * heap/Heap.h:
1912
1913 2019-07-12  Keith Miller  <keith_miller@apple.com>
1914
1915         Add API to get all the dependencies of a given JSScript
1916         https://bugs.webkit.org/show_bug.cgi?id=199746
1917
1918         Reviewed by Saam Barati.
1919
1920         The method only returns the dependencies if the module was
1921         actually evaluated. Technically, we know what the dependencies are
1922         at the satisfy phase but for API simplicity we only provide that
1923         information if the module graph was complete enough to at least
1924         run.
1925
1926         This patch also fixes an issue where we would allow import
1927         specifiers that didn't start "./" or "/". For reference, We have
1928         this restriction to be consistent with the web/node. The
1929         restriction exists in order to preserve namespace for
1930         builtin-modules.
1931
1932         Lastly, this patch makes it so that we copy all scripts in the
1933         API/tests/testapiScripts directory so they don't have to be
1934         individually added to the xcode project.
1935
1936         * API/JSAPIGlobalObject.mm:
1937         (JSC::computeValidImportSpecifier):
1938         (JSC::JSAPIGlobalObject::moduleLoaderResolve):
1939         (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
1940         * API/JSContext.mm:
1941         (-[JSContext dependencyIdentifiersForModuleJSScript:]):
1942         * API/JSContextPrivate.h:
1943         * API/JSScript.h:
1944         * API/tests/testapi.mm:
1945         (testFetchWithTwoCycle):
1946         (testFetchWithThreeCycle):
1947         (testModuleBytecodeCache):
1948         (+[JSContextFileLoaderDelegate newContext]):
1949         (-[JSContextFileLoaderDelegate fetchModuleScript:]):
1950         (-[JSContextFileLoaderDelegate findScriptForKey:]):
1951         (-[JSContextFileLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
1952         (testDependenciesArray):
1953         (testDependenciesEvaluationError):
1954         (testDependenciesSyntaxError):
1955         (testDependenciesBadImportId):
1956         (testDependenciesMissingImport):
1957         (testObjectiveCAPI):
1958         * API/tests/testapiScripts/dependencyListTests/badModuleImportId.js: Added.
1959         * API/tests/testapiScripts/dependencyListTests/bar.js: Added.
1960         * API/tests/testapiScripts/dependencyListTests/dependenciesEntry.js: Added.
1961         * API/tests/testapiScripts/dependencyListTests/foo.js: Added.
1962         * API/tests/testapiScripts/dependencyListTests/missingImport.js: Added.
1963         * API/tests/testapiScripts/dependencyListTests/referenceError.js: Added.
1964         * API/tests/testapiScripts/dependencyListTests/syntaxError.js: Added.
1965         * API/tests/testapiScripts/testapi-function-overrides.js: Renamed from Source/JavaScriptCore/API/tests/testapi-function-overrides.js.
1966         * API/tests/testapiScripts/testapi.js: Renamed from Source/JavaScriptCore/API/tests/testapi.js.
1967         * JavaScriptCore.xcodeproj/project.pbxproj:
1968         * builtins/ModuleLoader.js:
1969         (dependencyKeysIfEvaluated):
1970         * runtime/JSModuleLoader.cpp:
1971         (JSC::JSModuleLoader::dependencyKeysIfEvaluated):
1972         * runtime/JSModuleLoader.h:
1973         * shell/CMakeLists.txt:
1974
1975 2019-07-12  Justin Michaud  <justin_michaud@apple.com>
1976
1977         B3 should reduce (integer) Sub(Neg(x), y) to Neg(Add(x, y))
1978         https://bugs.webkit.org/show_bug.cgi?id=196371
1979
1980         Reviewed by Keith Miller.
1981
1982         Adding these strength reductions gives 2x a (x86) and 3x (arm64) performance improvement
1983         on the microbenchmark.
1984
1985         * b3/B3ReduceStrength.cpp:
1986         * b3/testb3.cpp:
1987         (JSC::B3::testSubSub):
1988         (JSC::B3::testSubSub2):
1989         (JSC::B3::testSubAdd):
1990         (JSC::B3::testSubFirstNeg):
1991         (JSC::B3::run):
1992
1993 2019-07-12  Caio Lima  <ticaiolima@gmail.com>
1994
1995         [BigInt] Add ValueBitLShift into DFG
1996         https://bugs.webkit.org/show_bug.cgi?id=192664
1997
1998         Reviewed by Saam Barati.
1999
2000         This patch is splitting the `BitLShift` into `ArithBitLShift` and
2001         `ValueBitLShift` to handle BigInt speculation more efficiently during
2002         DFG and FTL layers. Following the same approach of other `ValueBitOps`,
2003         `ValueBitLShift` handles Untyped and BigInt speculations, while
2004         `ArithBitLShift` handles number and boolean operands and always results into
2005         Int32. 
2006
2007         * bytecode/BytecodeList.rb:
2008         * bytecode/CodeBlock.cpp:
2009         (JSC::CodeBlock::finishCreation):
2010         * bytecode/Opcode.h:
2011         * dfg/DFGAbstractInterpreter.h:
2012         * dfg/DFGAbstractInterpreterInlines.h:
2013         (JSC::DFG::AbstractInterpreter<AbstractStateType>::handleConstantBinaryBitwiseOp):
2014         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2015
2016         We moved `BitLShift` constant fold rules to a new method
2017         `handleConstantBinaryBitwiseOp` to be reused by `ArithBitLShift` and
2018         `ValueBitLShift`. This also enables support of constant folding on other
2019         bitwise operations like `ValueBitAnd`, `ValueBitOr` and `ValueBitXor`, when
2020         their binary use kind is UntypedUse. Such cases can happen on those
2021         nodes because fixup phase is conservative.
2022
2023         * dfg/DFGBackwardsPropagationPhase.cpp:
2024         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
2025         (JSC::DFG::BackwardsPropagationPhase::propagate):
2026         * dfg/DFGByteCodeParser.cpp:
2027         (JSC::DFG::ByteCodeParser::handleIntrinsicGetter):
2028         (JSC::DFG::ByteCodeParser::parseBlock):
2029
2030         We parse `op_lshift` as `ArithBitLShift` when its operands are numbers.
2031         Otherwise, we fallback to `ValueBitLShift` and rely on fixup phase to
2032         convert `ValueBitLShift` into `ArithBitLShift` when possible.
2033
2034         * dfg/DFGClobberize.h:
2035         (JSC::DFG::clobberize):
2036
2037         `ArithBitLShift` has the same clobberize rules as former `BitLShift`.
2038         `ValueBitLShift` only clobberize world when it is UntypedUse.
2039
2040         * dfg/DFGDoesGC.cpp:
2041         (JSC::DFG::doesGC):
2042
2043         `ValueBitLShift` can GC when `BigIntUse` because it allocates new
2044         JSBigInts to perform this operation. It also can GC on UntypedUse
2045         because of observable user code.
2046
2047         * dfg/DFGFixupPhase.cpp:
2048         (JSC::DFG::FixupPhase::fixupNode):
2049
2050         `ValueBitLShift` and `ArithBitLShift` has the same fixup rules of
2051         other binary bitwise operations. In the case of `ValueBitLShift`
2052         We check if we should speculate on BigInt or Untyped and fallback to
2053         `ArithBitLShift` when both cheks fail.
2054
2055         * dfg/DFGNode.h:
2056         (JSC::DFG::Node::hasHeapPrediction):
2057         * dfg/DFGNodeType.h:
2058         * dfg/DFGOperations.cpp:
2059
2060         We updated `operationValueBitLShift` to handle BigInt cases. Also, we
2061         added `operationBitLShiftBigInt` that is used when we compile
2062         `ValueBitLValueBitLShift(BigIntUse)`.
2063
2064         * dfg/DFGOperations.h:
2065         * dfg/DFGPredictionPropagationPhase.cpp:
2066
2067         `ValueBitLShift`'s prediction propagation rules differs from other
2068         bitwise operations, because using only heap prediction for this node causes
2069         significant performance regression on Octane's zlib and mandreel.
2070         The reason is because of cases where a function is compiled but the
2071         instruction `op_lshift` was never executed before. If we use
2072         `getPrediction()` we will emit a `ForceOSRExit`, resulting in more OSR
2073         than desired. To solve such issue, we are then using
2074         `getPredictionWithoutOSR()` and falling back to `getHeapPrediction()`
2075         only on cases where we can't rely on node's input types.
2076
2077         * dfg/DFGSafeToExecute.h:
2078         (JSC::DFG::safeToExecute):
2079         * dfg/DFGSpeculativeJIT.cpp:
2080         (JSC::DFG::SpeculativeJIT::compileValueLShiftOp):
2081         (JSC::DFG::SpeculativeJIT::compileShiftOp):
2082         * dfg/DFGSpeculativeJIT.h:
2083         (JSC::DFG::SpeculativeJIT::shiftOp):
2084         * dfg/DFGSpeculativeJIT32_64.cpp:
2085         (JSC::DFG::SpeculativeJIT::compile):
2086         * dfg/DFGSpeculativeJIT64.cpp:
2087         (JSC::DFG::SpeculativeJIT::compile):
2088         * dfg/DFGStrengthReductionPhase.cpp:
2089         (JSC::DFG::StrengthReductionPhase::handleNode):
2090         * ftl/FTLCapabilities.cpp:
2091         (JSC::FTL::canCompile):
2092         * ftl/FTLLowerDFGToB3.cpp:
2093         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
2094         (JSC::FTL::DFG::LowerDFGToB3::compileArithBitLShift):
2095         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitLShift):
2096         (JSC::FTL::DFG::LowerDFGToB3::compileBitLShift): Deleted.
2097         * llint/LowLevelInterpreter32_64.asm:
2098         * llint/LowLevelInterpreter64.asm:
2099         * runtime/CommonSlowPaths.cpp:
2100         (JSC::SLOW_PATH_DECL):
2101
2102 2019-07-12  Keith Miller  <keith_miller@apple.com>
2103
2104         getIndexQuickly should be const
2105         https://bugs.webkit.org/show_bug.cgi?id=199747
2106
2107         Reviewed by Yusuke Suzuki.
2108
2109         * runtime/Butterfly.h:
2110         (JSC::Butterfly::indexingPayload const):
2111         (JSC::Butterfly::arrayStorage const):
2112         (JSC::Butterfly::contiguousInt32 const):
2113         (JSC::Butterfly::contiguousDouble const):
2114         (JSC::Butterfly::contiguous const):
2115         * runtime/JSObject.h:
2116         (JSC::JSObject::canGetIndexQuickly const):
2117         (JSC::JSObject::getIndexQuickly const):
2118         (JSC::JSObject::tryGetIndexQuickly const):
2119         (JSC::JSObject::canGetIndexQuickly): Deleted.
2120         (JSC::JSObject::getIndexQuickly): Deleted.
2121
2122 2019-07-11  Justin Michaud  <justin_michaud@apple.com>
2123
2124         Add b3 macro lowering for CheckMul on arm64
2125         https://bugs.webkit.org/show_bug.cgi?id=199251
2126
2127         Reviewed by Robin Morisset.
2128
2129         - Lower CheckMul for 32-bit arguments on arm64 into a mul and then an overflow check.
2130         - Add a new opcode to air on arm64 for smull (multiplySignExtend32).
2131         - Fuse sign extend 32 + mul into smull (taking two 32-bit arguments and producing 64 bits). 
2132         - 1.25x speedup on power of two microbenchmark, 1.15x speedup on normal constant microbenchmark, 
2133           and no change on the no-constant benchmark.
2134         Also, skip some of the b3 tests that were failing before this patch so that the new tests can run
2135         to completion.
2136
2137         * assembler/MacroAssemblerARM64.h:
2138         (JSC::MacroAssemblerARM64::multiplySignExtend32):
2139         * assembler/testmasm.cpp:
2140         (JSC::testMul32SignExtend):
2141         (JSC::run):
2142         * b3/B3LowerMacros.cpp:
2143         * b3/B3LowerToAir.cpp:
2144         * b3/air/AirOpcode.opcodes:
2145         * b3/testb3.cpp:
2146         (JSC::B3::testMulArgs32SignExtend):
2147         (JSC::B3::testMulImm32SignExtend):
2148         (JSC::B3::testMemoryFence):
2149         (JSC::B3::testStoreFence):
2150         (JSC::B3::testLoadFence):
2151         (JSC::B3::testPinRegisters):
2152         (JSC::B3::run):
2153
2154 2019-07-11  Yusuke Suzuki  <ysuzuki@apple.com>
2155
2156         Unreviewed, revert r243617.
2157         https://bugs.webkit.org/show_bug.cgi?id=196341
2158
2159         Mark pointed out that JSVirtualMachine can be gone in the other thread while we are executing GC constraint-solving.
2160         This patch does not account that JavaScriptCore.framework is multi-thread safe: JSVirtualMachine wrapper can be destroyed,
2161         and [JSVirtualMachine dealloc] can be executed in any threads while the VM is retained and used in the other thread (e.g.
2162         destroyed from AutoReleasePool in some thread).
2163
2164         * API/JSContext.mm:
2165         (-[JSContext initWithVirtualMachine:]):
2166         (-[JSContext dealloc]):
2167         (-[JSContext initWithGlobalContextRef:]):
2168         (-[JSContext wrapperMap]):
2169         (+[JSContext contextWithJSGlobalContextRef:]):
2170         * API/JSVirtualMachine.mm:
2171         (initWrapperCache):
2172         (wrapperCache):
2173         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
2174         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
2175         (-[JSVirtualMachine initWithContextGroupRef:]):
2176         (-[JSVirtualMachine dealloc]):
2177         (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
2178         (-[JSVirtualMachine contextForGlobalContextRef:]):
2179         (-[JSVirtualMachine addContext:forGlobalContextRef:]):
2180         (scanExternalObjectGraph):
2181         (scanExternalRememberedSet):
2182         * API/JSVirtualMachineInternal.h:
2183         * runtime/JSGlobalObject.h:
2184         (JSC::JSGlobalObject::setWrapperMap):
2185         (JSC::JSGlobalObject::setAPIWrapper): Deleted.
2186         (JSC::JSGlobalObject::apiWrapper const): Deleted.
2187         * runtime/VM.h:
2188
2189 2019-07-10  Tadeu Zagallo  <tzagallo@apple.com>
2190
2191         Optimize join of large empty arrays
2192         https://bugs.webkit.org/show_bug.cgi?id=199636
2193
2194         Reviewed by Mark Lam.
2195
2196         Replicate the behavior of `str.repeat(count)` when performing `new Array(count + 1).join(str)`.
2197         I added two new microbenchmarks:
2198         - large-empty-array-join, which does not use the result of the join and runs ~44x faster and uses ~18x less memory.
2199         - large-empty-array-join-resolve-rope, which uses the result of the join and runs 2x faster.
2200
2201                                                     baseline                    diff
2202         large-empty-array-join                2713.9698+-72.7621    ^     61.2335+-10.4836       ^ definitely 44.3217x faster
2203         large-empty-array-join-resolve-string   26.5517+-0.3995     ^     12.9309+-0.5516        ^ definitely 2.0533x faster
2204
2205         large-empty-array-join memory usage with baseline (dirty):
2206             733012 kB current_mem
2207             756824 kB lifetime_peak
2208
2209         large-empty-array-join memory usage with diff (dirty):
2210             41904 kB current_mem
2211             41972 kB lifetime_peak
2212
2213         Additionally, I ran JetStream2, sunspider and v8-spider and all were neutral.
2214
2215         * runtime/ArrayPrototype.cpp:
2216         (JSC::fastJoin):
2217
2218 2019-07-08  Keith Miller  <keith_miller@apple.com>
2219
2220         Enable Intl.PluralRules and Intl.NumberFormatToParts by default
2221         https://bugs.webkit.org/show_bug.cgi?id=199288
2222
2223         Reviewed by Yusuke Suzuki.
2224
2225         These features have been around for a while. We should turn them on by default.
2226
2227         * runtime/IntlNumberFormatPrototype.cpp:
2228         (JSC::IntlNumberFormatPrototype::finishCreation):
2229         * runtime/IntlObject.cpp:
2230         (JSC::IntlObject::finishCreation): Deleted.
2231         * runtime/IntlObject.h:
2232         * runtime/Options.h:
2233
2234 2019-07-08  Antoine Quint  <graouts@apple.com>
2235
2236         [Pointer Events] Enable only on the most recent version of the supported iOS family
2237         https://bugs.webkit.org/show_bug.cgi?id=199562
2238         <rdar://problem/52766511>
2239
2240         Reviewed by Dean Jackson.
2241
2242         * Configurations/FeatureDefines.xcconfig:
2243
2244 2019-07-06  Michael Saboff  <msaboff@apple.com>
2245
2246         switch(String) needs to check for exceptions when resolving the string
2247         https://bugs.webkit.org/show_bug.cgi?id=199541
2248
2249         Reviewed by Mark Lam.
2250
2251         Added exception checks for resolved Strings in switch processing for all tiers.
2252
2253         * dfg/DFGOperations.cpp:
2254         * jit/JITOperations.cpp:
2255         * llint/LLIntSlowPaths.cpp:
2256         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2257
2258 2019-07-05  Mark Lam  <mark.lam@apple.com>
2259
2260         ArgumentsEliminationPhase::eliminateCandidatesThatInterfere() should not decrement nodeIndex pass zero.
2261         https://bugs.webkit.org/show_bug.cgi?id=199533
2262         <rdar://problem/52669111>
2263
2264         Reviewed by Filip Pizlo.
2265
2266         * dfg/DFGArgumentsEliminationPhase.cpp:
2267
2268 2019-07-05  Yusuke Suzuki  <ysuzuki@apple.com>
2269
2270         Unreviewed, fix build failure on ARM64_32
2271         https://bugs.webkit.org/show_bug.cgi?id=182434
2272
2273         Implicit narrowing from uint64_t to uint32_t happens. We should explicitly narrow it because we already checked
2274         the `length` is <= UINT32_MAX.
2275
2276         * runtime/ArrayPrototype.cpp:
2277         (JSC::arrayProtoFuncSpeciesCreate):
2278
2279 2019-07-05  Alexey Shvayka  <shvaikalesh@gmail.com>
2280
2281         [JSC] Clean up ArraySpeciesCreate
2282         https://bugs.webkit.org/show_bug.cgi?id=182434
2283
2284         Reviewed by Yusuke Suzuki.
2285
2286         We have duplicate code in arraySpeciesCreate, filter, map, concatSlowPath of ArrayPrototype.js
2287         and speciesConstructArray of ArrayPrototype.cpp. This patch fixes cross-realm Array constructor
2288         detection in native speciesConstructArray, upgrades `length` type to correctly handle large integers,
2289         and exposes it as @arraySpeciesCreate. Also removes now unused @isArrayConstructor private function.
2290         Native speciesConstructArray is preferred because it has fast path via speciesWatchpointIsValid.
2291
2292         Thoroughly benchmarked: this change progresses ARES-6 by 0-1%.
2293
2294         * builtins/ArrayPrototype.js:
2295         (filter):
2296         (map):
2297         (globalPrivate.concatSlowPath):
2298         (globalPrivate.arraySpeciesCreate): Deleted.
2299         * builtins/BuiltinNames.h:
2300         * runtime/ArrayConstructor.cpp:
2301         (JSC::arrayConstructorPrivateFuncIsArrayConstructor): Deleted.
2302         * runtime/ArrayConstructor.h:
2303         * runtime/ArrayPrototype.cpp:
2304         (JSC::arrayProtoFuncSpeciesCreate):
2305         * runtime/ArrayPrototype.h:
2306         * runtime/JSGlobalObject.cpp:
2307         (JSC::JSGlobalObject::init):
2308
2309 2019-07-05  Tadeu Zagallo  <tzagallo@apple.com>
2310
2311         Unreviewed, change the value used to scribble Heap::m_worldState
2312         https://bugs.webkit.org/show_bug.cgi?id=199498
2313
2314         Follow-up after r247160. The value used to scribble should have the
2315         conn bit set.
2316
2317         * heap/Heap.cpp:
2318         (JSC::Heap::~Heap):
2319
2320 2019-07-05  Ryan Haddad  <ryanhaddad@apple.com>
2321
2322         Unreviewed, rolling out r247115.
2323
2324         Breaks lldbWebKitTester (and by extension, test-webkitpy)
2325
2326         Reverted changeset:
2327
2328         "[WHLSL] Standard library is too big to directly include in
2329         WebCore"
2330         https://bugs.webkit.org/show_bug.cgi?id=198186
2331         https://trac.webkit.org/changeset/247115
2332
2333 2019-07-05  Tadeu Zagallo  <tzagallo@apple.com>
2334
2335         Scribble Heap::m_worldState on destructor
2336         https://bugs.webkit.org/show_bug.cgi?id=199498
2337
2338         Reviewed by Sam Weinig.
2339
2340         The worldState is dumped when we crash due to a failed checkConn, and
2341         this will make it clear if the heap has already been destroyed.
2342
2343         * heap/Heap.cpp:
2344         (JSC::Heap::~Heap):
2345
2346 2019-07-03  Sam Weinig  <weinig@apple.com>
2347
2348         Adopt simple structured bindings in more places
2349         https://bugs.webkit.org/show_bug.cgi?id=199247
2350
2351         Reviewed by Alex Christensen.
2352
2353         Replaces simple uses of std::tie() with structured bindings. Does not touch
2354         uses of std::tie() that are not initial declarations, use std::ignore or in
2355         case where the binding is captured by a lambda, as structured bindings don't
2356         work for those cases yet.
2357
2358         * runtime/PromiseDeferredTimer.cpp:
2359         (JSC::PromiseDeferredTimer::doWork):
2360         * wasm/WasmFaultSignalHandler.cpp:
2361         (JSC::Wasm::trapHandler):
2362         * wasm/js/JSWebAssemblyHelpers.h:
2363         (JSC::createSourceBufferFromValue):
2364         * wasm/js/WebAssemblyPrototype.cpp:
2365         (JSC::webAssemblyValidateFunc):
2366
2367 2019-07-03  Keith Miller  <keith_miller@apple.com>
2368
2369         PACCage should first cage leaving PAC bits intact then authenticate
2370         https://bugs.webkit.org/show_bug.cgi?id=199372
2371
2372         Reviewed by Saam Barati.
2373
2374         This ordering prevents someone from taking a signed pointer from
2375         outside the gigacage and using it in a struct that expects a caged
2376         pointer. Previously, the PACCaging just double checked that the PAC
2377         bits were valid for the original pointer.
2378
2379
2380                +---------------------------+
2381                |       |        |          |
2382                | "PAC" | "base" | "offset" +----+
2383                |       |        |          |    |
2384                +---------------------------+    | Caging
2385                 |                               |
2386                 |                               |
2387                 |                               v
2388                 |                +---------------------------+
2389                 |                |       |        |          |
2390                 | Bit Merge      | 00000 |  base  | "offset" |
2391                 |                |       |        |          |
2392                 |                +---------------------------+
2393                 |                               |
2394                 |                               |
2395                 v                               |  Bit Merge
2396           +---------------------------+         |
2397           |       |        |          |         |
2398           | "PAC" |  base  | "offset" +<--------+
2399           |       |        |          |
2400           +---------------------------+
2401                       |
2402                       |
2403                       | Authenticate
2404                       |
2405                       v
2406           +---------------------------+
2407           |       |        |          |
2408           | Auth  |  base  | "offset" |
2409           |       |        |          |
2410           +---------------------------+
2411
2412         The above ascii art graph shows how the PACCage system works. The
2413         key take away is that even if someone passes in a valid, signed
2414         pointer outside the cage it will still fail to authenticate as the
2415         "base" bits will change before authentication.
2416
2417
2418         * assembler/MacroAssemblerARM64E.h:
2419         * assembler/testmasm.cpp:
2420         (JSC::testCagePreservesPACFailureBit):
2421         * ftl/FTLLowerDFGToB3.cpp:
2422         (JSC::FTL::DFG::LowerDFGToB3::caged):
2423         * jit/AssemblyHelpers.h:
2424         (JSC::AssemblyHelpers::cageConditionally):
2425         * llint/LowLevelInterpreter64.asm:
2426
2427 2019-07-03  Paulo Matos  <pmatos@igalia.com>
2428
2429         Refactoring of architectural Register Information
2430         https://bugs.webkit.org/show_bug.cgi?id=198604
2431
2432         Reviewed by Keith Miller.
2433
2434         The goal of this patch is to centralize the register information per platform
2435         but access it in a platform independent way. The patch as been implemented for all
2436         known platforms: ARM64, ARMv7, MIPS, X86 and X86_64. Register information has
2437         been centralized in an architecture per-file: each file is called assembler/<arch>Registers.h.
2438
2439         RegisterInfo.h is used as a forwarding header to choose which register information to load.
2440         assembler/<arch>Assembler.h and jit/RegisterSet.cpp use this information in a platform
2441         independent way.
2442
2443         * CMakeLists.txt:
2444         * JavaScriptCore.xcodeproj/project.pbxproj:
2445         * assembler/ARM64Assembler.h:
2446         (JSC::ARM64Assembler::gprName): Use register names from register info file.
2447         (JSC::ARM64Assembler::sprName): likewise.
2448         (JSC::ARM64Assembler::fprName): likewise.
2449         * assembler/ARM64Registers.h: Added.
2450         * assembler/ARMv7Assembler.h:
2451         (JSC::ARMv7Assembler::gprName): Use register names from register info file.
2452         (JSC::ARMv7Assembler::sprName): likewise.
2453         (JSC::ARMv7Assembler::fprName): likewise.
2454         * assembler/ARMv7Registers.h: Added.
2455         * assembler/MIPSAssembler.h:
2456         (JSC::MIPSAssembler::gprName): Use register names from register info file.
2457         (JSC::MIPSAssembler::sprName): likewise.
2458         (JSC::MIPSAssembler::fprName): likewise.
2459         * assembler/MIPSRegisters.h: Added.
2460         * assembler/RegisterInfo.h: Added.
2461         * assembler/X86Assembler.h:
2462         (JSC::X86Assembler::gprName): Use register names from register info file.
2463         (JSC::X86Assembler::sprName): likewise.
2464         (JSC::X86Assembler::fprName): likewise.
2465         * assembler/X86Registers.h: Added.
2466         * assembler/X86_64Registers.h: Added.
2467         * jit/GPRInfo.h: Fix typo in comment (s/basline/baseline).
2468         * jit/RegisterSet.cpp:
2469         (JSC::RegisterSet::reservedHardwareRegisters): Use register properties from register info file.
2470         (JSC::RegisterSet::calleeSaveRegisters): likewise.
2471
2472 2019-07-02  Michael Saboff  <msaboff@apple.com>
2473
2474         Exception from For..of loop destructured assignment eliminates TDZ checks in subsequent code
2475         https://bugs.webkit.org/show_bug.cgi?id=199395
2476
2477         Reviewed by Filip Pizlo.
2478
2479         For destructuring assignmests, the assignment might throw a reference error if
2480         the RHS cannot be coerced.  The current bytecode generated for such assignments
2481         optimizes out the TDZ check after the coercible check.
2482
2483         By saving the current state of the TDZ stack before processing the setting of 
2484         target destructured values and then restoring afterwards, we won't optimize out
2485         later TDZ check(s).
2486
2487         A similar change of saving / restoring the TDZ stack where exceptions might
2488         happen was done for for..in loops in change set r232219.
2489
2490         * bytecompiler/NodesCodegen.cpp:
2491         (JSC::ObjectPatternNode::bindValue const):
2492
2493 2019-07-02  Commit Queue  <commit-queue@webkit.org>
2494
2495         Unreviewed, rolling out r247041.
2496         https://bugs.webkit.org/show_bug.cgi?id=199425
2497
2498         broke some iOS arm64e tests (Requested by keith_miller on
2499         #webkit).
2500
2501         Reverted changeset:
2502
2503         "PACCage should first cage leaving PAC bits intact then
2504         authenticate"
2505         https://bugs.webkit.org/show_bug.cgi?id=199372
2506         https://trac.webkit.org/changeset/247041
2507
2508 2019-07-02  Keith Miller  <keith_miller@apple.com>
2509
2510         Frozen Arrays length assignment should throw in strict mode
2511         https://bugs.webkit.org/show_bug.cgi?id=199365
2512
2513         Reviewed by Yusuke Suzuki.
2514
2515         * runtime/JSArray.cpp:
2516         (JSC::JSArray::put):
2517
2518 2019-07-02  Paulo Matos  <pmatos@linki.tools>
2519
2520         Fix typo in if/else block and remove dead assignment
2521         https://bugs.webkit.org/show_bug.cgi?id=199352
2522
2523         Reviewed by Alexey Proskuryakov.
2524
2525         * yarr/YarrPattern.cpp:
2526         (JSC::Yarr::YarrPattern::dumpPattern): Fix typo in if/else block and remove dead assignment
2527
2528 2019-07-02  Keith Miller  <keith_miller@apple.com>
2529
2530         PACCage should first cage leaving PAC bits intact then authenticate
2531         https://bugs.webkit.org/show_bug.cgi?id=199372
2532
2533         Reviewed by Saam Barati.
2534
2535         This ordering prevents someone from taking a signed pointer from
2536         outside the gigacage and using it in a struct that expects a caged
2537         pointer. Previously, the PACCaging just double checked that the PAC
2538         bits were valid for the original pointer.
2539
2540
2541                +---------------------------+
2542                |       |        |          |
2543                | "PAC" | "base" | "offset" +----+
2544                |       |        |          |    |
2545                +---------------------------+    | Caging
2546                 |                               |
2547                 |                               |
2548                 |                               v
2549                 |                +---------------------------+
2550                 |                |       |        |          |
2551                 | Bit Merge      | 00000 |  base  | "offset" |
2552                 |                |       |        |          |
2553                 |                +---------------------------+
2554                 |                               |
2555                 |                               |
2556                 v                               |  Bit Merge
2557           +---------------------------+         |
2558           |       |        |          |         |
2559           | "PAC" |  base  | "offset" +<--------+
2560           |       |        |          |
2561           +---------------------------+
2562                       |
2563                       |
2564                       | Authenticate
2565                       |
2566                       v
2567           +---------------------------+
2568           |       |        |          |
2569           | Auth  |  base  | "offset" |
2570           |       |        |          |
2571           +---------------------------+
2572
2573         The above ascii art graph shows how the PACCage system works. The
2574         key take away is that even if someone passes in a valid, signed
2575         pointer outside the cage it will still fail to authenticate as the
2576         "base" bits will change before authentication.
2577
2578
2579         * assembler/MacroAssemblerARM64E.h:
2580         * assembler/testmasm.cpp:
2581         (JSC::testCagePreservesPACFailureBit):
2582         * ftl/FTLLowerDFGToB3.cpp:
2583         (JSC::FTL::DFG::LowerDFGToB3::caged):
2584         * jit/AssemblyHelpers.h:
2585         (JSC::AssemblyHelpers::cageConditionally):
2586         * llint/LowLevelInterpreter64.asm:
2587
2588 2019-07-01  Justin Michaud  <justin_michaud@apple.com>
2589
2590         [Wasm-References] Disable references by default
2591         https://bugs.webkit.org/show_bug.cgi?id=199390
2592
2593         Reviewed by Saam Barati.
2594
2595         * runtime/Options.h:
2596
2597 2019-07-01  Ryan Haddad  <ryanhaddad@apple.com>
2598
2599         Unreviewed, rolling out r246946.
2600
2601         Caused JSC test crashes on arm64
2602
2603         Reverted changeset:
2604
2605         "Add b3 macro lowering for CheckMul on arm64"
2606         https://bugs.webkit.org/show_bug.cgi?id=199251
2607         https://trac.webkit.org/changeset/246946
2608
2609 2019-06-28  Justin Michaud  <justin_michaud@apple.com>
2610
2611         Add b3 macro lowering for CheckMul on arm64
2612         https://bugs.webkit.org/show_bug.cgi?id=199251
2613
2614         Reviewed by Robin Morisset.
2615
2616         - Lower CheckMul for 32-bit arguments on arm64 into a mul and then an overflow check.
2617         - Add a new opcode to air on arm64 for smull (multiplySignExtend32).
2618         - Fuse sign extend 32 + mul into smull (taking two 32-bit arguments and producing 64 bits). 
2619         - 1.25x speedup on power of two microbenchmark, 1.15x speedup on normal constant microbenchmark, 
2620           and no change on the no-constant benchmark.
2621         Also, skip some of the b3 tests that were failing before this patch so that the new tests can run
2622         to completion.
2623
2624         * assembler/MacroAssemblerARM64.h:
2625         (JSC::MacroAssemblerARM64::multiplySignExtend32):
2626         * assembler/testmasm.cpp:
2627         (JSC::testMul32SignExtend):
2628         (JSC::run):
2629         * b3/B3LowerMacros.cpp:
2630         * b3/B3LowerToAir.cpp:
2631         * b3/air/AirOpcode.opcodes:
2632         * b3/testb3.cpp:
2633         (JSC::B3::testMulArgs32SignExtend):
2634         (JSC::B3::testMulImm32SignExtend):
2635         (JSC::B3::testMemoryFence):
2636         (JSC::B3::testStoreFence):
2637         (JSC::B3::testLoadFence):
2638         (JSC::B3::testPinRegisters):
2639         (JSC::B3::run):
2640
2641 2019-06-28  Konstantin Tokarev  <annulen@yandex.ru>
2642
2643         Remove traces of ENABLE_ICONDATABASE remaining after its removal in 219733
2644         https://bugs.webkit.org/show_bug.cgi?id=199317
2645
2646         Reviewed by Michael Catanzaro.
2647
2648         While IconDatabase and all code using it was removed,
2649         ENABLE_ICONDATABASE still exists as build option and C++ macro.
2650
2651         * Configurations/FeatureDefines.xcconfig:
2652
2653 2019-06-27  Mark Lam  <mark.lam@apple.com>
2654
2655         FTL keepAlive()'s patchpoint should also declare that it reads HeapRange::top().
2656         https://bugs.webkit.org/show_bug.cgi?id=199291
2657
2658         Reviewed by Yusuke Suzuki and Filip Pizlo.
2659
2660         The sole purpose of keepAlive() is to communicate to B3 that an LValue
2661         needs to be kept alive past the last opportunity for a GC.  The only way
2662         we can get a GC is via a function call.  Hence, what keepAlive() really
2663         needs to communicate is that the LValue needs to be kept alive past the
2664         last function call.  Function calls read and write HeapRange::top().
2665         Currently, B3 does not shuffle writes.  Hence, simply inserting the
2666         keepAlive() after the calls that can GC is sufficient.
2667
2668         But to be strictly correct, keepAlive() should also declare that it reads
2669         HeapRange::top().  This will guarantee that the keepAlive patchpoint won't
2670         ever be moved before the function call should B3 gain the ability to shuffle
2671         writes in the future.
2672
2673         * ftl/FTLLowerDFGToB3.cpp:
2674         (JSC::FTL::DFG::LowerDFGToB3::keepAlive):
2675
2676 2019-06-27  Beth Dakin  <bdakin@apple.com>
2677
2678         Upstream use of MACCATALYST
2679         https://bugs.webkit.org/show_bug.cgi?id=199245
2680         rdar://problem/51687723
2681
2682         Reviewed by Tim Horton.
2683
2684         * Configurations/Base.xcconfig:
2685         * Configurations/FeatureDefines.xcconfig:
2686         * Configurations/JavaScriptCore.xcconfig:
2687         * Configurations/SDKVariant.xcconfig:
2688
2689 2019-06-27  Saam Barati  <sbarati@apple.com>
2690
2691         Make WEBGPU enabled only on Mojave and later.
2692
2693         Rubber-stamped by Myles C. Maxfield.
2694
2695         * Configurations/FeatureDefines.xcconfig:
2696
2697 2019-06-27  Don Olmstead  <don.olmstead@sony.com>
2698
2699         [FTW] Build JavaScriptCore
2700         https://bugs.webkit.org/show_bug.cgi?id=199254
2701
2702         Reviewed by Brent Fulgham.
2703
2704         * PlatformFTW.cmake: Added.
2705
2706 2019-06-27  Konstantin Tokarev  <annulen@yandex.ru>
2707
2708         Use JSC_GLIB_API_ENABLED instead of USE(GLIB) as a compile-time check for GLib JSC API
2709         https://bugs.webkit.org/show_bug.cgi?id=199270
2710
2711         Reviewed by Michael Catanzaro.
2712
2713         This change allows building code with enabled USE(GLIB) but without
2714         GLib JSC API.
2715
2716         * heap/Heap.cpp:
2717         (JSC::Heap::releaseDelayedReleasedObjects):
2718         * heap/Heap.h:
2719         * heap/HeapInlines.h:
2720
2721 2019-06-27  Devin Rousso  <drousso@apple.com>
2722
2723         Web Inspector: throw an error if console.count/console.countReset is called with an object that throws an error from toString
2724         https://bugs.webkit.org/show_bug.cgi?id=199252
2725
2726         Reviewed by Joseph Pecoraro.
2727
2728         Parse the arguments passed to `console.count` and `console.countReset` before sending it to
2729         the `ConsoleClient` so that an error can be thrown if the first argument doesn't `toString`
2730         nicely (e.g. without throwing an error).
2731
2732         Generate call stacks for `console.countReset` to match other `console` methods. Also do this
2733         for `console.time`, `console.timeLog`, and `console.timeEnd`. Limit the call stack to only
2734         have the top frame, so no unnecessary/extra data is sent to the frontend (right now, only
2735         the call location is displayed).
2736
2737         Rename `title` to `label` for `console.time`, `console.timeLog`, and `console.timeEnd` to
2738         better match the spec.
2739
2740         * runtime/ConsoleClient.h:
2741         * runtime/ConsoleObject.cpp:
2742         (JSC::valueOrDefaultLabelString):
2743         (JSC::consoleProtoFuncCount):
2744         (JSC::consoleProtoFuncCountReset):
2745         (JSC::consoleProtoFuncTime):
2746         (JSC::consoleProtoFuncTimeLog):
2747         (JSC::consoleProtoFuncTimeEnd):
2748
2749         * inspector/JSGlobalObjectConsoleClient.h:
2750         * inspector/JSGlobalObjectConsoleClient.cpp:
2751         (Inspector::JSGlobalObjectConsoleClient::count):
2752         (Inspector::JSGlobalObjectConsoleClient::countReset):
2753         (Inspector::JSGlobalObjectConsoleClient::time):
2754         (Inspector::JSGlobalObjectConsoleClient::timeLog):
2755         (Inspector::JSGlobalObjectConsoleClient::timeEnd):
2756
2757         * inspector/agents/InspectorConsoleAgent.h:
2758         * inspector/agents/InspectorConsoleAgent.cpp:
2759         (Inspector::InspectorConsoleAgent::startTiming):
2760         (Inspector::InspectorConsoleAgent::logTiming):
2761         (Inspector::InspectorConsoleAgent::stopTiming):
2762         (Inspector::InspectorConsoleAgent::count):
2763         (Inspector::InspectorConsoleAgent::countReset):
2764         (Inspector::InspectorConsoleAgent::getCounterLabel): Deleted.
2765
2766         * inspector/ConsoleMessage.h:
2767         * inspector/ConsoleMessage.cpp:
2768         (Inspector::ConsoleMessage::ConsoleMessage):
2769         Allow `ConsoleMessage`s to be created with both `ScriptArguments` and a `ScriptCallStack`.
2770
2771 2019-06-27  Fujii Hironori  <Hironori.Fujii@sony.com>
2772
2773         [CMake] Bump cmake_minimum_required version to 3.10
2774         https://bugs.webkit.org/show_bug.cgi?id=199181
2775
2776         Reviewed by Don Olmstead.
2777
2778         * CMakeLists.txt:
2779
2780 2019-06-26  Basuke Suzuki  <Basuke.Suzuki@sony.com>
2781
2782         [RemoteInspector] Add address argument to listen for RemoteInspectorServer Socket implementation.
2783         https://bugs.webkit.org/show_bug.cgi?id=199035
2784
2785         Reviewed by Ross Kirsling.
2786
2787         Added new argument `address` to start listening. 
2788
2789         * inspector/remote/socket/RemoteInspectorServer.cpp:
2790         (Inspector::RemoteInspectorServer::start):
2791         * inspector/remote/socket/RemoteInspectorServer.h:
2792         * inspector/remote/socket/posix/RemoteInspectorSocketPOSIX.cpp:
2793         (Inspector::Socket::listen):
2794         * inspector/remote/socket/win/RemoteInspectorSocketWin.cpp:
2795         (Inspector::Socket::listen):
2796
2797 2019-06-26  Keith Miller  <keith_miller@apple.com>
2798
2799         speciesConstruct needs to throw if the result is a DataView
2800         https://bugs.webkit.org/show_bug.cgi?id=199231
2801
2802         Reviewed by Mark Lam.
2803
2804         Previously, we only checked that the result was a
2805         JSArrayBufferView, which can include DataViews. This is incorrect
2806         as the result should be only be a TypedArray.
2807
2808         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
2809         (JSC::speciesConstruct):
2810
2811 2019-06-26  Joseph Pecoraro  <pecoraro@apple.com>
2812
2813         Web Inspector: Implement console.countReset
2814         https://bugs.webkit.org/show_bug.cgi?id=199200
2815
2816         Reviewed by Devin Rousso.
2817
2818         * inspector/JSGlobalObjectConsoleClient.cpp:
2819         (Inspector::JSGlobalObjectConsoleClient::countReset):
2820         * inspector/JSGlobalObjectConsoleClient.h:
2821         * inspector/agents/InspectorConsoleAgent.cpp:
2822         (Inspector::InspectorConsoleAgent::getCounterLabel):
2823         (Inspector::InspectorConsoleAgent::count):
2824         (Inspector::InspectorConsoleAgent::countReset):
2825         * inspector/agents/InspectorConsoleAgent.h:
2826         * runtime/ConsoleClient.h:
2827         * runtime/ConsoleObject.cpp:
2828         (JSC::ConsoleObject::finishCreation):
2829         (JSC::consoleProtoFuncCountReset):
2830
2831 2019-06-26  Keith Miller  <keith_miller@apple.com>
2832
2833         remove unneeded didBecomePrototype() calls
2834         https://bugs.webkit.org/show_bug.cgi?id=199221
2835
2836         Reviewed by Saam Barati.
2837
2838         Since we now set didBecomePrototype in Structure::create we don't
2839         need to set it expliticly in most of our finishCreation
2840         methods. The only exception to this is object prototype, which we
2841         set as the prototype of function prototype late (via
2842         setPrototypeWithoutTransition).
2843
2844         * inspector/JSInjectedScriptHostPrototype.cpp:
2845         (Inspector::JSInjectedScriptHostPrototype::finishCreation):
2846         * inspector/JSJavaScriptCallFramePrototype.cpp:
2847         (Inspector::JSJavaScriptCallFramePrototype::finishCreation):
2848         * runtime/ArrayIteratorPrototype.cpp:
2849         (JSC::ArrayIteratorPrototype::finishCreation):
2850         * runtime/ArrayPrototype.cpp:
2851         (JSC::ArrayPrototype::finishCreation):
2852         * runtime/AsyncFromSyncIteratorPrototype.cpp:
2853         (JSC::AsyncFromSyncIteratorPrototype::finishCreation):
2854         * runtime/AsyncFunctionPrototype.cpp:
2855         (JSC::AsyncFunctionPrototype::finishCreation):
2856         * runtime/AsyncGeneratorFunctionPrototype.cpp:
2857         (JSC::AsyncGeneratorFunctionPrototype::finishCreation):
2858         * runtime/AsyncGeneratorPrototype.cpp:
2859         (JSC::AsyncGeneratorPrototype::finishCreation):
2860         * runtime/AsyncIteratorPrototype.cpp:
2861         (JSC::AsyncIteratorPrototype::finishCreation):
2862         * runtime/GeneratorFunctionPrototype.cpp:
2863         (JSC::GeneratorFunctionPrototype::finishCreation):
2864         * runtime/GeneratorPrototype.cpp:
2865         (JSC::GeneratorPrototype::finishCreation):
2866         * runtime/IteratorPrototype.cpp:
2867         (JSC::IteratorPrototype::finishCreation):
2868         * runtime/JSGlobalObject.cpp:
2869         (JSC::JSGlobalObject::init):
2870         * runtime/MapIteratorPrototype.cpp:
2871         (JSC::MapIteratorPrototype::finishCreation):
2872         * runtime/MapPrototype.cpp:
2873         (JSC::MapPrototype::finishCreation):
2874         * runtime/ObjectPrototype.cpp:
2875         (JSC::ObjectPrototype::finishCreation):
2876         * runtime/RegExpStringIteratorPrototype.cpp:
2877         (JSC::RegExpStringIteratorPrototype::finishCreation):
2878         * runtime/SetIteratorPrototype.cpp:
2879         (JSC::SetIteratorPrototype::finishCreation):
2880         * runtime/SetPrototype.cpp:
2881         (JSC::SetPrototype::finishCreation):
2882         * runtime/StringIteratorPrototype.cpp:
2883         (JSC::StringIteratorPrototype::finishCreation):
2884         * runtime/WeakMapPrototype.cpp:
2885         (JSC::WeakMapPrototype::finishCreation):
2886         * runtime/WeakObjectRefPrototype.cpp:
2887         (JSC::WeakObjectRefPrototype::finishCreation):
2888         * runtime/WeakSetPrototype.cpp:
2889         (JSC::WeakSetPrototype::finishCreation):
2890
2891 2019-06-25  Keith Miller  <keith_miller@apple.com>
2892
2893         Structure::create should call didBecomePrototype()
2894         https://bugs.webkit.org/show_bug.cgi?id=196315
2895
2896         Reviewed by Filip Pizlo.
2897
2898         Structure::create should also assert that the indexing type makes sense
2899         for the prototype being used.
2900
2901         * runtime/JSObject.h:
2902         * runtime/Structure.cpp:
2903         (JSC::Structure::isValidPrototype):
2904         (JSC::Structure::changePrototypeTransition):
2905         * runtime/Structure.h:
2906         (JSC::Structure::create): Deleted.
2907         * runtime/StructureInlines.h:
2908         (JSC::Structure::create):
2909         (JSC::Structure::setPrototypeWithoutTransition):
2910
2911 2019-06-25  Joseph Pecoraro  <pecoraro@apple.com>
2912
2913         Web Inspector: Implement console.timeLog
2914         https://bugs.webkit.org/show_bug.cgi?id=199184
2915
2916         Reviewed by Devin Rousso.
2917
2918         * inspector/JSGlobalObjectConsoleClient.cpp:
2919         (Inspector::JSGlobalObjectConsoleClient::timeLog):
2920         * inspector/JSGlobalObjectConsoleClient.h:
2921         * inspector/agents/InspectorConsoleAgent.cpp:
2922         (Inspector::InspectorConsoleAgent::logTiming):
2923         (Inspector::InspectorConsoleAgent::stopTiming):
2924         * inspector/agents/InspectorConsoleAgent.h:
2925         * runtime/ConsoleClient.h:
2926         * runtime/ConsoleObject.cpp:
2927         (JSC::ConsoleObject::finishCreation):
2928         (JSC::consoleProtoFuncTimeLog):
2929
2930 2019-06-25  Michael Catanzaro  <mcatanzaro@igalia.com>
2931
2932         REGRESSION(r245586): static assertion failed: Match result and EncodedMatchResult should be the same size
2933         https://bugs.webkit.org/show_bug.cgi?id=198518
2934
2935         Reviewed by Keith Miller.
2936
2937         r245586 made some bad assumptions about the size of size_t, which we can solve using the
2938         CPU(ADDRESS32) guard that I didn't know about.
2939
2940         This solution was developed by Mark Lam and Keith Miller. I'm just preparing the patch.
2941
2942         * runtime/MatchResult.h:
2943
2944 2019-06-24  Commit Queue  <commit-queue@webkit.org>
2945
2946         Unreviewed, rolling out r246714.
2947         https://bugs.webkit.org/show_bug.cgi?id=199179
2948
2949         revert to do patch in a different way. (Requested by keith_mi_
2950         on #webkit).
2951
2952         Reverted changeset:
2953
2954         "All prototypes should call didBecomePrototype()"
2955         https://bugs.webkit.org/show_bug.cgi?id=196315
2956         https://trac.webkit.org/changeset/246714
2957
2958 2019-06-24  Alexey Shvayka  <shvaikalesh@gmail.com>
2959
2960         Add Array.prototype.{flat,flatMap} to unscopables
2961         https://bugs.webkit.org/show_bug.cgi?id=194322
2962
2963         Reviewed by Keith Miller.
2964
2965         * runtime/ArrayPrototype.cpp:
2966         (JSC::ArrayPrototype::finishCreation):
2967
2968 2019-06-24  Mark Lam  <mark.lam@apple.com>
2969
2970         ArraySlice needs to keep the source array alive.
2971         https://bugs.webkit.org/show_bug.cgi?id=197374
2972         <rdar://problem/50304429>
2973
2974         Reviewed by Michael Saboff and Filip Pizlo.
2975
2976         The implementation of the FTL ArraySlice intrinsics may GC while allocating the
2977         result array and its butterfly.  Previously, ArraySlice already keeps the source
2978         butterfly alive in order to copy from it to the new butterfly after the allocation.
2979         Unfortunately, this is not enough.  We also need to keep the source array alive
2980         so that GC will scan the values in the butterfly as well.  Note: the butterfly
2981         does not have a visitChildren() method to do this scan.  It's the parent object's
2982         responsibility to do the scanning.
2983
2984         This patch fixes this by introducing a keepAlive() utility method, and we use it
2985         to keep the source array alive while allocating the result array and butterfly.
2986
2987         keepAlive() works by using a patchpoint to communicate to B3 that a value (the
2988         source array in this case) is still in use.  It also uses a fence to keep B3 from
2989         relocating the patchpoint, which may defeat the fix.
2990
2991         For the DFG's SpeculativeJIT::compileArraySlice(), we may have lucked out and the
2992         source array cell is kept alive.  This patch makes it explicit that we should
2993         keep its cell alive till after the result array has been allocated.
2994
2995         For the Baseline JIT and LLInt, we use the arrayProtoFuncSlice() runtime function
2996         and there is no issue because the source array (in "thisObj") is in the element
2997         copying loop that follows the allocation of the result array.  However, for
2998         documentation purposes, this patch adds a call to HeapCell::use() to indicate that
2999         the source array need to kept alive at least until after the allocation of the
3000         result array.
3001
3002         * dfg/DFGSpeculativeJIT.cpp:
3003         (JSC::DFG::SpeculativeJIT::compileArraySlice):
3004         * ftl/FTLLowerDFGToB3.cpp:
3005         (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice):
3006         (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray):
3007         (JSC::FTL::DFG::LowerDFGToB3::keepAlive):
3008         * runtime/ArrayPrototype.cpp:
3009         (JSC::arrayProtoFuncSlice):
3010
3011 2019-06-22  Robin Morisset  <rmorisset@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>
3012
3013         All prototypes should call didBecomePrototype()
3014         https://bugs.webkit.org/show_bug.cgi?id=196315
3015
3016         Reviewed by Saam Barati.
3017
3018         Otherwise we won't remember to run haveABadTime() when someone adds to them an indexed accessor.
3019
3020         I added a check used in both Structure::finishCreation() and Structure::changePrototypeTransition to make sure we don't
3021         create structures with invalid prototypes.
3022         It found a lot of objects that are used as prototypes in JSGlobalObject and yet were missing didBecomePrototype() in their finishCreation().
3023         Somewhat surprisingly, some of them have names like FunctionConstructor and not only FooPrototype.
3024
3025         * runtime/BigIntPrototype.cpp:
3026         (JSC::BigIntPrototype::finishCreation):
3027         * runtime/BooleanPrototype.cpp:
3028         (JSC::BooleanPrototype::finishCreation):
3029         * runtime/DatePrototype.cpp:
3030         (JSC::DatePrototype::finishCreation):
3031         * runtime/ErrorConstructor.cpp:
3032         (JSC::ErrorConstructor::finishCreation):
3033         * runtime/ErrorPrototype.cpp:
3034         (JSC::ErrorPrototype::finishCreation):
3035         * runtime/FunctionConstructor.cpp:
3036         (JSC::FunctionConstructor::finishCreation):
3037         * runtime/FunctionPrototype.cpp:
3038         (JSC::FunctionPrototype::finishCreation):
3039         * runtime/IntlCollatorPrototype.cpp:
3040         (JSC::IntlCollatorPrototype::finishCreation):
3041         * runtime/IntlDateTimeFormatPrototype.cpp:
3042         (JSC::IntlDateTimeFormatPrototype::finishCreation):
3043         * runtime/IntlNumberFormatPrototype.cpp:
3044         (JSC::IntlNumberFormatPrototype::finishCreation):
3045         * runtime/IntlPluralRulesPrototype.cpp:
3046         (JSC::IntlPluralRulesPrototype::finishCreation):
3047         * runtime/JSArrayBufferPrototype.cpp:
3048         (JSC::JSArrayBufferPrototype::finishCreation):
3049         * runtime/JSDataViewPrototype.cpp:
3050         (JSC::JSDataViewPrototype::finishCreation):
3051         * runtime/JSGenericTypedArrayViewPrototypeInlines.h:
3052         (JSC::JSGenericTypedArrayViewPrototype<ViewClass>::finishCreation):
3053         * runtime/JSGlobalObject.cpp:
3054         (JSC::createConsoleProperty):
3055         * runtime/JSPromisePrototype.cpp:
3056         (JSC::JSPromisePrototype::finishCreation):
3057         * runtime/JSTypedArrayViewConstructor.cpp:
3058         (JSC::JSTypedArrayViewConstructor::finishCreation):
3059         * runtime/JSTypedArrayViewPrototype.cpp:
3060         (JSC::JSTypedArrayViewPrototype::finishCreation):
3061         * runtime/NumberPrototype.cpp:
3062         (JSC::NumberPrototype::finishCreation):
3063         * runtime/RegExpPrototype.cpp:
3064         (JSC::RegExpPrototype::finishCreation):
3065         * runtime/StringPrototype.cpp:
3066         (JSC::StringPrototype::finishCreation):
3067         * runtime/Structure.cpp:
3068         (JSC::Structure::isValidPrototype):
3069         (JSC::Structure::changePrototypeTransition):
3070         * runtime/Structure.h:
3071         * runtime/StructureInlines.h:
3072         (JSC::Structure::setPrototypeWithoutTransition):
3073         * runtime/SymbolPrototype.cpp:
3074         (JSC::SymbolPrototype::finishCreation):
3075         * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
3076         (JSC::WebAssemblyCompileErrorPrototype::finishCreation):
3077         * wasm/js/WebAssemblyInstancePrototype.cpp:
3078         (JSC::WebAssemblyInstancePrototype::finishCreation):
3079         * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
3080         (JSC::WebAssemblyLinkErrorPrototype::finishCreation):
3081         * wasm/js/WebAssemblyMemoryPrototype.cpp:
3082         (JSC::WebAssemblyMemoryPrototype::finishCreation):
3083         * wasm/js/WebAssemblyModulePrototype.cpp:
3084         (JSC::WebAssemblyModulePrototype::finishCreation):
3085         * wasm/js/WebAssemblyPrototype.cpp:
3086         (JSC::WebAssemblyPrototype::finishCreation):
3087         * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
3088         (JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):
3089         * wasm/js/WebAssemblyTablePrototype.cpp:
3090         (JSC::WebAssemblyTablePrototype::finishCreation):
3091
3092 2019-06-22  Yusuke Suzuki  <ysuzuki@apple.com>
3093
3094         [JSC] Strict, Sloppy and Arrow functions should have different classInfo
3095         https://bugs.webkit.org/show_bug.cgi?id=197631
3096
3097         Reviewed by Saam Barati.
3098
3099         If a constructor inherits a builtin class, it creates a Structure which is subclassing the builtin class.
3100         This is done by using InternalFunction::createSubclassStructure. But to accelerate the common cases, we
3101         cache the created structure in InternalFunctionAllocationProfile. Whether the cache is valid is checked
3102         by comparing classInfo of the cached structure and the given base structure. This implicitly assume that
3103         each builtin class's InternalFunction creates an instance based on one structure.
3104
3105         However, Function constructor is an exception: Function constructor creates an instance which has different
3106         structures based on a parameter. If a strict code is given (e.g. "'use strict'"), it creates a function
3107         instance with strict function structure.
3108
3109         As a result, InternalFunctionAllocationProfile incorrectly caches the structure. Consider the following code.
3110
3111             class A extends Function { };
3112             let a = new A("'use strict'");
3113             let b = new A("");
3114
3115         While `a` and `b` should have different structures, `A` caches the structure for `a`, and reuse it even the given
3116         code is not a strict code. This is problematic: We are separating structures of strict, sloppy, and arrow functions
3117         because they have different properties. However, in the above case, a and b have the same structure while they have
3118         different properties. So it causes incorrect structure-based caching in JSC. One of the example is HasOwnPropertyCache.
3119
3120         In this patch, we introduce JSStrictFunction, JSSloppyFunction, and JSArrowFunction classes and classInfos. This design
3121         works well and already partially accepted for JSGeneratorFunction, JSAsyncGeneratorFunction, and JSAsyncFunction. Each
3122         structure now has a different classInfo so that InternalFunctionAllocationProfile correctly caches and invalidates the
3123         cached one based on the classInfo. Since we already have different structures for these instances, and DFG and FTL
3124         optimizations are based on JSFunctionType (not classInfo), introducing these three classInfo do not break the optimization.
3125
3126         Note that structures on ArrayConstructor does not cause the same problem. It only uses Undecided indexing typed array
3127         structure in InternalFunctionAllocationProfile, and once haveABadTime happens, it clears InternalFunctionAllocationProfile.
3128
3129         * runtime/JSAsyncFunction.h: This subspaceFor is not necessary since it is defined in JSFunction. And we already ensure that
3130         sizeof(JSAsyncFunction) == sizeof(JSFunction).
3131         * runtime/JSAsyncGeneratorFunction.cpp:
3132         * runtime/JSAsyncGeneratorFunction.h: Ditto.
3133         * runtime/JSFunction.cpp:
3134         * runtime/JSFunction.h:
3135         * runtime/JSGeneratorFunction.h: Ditto.
3136         * runtime/JSGlobalObject.cpp:
3137         (JSC::JSGlobalObject::init):
3138
3139 2019-06-22  Yusuke Suzuki  <ysuzuki@apple.com>
3140
3141         [JSC] ClassExpr should not store result in the middle of evaluation
3142         https://bugs.webkit.org/show_bug.cgi?id=199106
3143
3144         Reviewed by Tadeu Zagallo.
3145
3146         Let's consider the case,
3147
3148             let a = class A {
3149                 static get[a=0x12345678]() {
3150                 }
3151             };
3152
3153         When evaluating `class A` expression, we should not use the local register for `let a`
3154         until we finally store it to that register. Otherwise, `a=0x12345678` will override it.
3155         Out BytecodeGenerator does that this by using tempDestination and finalDestination, but
3156         we did not do that in ClassExprNode.
3157
3158         This patch leverages tempDestination and finalDestination to store `class A` result finally,
3159         while we attempt to reduce mov.
3160
3161         * bytecompiler/NodesCodegen.cpp:
3162         (JSC::ClassExprNode::emitBytecode):
3163
3164 2019-06-21  Sihui Liu  <sihui_liu@apple.com>
3165
3166         openDatabase should return an empty object when WebSQL is disabled
3167         https://bugs.webkit.org/show_bug.cgi?id=198805
3168
3169         Reviewed by Geoffrey Garen.
3170
3171         * runtime/JSFunction.cpp:
3172         (JSC::JSFunction::createFunctionThatMasqueradesAsUndefined):
3173         * runtime/JSFunction.h:
3174
3175 2019-06-21  Alexey Shvayka  <shvaikalesh@gmail.com>
3176
3177         Remove extra check in RegExp @matchSlow
3178         https://bugs.webkit.org/show_bug.cgi?id=198846
3179
3180         Reviewed by Joseph Pecoraro.
3181
3182         Type of RegExp `exec` result is already asserted in @regExpExec.
3183
3184         * builtins/RegExpPrototype.js:
3185         (globalPrivate.matchSlow): Remove isObject check.
3186
3187 2019-06-20  Justin Michaud  <justin_michaud@apple.com>
3188
3189         [WASM-References] Add extra tests for Wasm references + fix element parsing and subtyping bugs
3190         https://bugs.webkit.org/show_bug.cgi?id=199044
3191
3192         Reviewed by Saam Barati.
3193
3194         Fix parsing table indices from the element section. The byte that we previously read as the table index actually tells us how to parse the table index.
3195         Fix some areas where we got the isSubtype check wrong, causing funcrefs to not be considred anyrefs.
3196
3197         * wasm/WasmAirIRGenerator.cpp:
3198         (JSC::Wasm::AirIRGenerator::unify):
3199         * wasm/WasmSectionParser.cpp:
3200         (JSC::Wasm::SectionParser::parseElement):
3201         * wasm/WasmValidate.cpp:
3202         (JSC::Wasm::Validate::unify):
3203
3204 2019-06-18  Darin Adler  <darin@apple.com>
3205
3206         Tidy up the remaining bits of the AtomicString to AtomString rename
3207         https://bugs.webkit.org/show_bug.cgi?id=198990
3208
3209         Reviewed by Michael Catanzaro.
3210
3211         * dfg/DFGSpeculativeJIT.cpp:
3212         (JSC::DFG::SpeculativeJIT::speculateStringIdentAndLoadStorage): Use flagIsAtom.
3213         * dfg/DFGSpeculativeJIT32_64.cpp:
3214         (JSC::DFG::SpeculativeJIT::compile): Ditto.
3215         * dfg/DFGSpeculativeJIT64.cpp:
3216         (JSC::DFG::SpeculativeJIT::compile): Ditto.
3217         * ftl/FTLLowerDFGToB3.cpp:
3218         (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty): Ditto.
3219         (JSC::FTL::DFG::LowerDFGToB3::speculateStringIdent): Ditto.
3220
3221 2019-06-19  Alexey Shvayka  <shvaikalesh@gmail.com>
3222
3223         Optimize `resolve` method lookup in Promise static methods
3224         https://bugs.webkit.org/show_bug.cgi?id=198864
3225
3226         Reviewed by Yusuke Suzuki.
3227
3228         Lookup `resolve` method only once in Promise.{all,allSettled,race}.
3229         (https://github.com/tc39/ecma262/pull/1506)
3230
3231         Already implemented in V8.
3232
3233         * builtins/PromiseConstructor.js:
3234
3235 2019-06-19  Tadeu Zagallo  <tzagallo@apple.com>
3236
3237         Some of the ASSERTs in CachedTypes.cpp should be RELEASE_ASSERTs
3238         https://bugs.webkit.org/show_bug.cgi?id=199030
3239
3240         Reviewed by Mark Lam.
3241
3242         These assertions represent strong assumptions that the cache makes so
3243         it's not safe to keep executing if they fail.
3244
3245         * runtime/CachedTypes.cpp:
3246         (JSC::Encoder::malloc):
3247         (JSC::Encoder::Page::alignEnd):
3248         (JSC::Decoder::ptrForOffsetFromBase):
3249         (JSC::Decoder::handleForEnvironment const):
3250         (JSC::Decoder::setHandleForEnvironment):
3251         (JSC::CachedPtr::get const):
3252         (JSC::CachedOptional::encode):
3253         (JSC::CachedOptional::decodeAsPtr const): Deleted.
3254
3255 2019-06-19  Adrian Perez de Castro  <aperez@igalia.com>
3256
3257         [WPE][GTK] Fix build with unified sources disabled
3258         https://bugs.webkit.org/show_bug.cgi?id=198752
3259
3260         Reviewed by Michael Catanzaro.
3261
3262         * runtime/WeakObjectRefConstructor.h: Add missing inclusion of InternalFunction.h
3263         and forward declaration of WeakObjectRefPrototype.
3264         * wasm/js/WebAssemblyFunction.cpp: Add missing inclusion of JSWebAssemblyHelpers.h
3265
3266 2019-06-19  Justin Michaud  <justin_michaud@apple.com>
3267
3268         [WASM-References] Rename anyfunc to funcref
3269         https://bugs.webkit.org/show_bug.cgi?id=198983
3270
3271         Reviewed by Yusuke Suzuki.
3272
3273         Anyfunc should become funcref since it was renamed in the spec. We should also support the string 'anyfunc' in the table constructor since this is 
3274         the only non-binary-format place where it is exposed to users.
3275
3276         * wasm/WasmAirIRGenerator.cpp:
3277         (JSC::Wasm::AirIRGenerator::gFuncref):
3278         (JSC::Wasm::AirIRGenerator::tmpForType):
3279         (JSC::Wasm::AirIRGenerator::emitCCall):
3280         (JSC::Wasm::AirIRGenerator::moveOpForValueType):
3281         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
3282         (JSC::Wasm::AirIRGenerator::addLocal):
3283         (JSC::Wasm::AirIRGenerator::addConstant):
3284         (JSC::Wasm::AirIRGenerator::addRefFunc):
3285         (JSC::Wasm::AirIRGenerator::addReturn):
3286         (JSC::Wasm::AirIRGenerator::gAnyfunc): Deleted.
3287         * wasm/WasmCallingConvention.h:
3288         (JSC::Wasm::CallingConventionAir::marshallArgument const):
3289         (JSC::Wasm::CallingConventionAir::setupCall const):
3290         * wasm/WasmExceptionType.h:
3291         * wasm/WasmFormat.h:
3292         (JSC::Wasm::isValueType):
3293         (JSC::Wasm::isSubtype):
3294         (JSC::Wasm::TableInformation::wasmType const):
3295         * wasm/WasmFunctionParser.h:
3296         (JSC::Wasm::FunctionParser<Context>::parseExpression):
3297         * wasm/WasmSectionParser.cpp:
3298         (JSC::Wasm::SectionParser::parseTableHelper):
3299         (JSC::Wasm::SectionParser::parseElement):
3300         (JSC::Wasm::SectionParser::parseInitExpr):
3301         * wasm/WasmValidate.cpp:
3302         (JSC::Wasm::Validate::addRefFunc):
3303         * wasm/js/JSToWasm.cpp:
3304         (JSC::Wasm::createJSToWasmWrapper):
3305         * wasm/js/WasmToJS.cpp:
3306         (JSC::Wasm::wasmToJS):
3307         * wasm/js/WebAssemblyFunction.cpp:
3308         (JSC::callWebAssemblyFunction):
3309         (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
3310         * wasm/js/WebAssemblyModuleRecord.cpp:
3311         (JSC::WebAssemblyModuleRecord::link):
3312         * wasm/js/WebAssemblyTableConstructor.cpp:
3313         (JSC::constructJSWebAssemblyTable):
3314         * wasm/wasm.json:
3315
3316 2019-06-19  Fujii Hironori  <Hironori.Fujii@sony.com>
3317
3318         [CMake][Win] CombinedDomains.json is generated twice in JavaScriptCore_CopyPrivateHeaders and JavaScriptCore projects
3319         https://bugs.webkit.org/show_bug.cgi?id=198853
3320
3321         Reviewed by Don Olmstead.
3322
3323         JavaScriptCore_CopyPrivateHeaders target needs to have a direct or
3324         indirect dependency of JavaScriptCore target for CMake Visual
3325         Studio generator to eliminate duplicated custom commands.
3326
3327         * CMakeLists.txt: Added JavaScriptCore as a dependency of JavaScriptCore_CopyPrivateHeaders.
3328
3329 2019-06-18  Yusuke Suzuki  <ysuzuki@apple.com>
3330
3331         [JSC] JSLock should be WebThread aware
3332         https://bugs.webkit.org/show_bug.cgi?id=198911
3333
3334         Reviewed by Geoffrey Garen.
3335
3336         Since WebKitLegacy content rendering is done in WebThread instead of the main thread in iOS, user of WebKitLegacy (e.g. UIWebView) needs
3337         to grab the WebThread lock (which is a recursive lock) in the main thread when touching the WebKitLegacy content.
3338         But, WebKitLegacy can expose JSContext for the web view. And we can interact with the JS content through JavaScriptCore APIs. However,
3339         since WebThread is a concept in WebCore, JavaScriptCore APIs do not grab the WebThread lock. As a result, WebKitLegacy web content can be
3340         modified from the main thread without grabbing the WebThread lock through JavaScriptCore APIs.
3341
3342         This patch makes JSC aware of WebThread: JSLock grabs the WebThread lock before grabbing JS's lock. While this seems layering violation,
3343         we already have many USE(WEB_THREAD) and WebThread aware code in WTF. Eventually, we should move WebThread code from WebCore to WTF since
3344         JSC and WTF need to be aware of WebThread. But, for now, we just use the function pointer exposed by WebCore.
3345
3346         Since both JSLock and the WebThread lock are recursive locks, nested locking is totally OK. The possible problem is the order of locking.
3347         We ensure that we always grab locks in (1) the WebThread lock and (2) JSLock order.
3348
3349         In JSLock, we take the WebThread lock, but we do not unlock it. This is how we use the WebThread lock: the WebThread lock is released
3350         automatically when RunLoop finishes the current cycle, and in WebKitLegacy, we do not call unlocking function of the WebThread lock except
3351         for some edge cases.
3352
3353         * API/JSVirtualMachine.mm:
3354         (-[JSVirtualMachine isWebThreadAware]):
3355         * API/JSVirtualMachineInternal.h:
3356         * runtime/JSLock.cpp:
3357         (JSC::JSLockHolder::JSLockHolder):
3358         (JSC::JSLock::lock):
3359         (JSC::JSLockHolder::init): Deleted.
3360         * runtime/JSLock.h:
3361         (JSC::JSLock::makeWebThreadAware):
3362         (JSC::JSLock::isWebThreadAware const):
3363
3364 2019-06-18  Justin Michaud  <justin_michaud@apple.com>