ca27142b989e615189439ad862a025be237d4b97
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2020-03-17  Yusuke Suzuki  <ysuzuki@apple.com>
2
3         [JSC] DeleteIC patchpoint in FTL should require tag and mask registers
4         https://bugs.webkit.org/show_bug.cgi?id=209197
5         <rdar://problem/60531308>
6
7         Reviewed by Tadeu Zagallo and Saam Barati.
8
9         DeleteIC patchpoint is emitting `branchIfNotCell` machine code. This requires a mask register
10         while we are not reserving them when creating a patchpoint.
11
12         In general, our IC code is assuming usual CCallHelpers environment which provides macro-assembler
13         scratch, tag, and mask registers. We should offer them even if IC is emitted from FTL. In this
14         patch, we offer tag and mask registers for Delete IC even if this IC is not currently using tag
15         register.
16
17         * ftl/FTLLowerDFGToB3.cpp:
18         (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
19
20 2020-03-17  Tadeu Zagallo  <tzagallo@apple.com>
21
22         AccessCase::canReplace should allow a Getter to replace an IntrinsicGetter
23         https://bugs.webkit.org/show_bug.cgi?id=209158
24         <rdar://problem/59222012>
25
26         Reviewed by Saam Barati.
27
28         When we override an intrinsic getter with a user defined getter, we might end up with the
29         same offset and attributes. In which case, an inline cache that contained an entry for the
30         intrisic getter will believe that it is still valid, and add a new getter access case,
31         leading to duplicate entries for the same structure.
32
33         * bytecode/AccessCase.cpp:
34         (JSC::AccessCase::canReplace const):
35
36 2020-03-16  Yusuke Suzuki  <ysuzuki@apple.com>
37
38         [JSC] JSMapIterator and JSSetIterator are CellType
39         https://bugs.webkit.org/show_bug.cgi?id=209168
40         <rdar://problem/59705631>
41
42         Reviewed by Saam Barati.
43
44         They are JSCell, not JSObject since they are not used as a user-observable set/map iterators in JSC.
45         However, their JSType is ObjectType. They should use CellType instead.
46
47         * runtime/JSMapIterator.h:
48         * runtime/JSSetIterator.h:
49
50 2020-03-16  Keith Miller  <keith_miller@apple.com>
51
52         JavaScript identifier grammar supports unescaped astral symbols, but JSC doesn’t
53         https://bugs.webkit.org/show_bug.cgi?id=208998
54
55         Reviewed by Michael Saboff.
56
57         This patch fixes a bug in the parser that allows for surrogate pairs when parsing identifiers.
58         It also makes a few other changes to the parser:
59
60         1) When looking for keywords we just need to check that subsequent
61         character cannot be a identifier part or an escape start.
62
63         2) The only time we call parseIdentifierSlowCase is when we hit an
64         escape start or a surrogate pair so we can optimize that to just
65         copy everything up slow character into our buffer.
66
67         3) We shouldn't allow for asking if a UChar is an identifier start/part.
68
69         * KeywordLookupGenerator.py:
70         (Trie.printSubTreeAsC):
71         (Trie.printAsC):
72         * parser/Lexer.cpp:
73         (JSC::isNonLatin1IdentStart):
74         (JSC::isIdentStart):
75         (JSC::isSingleCharacterIdentStart):
76         (JSC::cannotBeIdentStart):
77         (JSC::isIdentPart):
78         (JSC::isSingleCharacterIdentPart):
79         (JSC::cannotBeIdentPartOrEscapeStart):
80         (JSC::Lexer<LChar>::currentCodePoint const):
81         (JSC::Lexer<UChar>::currentCodePoint const):
82         (JSC::Lexer<LChar>::parseIdentifier):
83         (JSC::Lexer<UChar>::parseIdentifier):
84         (JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
85         (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
86         (JSC::Lexer<T>::scanRegExp):
87         (JSC::isIdentPartIncludingEscapeTemplate): Deleted.
88         (JSC::isIdentPartIncludingEscape): Deleted.
89         * parser/Lexer.h:
90         (JSC::Lexer::setOffsetFromSourcePtr): Deleted.
91         * parser/Parser.cpp:
92         (JSC::Parser<LexerType>::printUnexpectedTokenText):
93         * parser/ParserTokens.h:
94
95 2020-03-13  Sergio Villar Senin  <svillar@igalia.com>
96
97         [WebXR] IDLs, stubs and build configuration for WPE
98         https://bugs.webkit.org/show_bug.cgi?id=208702
99
100         Reviewed by Dean Jackson.
101
102         * Configurations/FeatureDefines.xcconfig: Added ENABLE_WEBXR, off by default.
103
104 2020-03-15  Yusuke Suzuki  <ysuzuki@apple.com>
105
106         reportZappedCellAndCrash should handle PreciseAllocation in IsoSubspace
107         https://bugs.webkit.org/show_bug.cgi?id=209042
108
109         Reviewed by Mark Lam.
110
111         This patch adds support of PreciseAllocation cells to reportZappedCellAndCrash, since now it is frequently used
112         as a lower-tier cells in IsoSubspace.
113
114         * heap/IsoSubspace.h:
115         * heap/IsoSubspaceInlines.h:
116         (JSC::IsoSubspace::forEachLowerTierFreeListedPreciseAllocation):
117         * runtime/JSCell.cpp:
118         (JSC::reportZappedCellAndCrash):
119
120 2020-03-15  Yusuke Suzuki  <ysuzuki@apple.com>
121
122         Should not use variable-length-array (VLA)
123         https://bugs.webkit.org/show_bug.cgi?id=209043
124
125         Reviewed by Mark Lam.
126
127         This patch disables variable-length-array (VLA). If this feature uses user-input, user can
128         control the stack height consumed by C++ code. This patch avoids using VLA. To achieve that,
129
130             1. We set `-Wvla` warning option to trigger warnings if it is used.
131             2. Introduce MarkedJSValueRefArray for API. This replaces `JSValueRef arguments[variableLength]` use case.
132                MarkedJSValueRefArray registers itself to JSC GC so that GC can mark it as a strong root.
133
134         * API/JSContext.mm:
135         (+[JSContext currentArguments]):
136         * API/JSValue.mm:
137         (-[JSValue callWithArguments:]):
138         (-[JSValue constructWithArguments:]):
139         (-[JSValue invokeMethod:withArguments:]):
140         * API/MarkedJSValueRefArray.cpp: Added.
141         (JSC::MarkedJSValueRefArray::MarkedJSValueRefArray):
142         (JSC::MarkedJSValueRefArray::~MarkedJSValueRefArray):
143         (JSC::MarkedJSValueRefArray::visitAggregate):
144         * API/MarkedJSValueRefArray.h: Added.
145         * API/tests/minidom.c:
146         (print):
147         * API/tests/testapi.cpp:
148         (TestAPI::markedJSValueArrayAndGC):
149         (testCAPIViaCpp):
150         * Configurations/Base.xcconfig:
151         * JavaScriptCore.xcodeproj/project.pbxproj:
152         * Sources.txt:
153         * heap/Heap.cpp:
154         (JSC::Heap::addCoreConstraints):
155         (JSC::Heap::addMarkedJSValueRefArray):
156         * heap/Heap.h:
157         * heap/MarkedSpace.h:
158         (JSC::MarkedSpace::activeWeakSetsBegin): Deleted.
159         (JSC::MarkedSpace::activeWeakSetsEnd): Deleted.
160         (JSC::MarkedSpace::newActiveWeakSetsBegin): Deleted.
161         (JSC::MarkedSpace::newActiveWeakSetsEnd): Deleted.
162         * runtime/ArgList.h:
163
164 2020-03-14  Saam Barati  <sbarati@apple.com>
165
166         Unreviewed. Fix windows build by making configSizeToProtect stay 4KB.
167
168         * runtime/JSCConfig.h:
169
170 2020-03-13  Saam Barati  <sbarati@apple.com>
171
172         configSizeToProtect should be 16KB
173         https://bugs.webkit.org/show_bug.cgi?id=209068
174
175         Reviewed by Keith Miller.
176
177         * runtime/JSCConfig.h:
178
179 2020-03-13  Yusuke Suzuki  <ysuzuki@apple.com>
180
181         Unreviewed, fix JSC / test262 tests
182         https://bugs.webkit.org/show_bug.cgi?id=209033
183         <rdar://problem/58946936>
184
185         Follow-up change for DisallowGC causes crash because CodeBlock is nullptr when function call is non JS calls.
186
187         * interpreter/Interpreter.cpp:
188         (JSC::Interpreter::executeCall):
189         (JSC::Interpreter::executeConstruct):
190
191 2020-03-13  Tadeu Zagallo  <tzagallo@apple.com>
192
193         Missing arithMode for ArithAbs and ArithNegate in DFGClobberize
194         https://bugs.webkit.org/show_bug.cgi?id=208685
195         <rdar://problem/60115088>
196
197         Reviewed by Saam Barati.
198
199         In the pure case of ArithNegate and ArithAbs in DFGClobberize, their PureValues did not include their
200         respective ArithMode. That means that e.g. a CheckOverflow ArithNegate/Abs could be considered equivalent
201         to an Unchecked version of the same node.
202
203         Thanks to Samuel Groß of Google Project Zero for identifying this bug.
204
205         * dfg/DFGClobberize.h:
206         (JSC::DFG::clobberize):
207
208 2020-03-13  Myles C. Maxfield  <mmaxfield@apple.com>
209
210         [Cocoa] Push applicationSDKVersion() down from WebCore into WTF
211         https://bugs.webkit.org/show_bug.cgi?id=209030
212
213         Reviewed by Simon Fraser.
214
215         dyld_get_program_sdk_version() gives you the wrong answer in the Web Process (or at least
216         not the answer you actually want). There are already facilities for the UI Process to tell
217         the Web Process what the real value is, but those functions are currently in WebCore,
218         which is inaccessible to WTF. This patch is in preparation for
219         https://bugs.webkit.org/show_bug.cgi?id=208969 which needs to know this information in WTF.
220
221         I also found a few places which were calling dyld_get_program_sdk_version() in JavaScriptCore
222         and WebCore (which is wrong because those libraries exist in the Web Process), and have fixed
223         them up to use applicationSDKVersion() instead.
224
225         * API/JSWrapperMap.mm:
226         (supportsInitMethodConstructors):
227
228 2020-03-13  Yusuke Suzuki  <ysuzuki@apple.com>
229
230         [JSC] Reload CodeBlock or suppress GC while setting up calls
231         https://bugs.webkit.org/show_bug.cgi?id=209033
232         <rdar://problem/58946936>
233
234         Reviewed by Saam Barati.
235
236         The sequence of Interpreter::execute is the following.
237
238             1. Getting CodeBlock from Executable
239             2. Doing a lot of setups
240             3. Setting (1)'s CodeBlock to ProtoFrame
241             4. Calling code through Executable
242
243         During (2), it would be possible that GC happens and it replaces CodeBlock in Executable.
244         Then, when executing JITCode with CodeBlock in (4), we use new JITCode with old CodeBlock.
245
246         In this patch,
247
248         For ProgramExecutable, FunctionExecutable, ModuleProgramExecutable, we ensure that no GC happens
249         after getting CodeBlock by placing DisallowGC. For EvalExecutable, we reload CodeBlock after setting
250         up environment. It is possible that FunctionExecutable* stored in CodeBlock can be different when
251         executing a new CodeBlock, but this is OK since this different does not appear and we do not rely on
252         this: we are touching `name` of FunctionExecutable* which is retrieved from CodeBlock. But this name
253         will not be changed since this is derived from UnlinkedFunctionExecutable which is shared by multiple
254         CodeBlocks. And FunctionExecutable* generation ordering must be the same for every CodeBlock generation
255         from the same UnlinkedCodeBlock.
256
257         * bytecode/CodeBlock.h:
258         (JSC::ScriptExecutable::prepareForExecution):
259         * interpreter/Interpreter.cpp:
260         (JSC::Interpreter::executeProgram):
261         (JSC::Interpreter::executeCall):
262         (JSC::Interpreter::executeConstruct):
263         (JSC::Interpreter::execute):
264         (JSC::Interpreter::executeModuleProgram):
265         * interpreter/InterpreterInlines.h:
266         (JSC::Interpreter::execute):
267         * runtime/DisallowScope.h:
268         (JSC::DisallowScope::disable):
269         * runtime/StringPrototype.cpp:
270
271 2020-03-12  Yusuke Suzuki  <ysuzuki@apple.com>
272
273         [JSC] Delete IC creation should check mayNeedToCheckCell/canCacheDeleteIC regardless of Structure::outOfLineCapacity
274         https://bugs.webkit.org/show_bug.cgi?id=209027
275
276         Reviewed by Saam Barati.
277
278         Delete IC code generation assumes that mayNeedToCheckCell (it is replaced with canCacheDeleteIC) is false
279         while we are looking into this status only if Structure::outOfLineCapacity meets a certain condition. We should avoid
280         create Delete IC when mayNeedToCheckCell/canCacheDeleteIC is true regardless of Structure::outOfLineCapacity
281
282         * bytecode/AccessCase.cpp:
283         (JSC::AccessCase::createDelete):
284         (JSC::AccessCase::generateImpl):
285         * runtime/Structure.h:
286         * runtime/StructureInlines.h:
287         (JSC::Structure::mayHaveIndexingHeader const):
288         (JSC::Structure::canCacheDeleteIC const):
289
290 2020-03-13  Alexey Shvayka  <shvaikalesh@gmail.com>
291
292         Bound functions should pass correct NewTarget value
293         https://bugs.webkit.org/show_bug.cgi?id=209057
294
295         Reviewed by Keith Miller.
296
297         This change implements steps 5-6 of bound function's [[Construct]] method [1],
298         fixing bound function subclasses and aligning JSC with V8 and SpiderMonkey.
299
300         [1]: https://tc39.es/ecma262/#sec-bound-function-exotic-objects-construct-argumentslist-newtarget
301
302         * runtime/JSBoundFunction.cpp:
303         (JSC::boundThisNoArgsFunctionConstruct):
304         (JSC::boundFunctionConstruct):
305
306 2020-03-13  Yusuke Suzuki  <ysuzuki@apple.com>
307
308         Unreviewed, change ASSERT to ASSERT_WITH_SECURITY_IMPLICATION since it is now enabled under ENABLE(SECURITY_ASSERTIONS)
309         https://bugs.webkit.org/show_bug.cgi?id=209041
310         <rdar://problem/59705631>
311
312         * runtime/JSCast.h:
313         (JSC::jsCast):
314
315 2020-03-12  Yusuke Suzuki  <ysuzuki@apple.com>
316
317         Report crashed cell in jsCast in debug builds
318         https://bugs.webkit.org/show_bug.cgi?id=209041
319         <rdar://problem/59705631>
320
321         Reviewed by Mark Lam.
322
323         To collect more information when crashing with jsCast, we attempt to use reportZappedCellAndCrash.
324         If it succeeds, we can get more information in registers. We enable this only for ASSERT_ENABLED
325         build. For non ASSERT_ENABLED, we keep the original assertion since this assertion can be enabled
326         via ENABLE(SECURITY_ASSERTIONS).
327
328         * heap/SlotVisitor.cpp:
329         (JSC::SlotVisitor::appendToMarkStack):
330         (JSC::SlotVisitor::visitChildren):
331         (JSC::SlotVisitor::reportZappedCellAndCrash): Deleted.
332         * heap/SlotVisitor.h:
333         * runtime/JSCast.h:
334         (JSC::jsCast):
335         * runtime/JSCell.cpp:
336         (JSC::reportZappedCellAndCrash):
337         * runtime/JSCell.h:
338
339 2020-03-12  Keith Miller  <keith_miller@apple.com>
340
341         DFG nodes that take a TypedArray's storage need to keepAlive the TypedArray
342         https://bugs.webkit.org/show_bug.cgi?id=209035
343
344         Reviewed by Saam Barati.
345
346         It might be possible to produce a graph where the last reference to a TypedArray
347         is via a GetByVal or PutByVal. Since those nodes don't create any reference to the
348         TypedArray in B3 we may end up not keeping the TypedArray alive until after the
349         storage access.
350
351         * ftl/FTLLowerDFGToB3.cpp:
352         (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite):
353         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
354         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
355
356 2020-03-12  Yusuke Suzuki  <ysuzuki@apple.com>
357
358         [JSC] Use CacheableIdentifier in ByValInfo
359         https://bugs.webkit.org/show_bug.cgi?id=208978
360
361         Reviewed by Saam Barati.
362
363         CodeBlock::finalizeUnconditionally discards JITData. And this includes ByValInfo, which holds Identifier.
364         However, finalizeUnconditionally is only guaranteeing that the main thread is not working. It can be invoked
365         in the heap thread, and it is not not setting the AtomStringTable for this heap thread. If Identifier destroys
366         AtomStringImpl, which fails to unregister itself from the table.
367
368         In this patch,
369
370             1. We explicitly set nullptr for the current AtomStringTable to catch the bug as soon as possible in GC end phase.
371             2. We use CacheableIdentifier in ByValInfo to avoid destroying Identifier in CodeBlock::finalizeUnconditionally.
372
373         * CMakeLists.txt:
374         * JavaScriptCore.xcodeproj/project.pbxproj:
375         * Sources.txt:
376         * bytecode/ByValInfo.cpp: Added.
377         (JSC::ByValInfo::visitAggregate):
378         * bytecode/ByValInfo.h:
379         * bytecode/CodeBlock.cpp:
380         (JSC::CodeBlock::stronglyVisitStrongReferences):
381         * bytecode/CodeBlock.h:
382         * dfg/DFGByteCodeParser.cpp:
383         (JSC::DFG::ByteCodeParser::handlePutByVal):
384         * heap/Heap.cpp:
385         (JSC::Heap::runEndPhase):
386         * jit/JIT.h:
387         * jit/JITOperations.cpp:
388         * jit/JITPropertyAccess.cpp:
389         (JSC::JIT::emitByValIdentifierCheck):
390         * runtime/CacheableIdentifier.h:
391
392 2020-03-11  Keith Miller  <keith_miller@apple.com>
393
394         Test262-runner should always consider crashes as new failures
395         https://bugs.webkit.org/show_bug.cgi?id=208943
396
397         Reviewed by Yusuke Suzuki.
398
399         BigInt.asUintN() / BigInt.asIntN() should not crash when called even if we have
400         not implemented them yet...
401
402         * runtime/BigIntConstructor.cpp:
403         (JSC::bigIntConstructorFuncAsUintN):
404         (JSC::bigIntConstructorFuncAsIntN):
405
406 2020-03-11  Keith Miller  <keith_miller@apple.com>
407
408         Throws incorrectly a syntax error when declaring a top level catch variable the same as a parameter
409         https://bugs.webkit.org/show_bug.cgi?id=189914
410
411         Reviewed by Saam Barati.
412
413         When we are parsing catch block parameters we should increment the statement depth so we don't think
414         we are trying to shadow top level lexical variables in the same statement depth.
415
416         * parser/Parser.cpp:
417         (JSC::Parser<LexerType>::parseTryStatement):
418
419 2020-03-10  Yusuke Suzuki  <ysuzuki@apple.com>
420
421         [JSC] Fix iso-subspace static_assert for JSJavaScriptCallFramePrototype
422         https://bugs.webkit.org/show_bug.cgi?id=208874
423
424         Reviewed by Saam Barati.
425
426         This static_assert should ensure the condition for JSJavaScriptCallFramePrototype, not for JSInjectedScriptHostPrototype.
427
428         * inspector/JSJavaScriptCallFramePrototype.h:
429
430 2020-03-09  Don Olmstead  <don.olmstead@sony.com>
431
432         Remove obsolete feature flags
433         https://bugs.webkit.org/show_bug.cgi?id=208830
434
435         Reviewed by Alex Christensen.
436
437         Remove ENABLE_CUSTOM_SCHEME_HANDLER and ENABLE_MAC_VIDEO_TOOLBOX since they
438         are no longer used.
439
440         * Configurations/FeatureDefines.xcconfig:
441
442 2020-03-09  Alexey Shvayka  <shvaikalesh@gmail.com>
443
444         @putByValDirect does not perform [[DefineOwnProperty]] correctly
445         https://bugs.webkit.org/show_bug.cgi?id=208708
446
447         Reviewed by Yusuke Suzuki.
448
449         This change adds inSparseIndexingMode() check to canDoFastPutDirectIndex(), fixing slow path
450         of @putByValDirect() to perform [[DefineOwnProperty]] according to spec [1] and aligning JSC
451         with V8 and SpiderMonkey.
452
453         This patch preserves existing behavior for Arguments exotic objects (thus the checks order)
454         and aligns slow path checks in JSObject::putDirectIndexSlowOrBeyondVectorLength
455         with JSObject::defineOwnIndexedProperty.
456
457         JetStream2 benchmark is neutral.
458
459         [1]: https://tc39.es/ecma262/#sec-validateandapplypropertydescriptor
460
461         * runtime/JSObject.cpp:
462         (JSC::canDoFastPutDirectIndex):
463
464 2020-03-09  Antoine Quint  <graouts@apple.com>
465
466         Remove the compile-time flag for Pointer Events
467         https://bugs.webkit.org/show_bug.cgi?id=208821
468         <rdar://problem/60223471>
469
470         Reviewed by Dean Jackson.
471
472         * Configurations/FeatureDefines.xcconfig:
473
474 2020-03-09  Caio Lima  <ticaiolima@gmail.com>
475
476         Tail calls are broken on ARM_THUMB2 and MIPS
477         https://bugs.webkit.org/show_bug.cgi?id=197797
478
479         Reviewed by Yusuke Suzuki.
480
481         `prepareForTailCall` operation expects that header size + parameters
482         size is aligned with stack (alignment is 16-bytes for every architecture).
483         This means that headerSizeInBytes + argumentsIncludingThisInBytes needs
484         to be multiple of 16. This was not being preserved during getter IC code
485         for 32-bits. The code generated was taking in account only
486         headerSizeInRegisters (it is 4 on 32-bits) and argumentsIncludingThis
487         (that is always 1 for getters) and allocating 32-bytes when applying
488         operation `(headerSize + argumentsIncludingThis) * 8 - sizeof(CallerFrameAndPC)`.
489         This results in a stack frame with size of 40 bytes (after we push
490         `lr` and `sp`). Since `prepareForTailCall` expects frames to be
491         16-bytes aligned, it will then calculate the top of such frame
492         considering it is 48 bytes, cloberring values of previous frame and
493         causing unexpected behavior. This patch is fixing how this IC code
494         calculates the stack frame using `roundArgumentCountToAlignFrame(numberOfParameters)`
495         aligning with what we do on code without IC installed.
496         This was not a problem for getter and setter IC on 64-bits because
497         `roundArgumentCountToAlignFrame(1) == 1` and `roundArgumentCountToAlignFrame(2) == 3`
498         while it is `roundArgumentCountToAlignFrame(1) == 2` and
499         `roundArgumentCountToAlignFrame(2) == 2` for MIPS and ARMv7.
500
501         * bytecode/AccessCase.cpp:
502         (JSC::AccessCase::generateImpl):
503
504 2020-03-08  Brady Eidson  <beidson@apple.com>
505
506         Remember completed subranges during incremental PDF loading.
507         https://bugs.webkit.org/show_bug.cgi?id=208785
508
509         Reviewed by Tim Horton.
510
511         Move 'using WTF::Range' from the WTF/Range.h header to these JSC users.
512         
513         The alternative to making these 3 changes was to make over 20 changes up in the WebCore/WebKits
514         to resolve the conflict with WebCore::Range.
515         
516         * b3/B3HeapRange.h:
517         * b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:
518         * heap/JITStubRoutineSet.h:
519
520 2020-03-07  Alexey Shvayka  <shvaikalesh@gmail.com>
521
522         REGRESSION (r258049): Unchecked JS exception in jsc::Stringifier::toJSON
523         https://bugs.webkit.org/show_bug.cgi?id=208766
524
525         Reviewed by Yusuke Suzuki.
526
527         * runtime/JSONObject.cpp:
528         (JSC::Stringifier::toJSON): Add missing RELEASE_AND_RETURN.
529
530 2020-03-07  Mark Lam  <mark.lam@apple.com>
531
532         Remove bad assertion in FTLLowerDFGToB3's compileDelBy().
533         https://bugs.webkit.org/show_bug.cgi?id=208764
534         <rdar://problem/59940095>
535
536         Reviewed by Keith Miller.
537
538         The assertion ASSERT(base.gpr() != params[2].gpr()) is wrong because it is legal
539         JS to pass in the same value as the base and subscript.  The runtime will handle
540         it properly.
541
542         * ftl/FTLLowerDFGToB3.cpp:
543         (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
544
545 2020-03-05  Sam Weinig  <weinig@apple.com>
546
547         Move JavaScriptCore related feature defines from FeatureDefines.xcconfig to PlatformEnableCocoa.h
548         https://bugs.webkit.org/show_bug.cgi?id=207436
549         <rdar://problem/59296762>
550
551         Reviewed by Darin Adler.
552
553         * Configurations/FeatureDefines.xcconfig:
554         Remove JSC related defines.
555
556 2020-03-06  Yusuke Suzuki  <ysuzuki@apple.com>
557
558         [JSC] Enable public class fields
559         https://bugs.webkit.org/show_bug.cgi?id=208756
560
561         Reviewed by Mark Lam.
562
563         This patch turns public-class-fields feature on, implemented in r254653.
564         To separate from private-class-fields, this patch renames the flag from useClassFields to usePublicClassFields,
565         and first enable public-class-fields feature.
566
567         * bytecompiler/BytecodeGenerator.cpp:
568         (JSC::BytecodeGenerator::BytecodeGenerator):
569         * bytecompiler/NodesCodegen.cpp:
570         (JSC::FunctionCallValueNode::emitBytecode):
571         * parser/Parser.cpp:
572         (JSC::Parser<LexerType>::parseClass):
573         * runtime/OptionsList.h:
574
575 2020-03-06  Mark Lam  <mark.lam@apple.com>
576
577         Add "AndOrdered" to the names of ordered DoubleConditions.
578         https://bugs.webkit.org/show_bug.cgi?id=208736
579
580         Reviewed by Keith Miller.
581
582         Renamed the following:
583             DoubleEqual ==> DoubleEqualAndOrdered
584             DoubleNotEqual ==> DoubleNotEqualAndOrdered
585             DoubleGreaterThan ==> DoubleGreaterThanAndOrdered
586             DoubleGreaterThanOrEqual ==> DoubleGreaterThanOrEqualAndOrdered
587             DoubleLessThan ==> DoubleLessThanAndOrdered
588             DoubleLessThanOrEqual ==> DoubleLessThanOrEqualAndOrdered
589
590         The comment for these enums in MacroAssemblerARM64.h says:
591             // These conditions will only evaluate to true if the comparison is ordered - i.e. neither operand is NaN.
592
593         Adding "AndOrdered" to their names makes this property explicit.
594
595         From reading the original names, one might intuitively think that these conditions
596         map directly to the C++ double comparisons.  This intuition is incorrect.
597         Consider the DoubleNotEqual case: let's compare 2 doubles, a and b:
598
599             result = (a != b);
600
601         For C++, if either a or b are NaNs, then a != b will actually return true.
602         This is contrary to the behavior documented in the MacroAssemblerARM64.h comment
603         above about how DoubleNotEqual should behave.  In our code, DoubleNotEqual actually
604         means DoubleNotEqualAndOrdered.  The C++ != behavior actually matches our
605         DoubleNotEqualOrUnordered condition instead.
606
607         The tendency to want to associate DoubleNotEqual with the behavior of the C++
608         != operator is precisely why we should give these conditions better names.
609         Adding the "AndOperand" name make the expected behavior explicit in the name, and
610         leave no room for confusion with C++ double comparison semantics.
611
612         * assembler/MacroAssembler.cpp:
613         (WTF::printInternal):
614         * assembler/MacroAssembler.h:
615         (JSC::MacroAssembler::invert):
616         * assembler/MacroAssemblerARM64.h:
617         (JSC::MacroAssemblerARM64::moveConditionallyAfterFloatingPointCompare):
618         (JSC::MacroAssemblerARM64::moveDoubleConditionallyAfterFloatingPointCompare):
619         (JSC::MacroAssemblerARM64::jumpAfterFloatingPointCompare):
620         (JSC::MacroAssemblerARM64::floatingPointCompare):
621         * assembler/MacroAssemblerARMv7.h:
622         (JSC::MacroAssemblerARMv7::branchDouble):
623         * assembler/MacroAssemblerMIPS.h:
624         (JSC::MacroAssemblerMIPS::branchDouble):
625         (JSC::MacroAssemblerMIPS::branchDoubleNonZero):
626         * assembler/MacroAssemblerX86Common.h:
627         (JSC::MacroAssemblerX86Common::branchDoubleNonZero):
628         (JSC::MacroAssemblerX86Common::moveConditionallyDouble):
629         (JSC::MacroAssemblerX86Common::invert):
630         (JSC::MacroAssemblerX86Common::floatingPointCompare):
631         (JSC::MacroAssemblerX86Common::jumpAfterFloatingPointCompare):
632         (JSC::MacroAssemblerX86Common::moveConditionallyAfterFloatingPointCompare):
633         * assembler/MacroAssemblerX86_64.h:
634         (JSC::MacroAssemblerX86_64::truncateDoubleToUint64):
635         (JSC::MacroAssemblerX86_64::truncateFloatToUint64):
636         * assembler/testmasm.cpp:
637         (JSC::testCompareDouble):
638         (JSC::testCompareDoubleSameArg):
639         (JSC::testMoveConditionallyFloatingPoint):
640         (JSC::testMoveDoubleConditionallyDouble):
641         (JSC::testMoveDoubleConditionallyDoubleDestSameAsThenCase):
642         (JSC::testMoveDoubleConditionallyDoubleDestSameAsElseCase):
643         (JSC::testMoveDoubleConditionallyFloat):
644         (JSC::testMoveDoubleConditionallyFloatDestSameAsThenCase):
645         (JSC::testMoveDoubleConditionallyFloatDestSameAsElseCase):
646         (JSC::testMoveConditionallyFloatingPointSameArg):
647         (JSC::run):
648         * b3/B3LowerToAir.cpp:
649         * dfg/DFGSpeculativeJIT.cpp:
650         (JSC::DFG::compileClampDoubleToByte):
651         (JSC::DFG::SpeculativeJIT::compileArithRounding):
652         (JSC::DFG::SpeculativeJIT::compileArithMinMax):
653         (JSC::DFG::SpeculativeJIT::compileArithPow):
654         (JSC::DFG::SpeculativeJIT::compileStrictEq):
655         (JSC::DFG::SpeculativeJIT::compileArrayIndexOf):
656         (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
657         * dfg/DFGSpeculativeJIT32_64.cpp:
658         (JSC::DFG::SpeculativeJIT::compile):
659         * dfg/DFGSpeculativeJIT64.cpp:
660         (JSC::DFG::SpeculativeJIT::compile):
661         * ftl/FTLLowerDFGToB3.cpp:
662         (JSC::FTL::DFG::LowerDFGToB3::compileNumberIsInteger):
663         * jit/AssemblyHelpers.h:
664         (JSC::AssemblyHelpers::branchIfNotNaN):
665         * jit/JITArithmetic.cpp:
666         (JSC::JIT::emitSlow_op_jless):
667         (JSC::JIT::emitSlow_op_jlesseq):
668         (JSC::JIT::emitSlow_op_jgreater):
669         (JSC::JIT::emitSlow_op_jgreatereq):
670         * jit/JITArithmetic32_64.cpp:
671         (JSC::JIT::emitBinaryDoubleOp):
672         * jit/ThunkGenerators.cpp:
673         (JSC::floorThunkGenerator):
674         (JSC::roundThunkGenerator):
675         * wasm/WasmAirIRGenerator.cpp:
676         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Le>):
677         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Lt>):
678         (JSC::Wasm::AirIRGenerator::addFloatingPointMinOrMax):
679         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Gt>):
680         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ge>):
681         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Lt>):
682         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Eq>):
683         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Le>):
684         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ge>):
685         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Eq>):
686         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Gt>):
687
688 2020-03-06  David Kilzer  <ddkilzer@apple.com>
689
690         REGRESSION (r258038): Build failure on Windows 10 bots
691         <https://bugs.webkit.org/show_bug.cgi?id=208731>
692         <rdar://problem/59222568>
693
694         * assembler/testmasm.cpp:
695         (JSC::testCompareDouble):
696         (JSC::testCompareDoubleSameArg):
697         (JSC::testMoveConditionallyFloatingPoint):
698         (JSC::testMoveConditionallyFloatingPointSameArg):
699         - Add RELEASE_ASSERT_NOT_REACHED() statements to try to fix the
700           bots.
701
702 2020-03-06  Yusuke Suzuki  <ysuzuki@apple.com>
703
704         Put remaining fixed-sized cells into IsoSubspace
705         https://bugs.webkit.org/show_bug.cgi?id=208754
706
707         Reviewed by Keith Miller.
708
709         Put remaining fixed-sized cells into IsoSubspace. Now all the fixed-sized cells have their own IsoSubspaces.
710
711         1. JSArray (We need to care about RAMification number, or compensate RAMification regression with improvements).
712         2. Inspector's objects
713         3. All prototype objects have one IsoSubspace since they are plain objects.
714
715         * inspector/JSInjectedScriptHost.cpp:
716         (Inspector::JSInjectedScriptHost::JSInjectedScriptHost):
717         * inspector/JSInjectedScriptHost.h:
718         * inspector/JSInjectedScriptHostPrototype.h:
719         * inspector/JSJavaScriptCallFrame.cpp:
720         (Inspector::JSJavaScriptCallFrame::JSJavaScriptCallFrame):
721         * inspector/JSJavaScriptCallFrame.h:
722         * inspector/JSJavaScriptCallFramePrototype.h:
723         * jsc.cpp:
724         (JSC::Masquerader::subspaceFor):
725         (JSCMemoryFootprint::subspaceFor):
726         * runtime/ArrayIteratorPrototype.h:
727         * runtime/ArrayPrototype.h:
728         * runtime/AsyncFromSyncIteratorPrototype.h:
729         * runtime/AsyncFunctionPrototype.h:
730         * runtime/AsyncGeneratorFunctionPrototype.h:
731         * runtime/AsyncGeneratorPrototype.h:
732         * runtime/AsyncIteratorPrototype.h:
733         * runtime/AtomicsObject.h:
734         * runtime/BigIntPrototype.h:
735         * runtime/ConsoleObject.h:
736         * runtime/DatePrototype.h:
737         * runtime/ErrorPrototype.h:
738         * runtime/ExceptionHelpers.h:
739         * runtime/GeneratorFunctionPrototype.h:
740         * runtime/GeneratorPrototype.h:
741         * runtime/InspectorInstrumentationObject.h:
742         * runtime/IntlCollatorPrototype.h:
743         * runtime/IntlDateTimeFormatPrototype.h:
744         * runtime/IntlNumberFormatPrototype.h:
745         * runtime/IntlObject.h:
746         * runtime/IntlPluralRulesPrototype.h:
747         * runtime/IteratorPrototype.h:
748         * runtime/JSArray.h:
749         (JSC::JSArray::subspaceFor):
750         * runtime/JSArrayBufferPrototype.h:
751         * runtime/JSDataViewPrototype.h:
752         * runtime/JSDestructibleObject.h:
753         (JSC::JSDestructibleObject::subspaceFor): Deleted.
754         * runtime/JSGenericTypedArrayViewPrototype.h:
755         * runtime/JSModuleLoader.h:
756         * runtime/JSONObject.h:
757         * runtime/JSObject.h:
758         * runtime/JSObjectInlines.h:
759         (JSC::JSFinalObject::subspaceFor):
760         (JSC::JSObject::subspaceFor): Deleted.
761         * runtime/JSPromisePrototype.h:
762         (JSC::JSPromisePrototype::subspaceFor):
763         * runtime/JSTypedArrayViewPrototype.h:
764         * runtime/MapIteratorPrototype.h:
765         * runtime/MapPrototype.h:
766         * runtime/MathObject.h:
767         * runtime/NativeErrorPrototype.h:
768         * runtime/ObjectPrototype.h:
769         * runtime/ReflectObject.h:
770         * runtime/RegExpPrototype.h:
771         * runtime/RegExpStringIteratorPrototype.h:
772         * runtime/SetIteratorPrototype.h:
773         * runtime/SetPrototype.h:
774         * runtime/StringIteratorPrototype.h:
775         * runtime/SymbolPrototype.h:
776         * runtime/VM.cpp:
777         (JSC::VM::VM):
778         * runtime/VM.h:
779         * runtime/WeakMapPrototype.h:
780         * runtime/WeakObjectRefPrototype.h:
781         * runtime/WeakSetPrototype.h:
782         * tools/JSDollarVM.cpp:
783         * tools/JSDollarVM.h:
784         * wasm/js/JSWebAssembly.h:
785         * wasm/js/WebAssemblyCompileErrorPrototype.h:
786         * wasm/js/WebAssemblyGlobalPrototype.h:
787         * wasm/js/WebAssemblyInstancePrototype.h:
788         * wasm/js/WebAssemblyLinkErrorPrototype.h:
789         * wasm/js/WebAssemblyMemoryPrototype.h:
790         * wasm/js/WebAssemblyModulePrototype.h:
791         * wasm/js/WebAssemblyRuntimeErrorPrototype.h:
792         * wasm/js/WebAssemblyTablePrototype.h:
793
794 2020-03-06  Alexey Shvayka  <shvaikalesh@gmail.com>
795
796         JSON.stringify should call replacer on deleted properties
797         https://bugs.webkit.org/show_bug.cgi?id=208725
798
799         Reviewed by Ross Kirsling.
800
801         This change removes extra `hasProperty` check from `appendNextProperty` as
802         it does not exist in the spec [1], aligning JSC with V8 and SpiderMonkey.
803
804         This patch also replaces 3 usages of `getPropertySlot` with semantically
805         equivalent (yet more concise) `get` and inlines `toJSONImpl` (this change
806         is performance-neutral).
807
808         [1]: https://tc39.es/ecma262/#sec-serializejsonobject (steps 6, 8.a)
809
810         * runtime/JSONObject.cpp:
811         (JSC::Stringifier::toJSON):
812         (JSC::Stringifier::Holder::appendNextProperty):
813         (JSC::Stringifier::toJSONImpl): Deleted.
814
815 2020-03-06  Mark Lam  <mark.lam@apple.com>
816
817         Fix some issues in the ARM64 moveConditionallyAfterFloatingPointCompare() and moveDoubleConditionallyAfterFloatingPointCompare().
818         https://bugs.webkit.org/show_bug.cgi?id=208731
819         <rdar://problem/59222568>
820
821         Reviewed by Saam Barati.
822
823         Both the ARM64 moveConditionallyAfterFloatingPointCompare() and
824         moveDoubleConditionallyAfterFloatingPointCompare() had the following issues:
825
826         1. For the DoubleNotEqual condition, they fail to set the result register if
827            one or both of the comparison operands is a NaN.
828
829         2. For the DoubleEqualOrUnordered condition, they can clobber the else case
830            input register if one of the comparison operands is a NaN.
831
832         This patch fixes both of these, and exhaustive testmasm test cases for affected
833         MacroAssembler instruction emitters using these functions.
834
835         * assembler/MacroAssemblerARM64.h:
836         (JSC::MacroAssemblerARM64::moveConditionallyAfterFloatingPointCompare):
837         (JSC::MacroAssemblerARM64::moveDoubleConditionallyAfterFloatingPointCompare):
838         * assembler/testmasm.cpp:
839         (JSC::testCompareDouble):
840         (JSC::testCompareDoubleSameArg):
841         (JSC::testMoveConditionallyFloatingPoint):
842         (JSC::testMoveConditionallyDouble2):
843         (JSC::testMoveConditionallyDouble3):
844         (JSC::testMoveConditionallyDouble3DestSameAsThenCase):
845         (JSC::testMoveConditionallyDouble3DestSameAsElseCase):
846         (JSC::testMoveConditionallyFloat2):
847         (JSC::testMoveConditionallyFloat3):
848         (JSC::testMoveConditionallyFloat3DestSameAsThenCase):
849         (JSC::testMoveConditionallyFloat3DestSameAsElseCase):
850         (JSC::testMoveDoubleConditionallyDouble):
851         (JSC::testMoveDoubleConditionallyDoubleDestSameAsThenCase):
852         (JSC::testMoveDoubleConditionallyDoubleDestSameAsElseCase):
853         (JSC::testMoveDoubleConditionallyFloat):
854         (JSC::testMoveDoubleConditionallyFloatDestSameAsThenCase):
855         (JSC::testMoveDoubleConditionallyFloatDestSameAsElseCase):
856         (JSC::testMoveConditionallyFloatingPointSameArg):
857         (JSC::testMoveConditionallyDouble2SameArg):
858         (JSC::testMoveConditionallyDouble3SameArg):
859         (JSC::testMoveConditionallyFloat2SameArg):
860         (JSC::testMoveConditionallyFloat3SameArg):
861         (JSC::testMoveDoubleConditionallyDoubleSameArg):
862         (JSC::testMoveDoubleConditionallyFloatSameArg):
863         (JSC::run):
864
865 2020-03-05  Paulo Matos  <pmatos@igalia.com>
866
867         [JSCOnly] 32-bits warning on memset of JSValue
868         https://bugs.webkit.org/show_bug.cgi?id=204411
869
870         Reviewed by Mark Lam.
871
872         Fixes warning on 32bit builds. This is required because GCC knows
873         it is not safe to use memset on non-POD types and warns against its use.
874
875         * heap/GCMemoryOperations.h:
876         (JSC::gcSafeZeroMemory):
877
878 2020-03-04  Mark Lam  <mark.lam@apple.com>
879
880         Handle an out of memory error while constructing the BytecodeGenerator.
881         https://bugs.webkit.org/show_bug.cgi?id=208622
882         <rdar://problem/59341136>
883
884         Reviewed by Saam Barati.
885
886         Added the ability to handle out of memory errors encountered during the
887         construction of the BytecodeGenerator.  Currently, we only use this for the
888         case where we fail to instantiate a ScopedArgumentsTable.
889
890         * bytecompiler/BytecodeGenerator.cpp:
891         (JSC::BytecodeGenerator::generate):
892         (JSC::BytecodeGenerator::BytecodeGenerator):
893         * bytecompiler/BytecodeGeneratorBase.h:
894         * runtime/ScopedArgumentsTable.cpp:
895         (JSC::ScopedArgumentsTable::tryCreate):
896         * runtime/ScopedArgumentsTable.h:
897         * runtime/SymbolTable.h:
898
899 2020-03-04  Paulo Matos  <pmatos@igalia.com>
900
901         JSC 32bits broken in debug mode by r257399
902         https://bugs.webkit.org/show_bug.cgi?id=208439
903
904         Reviewed by Carlos Alberto Lopez Perez.
905
906         Use uses() method call instead of gpr() on assert to that it
907         works for both 64 and 32 bits.
908
909         * bytecode/AccessCase.cpp:
910         (JSC::AccessCase::generateImpl):
911
912 2020-03-03  Saam Barati  <sbarati@apple.com>
913
914         Refactor FixedVMPoolExecutableAllocator to not have member functions which are really just helper functions
915         https://bugs.webkit.org/show_bug.cgi?id=208537
916
917         Reviewed by Mark Lam.
918
919         There were a few member functions in FixedVMPoolExecutableAllocator that were
920         essentially helper functions. I've factored them out, and made FixedVMPoolExecutableAllocator
921         call them directly. This refactoring is needed when I implement the 1GB
922         executable pool on arm64 since the implementation of that will create split
923         implementations of something like FixedVMPoolExecutableAllocator.
924
925         * jit/ExecutableAllocator.cpp:
926         (JSC::jitWriteThunkGenerator):
927         (JSC::genericWriteToJITRegion):
928         (JSC::initializeSeparatedWXHeaps):
929         (JSC::initializeJITPageReservation):
930         (JSC::ExecutableAllocator::isValid const):
931         (JSC::ExecutableAllocator::underMemoryPressure):
932         (JSC::ExecutableAllocator::memoryPressureMultiplier):
933         (JSC::ExecutableAllocator::allocate):
934         (JSC::ExecutableAllocator::isValidExecutableMemory):
935         (JSC::ExecutableAllocator::getLock const):
936         (JSC::ExecutableAllocator::committedByteCount):
937         (JSC::ExecutableAllocator::dumpProfile):
938         (JSC::startOfFixedExecutableMemoryPoolImpl):
939         (JSC::endOfFixedExecutableMemoryPoolImpl):
940         (JSC::isJITPC):
941
942 2020-03-03  Ross Kirsling  <ross.kirsling@sony.com>
943
944         Introduce JSRemoteInspectorServerStart API for socket-based RWI.
945         https://bugs.webkit.org/show_bug.cgi?id=208349
946
947         Reviewed by Joseph Pecoraro.
948
949         * API/JSRemoteInspectorServer.cpp: Added.
950         (JSRemoteInspectorServerStart):
951         * API/JSRemoteInspectorServer.h: Added.
952         * CMakeLists.txt:
953
954 2020-03-03  Basuke Suzuki  <basuke.suzuki@sony.com>
955
956         [WinCairo][PlayStation] Add interface to get listening port of RemoteInspectorServer
957         https://bugs.webkit.org/show_bug.cgi?id=208391
958
959         Reviewed by Don Olmstead.
960
961         When passing zero as a port argument, system will pick an available port for it.
962         Without this method, client cannot get which port is listening.
963
964         * inspector/remote/socket/RemoteInspectorServer.cpp:
965         (Inspector::RemoteInspectorServer::start):
966         (Inspector::RemoteInspectorServer::getPort):
967         * inspector/remote/socket/RemoteInspectorServer.h:
968
969 2020-03-03  Yusuke Suzuki  <ysuzuki@apple.com>
970
971         [JSC] @hasOwnLengthProperty returns wrong value if "length" is attempted to be modified
972         https://bugs.webkit.org/show_bug.cgi?id=208497
973         <rdar://problem/59913544>
974
975         Reviewed by Mark Lam.
976
977         When "length" of JSFunction is attempted to be modified, we put a flag. And @hasOwnLengthProperty
978         does not correctly use this flag to return a value for the fast path. This affects on "length"
979         property of bound functions. For example,
980
981             function userFunction(a) { }
982             userFunction.length = 20; // This field is read-only. So, it is not changed.
983             userFunction.bind().length; // Should be 1, but it returns 0.
984
985         1. We rename m_hasModifiedLength to m_hasModifiedLengthForNonHostFunction and m_hasModifiedName
986            to m_hasModifiedNameForNonHostFunction since we are not tracking these states for host-functions
987            which can eagerly initialize them.
988         2. We rename areNameAndLengthOriginal to canAssumeNameAndLengthAreOriginal to allow it to return
989            "false" for host functions. If it returns true, we go to the fast path.
990         3. Correctly use canAssumeNameAndLengthAreOriginal information in @hasOwnLengthProperty.
991
992         * runtime/FunctionRareData.cpp:
993         (JSC::FunctionRareData::FunctionRareData):
994         * runtime/FunctionRareData.h:
995         * runtime/JSFunction.cpp:
996         (JSC::JSFunction::put):
997         (JSC::JSFunction::deleteProperty):
998         (JSC::JSFunction::defineOwnProperty):
999         * runtime/JSFunction.h:
1000         * runtime/JSFunctionInlines.h:
1001         (JSC::JSFunction::canAssumeNameAndLengthAreOriginal):
1002         (JSC::JSFunction::areNameAndLengthOriginal): Deleted.
1003         * runtime/JSGlobalObject.cpp:
1004         (JSC::hasOwnLengthProperty):
1005         * tools/JSDollarVM.cpp:
1006         (JSC::functionHasOwnLengthProperty):
1007
1008 2020-03-02  Alan Coon  <alancoon@apple.com>
1009
1010         Add new Mac target numbers
1011         https://bugs.webkit.org/show_bug.cgi?id=208398
1012
1013         Reviewed by Alexey Proskuryakov.
1014
1015         * Configurations/Base.xcconfig:
1016         * Configurations/DebugRelease.xcconfig:
1017         * Configurations/Version.xcconfig:
1018         * Configurations/WebKitTargetConditionals.xcconfig:
1019
1020 2020-03-02  Justin Michaud  <justin_michaud@apple.com>
1021
1022         Delete by val caching does not keep the subscript alive
1023         https://bugs.webkit.org/show_bug.cgi?id=208393
1024
1025         Reviewed by Yusuke Suzuki.
1026
1027         Before, the provided test case crashed with asan because we did not keep deleteByVal
1028         subscripts alive. This patch changes CacheableIdentifier to make this mistake harder
1029         to make again, by making the constructor calls more explicit when CacheableIdentifier
1030         will not keep an Identifier alive.
1031
1032         * jit/JITOperations.cpp:
1033         * jit/Repatch.cpp:
1034         (JSC::tryCachePutByID):
1035         (JSC::tryCacheDeleteBy):
1036         (JSC::repatchDeleteBy):
1037         (JSC::tryCacheInByID):
1038         (JSC::tryCacheInstanceOf):
1039         (JSC::tryCacheDelBy): Deleted.
1040         (JSC::repatchDelBy): Deleted.
1041         * jit/Repatch.h:
1042         * runtime/CacheableIdentifier.h:
1043         * runtime/CacheableIdentifierInlines.h:
1044         (JSC::CacheableIdentifier::createFromIdentifierOwnedByCodeBlock):
1045         (JSC::CacheableIdentifier::createFromCell):
1046
1047 2020-03-02  Paulo Matos  <pmatos@igalia.com>
1048
1049         Fix JSC 32bit alignment increase gcc warning
1050         https://bugs.webkit.org/show_bug.cgi?id=208445
1051
1052         Reviewed by Yusuke Suzuki.
1053
1054         Use reinterpret_cast_ptr<>() instead of reinterpret_cast<>() to
1055         avoid GCC warning about increase in alignment requirement for cast
1056         target type.
1057
1058         * dfg/DFGOSRExit.cpp:
1059         (JSC::DFG::OSRExit::compileExit):
1060
1061 2020-03-02  Yusuke Suzuki  <ysuzuki@apple.com>
1062
1063         Unreviewed, fix wrong assertion
1064         https://bugs.webkit.org/show_bug.cgi?id=208404
1065         <rdar://problem/59956592>
1066
1067         * runtime/CachedTypes.cpp:
1068         (JSC::CachedUniquedStringImplBase::decode const):
1069
1070 2020-03-01  Charles Turner  <cturner@igalia.com>
1071
1072         undefined reference to `JSC::ExecutableBase::hasJITCodeForCall() const'
1073         https://bugs.webkit.org/show_bug.cgi?id=207890
1074
1075         Reviewed by Yusuke Suzuki.
1076
1077         Encountered on arm-buildroot-linux-gnueabihf with GCC 9.2.0.
1078
1079         * runtime/NativeExecutable.cpp: Inclusion of
1080         ExecutableBaseInlines.h resolves the issue for me.
1081
1082 2020-02-29  Yusuke Suzuki  <ysuzuki@apple.com>
1083
1084         Remove std::lock_guard
1085         https://bugs.webkit.org/show_bug.cgi?id=206451
1086
1087         Reviewed by Anders Carlsson.
1088
1089         * API/JSVirtualMachine.mm:
1090         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
1091         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
1092         * API/glib/JSCVirtualMachine.cpp:
1093         (addWrapper):
1094         (removeWrapper):
1095         * heap/HeapSnapshotBuilder.cpp:
1096         (JSC::HeapSnapshotBuilder::analyzeNode):
1097         (JSC::HeapSnapshotBuilder::analyzeEdge):
1098         (JSC::HeapSnapshotBuilder::analyzePropertyNameEdge):
1099         (JSC::HeapSnapshotBuilder::analyzeVariableNameEdge):
1100         (JSC::HeapSnapshotBuilder::analyzeIndexEdge):
1101         (JSC::HeapSnapshotBuilder::setOpaqueRootReachabilityReasonForCell):
1102         * heap/MachineStackMarker.cpp:
1103         (JSC::MachineThreads::tryCopyOtherThreadStacks):
1104         * runtime/JSRunLoopTimer.cpp:
1105         (JSC::JSRunLoopTimer::timerDidFire):
1106
1107 2020-02-28  Yusuke Suzuki  <ysuzuki@apple.com>
1108
1109         [JSC] BuiltinNames' HashMap should be small
1110         https://bugs.webkit.org/show_bug.cgi?id=208404
1111
1112         Reviewed by Mark Lam.
1113
1114         This patch converts public-to-private-name-map from HashMap<RefPtr<UniquedStringImpl>, SymbolImpl*> to HashSet<String> to save half of memory.
1115         The key is that private names have the same string content to the public names. We can just query with string content to the HashSet of
1116         private names, and we can get private names.
1117
1118         The problem is that we also have a hack inserting string <-> non-private well-known Symbol mappings into this table. These symbols do not have
1119         the same content to the public string. So the above assumption is broken.
1120
1121         To make the above assumption valid, we have a separate small HashMap which holds string <-> non-private well-known Symbol mappings. Since # of
1122         well-known Symbols are only 13, this new HashMap is taking at most 512B for entries, which is much smaller compared to the saved memory by
1123         converting HashMap to HashSet for private names (32KB).
1124
1125         To allow it, we introduce new well-known Symbol identifier syntax to builtin JS, which is "@@iterator" format. If there is two "@", we parse this
1126         identifier as a well-known Symbol.
1127
1128         * builtins/ArrayConstructor.js:
1129         (from.wrapper.iterator):
1130         (from):
1131         (from.wrapper.iteratorSymbol): Deleted.
1132         * builtins/ArrayPrototype.js:
1133         (globalPrivate.concatSlowPath):
1134         (concat):
1135         * builtins/BuiltinNames.cpp:
1136         (JSC::BuiltinNames::BuiltinNames):
1137         (JSC::CharBufferSeacher::hash):
1138         (JSC::CharBufferSeacher::equal):
1139         (JSC::lookUpPrivateNameImpl):
1140         (JSC::lookUpWellKnownSymbolImpl):
1141         (JSC::BuiltinNames::lookUpPrivateName const):
1142         (JSC::BuiltinNames::lookUpWellKnownSymbol const):
1143         * builtins/BuiltinNames.h:
1144         (JSC::BuiltinNames::lookUpPrivateName const):
1145         (JSC::BuiltinNames::lookUpWellKnownSymbol const):
1146         (JSC::BuiltinNames::checkPublicToPrivateMapConsistency):
1147         (JSC::BuiltinNames::appendExternalName):
1148         (JSC::BuiltinNames::getPublicName const): Deleted.
1149         * builtins/GlobalOperations.js:
1150         (globalPrivate.speciesConstructor):
1151         * builtins/IteratorHelpers.js:
1152         (performIteration):
1153         * builtins/StringPrototype.js:
1154         (match):
1155         (matchAll):
1156         (intrinsic.StringPrototypeReplaceIntrinsic.replace):
1157         (replaceAll):
1158         (search):
1159         (split):
1160         * builtins/TypedArrayConstructor.js:
1161         (from.wrapper.iterator):
1162         (from):
1163         (from.wrapper.iteratorSymbol): Deleted.
1164         * builtins/TypedArrayPrototype.js:
1165         (globalPrivate.typedArraySpeciesConstructor):
1166         (map):
1167         (filter):
1168         * bytecompiler/NodesCodegen.cpp:
1169         (JSC::BytecodeIntrinsicNode::emit_intrinsic_getByIdDirectPrivate):
1170         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
1171         * parser/Lexer.cpp:
1172         (JSC::Lexer<LChar>::parseIdentifier):
1173         (JSC::Lexer<UChar>::parseIdentifier):
1174         * runtime/CachedTypes.cpp:
1175         (JSC::CachedUniquedStringImplBase::encode):
1176         (JSC::CachedUniquedStringImplBase::decode const):
1177         * runtime/CommonIdentifiers.cpp:
1178         (JSC::CommonIdentifiers::CommonIdentifiers):
1179         (JSC::CommonIdentifiers::lookUpPrivateName const): Deleted.
1180         (JSC::CommonIdentifiers::getPublicName const): Deleted.
1181         * runtime/CommonIdentifiers.h:
1182         * tools/JSDollarVM.cpp:
1183         (JSC::functionGetPrivateProperty):
1184
1185 2020-02-28  Saam Barati  <sbarati@apple.com>
1186
1187         Clean up code with how we choose Gigacage sizes and whether or not to use Wasm fast memory
1188         https://bugs.webkit.org/show_bug.cgi?id=208392
1189
1190         Reviewed by Yusuke Suzuki.
1191
1192         * runtime/OptionsList.h:
1193
1194 2020-02-27  Saam Barati  <sbarati@apple.com>
1195
1196         Fix debug arm64 Wasm tests
1197         https://bugs.webkit.org/show_bug.cgi?id=208362
1198
1199         Reviewed by Yusuke Suzuki.
1200
1201         * wasm/WasmAirIRGenerator.cpp:
1202         (JSC::Wasm::AirIRGenerator::emitChecksForModOrDiv):
1203
1204         We were assuming that "-1" is a valid imm on arm64, but it's not, we need
1205         to use big imm.
1206
1207 2020-02-27  Justin Michaud  <justin_michaud@apple.com>
1208
1209         Poly proto should work with property delete transitions
1210         https://bugs.webkit.org/show_bug.cgi?id=208261
1211
1212         Reviewed by Saam Barati.
1213
1214         This patch fixes a bug where the combination of inline caching
1215         and poly proto cause us to cache a setter call along a prototype chain that 
1216         is no longer the correct setter to call. This is exposed as a result of
1217         https://bugs.webkit.org/show_bug.cgi?id=206430 since DefineOwnProperty used 
1218         to transition to uncacheable dictionary.
1219
1220         The case looks like this:
1221         A - setter for x redefines x
1222         |
1223         B
1224         |
1225         C
1226
1227         We set (new C).x
1228
1229         Right now, we first call A's setter, then we try to figure out what the state of things
1230         were before it was called in order to cache it. We just assume that A's setter still exists, and we cache it
1231         without ever checking, In this patch, we ensure that the property exists and the attributes match in order to prevent crashing. 
1232
1233         In the code, A = target, C = base.
1234
1235         Get is correct because it collects caching information before any calls.
1236
1237         The bug https://bugs.webkit.org/show_bug.cgi?id=208337 tracks the remaining semantic bugs around this code.
1238
1239         * jit/Repatch.cpp:
1240         (JSC::tryCachePutByID):
1241
1242 2020-02-27  Basuke Suzuki  <basuke.suzuki@sony.com>
1243
1244         [WinCairo] Fix RemoteInspector reconnect issue
1245         https://bugs.webkit.org/show_bug.cgi?id=208256
1246
1247         Reviewed by Devin Rousso.
1248
1249         Call target's disconnection sequence asynchronously to avoid deadlock.
1250
1251         * inspector/remote/RemoteConnectionToTarget.cpp:
1252         (Inspector::RemoteConnectionToTarget::close):
1253         * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
1254         (Inspector::RemoteInspectorSocketEndpoint::workerThread):
1255
1256 2020-02-26  Mark Lam  <mark.lam@apple.com>
1257
1258         Enhance JSObjectGetProperty() to mitigate against null object pointers.
1259         https://bugs.webkit.org/show_bug.cgi?id=208275
1260         <rdar://problem/59826325>
1261
1262         Reviewed by Robin Morisset.
1263
1264         * API/JSObjectRef.cpp:
1265         (JSObjectGetProperty):
1266
1267 2020-02-26  Saam Barati  <sbarati@apple.com>
1268
1269         Make testair pass on arm64
1270         https://bugs.webkit.org/show_bug.cgi?id=208258
1271
1272         Reviewed by Tadeu Zagallo.
1273
1274         testElideMoveThenRealloc and testElideSimpleMove were never tested
1275         on arm64. This patch makes those tests work. 
1276         - testElideMoveThenRealloc was using a BitImm that is invalid on arm64
1277         - testElideSimpleMove was testing for the wrong disassembly
1278
1279         * b3/air/testair.cpp:
1280
1281 2020-02-26  Don Olmstead  <don.olmstead@sony.com>
1282
1283         Allow setting of stack sizes for threads
1284         https://bugs.webkit.org/show_bug.cgi?id=208223
1285
1286         Reviewed by Yusuke Suzuki.
1287
1288         Specify ThreadType at the Thread::create callsite.
1289
1290         * heap/Heap.cpp:
1291         (JSC::Heap::notifyIsSafeToCollect):
1292
1293 2020-02-26  Caio Lima  <ticaiolima@gmail.com>
1294
1295         [JSC][MIPS] Adding support to Checkpoints
1296         https://bugs.webkit.org/show_bug.cgi?id=208196
1297
1298         Reviewed by Yusuke Suzuki.
1299
1300         This patch is adding changes to properly support OSR to
1301         checkpoints on MIPS. It required fixes on JIT probe and some
1302         adjustment on Offlineasm to correct generate `$gp` load when executing 
1303         `checkpoint_osr_exit_from_inlined_call_trampoline`.
1304
1305         * assembler/MacroAssemblerMIPS.cpp:
1306
1307         Probe trampoline needs to allocate 16 bytes for 4 arguments to
1308         properly follow C calling conventions. This space is used by callee
1309         when the JSC is compiled with `-O0` flags
1310         (Check "DEFAULT C CALLING CONVENTION (O32)" section on
1311         https://www.mips.com/downloads/mips32-instruction-set-quick-reference-v1-01).
1312
1313         * llint/LowLevelInterpreter.asm:
1314
1315         As we need to do on ARMv7, 64-bits arguments needs to be passed in
1316         register pairs `$a1:$a0` or `$a3:$a2` (little-endian mode). Since `$a0`
1317         contais `CallFrame*`, we need to pass `EncodedJSValue` on `$a3:$a2`
1318         pair.
1319
1320         * offlineasm/mips.rb:
1321
1322         Following the same reason for return locations on OSR to LLInt, we
1323         need to adjust `$gp` using `$ra` instead of `$t9` on
1324         `checkpoint_osr_exit_from_inlined_call_trampoline`, given it is only
1325         reachable through `ret` operations. For detailed explanation, check
1326         ChangeLog of https://trac.webkit.org/changeset/252713.
1327
1328 2020-02-25  Devin Rousso  <drousso@apple.com>
1329
1330         Web Inspector: safari app extension isolated worlds and injected files use the extension's identifier instead of its name
1331         https://bugs.webkit.org/show_bug.cgi?id=206911
1332         <rdar://problem/58026635>
1333
1334         Reviewed by Brian Burg.
1335
1336         * inspector/protocol/Browser.json: Added.
1337         Add a `Browser` agent that can communicate with the inspected page's containing browser. It
1338         lives in the UIProcess alongside the `Target` agent (meaning there should only be one per
1339         debuggable rather than one per target) and as such is not routed through the `Target` agent.
1340
1341         * CMakeLists.txt:
1342         * DerivedSources-input.xcfilelist:
1343         * DerivedSources.make:
1344
1345 2020-02-25  Justin Michaud  <justin_michaud@apple.com>
1346
1347         Inline Cache delete by id/val
1348         https://bugs.webkit.org/show_bug.cgi?id=207522
1349
1350         Reviewed by Keith Miller and Filip Pizlo.
1351
1352         We add inline caching for deleteById/val for baseline only. We also fix a concurrency bug in ICStats used for testing.
1353         We add three new access cases (no inline code is emitted at this time): 
1354         - Delete is a cached delete of an existing property
1355         - DeleteMiss is a delete of a property that does not exist
1356         - DeleteNonConfigurable is a delete of a property that exists, but should not be deleted.
1357         There are no conditions required for these caches, since the structure id must change and the prototype does not matter.
1358         This gives the following microbenchmark results:
1359
1360         delete-property-keeps-cacheable-structure (neutral)
1361         delete-property-inline-cache              definitely 3.9096x faster
1362         delete-property-inline-cache-polymorphic  definitely 1.5239x faster
1363         delete-property-from-prototype-chain      (neutral)
1364
1365         * API/JSCallbackObject.h:
1366         * API/JSCallbackObjectFunctions.h:
1367         (JSC::JSCallbackObject<Parent>::deleteProperty):
1368         (JSC::JSCallbackObject<Parent>::deletePropertyByIndex):
1369         * API/JSObjectRef.cpp:
1370         (JSObjectDeletePropertyForKey):
1371         (JSObjectDeleteProperty):
1372         * CMakeLists.txt:
1373         * JavaScriptCore.xcodeproj/project.pbxproj:
1374         * bytecode/AccessCase.cpp:
1375         (JSC::AccessCase::create):
1376         (JSC::AccessCase::createTransition):
1377         (JSC::AccessCase::createDelete):
1378         (JSC::AccessCase::requiresIdentifierNameMatch const):
1379         (JSC::AccessCase::requiresInt32PropertyCheck const):
1380         (JSC::AccessCase::needsScratchFPR const):
1381         (JSC::AccessCase::forEachDependentCell const):
1382         (JSC::AccessCase::doesCalls const):
1383         (JSC::AccessCase::canReplace const):
1384         (JSC::AccessCase::dump const):
1385         (JSC::AccessCase::propagateTransitions const):
1386         (JSC::AccessCase::generateImpl):
1387         * bytecode/AccessCase.h:
1388         (JSC::AccessCase::structure const):
1389         (JSC::AccessCase::newStructure const):
1390         * bytecode/PolymorphicAccess.cpp:
1391         (WTF::printInternal):
1392         * bytecode/StructureStubInfo.cpp:
1393         (JSC::StructureStubInfo::reset):
1394         * bytecode/StructureStubInfo.h:
1395         * debugger/DebuggerScope.cpp:
1396         (JSC::DebuggerScope::deleteProperty):
1397         * debugger/DebuggerScope.h:
1398         * dfg/DFGFixupPhase.cpp:
1399         (JSC::DFG::FixupPhase::fixupNode):
1400         * dfg/DFGJITCompiler.cpp:
1401         (JSC::DFG::JITCompiler::link):
1402         * dfg/DFGJITCompiler.h:
1403         (JSC::DFG::JITCompiler::addDelById):
1404         (JSC::DFG::JITCompiler::addDelByVal):
1405         * dfg/DFGSpeculativeJIT.cpp:
1406         (JSC::DFG::SpeculativeJIT::compileDeleteById): Deleted.
1407         (JSC::DFG::SpeculativeJIT::compileDeleteByVal): Deleted.
1408         * dfg/DFGSpeculativeJIT32_64.cpp:
1409         (JSC::DFG::SpeculativeJIT::compileDeleteById):
1410         (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
1411         * dfg/DFGSpeculativeJIT64.cpp:
1412         (JSC::DFG::SpeculativeJIT::compileDeleteById):
1413         (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
1414         * ftl/FTLLowerDFGToB3.cpp:
1415         (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
1416         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteById):
1417         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal):
1418         * jit/ICStats.h:
1419         * jit/JIT.cpp:
1420         (JSC::JIT::privateCompileSlowCases):
1421         (JSC::JIT::link):
1422         * jit/JIT.h:
1423         * jit/JITInlineCacheGenerator.cpp:
1424         (JSC::JITDelByValGenerator::JITDelByValGenerator):
1425         (JSC::JITDelByValGenerator::generateFastPath):
1426         (JSC::JITDelByValGenerator::finalize):
1427         (JSC::JITDelByIdGenerator::JITDelByIdGenerator):
1428         (JSC::JITDelByIdGenerator::generateFastPath):
1429         (JSC::JITDelByIdGenerator::finalize):
1430         * jit/JITInlineCacheGenerator.h:
1431         (JSC::JITDelByValGenerator::JITDelByValGenerator):
1432         (JSC::JITDelByValGenerator::slowPathJump const):
1433         (JSC::JITDelByIdGenerator::JITDelByIdGenerator):
1434         (JSC::JITDelByIdGenerator::slowPathJump const):
1435         * jit/JITOperations.cpp:
1436         * jit/JITOperations.h:
1437         * jit/JITPropertyAccess.cpp:
1438         (JSC::JIT::emit_op_del_by_id):
1439         (JSC::JIT::emitSlow_op_del_by_id):
1440         (JSC::JIT::emit_op_del_by_val):
1441         (JSC::JIT::emitSlow_op_del_by_val):
1442         * jit/JITPropertyAccess32_64.cpp:
1443         (JSC::JIT::emit_op_del_by_id):
1444         (JSC::JIT::emit_op_del_by_val):
1445         (JSC::JIT::emitSlow_op_del_by_val):
1446         (JSC::JIT::emitSlow_op_del_by_id):
1447         * jit/Repatch.cpp:
1448         (JSC::tryCachePutByID):
1449         (JSC::tryCacheDelBy):
1450         (JSC::repatchDelBy):
1451         (JSC::resetPutByID):
1452         (JSC::resetDelBy):
1453         * jit/Repatch.h:
1454         * llint/LLIntSlowPaths.cpp:
1455         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
1456         * runtime/CacheableIdentifierInlines.h:
1457         (JSC::CacheableIdentifier::CacheableIdentifier):
1458         * runtime/ClassInfo.h:
1459         * runtime/ClonedArguments.cpp:
1460         (JSC::ClonedArguments::deleteProperty):
1461         * runtime/ClonedArguments.h:
1462         * runtime/CommonSlowPaths.cpp:
1463         (JSC::SLOW_PATH_DECL):
1464         * runtime/DeletePropertySlot.h: Added.
1465         (JSC::DeletePropertySlot::DeletePropertySlot):
1466         (JSC::DeletePropertySlot::setConfigurableMiss):
1467         (JSC::DeletePropertySlot::setNonconfigurable):
1468         (JSC::DeletePropertySlot::setHit):
1469         (JSC::DeletePropertySlot::isCacheableDelete const):
1470         (JSC::DeletePropertySlot::isDeleteHit const):
1471         (JSC::DeletePropertySlot::isConfigurableDeleteMiss const):
1472         (JSC::DeletePropertySlot::isNonconfigurable const):
1473         (JSC::DeletePropertySlot::cachedOffset const):
1474         (JSC::DeletePropertySlot::disableCaching):
1475         (JSC::DeletePropertySlot::isCacheable const):
1476         * runtime/ErrorConstructor.cpp:
1477         (JSC::ErrorConstructor::deleteProperty):
1478         * runtime/ErrorConstructor.h:
1479         * runtime/ErrorInstance.cpp:
1480         (JSC::ErrorInstance::deleteProperty):
1481         * runtime/ErrorInstance.h:
1482         * runtime/GenericArguments.h:
1483         * runtime/GenericArgumentsInlines.h:
1484         (JSC::GenericArguments<Type>::put):
1485         (JSC::GenericArguments<Type>::deleteProperty):
1486         * runtime/GetterSetter.h:
1487         * runtime/JSArray.cpp:
1488         (JSC::JSArray::deleteProperty):
1489         * runtime/JSArray.h:
1490         * runtime/JSCJSValue.h:
1491         * runtime/JSCell.cpp:
1492         (JSC::JSCell::deleteProperty):
1493         * runtime/JSCell.h:
1494         * runtime/JSDataView.cpp:
1495         (JSC::JSDataView::deleteProperty):
1496         * runtime/JSDataView.h:
1497         * runtime/JSFunction.cpp:
1498         (JSC::JSFunction::deleteProperty):
1499         * runtime/JSFunction.h:
1500         * runtime/JSGenericTypedArrayView.h:
1501         * runtime/JSGenericTypedArrayViewInlines.h:
1502         (JSC::JSGenericTypedArrayView<Adaptor>::deleteProperty):
1503         (JSC::JSGenericTypedArrayView<Adaptor>::deletePropertyByIndex):
1504         * runtime/JSGlobalObject.cpp:
1505         (JSC::JSGlobalObject::addFunction):
1506         * runtime/JSLexicalEnvironment.cpp:
1507         (JSC::JSLexicalEnvironment::deleteProperty):
1508         * runtime/JSLexicalEnvironment.h:
1509         * runtime/JSModuleEnvironment.cpp:
1510         (JSC::JSModuleEnvironment::deleteProperty):
1511         * runtime/JSModuleEnvironment.h:
1512         * runtime/JSModuleNamespaceObject.cpp:
1513         (JSC::JSModuleNamespaceObject::deleteProperty):
1514         * runtime/JSModuleNamespaceObject.h:
1515         * runtime/JSONObject.cpp:
1516         (JSC::Walker::walk):
1517         * runtime/JSObject.cpp:
1518         (JSC::JSObject::deleteProperty):
1519         (JSC::JSObject::deletePropertyByIndex):
1520         (JSC::validateAndApplyPropertyDescriptor):
1521         * runtime/JSObject.h:
1522         * runtime/JSProxy.cpp:
1523         (JSC::JSProxy::deleteProperty):
1524         * runtime/JSProxy.h:
1525         * runtime/JSSymbolTableObject.cpp:
1526         (JSC::JSSymbolTableObject::deleteProperty):
1527         * runtime/JSSymbolTableObject.h:
1528         * runtime/ProxyObject.cpp:
1529         (JSC::ProxyObject::deleteProperty):
1530         * runtime/ProxyObject.h:
1531         * runtime/RegExpObject.cpp:
1532         (JSC::RegExpObject::deleteProperty):
1533         * runtime/RegExpObject.h:
1534         * runtime/StrictEvalActivation.cpp:
1535         (JSC::StrictEvalActivation::deleteProperty):
1536         * runtime/StrictEvalActivation.h:
1537         * runtime/StringObject.cpp:
1538         (JSC::StringObject::deleteProperty):
1539         * runtime/StringObject.h:
1540         * runtime/Structure.cpp:
1541         (JSC::Structure::removePropertyTransition):
1542         (JSC::Structure::removePropertyTransitionFromExistingStructureImpl):
1543         (JSC::Structure::removePropertyTransitionFromExistingStructure):
1544         (JSC::Structure::removePropertyTransitionFromExistingStructureConcurrently):
1545         (JSC::Structure::removeNewPropertyTransition):
1546         (JSC::Structure::dump const):
1547         * runtime/Structure.h:
1548         * runtime/StructureInlines.h:
1549         (JSC::Structure::hasIndexingHeader const):
1550         (JSC::Structure::mayHaveIndexingHeader const):
1551         * tools/JSDollarVM.cpp:
1552         (JSC::functionHasOwnLengthProperty):
1553         (JSC::JSDollarVM::finishCreation):
1554
1555 2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
1556
1557         [WTF] Attach WARN_UNUSED_RETURN to makeScopeExit and fix existing wrong usage
1558         https://bugs.webkit.org/show_bug.cgi?id=208162
1559
1560         Reviewed by Robin Morisset.
1561
1562         * parser/Parser.cpp:
1563         (JSC::Parser<LexerType>::parseUnaryExpression):
1564
1565 2020-02-24  Keith Miller  <keith_miller@apple.com>
1566
1567         LLInt should fast path for jtrue/false on Symbols and Objects
1568         https://bugs.webkit.org/show_bug.cgi?id=208151
1569
1570         Reviewed by Yusuke Suzuki.
1571
1572         64-bit interpreter can fast path the case where an object or symbol
1573         is passed to a jtrue or jfalse opcode. This is because these values
1574         are always truthy.
1575
1576         Also, fix some weird indentation in LowLevelInterpreter.asm.
1577
1578         * llint/LowLevelInterpreter.asm:
1579         * llint/LowLevelInterpreter32_64.asm:
1580         * llint/LowLevelInterpreter64.asm:
1581         * runtime/JSType.h:
1582
1583 2020-02-24  Caio Lima  <ticaiolima@gmail.com>
1584
1585         [JSC] 32-bits debug build broken after r257212
1586         https://bugs.webkit.org/show_bug.cgi?id=208149
1587
1588         Reviewed by Yusuke Suzuki.
1589
1590         Changing `Structure::setCachedPrototypeChain` to use
1591         `m_cachedPrototypeChainOrRareData.setMayBeNull`, since `chain` may be
1592         null.
1593
1594         * runtime/StructureInlines.h:
1595         (JSC::Structure::setCachedPrototypeChain):
1596
1597 2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
1598
1599         Unreviewed, fix watchOS build
1600         https://bugs.webkit.org/show_bug.cgi?id=207827
1601
1602         While watchOS does not use FTL at all, it still compiles.
1603
1604         * ftl/FTLLowerDFGToB3.cpp:
1605         (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys):
1606         (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
1607         (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
1608         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
1609         (JSC::FTL::DFG::LowerDFGToB3::loadStructureClassInfo):
1610         (JSC::FTL::DFG::LowerDFGToB3::loadStructureCachedPrototypeChainOrRareData):
1611
1612 2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
1613
1614         Unreviewed, build fix for 32bit pointer architectures
1615         https://bugs.webkit.org/show_bug.cgi?id=207827
1616
1617         * runtime/Structure.h:
1618
1619 2020-02-23  Yusuke Suzuki  <ysuzuki@apple.com>
1620
1621         [JSC] Shrink Structure
1622         https://bugs.webkit.org/show_bug.cgi?id=207827
1623
1624         Reviewed by Saam Barati.
1625
1626         This patch shrinks sizeof(Structure) from 112 to 96 (16 bytes) in architectures using 64 bit pointers.
1627         Structure is one of the most frequently allocated JSCell in JSC. So it is worth doing
1628         all the sort of bit hacks to make it compact as much as possible.
1629
1630             1. Put outOfLineTypeFlags, maxOffset and transitionOffset into highest bits of m_propertyTableUnsafe,
1631                m_cachedPrototypeChain, m_classInfo, and m_transitionPropertyName. Do not use PackedPtr here since
1632                some of them are concurrently accessed by GC.
1633             2. Put m_inlineCapacity into lower 8 bits of m_propertyHash.
1634             3. Remove m_lock, and use Structure::cellLock() instead.
1635             4. Remove m_cachedPrototypeChain clearing from the concurrent collector since it is dead code, it was old code.
1636                We were setting m_cachedPrototypeChain only if Structure is for JSObject. Clearing happened only if it was not
1637                a Structure for JSObject.
1638             5. Previous Structure is held as StructureID m_previous. And m_previousOrRareData becomes m_cachedPrototypeChainOrRareData.
1639
1640         Many pairs are using CompactPointerTuple to make code clean.
1641         Combining all of the above techniques saves us 16 bytes.
1642
1643         * bytecode/AccessCase.cpp:
1644         (JSC::AccessCase::create):
1645         (JSC::AccessCase::propagateTransitions const):
1646         * bytecode/AccessCase.h:
1647         (JSC::AccessCase::structure const):
1648         * dfg/DFGSpeculativeJIT.cpp:
1649         (JSC::DFG::SpeculativeJIT::compileCheckSubClass):
1650         (JSC::DFG::SpeculativeJIT::compileObjectKeys):
1651         (JSC::DFG::SpeculativeJIT::compileCreateThis):
1652         (JSC::DFG::SpeculativeJIT::compileCreatePromise):
1653         (JSC::DFG::SpeculativeJIT::compileCreateInternalFieldObject):
1654         * ftl/FTLAbstractHeapRepository.h:
1655         * ftl/FTLLowerDFGToB3.cpp:
1656         (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys):
1657         (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
1658         (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
1659         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
1660         * jit/AssemblyHelpers.h:
1661         (JSC::AssemblyHelpers::emitLoadClassInfoFromStructure):
1662         * jit/JITOpcodes.cpp:
1663         (JSC::JIT::emit_op_create_this):
1664         * jit/JITOpcodes32_64.cpp:
1665         (JSC::JIT::emit_op_create_this):
1666         * jit/Repatch.cpp:
1667         (JSC::tryCachePutByID):
1668         * llint/LLIntSlowPaths.cpp:
1669         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
1670         * runtime/ClonedArguments.cpp:
1671         (JSC::ClonedArguments::createStructure):
1672         * runtime/ConcurrentJSLock.h:
1673         (JSC::ConcurrentJSLockerBase::ConcurrentJSLockerBase):
1674         (JSC::GCSafeConcurrentJSLockerImpl::GCSafeConcurrentJSLockerImpl):
1675         (JSC::GCSafeConcurrentJSLockerImpl::~GCSafeConcurrentJSLockerImpl):
1676         (JSC::ConcurrentJSLockerImpl::ConcurrentJSLockerImpl):
1677         (JSC::GCSafeConcurrentJSLocker::GCSafeConcurrentJSLocker): Deleted.
1678         (JSC::GCSafeConcurrentJSLocker::~GCSafeConcurrentJSLocker): Deleted.
1679         (JSC::ConcurrentJSLocker::ConcurrentJSLocker): Deleted.
1680         * runtime/JSCell.h:
1681         * runtime/JSObject.cpp:
1682         (JSC::JSObject::deleteProperty):
1683         (JSC::JSObject::shiftButterflyAfterFlattening):
1684         * runtime/JSObject.h:
1685         (JSC::JSObject::getDirectConcurrently const):
1686         * runtime/JSObjectInlines.h:
1687         (JSC::JSObject::prepareToPutDirectWithoutTransition):
1688         * runtime/JSType.cpp:
1689         (WTF::printInternal):
1690         * runtime/JSType.h:
1691         * runtime/Structure.cpp:
1692         (JSC::StructureTransitionTable::contains const):
1693         (JSC::StructureTransitionTable::get const):
1694         (JSC::StructureTransitionTable::add):
1695         (JSC::Structure::dumpStatistics):
1696         (JSC::Structure::Structure):
1697         (JSC::Structure::create):
1698         (JSC::Structure::findStructuresAndMapForMaterialization):
1699         (JSC::Structure::materializePropertyTable):
1700         (JSC::Structure::addPropertyTransitionToExistingStructureImpl):
1701         (JSC::Structure::addPropertyTransitionToExistingStructureConcurrently):
1702         (JSC::Structure::addNewPropertyTransition):
1703         (JSC::Structure::removeNewPropertyTransition):
1704         (JSC::Structure::changePrototypeTransition):
1705         (JSC::Structure::attributeChangeTransition):
1706         (JSC::Structure::toDictionaryTransition):
1707         (JSC::Structure::takePropertyTableOrCloneIfPinned):
1708         (JSC::Structure::nonPropertyTransitionSlow):
1709         (JSC::Structure::flattenDictionaryStructure):
1710         (JSC::Structure::pin):
1711         (JSC::Structure::pinForCaching):
1712         (JSC::Structure::allocateRareData):
1713         (JSC::Structure::ensurePropertyReplacementWatchpointSet):
1714         (JSC::Structure::copyPropertyTableForPinning):
1715         (JSC::Structure::add):
1716         (JSC::Structure::remove):
1717         (JSC::Structure::visitChildren):
1718         (JSC::Structure::canCachePropertyNameEnumerator const):
1719         * runtime/Structure.h:
1720         * runtime/StructureInlines.h:
1721         (JSC::Structure::get):
1722         (JSC::Structure::ruleOutUnseenProperty const):
1723         (JSC::Structure::seenProperties const):
1724         (JSC::Structure::addPropertyHashAndSeenProperty):
1725         (JSC::Structure::forEachPropertyConcurrently):
1726         (JSC::Structure::transitivelyTransitionedFrom):
1727         (JSC::Structure::cachedPrototypeChain const):
1728         (JSC::Structure::setCachedPrototypeChain):
1729         (JSC::Structure::prototypeChain const):
1730         (JSC::Structure::propertyReplacementWatchpointSet):
1731         (JSC::Structure::checkOffsetConsistency const):
1732         (JSC::Structure::add):
1733         (JSC::Structure::remove):
1734         (JSC::Structure::removePropertyWithoutTransition):
1735         (JSC::Structure::setPropertyTable):
1736         (JSC::Structure::clearPropertyTable):
1737         (JSC::Structure::setOutOfLineTypeFlags):
1738         (JSC::Structure::setInlineCapacity):
1739         (JSC::Structure::setClassInfo):
1740         (JSC::Structure::setPreviousID):
1741         (JSC::Structure::clearPreviousID):
1742         * runtime/StructureRareData.cpp:
1743         (JSC::StructureRareData::createStructure):
1744         (JSC::StructureRareData::create):
1745         (JSC::StructureRareData::StructureRareData):
1746         (JSC::StructureRareData::visitChildren):
1747         * runtime/StructureRareData.h:
1748         * runtime/StructureRareDataInlines.h:
1749         (JSC::StructureRareData::setCachedPrototypeChain):
1750         (JSC::StructureRareData::setPreviousID): Deleted.
1751         (JSC::StructureRareData::clearPreviousID): Deleted.
1752         * tools/JSDollarVM.cpp:
1753         (JSC::JSDollarVMHelper::functionGetStructureTransitionList):
1754         * wasm/js/WebAssemblyFunction.cpp:
1755         (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
1756
1757 2020-02-20  Mark Lam  <mark.lam@apple.com>
1758
1759         Make support for bytecode caching more robust against file corruption.
1760         https://bugs.webkit.org/show_bug.cgi?id=207972
1761         <rdar://problem/59260595>
1762
1763         Reviewed by Yusuke Suzuki.
1764
1765         If a bytecode cache file is corrupted, we currently will always crash every time
1766         we try to read it (in perpetuity as long as the corrupted cache file continues to
1767         exist on disk).  To guard against this, we'll harden the bytecode caching mechanism
1768         as follows:
1769
1770         1. Modify the writeCache operation to always write the cache file in a transactional
1771            manner i.e. we'll first write to a .tmp file, and then rename the .tmp file to
1772            the cache file only if the entire file has been written in completeness.
1773
1774            This ensures that we won't get corrupted cache files due to interrupted writes.
1775
1776         2. Modify the writeCache operation to also compute a SHA1 hash of the cache file
1777            and append the hash at end of the file.  Modify the readCache operation to
1778            first authenticate the SHA1 hash before allowing the cache file to be used.
1779            If the hash does not match, the file is bad, and we'll just delete it.
1780
1781            This ensures that we won't be crashing while decoding a corrupted cache file.
1782
1783         Manually tested with the following scenarios and ensuring that the client recovers
1784         with no crashes:
1785
1786         1. no cache file on disk.
1787         2. a 0-sized cache file on a disk.
1788         3. a truncated cache file on disk.
1789         4. a corrupted cache file on disk.
1790         5. an uncorrupted cache file on disk.
1791
1792         Also added some static_asserts in CachedTypes.cpp to document some invariants that
1793         the pre-existing code is dependent on.
1794
1795         * API/JSScript.mm:
1796         (-[JSScript readCache]):
1797         (-[JSScript writeCache:]):
1798         * runtime/CachedTypes.cpp:
1799
1800 2020-02-19  Ross Kirsling  <ross.kirsling@sony.com>
1801
1802         Computed Properties with increment sometimes produces incorrect results
1803         https://bugs.webkit.org/show_bug.cgi?id=170934
1804
1805         Reviewed by Yusuke Suzuki.
1806
1807         When the key and value of a computed property each have side effects, the eval order should be key-before-value.
1808         Not only have we had this backwards, we've also been giving them both the same target register.
1809
1810         * bytecompiler/NodesCodegen.cpp:
1811         (JSC::PropertyListNode::emitPutConstantProperty):
1812
1813 2020-02-19  Keith Miller  <keith_miller@apple.com>
1814
1815         Disable Wasm reference types by default
1816         https://bugs.webkit.org/show_bug.cgi?id=207952
1817
1818         Reviewed by Mark Lam.
1819
1820         * runtime/OptionsList.h:
1821
1822 2020-02-19  Stephan Szabo  <stephan.szabo@sony.com>
1823
1824         [PlayStation] Get jsc test wrappers using find_package
1825         https://bugs.webkit.org/show_bug.cgi?id=207914
1826
1827         Reviewed by Ross Kirsling.
1828
1829         * shell/PlatformPlayStation.cmake:
1830
1831 2020-02-18  Keith Miller  <keith_miller@apple.com>
1832
1833         Add an os_log PrintStream
1834         https://bugs.webkit.org/show_bug.cgi?id=207898
1835
1836         Reviewed by Mark Lam.
1837
1838         Add jsc option to write dataLogs to os_log.
1839
1840         * runtime/Options.cpp:
1841         (JSC::Options::initialize):
1842         * runtime/OptionsList.h:
1843
1844 2020-02-18  Paulo Matos  <pmatos@igalia.com>
1845
1846         Fix order (in MIPS) under which CS-registers are saved/restored
1847         https://bugs.webkit.org/show_bug.cgi?id=207752
1848
1849         Reviewed by Keith Miller.
1850
1851         This has been causing several segfaults on MIPS with JIT enabled
1852         because during an OSR to baseline, the order in which LLInt was
1853         saving the registers was not in sync with the way baseline was
1854         restoring them.
1855
1856         * llint/LowLevelInterpreter.asm:
1857
1858 2020-02-18  Ross Kirsling  <ross.kirsling@sony.com>
1859
1860         [JSC] Computed function properties compute their keys twice
1861         https://bugs.webkit.org/show_bug.cgi?id=207297
1862
1863         Reviewed by Keith Miller.
1864
1865         If a pseudo-String is used as the key of a computed function property,
1866         any side effects from resolving the string value occur in duplicate.
1867
1868         The cause has two parts:
1869           - We aren't ensuring that the string value is resolved before doing SetFunctionName and PutByVal.
1870           - Our implementation of SetFunctionName (https://tc39.es/ecma262/#sec-setfunctionname)
1871             calls toString on a non-symbol argument, instead of assuming the type is a string.
1872
1873         * bytecompiler/BytecodeGenerator.cpp:
1874         (JSC::BytecodeGenerator::shouldSetFunctionName): Added.
1875         (JSC::BytecodeGenerator::emitSetFunctionName): Added.
1876         (JSC::BytecodeGenerator::emitSetFunctionNameIfNeededImpl): Deleted.
1877         (JSC::BytecodeGenerator::emitSetFunctionNameIfNeeded): Deleted.
1878         * bytecompiler/BytecodeGenerator.h:
1879         Split the "if needed" logic out into its own function.
1880
1881         * bytecompiler/NodesCodegen.cpp:
1882         (JSC::PropertyListNode::emitBytecode):
1883         (JSC::PropertyListNode::emitPutConstantProperty):
1884         (JSC::DefineFieldNode::emitBytecode):
1885         Never emit OpSetFunctionName for a name of unknown type.
1886         (But also, don't perform a needless ToPropertyKey for non-function computed property keys.)
1887
1888         * runtime/JSFunction.cpp:
1889         (JSC::JSFunction::setFunctionName):
1890         Don't call toString, assert isString.
1891
1892 2020-02-17  Yusuke Suzuki  <ysuzuki@apple.com>
1893
1894         [JSC] JITThunk should be HashSet<Weak<NativeExecutable>> with appropriate GC weakness handling
1895         https://bugs.webkit.org/show_bug.cgi?id=207715
1896
1897         Reviewed by Darin Adler.
1898
1899         This patch refines JITThunks GC-aware Weak hash map for NativeExecutable. Previously, we have
1900         HashMap<std::tuple<TaggedNativeFunction, TaggedNativeFunction, String>, Weak<NativeExecutable>> table.
1901         But this is not good because the first tuple's information is already in NativeExecutable.
1902         But we were using this design since Weak<NativeExecutable> can be nullified because of Weak<>. If this
1903         happens, we could have invalid Entry in HashMap which does not have corresponding values. This will
1904         cause crash when rehasing requires hash code for this entry.
1905
1906         But this HashMap is very bad in terms of memory usage. Each entry has 32 bytes, and this table gets enough
1907         large. We identified that this table is consuming much memory in Membuster. So it is worth designing
1908         carefully crafted data structure which only holds Weak<NativeExecutable> by leveraging the deep interaction
1909         with our GC implementation.
1910
1911         This patch implements new design of JITThunks, which uses HashSet<Weak<NativeExecutable>> and carefully crafted
1912         HashTraits / KeyTraits to handle Weak<> well.
1913
1914         1. Each Weak should have finalizer, and this finalizer should remove dead Weak<NativeExecutable> from HashSet.
1915
1916             This is ensuring that all the keys in HashSet is, even if Weak<> is saying it is Dead, it still has an way
1917             to access content of NativeExecutable if the content is not a JS objects. For example, we can get function
1918             pointer from dead Weak<NativeExecutable> if it is not yet finalized. Since we remove all finalized Weak<>
1919             from the table, this finalizer mechanism allows us to access function pointers etc. from Weak<NativeExecutable>
1920             so long as it is held in this table.
1921
1922         2. Getting NativeExecutable* from JITThunks should have special protocol.
1923
1924             When getting NativeExecutable* from JITThunks, we do the following,
1925
1926             1. First, we check we have an Entry in JITThunks. If it does not exist, we should insert it anyway.
1927                 1.1. If it exists, we should check whether this Weak<NativeExecutable> is dead or not. It is possible that
1928                      dead one is still in the table because "dead" does not mean that it is "finalized". Until finalizing happens (and
1929                      it can be delayed by incremental-sweeper), Weak<NativeExecutable> can be dead but still accessible. So the table
1930                      is still holding dead one. If we get dead one, we should insert a new one.
1931                 1.2. If it is not dead, we return it.
1932             2. Second, we create a new NativeExecutable and insert it. In that case, it is possible that the table already has Weak<NativeExecutable>,
1933                but it is dead. In that case, we need to explicitly replace it with newly created one since old one is holding old content. If we
1934                replaced, finalizer of Weak<> will not be invoked since it immediately deallocates Weak<>. So, it does not happen that this newly
1935                inserted NativeExecutable* is removed by the finalizer registered by the old Weak<>.
1936
1937         This change makes memory usage of JITThunks table 1/4.
1938
1939         * heap/Weak.cpp:
1940         (JSC::weakClearSlowCase):
1941         * heap/Weak.h:
1942         (JSC::Weak::Weak):
1943         (JSC::Weak::isHashTableEmptyValue const):
1944         (JSC::Weak::unsafeImpl const):
1945         (WTF::HashTraits<JSC::Weak<T>>::isEmptyValue):
1946         * heap/WeakInlines.h:
1947         (JSC::Weak<T>::Weak):
1948         * jit/JITThunks.cpp:
1949         (JSC::JITThunks::JITThunks):
1950         (JSC::JITThunks::WeakNativeExecutableHash::hash):
1951         (JSC::JITThunks::WeakNativeExecutableHash::equal):
1952         (JSC::JITThunks::HostKeySearcher::hash):
1953         (JSC::JITThunks::HostKeySearcher::equal):
1954         (JSC::JITThunks::NativeExecutableTranslator::hash):
1955         (JSC::JITThunks::NativeExecutableTranslator::equal):
1956         (JSC::JITThunks::NativeExecutableTranslator::translate):
1957         (JSC::JITThunks::finalize):
1958         (JSC::JITThunks::hostFunctionStub):
1959         (JSC::JITThunks::clearHostFunctionStubs): Deleted.
1960         * jit/JITThunks.h:
1961         * runtime/NativeExecutable.h:
1962         * tools/JSDollarVM.cpp:
1963         (JSC::functionGCSweepAsynchronously):
1964         (JSC::functionCreateEmptyFunctionWithName):
1965         (JSC::JSDollarVM::finishCreation):
1966
1967 2020-02-17  Tadeu Zagallo  <tzagallo@apple.com>
1968
1969         [Wasm] REGRESSION(r256665): Wasm->JS call IC needs to save memory size register
1970         https://bugs.webkit.org/show_bug.cgi?id=207849
1971
1972         Reviewed by Mark Lam.
1973
1974         When generating the call IC, we should select the callee saves using BoundsChecking mode in order
1975         to obey to the calling conventions described in r256665. Currently, we won't restore the memory size
1976         register when calling the Wasm LLInt through the call IC.
1977
1978         * wasm/js/WebAssemblyFunction.cpp:
1979         (JSC::WebAssemblyFunction::calleeSaves const):
1980
1981 2020-02-17  Per Arne Vollan  <pvollan@apple.com>
1982
1983         Mach lookup to com.apple.webinspector should not be allowed in WebKit's WebContent process
1984         https://bugs.webkit.org/show_bug.cgi?id=203214
1985
1986         Reviewed by Brent Fulgham.
1987
1988         Add static flag in RemoteInspector to indicate whether a sandbox extension is needed. The remote inspector will only be
1989         started if the sandbox extension is not needed. Only the WebContent process will need a sandbox extension, since this
1990         patch removes mach access to 'com.apple.webinspector' for this process. Also add name and domain for the
1991         'Enable Remote Inspector' setting, since this will be used in the UI process.
1992
1993         * inspector/remote/RemoteInspector.cpp:
1994         * inspector/remote/RemoteInspector.h:
1995         * inspector/remote/RemoteInspectorConstants.h:
1996         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
1997         (Inspector::RemoteInspector::singleton):
1998
1999 2020-02-16  Fujii Hironori  <Hironori.Fujii@sony.com>
2000
2001         Remove remaining WTF_EXPORT and WTF_IMPORT by replacing them with WTF_EXPORT_DECLARATION and WTF_IMPORT_DECLARATION
2002         https://bugs.webkit.org/show_bug.cgi?id=207746
2003
2004         Reviewed by Don Olmstead.
2005
2006         * runtime/JSExportMacros.h:
2007
2008 2020-02-16  Paulo Matos  <pmatos@igalia.com>
2009
2010         Remove nonArgGPR1 for ARMv7 and ARM64 (unused)
2011         https://bugs.webkit.org/show_bug.cgi?id=207753
2012
2013         Reviewed by Darin Adler.
2014
2015         Cleanup commit - nonArgGPR1 is unused for both ARMv7
2016         and ARM64.
2017
2018         * jit/GPRInfo.h:
2019
2020 2020-02-14  Tadeu Zagallo  <tzagallo@apple.com> and Michael Saboff  <msaboff@apple.com>
2021
2022         [WASM] Wasm interpreter's calling convention doesn't match Wasm JIT's convention.
2023         https://bugs.webkit.org/show_bug.cgi?id=207727
2024
2025         Reviewed by Mark Lam.
2026
2027         The Wasm JIT has unusual calling conventions, which were further complicated by the addition
2028         of the interpreter, and the interpreter did not correctly follow these conventions (by incorrectly
2029         saving and restoring the callee save registers used for the memory base and size). Here's a summary
2030         of the calling convention:
2031
2032         - When entering Wasm from JS, the wrapper must:
2033             - Preserve the base and size when entering LLInt regardless of the mode. (Prior to this
2034               patch we only preserved the base in Signaling mode)
2035             - Preserve the memory base in either mode, and the size for BoundsChecking.
2036         - Both tiers must preserve every *other* register they use. e.g. the LLInt must preserve PB
2037           and wasmInstance, but must *not* preserve memoryBase and memorySize.
2038         - Changes to memoryBase and memorySize are visible to the caller. This means that:
2039             - Intra-module calls can assume these registers are up-to-date even if the memory was
2040               resized. The only exception here is if the LLInt calls a signaling JIT, in which case
2041               the JIT will not update the size register, since it won't be using it.
2042             - Inter-module and JS calls require the caller to reload these registers. These calls may
2043               result in memory changes (e.g. the callee may call memory.grow).
2044             - A Signaling JIT caller must be aware that the LLInt may trash the size register, since
2045               it always bounds checks.
2046
2047         * llint/WebAssembly.asm:
2048         * wasm/WasmAirIRGenerator.cpp:
2049         (JSC::Wasm::AirIRGenerator::addCall):
2050         * wasm/WasmB3IRGenerator.cpp:
2051         (JSC::Wasm::B3IRGenerator::addCall):
2052         * wasm/WasmCallee.cpp:
2053         (JSC::Wasm::LLIntCallee::calleeSaveRegisters):
2054         * wasm/WasmCallingConvention.h:
2055         * wasm/WasmLLIntPlan.cpp:
2056         (JSC::Wasm::LLIntPlan::didCompleteCompilation):
2057         * wasm/WasmMemoryInformation.cpp:
2058         (JSC::Wasm::PinnedRegisterInfo::get):
2059         (JSC::Wasm::getPinnedRegisters): Deleted.
2060
2061 2020-02-13  Stephan Szabo  <stephan.szabo@sony.com>
2062
2063         [PlayStation] Make special udis86 C file handling only happen for Visual Studio
2064         https://bugs.webkit.org/show_bug.cgi?id=207729
2065
2066         Reviewed by Don Olmstead.
2067
2068         * PlatformPlayStation.cmake:
2069
2070 2020-02-13  Caio Lima  <ticaiolima@gmail.com>
2071
2072         [ESNext][BigInt] We don't support BigInt literal as PropertyName
2073         https://bugs.webkit.org/show_bug.cgi?id=206888
2074
2075         Reviewed by Ross Kirsling.
2076
2077         According to spec (https://tc39.es/ecma262/#prod-PropertyName),
2078         BigInt literals are valid property names. Given that, we should not
2079         throw a SyntaxError when using BigInt literals on destructuring
2080         pattern, method declaration, object literals, etc.
2081         This patch is adding BigInt literal as a valid syntax to PropertyName.
2082
2083         * parser/Parser.cpp:
2084         (JSC::Parser<LexerType>::parseDestructuringPattern):
2085         (JSC::Parser<LexerType>::parseClass):
2086         (JSC::Parser<LexerType>::parseInstanceFieldInitializerSourceElements):
2087         (JSC::Parser<LexerType>::parseProperty):
2088         (JSC::Parser<LexerType>::parseGetterSetter):
2089         * parser/ParserArena.cpp:
2090         (JSC::IdentifierArena::makeBigIntDecimalIdentifier):
2091         * parser/ParserArena.h:
2092
2093 2020-02-12  Mark Lam  <mark.lam@apple.com>
2094
2095         Add options for debugging WASM code.
2096         https://bugs.webkit.org/show_bug.cgi?id=207677
2097         <rdar://problem/59411390>
2098
2099         Reviewed by Yusuke Suzuki.
2100
2101         Specifically ...
2102
2103             JSC_useBBQJIT                            - allows the BBQ JIT to be used if true
2104             JSC_useOMGJIT                            - allows the OMG JIT to be used if true
2105             JSC_useWasmLLIntPrologueOSR              - allows prologue OSR from Wasm LLInt if true
2106             JSC_useWasmLLIntLoopOSR                  - allows loop OSR from Wasm LLInt if true
2107             JSC_useWasmLLIntEpilogueOSR              - allows epilogue OSR from Wasm LLInt if true
2108             JSC_wasmFunctionIndexRangeToCompile=N:M  - wasm function index range to allow compilation on, e.g. 1:100
2109
2110         * JavaScriptCore.xcodeproj/project.pbxproj:
2111         * runtime/Options.cpp:
2112         (JSC::Options::ensureOptionsAreCoherent):
2113         * runtime/OptionsList.h:
2114         * wasm/WasmBBQPlan.cpp:
2115         (JSC::Wasm::BBQPlan::BBQPlan):
2116         * wasm/WasmOMGForOSREntryPlan.cpp:
2117         (JSC::Wasm::OMGForOSREntryPlan::OMGForOSREntryPlan):
2118         * wasm/WasmOMGPlan.cpp:
2119         (JSC::Wasm::OMGPlan::OMGPlan):
2120         * wasm/WasmOperations.cpp:
2121         (JSC::Wasm::shouldJIT):
2122         (JSC::Wasm::operationWasmTriggerOSREntryNow):
2123         (JSC::Wasm::operationWasmTriggerTierUpNow):
2124         * wasm/WasmSlowPaths.cpp:
2125         (JSC::LLInt::shouldJIT):
2126         (JSC::LLInt::WASM_SLOW_PATH_DECL):
2127
2128 2020-02-12  Yusuke Suzuki  <ysuzuki@apple.com>
2129
2130         [JSC] Compact JITCodeMap by storing BytecodeIndex and CodeLocation separately
2131         https://bugs.webkit.org/show_bug.cgi?id=207673
2132
2133         Reviewed by Mark Lam.
2134
2135         While BytecodeIndex is 4 bytes, CodeLocation is 8 bytes. So the tuple of them "JITCodeMap::Entry"
2136         becomes 16 bytes because it adds 4 bytes padding. We should store BytecodeIndex and CodeLocation separately
2137         to avoid this padding.
2138
2139         This patch introduces JITCodeMapBuilder. We use this to build JITCodeMap data structure as a immutable final result.
2140
2141         * jit/JIT.cpp:
2142         (JSC::JIT::link):
2143         * jit/JITCodeMap.h:
2144         (JSC::JITCodeMap::JITCodeMap):
2145         (JSC::JITCodeMap::find const):
2146         (JSC::JITCodeMap::operator bool const):
2147         (JSC::JITCodeMap::codeLocations const):
2148         (JSC::JITCodeMap::indexes const):
2149         (JSC::JITCodeMapBuilder::append):
2150         (JSC::JITCodeMapBuilder::finalize):
2151         (JSC::JITCodeMap::Entry::Entry): Deleted.
2152         (JSC::JITCodeMap::Entry::bytecodeIndex const): Deleted.
2153         (JSC::JITCodeMap::Entry::codeLocation): Deleted.
2154         (JSC::JITCodeMap::append): Deleted.
2155         (JSC::JITCodeMap::finish): Deleted.
2156
2157 2020-02-12  Pavel Feldman  <pavel.feldman@gmail.com>
2158
2159         Web Inspector: encode binary web socket frames using base64
2160         https://bugs.webkit.org/show_bug.cgi?id=207448
2161         
2162         Previous representation of binary frames is lossy using fromUTF8WithLatin1Fallback,
2163         this patch consistently encodes binary data using base64.
2164
2165         Reviewed by Timothy Hatcher.
2166
2167         * inspector/protocol/Network.json:
2168
2169 2020-02-12  Simon Fraser  <simon.fraser@apple.com>
2170
2171         Remove CSS_DEVICE_ADAPTATION
2172         https://bugs.webkit.org/show_bug.cgi?id=203479
2173
2174         Reviewed by Tim Horton.
2175
2176         CSS Working Group resolved to remove @viewport <https://github.com/w3c/csswg-drafts/issues/4766>,
2177         so remove the code.
2178
2179         * Configurations/FeatureDefines.xcconfig:
2180
2181 2020-02-12  Yusuke Suzuki  <ysuzuki@apple.com>
2182
2183         [JSC] Compact StructureTransitionTable
2184         https://bugs.webkit.org/show_bug.cgi?id=207616
2185
2186         Reviewed by Mark Lam.
2187
2188         Some of StructureTransitionTable are shown as very large HashMap and we can compact it by encoding key.
2189         We leverage 48bit pointers and 8byte alignment of UniquedStringImpl* to encode other parameters into it.
2190
2191         * runtime/Structure.cpp:
2192         (JSC::StructureTransitionTable::contains const):
2193         (JSC::StructureTransitionTable::get const):
2194         (JSC::StructureTransitionTable::add):
2195         * runtime/Structure.h:
2196         * runtime/StructureTransitionTable.h:
2197         (JSC::StructureTransitionTable::Hash::Key::Key):
2198         (JSC::StructureTransitionTable::Hash::Key::isHashTableDeletedValue const):
2199         (JSC::StructureTransitionTable::Hash::Key::impl const):
2200         (JSC::StructureTransitionTable::Hash::Key::isAddition const):
2201         (JSC::StructureTransitionTable::Hash::Key::attributes const):
2202         (JSC::StructureTransitionTable::Hash::Key::operator==):
2203         (JSC::StructureTransitionTable::Hash::Key::operator!=):
2204         (JSC::StructureTransitionTable::Hash::hash):
2205         (JSC::StructureTransitionTable::Hash::equal):
2206
2207 2020-02-12  Yusuke Suzuki  <ysuzuki@apple.com>
2208
2209         [JSC] Make RegExpCache small
2210         https://bugs.webkit.org/show_bug.cgi?id=207619
2211
2212         Reviewed by Mark Lam.
2213
2214         We can compact RegExpKey by using PackedRefPtr, so that we can shrink memory consumption of RegExpCache.
2215
2216         * runtime/RegExpKey.h:
2217
2218 2020-02-10  Mark Lam  <mark.lam@apple.com>
2219
2220         Placate exception check validator in GenericArguments<Type>::put().
2221         https://bugs.webkit.org/show_bug.cgi?id=207485
2222         <rdar://problem/59302535>
2223
2224         Reviewed by Robin Morisset.
2225
2226         * runtime/GenericArgumentsInlines.h:
2227         (JSC::GenericArguments<Type>::put):
2228
2229 2020-02-10  Mark Lam  <mark.lam@apple.com>
2230
2231         Missing exception check in GenericArguments<Type>::deletePropertyByIndex().
2232         https://bugs.webkit.org/show_bug.cgi?id=207483
2233         <rdar://problem/59302616>
2234
2235         Reviewed by Yusuke Suzuki.
2236
2237         * runtime/GenericArgumentsInlines.h:
2238         (JSC::GenericArguments<Type>::deletePropertyByIndex):
2239
2240 2020-02-10  Truitt Savell  <tsavell@apple.com>
2241
2242         Unreviewed, rolling out r256091.
2243
2244         Broke internal builds
2245
2246         Reverted changeset:
2247
2248         "Move trivial definitions from FeatureDefines.xcconfig to
2249         PlatformEnableCocoa.h"
2250         https://bugs.webkit.org/show_bug.cgi?id=207155
2251         https://trac.webkit.org/changeset/256091
2252
2253 2020-02-10  Truitt Savell  <tsavell@apple.com>
2254
2255         Unreviewed, rolling out r256103.
2256
2257         This patch is blocking the rollout of r256091
2258
2259         Reverted changeset:
2260
2261         "Move JavaScriptCore related feature defines from
2262         FeatureDefines.xcconfig to PlatformEnableCocoa.h"
2263         https://bugs.webkit.org/show_bug.cgi?id=207436
2264         https://trac.webkit.org/changeset/256103
2265
2266 2020-02-09  Keith Rollin  <krollin@apple.com>
2267
2268         Re-enable LTO for ARM builds
2269         https://bugs.webkit.org/show_bug.cgi?id=207402
2270         <rdar://problem/49190767>
2271
2272         Reviewed by Sam Weinig.
2273
2274         Bug 190758 re-enabled LTO for Production builds for x86-family CPUs.
2275         Enabling it for ARM was left out due to a compiler issue. That issue
2276         has been fixed, and so now we can re-enable LTO for ARM.
2277
2278         * Configurations/Base.xcconfig:
2279
2280 2020-02-08  Sam Weinig  <weinig@apple.com>
2281
2282         Move JavaScriptCore related feature defines from FeatureDefines.xcconfig to PlatformEnableCocoa.h
2283         https://bugs.webkit.org/show_bug.cgi?id=207436
2284
2285         Reviewed by Tim Horton.
2286
2287         * Configurations/FeatureDefines.xcconfig:
2288         Remove ENABLE_FAST_JIT_PERMISSIONS and ENABLE_FTL_JIT.
2289
2290 2020-02-08  Sam Weinig  <weinig@apple.com>
2291
2292         Move trivial definitions from FeatureDefines.xcconfig to PlatformEnableCocoa.h
2293         https://bugs.webkit.org/show_bug.cgi?id=207155
2294
2295         Reviewed by Tim Horton.
2296         
2297         Move all trivial definitions (just ENABLE_FOO = ENABLE_FOO; or ENABLE_BAR = ;)
2298         from the FeatureDefines.xcconfigs to PlatformEnableCocoa.h, ensuring each one
2299         also has a default value in PlatformEnable.h
2300
2301         To support the move, DerivedSources.make has been updated to generate the list
2302         of ENABLE_* features by directly from preprocessing Platform.h, rather than 
2303         just getting the partial list from the xcconfig file.
2304
2305         * Configurations/FeatureDefines.xcconfig:
2306         * DerivedSources.make:
2307
2308 2020-02-07  Robin Morisset  <rmorisset@apple.com>
2309
2310         Throw OutOfMemory exception instead of crashing if DirectArguments/ScopedArguments can't be created
2311         https://bugs.webkit.org/show_bug.cgi?id=207423
2312
2313         Reviewed by Mark Lam.
2314
2315         AllocationFailureMode::Assert is problematic because fuzzers keep producing spurious error reports when they generate code that tries allocating infinite amount of memory.
2316         The right approach is to use AllocationFailureMode::ReturnNull, and throw a JS exception upon receiving null.
2317
2318         In this patch I fixed two functions that were using AllocationFailureMode::Assert:
2319             DirectArguments::DirectArguments::overrideThings
2320             GenericArguments<Type>::initModifiedArgumentsDescriptor
2321
2322         No test added, because the only test we have is highly non-deterministic/flaky (only triggers about 10 to 20% of the time even before the fix).
2323
2324         * runtime/DirectArguments.h:
2325         * runtime/GenericArguments.h:
2326         * runtime/GenericArgumentsInlines.h:
2327         (JSC::GenericArguments<Type>::deletePropertyByIndex):
2328         (JSC::GenericArguments<Type>::defineOwnProperty):
2329         (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptor):
2330         (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptorIfNecessary):
2331         (JSC::GenericArguments<Type>::setModifiedArgumentDescriptor):
2332         * runtime/ScopedArguments.h:
2333
2334 2020-02-07  Ryan Haddad  <ryanhaddad@apple.com>
2335
2336         Unreviewed, rolling out r256051.
2337
2338         Broke internal builds.
2339
2340         Reverted changeset:
2341
2342         "Move trivial definitions from FeatureDefines.xcconfig to
2343         PlatformEnableCocoa.h"
2344         https://bugs.webkit.org/show_bug.cgi?id=207155
2345         https://trac.webkit.org/changeset/256051
2346
2347 2020-02-07  Sam Weinig  <weinig@apple.com>
2348
2349         Move trivial definitions from FeatureDefines.xcconfig to PlatformEnableCocoa.h
2350         https://bugs.webkit.org/show_bug.cgi?id=207155
2351
2352         Reviewed by Tim Horton.
2353         
2354         Move all trivial definitions (just ENABLE_FOO = ENABLE_FOO; or ENABLE_BAR = ;)
2355         from the FeatureDefines.xcconfigs to PlatformEnableCocoa.h, ensuring each one
2356         also has a default value in PlatformEnable.h
2357
2358         To support the move, DerivedSources.make has been updated to generate the list
2359         of ENABLE_* features by directly from preprocessing Platform.h, rather than 
2360         just getting the partial list from the xcconfig file.
2361
2362         * Configurations/FeatureDefines.xcconfig:
2363         * DerivedSources.make:
2364
2365 2020-02-07  Yusuke Suzuki  <ysuzuki@apple.com>
2366
2367         [JSC] CodeBlock::shrinkToFit should shrink m_constantRegisters and m_constantsSourceCodeRepresentation in 64bit architectures
2368         https://bugs.webkit.org/show_bug.cgi?id=207356
2369
2370         Reviewed by Mark Lam.
2371
2372         Only 32bit architectures are using m_constantRegisters's address. 64bit architectures are not relying on m_constantRegisters's address.
2373         This patches fixes the thing so that CodeBlock::shrinkToFit will shrink m_constantRegisters and m_constantsSourceCodeRepresentation
2374         regardless of whether this is EarlyShrink or not. We also move DFG/FTL's LateShrink call to the place after calling DFGCommon reallyAdd
2375         since they can add more constant registers.
2376
2377         Relanding it by fixing dead-lock.
2378
2379         * bytecode/CodeBlock.cpp:
2380         (JSC::CodeBlock::shrinkToFit):
2381         * bytecode/CodeBlock.h:
2382         * dfg/DFGJITCompiler.cpp:
2383         (JSC::DFG::JITCompiler::compile):
2384         (JSC::DFG::JITCompiler::compileFunction):
2385         * dfg/DFGJITFinalizer.cpp:
2386         (JSC::DFG::JITFinalizer::finalizeCommon):
2387         * dfg/DFGPlan.cpp:
2388         (JSC::DFG::Plan::compileInThreadImpl):
2389         (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
2390         * jit/JIT.cpp:
2391         (JSC::JIT::link):
2392         * jit/JIT.h:
2393         * jit/JITInlines.h:
2394         (JSC::JIT::emitLoadDouble):
2395         (JSC::JIT::emitLoadInt32ToDouble): Deleted.
2396
2397 2020-02-06  Robin Morisset  <rmorisset@apple.com>
2398
2399         Most of B3 and Air does not need to include CCallHelpers.h
2400         https://bugs.webkit.org/show_bug.cgi?id=206975
2401
2402         Reviewed by Mark Lam.
2403
2404         They only do to use CCallHelpers::Jump or CCallHelpers::Label.
2405         But CCallHelpers inherit those from MacroAssembler. And MacroAssembler.h is dramatically cheaper to include (since CCallHelpers includes AssemblyHelpers which includes CodeBlock.h which includes roughly the entire runtime).
2406
2407         * b3/B3CheckSpecial.cpp:
2408         * b3/B3CheckSpecial.h:
2409         * b3/B3LowerMacros.cpp:
2410         * b3/B3PatchpointSpecial.cpp:
2411         (JSC::B3::PatchpointSpecial::generate):
2412         * b3/B3PatchpointSpecial.h:
2413         * b3/B3StackmapGenerationParams.cpp:
2414         (JSC::B3::StackmapGenerationParams::successorLabels const):
2415         * b3/B3StackmapGenerationParams.h:
2416         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h:
2417         * b3/air/AirCCallSpecial.cpp:
2418         * b3/air/AirCCallSpecial.h:
2419         * b3/air/AirCode.cpp:
2420         * b3/air/AirCode.h:
2421         (JSC::B3::Air::Code::entrypointLabel const):
2422         * b3/air/AirCustom.cpp:
2423         (JSC::B3::Air::CCallCustom::generate):
2424         (JSC::B3::Air::ShuffleCustom::generate):
2425         (JSC::B3::Air::WasmBoundsCheckCustom::generate):
2426         * b3/air/AirCustom.h:
2427         (JSC::B3::Air::PatchCustom::generate):
2428         (JSC::B3::Air::EntrySwitchCustom::generate):
2429         * b3/air/AirDisassembler.cpp:
2430         (JSC::B3::Air::Disassembler::addInst):
2431         * b3/air/AirDisassembler.h:
2432         * b3/air/AirGenerationContext.h:
2433         * b3/air/AirInst.h:
2434         * b3/air/AirPrintSpecial.cpp:
2435         (JSC::B3::Air::PrintSpecial::generate):
2436         * b3/air/AirPrintSpecial.h:
2437         * b3/air/AirSpecial.h:
2438         * b3/air/AirValidate.cpp:
2439         * b3/air/opcode_generator.rb:
2440
2441 2020-02-06  Commit Queue  <commit-queue@webkit.org>
2442
2443         Unreviewed, rolling out r255987.
2444         https://bugs.webkit.org/show_bug.cgi?id=207369
2445
2446         JSTests failures (Requested by yusukesuzuki on #webkit).
2447
2448         Reverted changeset:
2449
2450         "[JSC] CodeBlock::shrinkToFit should shrink
2451         m_constantRegisters and m_constantsSourceCodeRepresentation in
2452         64bit architectures"
2453         https://bugs.webkit.org/show_bug.cgi?id=207356
2454         https://trac.webkit.org/changeset/255987
2455
2456 2020-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2457
2458         [JSC] CodeBlock::shrinkToFit should shrink m_constantRegisters and m_constantsSourceCodeRepresentation in 64bit architectures
2459         https://bugs.webkit.org/show_bug.cgi?id=207356
2460
2461         Reviewed by Mark Lam.
2462
2463         Only 32bit architectures are using m_constantRegisters's address. 64bit architectures are not relying on m_constantRegisters's address.
2464         This patches fixes the thing so that CodeBlock::shrinkToFit will shrink m_constantRegisters and m_constantsSourceCodeRepresentation
2465         regardless of whether this is EarlyShrink or not. We also move DFG/FTL's LateShrink call to the place after calling DFGCommon reallyAdd
2466         since they can add more constant registers.
2467
2468         * bytecode/CodeBlock.cpp:
2469         (JSC::CodeBlock::shrinkToFit):
2470         * bytecode/CodeBlock.h:
2471         * dfg/DFGJITCompiler.cpp:
2472         (JSC::DFG::JITCompiler::compile):
2473         (JSC::DFG::JITCompiler::compileFunction):
2474         * dfg/DFGJITFinalizer.cpp:
2475         (JSC::DFG::JITFinalizer::finalizeCommon):
2476         * dfg/DFGPlan.cpp:
2477         (JSC::DFG::Plan::compileInThreadImpl):
2478         (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
2479         * jit/JIT.cpp:
2480         (JSC::JIT::link):
2481         * jit/JIT.h:
2482         * jit/JITInlines.h:
2483         (JSC::JIT::emitLoadDouble):
2484         (JSC::JIT::emitLoadInt32ToDouble): Deleted.
2485
2486 2020-02-05  Don Olmstead  <don.olmstead@sony.com>
2487
2488         [PlayStation] Build a shared JavaScriptCore
2489         https://bugs.webkit.org/show_bug.cgi?id=198446
2490
2491         Reviewed by Fujii Hironori.
2492
2493         Add TARGET_OBJECTS for bmalloc and WTF so JavaScriptCore links. Add bmalloc and
2494         WTF compile definitions so exports are exposed.
2495
2496         * PlatformPlayStation.cmake:
2497
2498 2020-02-05  Justin Michaud  <justin_michaud@apple.com>
2499
2500         Deleting a property should not turn structures into uncacheable dictionaries
2501         https://bugs.webkit.org/show_bug.cgi?id=206430
2502
2503         Reviewed by Yusuke Suzuki.
2504
2505         Right now, deleteProperty/removePropertyTransition causes a structure transition to uncacheable dictionary. Instead, we should allow it to transition to a new regular structure like adding a property does. This means that we have to:
2506
2507         1) Break the assumption that structure transition offsets increase monotonically
2508
2509         We add a new flag to tell that a structure has deleted its property, and update materializePropertyTable to use it.
2510
2511         2) Add a new transition map and transition kind for deletes
2512
2513         We cache the delete transition. We will not transition back to a previous structure if you add then immediately remove a property.
2514
2515         3) Find some heuristic for when we should actually transition to uncacheable dictionary.
2516
2517         Since deleting properties is expected to be rare, we just walk the structure list and count its size on removal. 
2518
2519         This patch also fixes a related bug in addProperty, where we did not use a GCSafeConcurrentJSLocker, and adds an option to trigger the bug. Finally, we add some helper methods to dollarVM to test.
2520
2521         This gives a 24x speedup on delete-property-keeps-cacheable-structure.js, and is neutral on delete-property-from-prototype-chain.js (which was already generating code using the inline cache).
2522
2523         * heap/HeapInlines.h:
2524         (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
2525         * runtime/JSObject.cpp:
2526         (JSC::JSObject::deleteProperty):
2527         * runtime/OptionsList.h:
2528         * runtime/PropertyMapHashTable.h:
2529         (JSC::PropertyTable::get):
2530         (JSC::PropertyTable::add):
2531         (JSC::PropertyTable::addDeletedOffset):
2532         (JSC::PropertyTable::reinsert):
2533         * runtime/Structure.cpp:
2534         (JSC::StructureTransitionTable::contains const):
2535         (JSC::StructureTransitionTable::get const):
2536         (JSC::StructureTransitionTable::add):
2537         (JSC::Structure::Structure):
2538         (JSC::Structure::materializePropertyTable):
2539         (JSC::Structure::addNewPropertyTransition):
2540         (JSC::Structure::removePropertyTransition):
2541         (JSC::Structure::removePropertyTransitionFromExistingStructure):
2542         (JSC::Structure::removeNewPropertyTransition):
2543         (JSC::Structure::toUncacheableDictionaryTransition):
2544         (JSC::Structure::remove):
2545         (JSC::Structure::visitChildren):
2546         * runtime/Structure.h:
2547         * runtime/StructureInlines.h:
2548         (JSC::Structure::forEachPropertyConcurrently):
2549         (JSC::Structure::add):
2550         (JSC::Structure::remove):
2551         (JSC::Structure::removePropertyWithoutTransition):
2552         * runtime/StructureTransitionTable.h:
2553         (JSC::StructureTransitionTable::Hash::hash):
2554         * tools/JSDollarVM.cpp:
2555         (JSC::JSDollarVMHelper::functionGetStructureTransitionList):
2556         (JSC::functionGetConcurrently):
2557         (JSC::JSDollarVM::finishCreation):
2558
2559 2020-02-05  Devin Rousso  <drousso@apple.com>
2560
2561         Web Inspector: Sources: add a special breakpoint for controlling whether `debugger` statements pause
2562         https://bugs.webkit.org/show_bug.cgi?id=206818
2563
2564         Reviewed by Timothy Hatcher.
2565
2566         * inspector/protocol/Debugger.json:
2567         * inspector/agents/InspectorDebuggerAgent.h:
2568         * inspector/agents/InspectorDebuggerAgent.cpp:
2569         (Inspector::InspectorDebuggerAgent::setPauseOnDebuggerStatements): Added.
2570
2571         * bytecompiler/NodesCodegen.cpp:
2572         (JSC::DebuggerStatementNode::emitBytecode):
2573         * bytecode/CodeBlock.cpp:
2574         (JSC::CodeBlock::finishCreation):
2575         * bytecode/UnlinkedCodeBlock.cpp:
2576         (JSC::dumpLineColumnEntry):
2577         * interpreter/Interpreter.h:
2578         * interpreter/Interpreter.cpp:
2579         (JSC::Interpreter::debug):
2580         (WTF::printInternal):
2581         * debugger/Debugger.h:
2582         (JSC::Debugger::setPauseOnDebuggerStatements): Added.
2583         * debugger/Debugger.cpp:
2584         (JSC::Debugger::didReachDebuggerStatement): Added.
2585         (JSC::Debugger::didReachBreakpoint): Deleted.
2586         Replace `DebugHookType::DidReachBreakpoint` with `DebugHookType::DidReachDebuggerStatement`,
2587         as it is only actually used for `debugger;` statements, not breakpoints.
2588
2589 2020-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2590
2591         [JSC] Structure::setMaxOffset and setTransitionOffset are racy
2592         https://bugs.webkit.org/show_bug.cgi?id=207249
2593
2594         Reviewed by Mark Lam.
2595
2596         We hit crash in JSTests/stress/array-slice-osr-exit-2.js. The situation is following.
2597
2598             1. The mutator thread (A) is working.
2599             2. The concurrent collector (B) is working.
2600             3. A attempts to set m_maxOffset in StructureRareData by allocating it. First, A sets Structure::m_maxOffset to useRareDataFlag.
2601             3. B is in JSObject::visitButterflyImpl, and executing Structure::maxOffset().
2602             4. B detects that m_maxOffset is useRareDataFlag.
2603             5. B attempts to load rareData, but this is not a StructureRareData since A is just now setting up StructureRareData.
2604             6. B crashes.
2605
2606         Set useRareDataFlag after StructureRareData is set. Ensuring this store-order by using storeStoreFence.
2607
2608         * runtime/Structure.h:
2609
2610 2020-02-04  Adrian Perez de Castro  <aperez@igalia.com>
2611
2612         Non-unified build fixes early February 2020 edition
2613         https://bugs.webkit.org/show_bug.cgi?id=207227
2614
2615         Reviewed by Don Olmstead.
2616
2617         * bytecode/PolyProtoAccessChain.h: Add missing inclusions of StructureIDTable.h and VM.h
2618
2619 2020-02-04  Alex Christensen  <achristensen@webkit.org>
2620
2621         Fix Mac CMake build
2622         https://bugs.webkit.org/show_bug.cgi?id=207231
2623
2624         * PlatformMac.cmake:
2625
2626 2020-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2627
2628         [JSC] Use PackedRefPtr in UnlinkedCodeBlock
2629         https://bugs.webkit.org/show_bug.cgi?id=207229
2630
2631         Reviewed by Mark Lam.
2632
2633         Use PackedRefPtr in UnlinkedCodeBlock to compact it from 168 to 160, which saves 16 bytes (10%) per UnlinkedCodeBlock since
2634         we have 16 bytes alignment for GC cells.
2635
2636         * bytecode/UnlinkedCodeBlock.h:
2637         (JSC::UnlinkedCodeBlock::sourceURLDirective const):
2638         (JSC::UnlinkedCodeBlock::sourceMappingURLDirective const):
2639         (JSC::UnlinkedCodeBlock::setSourceURLDirective):
2640         (JSC::UnlinkedCodeBlock::setSourceMappingURLDirective):
2641         * runtime/CachedTypes.cpp:
2642         (JSC::CachedCodeBlock::sourceURLDirective const):
2643         (JSC::CachedCodeBlock::sourceMappingURLDirective const):
2644         (JSC::CachedCodeBlock<CodeBlockType>::encode):
2645         * runtime/CodeCache.cpp:
2646         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
2647
2648 2020-02-04  Alexey Shvayka  <shvaikalesh@gmail.com>
2649
2650         Quantifiers after lookahead assertions should be syntax errors in Unicode patterns only
2651         https://bugs.webkit.org/show_bug.cgi?id=206988
2652
2653         Reviewed by Darin Adler and Ross Kirsling.
2654
2655         This change adds SyntaxError for quantifiable assertions in Unicode patterns,
2656         aligning JSC with V8 and SpiderMonkey.
2657
2658         Grammar: https://tc39.es/ecma262/#prod-annexB-Term
2659         (/u flag precludes the use of QuantifiableAssertion)
2660
2661         Return value of parseParenthesesEnd() now matches with parseEscape() and
2662         parseAtomEscape().
2663
2664         * yarr/YarrParser.h:
2665         (JSC::Yarr::Parser::parseParenthesesBegin):
2666         (JSC::Yarr::Parser::parseParenthesesEnd):
2667         (JSC::Yarr::Parser::parseTokens):
2668
2669 2020-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2670
2671         [JSC] Introduce UnlinkedCodeBlockGenerator and reduce sizeof(UnlinkedCodeBlock)
2672         https://bugs.webkit.org/show_bug.cgi?id=207087
2673
2674         Reviewed by Tadeu Zagallo.
2675
2676         While UnlinkedCodeBlock is immutable once it is created from BytecodeGenerator, it has many mutable Vectors.
2677         This is because we are using UnlinkedCodeBlock as a builder of UnlinkedCodeBlock itself too in BytecodeGenerator.
2678         Since Vector takes 16 bytes to allow efficient expansions, it is nice if we can use RefCountedArray instead when
2679         we know this Vector is immutable.
2680
2681         In this patch, we introduce UnlinkedCodeBlockGenerator wrapper. BytecodeGenerator, BytecodeRewriter, BytecodeDumper,
2682         and BytecodeGeneratorification interact with UnlinkedCodeBlockGenerator instead of UnlinkedCodeBlock. And UnlinkedCodeBlockGenerator
2683         will generate the finalized UnlinkedCodeBlock. This design allows us to use RefCountedArray for data in UnlinkedCodeBlock,
2684         which is (1) smaller and (2) doing shrinkToFit operation when creating it from Vector.
2685
2686         This patch reduces sizeof(UnlinkedCodeBlock) from 256 to 168, 88 bytes reduction.
2687
2688         * JavaScriptCore.xcodeproj/project.pbxproj:
2689         * Sources.txt:
2690         * bytecode/BytecodeBasicBlock.cpp:
2691         (JSC::BytecodeBasicBlock::compute):
2692         * bytecode/BytecodeBasicBlock.h:
2693         * bytecode/BytecodeDumper.cpp:
2694         * bytecode/BytecodeGeneratorification.cpp:
2695         (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
2696         (JSC::GeneratorLivenessAnalysis::run):
2697         (JSC::BytecodeGeneratorification::run):
2698         (JSC::performGeneratorification):
2699         * bytecode/BytecodeGeneratorification.h:
2700         * bytecode/BytecodeRewriter.h:
2701         (JSC::BytecodeRewriter::BytecodeRewriter):
2702         * bytecode/CodeBlock.cpp:
2703         (JSC::CodeBlock::finishCreation):
2704         (JSC::CodeBlock::setConstantIdentifierSetRegisters):
2705         (JSC::CodeBlock::setConstantRegisters):
2706         (JSC::CodeBlock::handlerForIndex):
2707         (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
2708         * bytecode/CodeBlock.h:
2709         (JSC::CodeBlock::numberOfSwitchJumpTables const):
2710         (JSC::CodeBlock::numberOfStringSwitchJumpTables const):
2711         (JSC::CodeBlock::addSwitchJumpTable): Deleted.
2712         (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
2713         * bytecode/HandlerInfo.h:
2714         (JSC::HandlerInfoBase::handlerForIndex):
2715         * bytecode/JumpTable.h:
2716         (JSC::SimpleJumpTable::add): Deleted.
2717         * bytecode/PreciseJumpTargets.cpp:
2718         (JSC::computePreciseJumpTargets):
2719         (JSC::recomputePreciseJumpTargets):
2720         (JSC::findJumpTargetsForInstruction):
2721         * bytecode/PreciseJumpTargets.h:
2722         * bytecode/UnlinkedCodeBlock.cpp:
2723         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2724         (JSC::UnlinkedCodeBlock::visitChildren):
2725         (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
2726         (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeIndex const):
2727         (JSC::UnlinkedCodeBlock::handlerForIndex):
2728         (JSC::UnlinkedCodeBlock::addExpressionInfo): Deleted.
2729         (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo): Deleted.
2730         (JSC::UnlinkedCodeBlock::setInstructions): Deleted.
2731         (JSC::UnlinkedCodeBlock::applyModification): Deleted.
2732         (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
2733         (JSC::UnlinkedCodeBlock::addOutOfLineJumpTarget): Deleted.
2734         * bytecode/UnlinkedCodeBlock.h:
2735         (JSC::UnlinkedCodeBlock::expressionInfo):
2736         (JSC::UnlinkedCodeBlock::setNumParameters):
2737         (JSC::UnlinkedCodeBlock::numberOfIdentifiers const):
2738         (JSC::UnlinkedCodeBlock::identifiers const):
2739         (JSC::UnlinkedCodeBlock::bitVector):
2740         (JSC::UnlinkedCodeBlock::constantRegisters):
2741         (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation):
2742         (JSC::UnlinkedCodeBlock::constantIdentifierSets):
2743         (JSC::UnlinkedCodeBlock::numberOfJumpTargets const):
2744         (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables const):
2745         (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables const):
2746         (JSC::UnlinkedCodeBlock::numberOfFunctionDecls):
2747         (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers const):
2748         (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets const):
2749         (JSC::UnlinkedCodeBlock::createRareDataIfNecessary):
2750         (JSC::UnlinkedCodeBlock::addParameter): Deleted.
2751         (JSC::UnlinkedCodeBlock::addIdentifier): Deleted.
2752         (JSC::UnlinkedCodeBlock::addBitVector): Deleted.
2753         (JSC::UnlinkedCodeBlock::addSetConstant): Deleted.
2754         (JSC::UnlinkedCodeBlock::addConstant): Deleted.
2755         (JSC::UnlinkedCodeBlock::addJumpTarget): Deleted.
2756         (JSC::UnlinkedCodeBlock::addSwitchJumpTable): Deleted.
2757         (JSC::UnlinkedCodeBlock::addStringSwitchJumpTable): Deleted.
2758         (JSC::UnlinkedCodeBlock::addFunctionDecl): Deleted.
2759         (JSC::UnlinkedCodeBlock::addFunctionExpr): Deleted.
2760         (JSC::UnlinkedCodeBlock::addExceptionHandler): Deleted.
2761         (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset): Deleted.
2762         (JSC::UnlinkedCodeBlock::replaceOutOfLineJumpTargets): Deleted.
2763         * bytecode/UnlinkedCodeBlockGenerator.cpp: Added.
2764         (JSC::UnlinkedCodeBlockGenerator::getLineAndColumn const):
2765         (JSC::UnlinkedCodeBlockGenerator::addExpressionInfo):
2766         (JSC::UnlinkedCodeBlockGenerator::addTypeProfilerExpressionInfo):
2767         (JSC::UnlinkedCodeBlockGenerator::finalize):
2768         (JSC::UnlinkedCodeBlockGenerator::handlerForBytecodeIndex):
2769         (JSC::UnlinkedCodeBlockGenerator::handlerForIndex):
2770         (JSC::UnlinkedCodeBlockGenerator::applyModification):
2771         (JSC::UnlinkedCodeBlockGenerator::addOutOfLineJumpTarget):
2772         (JSC::UnlinkedCodeBlockGenerator::outOfLineJumpOffset):
2773         (JSC::UnlinkedCodeBlockGenerator::dump const):
2774         * bytecode/UnlinkedCodeBlockGenerator.h: Added.
2775         (JSC::UnlinkedCodeBlockGenerator::UnlinkedCodeBlockGenerator):
2776         (JSC::UnlinkedCodeBlockGenerator::vm):
2777         (JSC::UnlinkedCodeBlockGenerator::isConstructor const):
2778         (JSC::UnlinkedCodeBlockGenerator::constructorKind const):
2779         (JSC::UnlinkedCodeBlockGenerator::superBinding const):
2780         (JSC::UnlinkedCodeBlockGenerator::scriptMode const):
2781         (JSC::UnlinkedCodeBlockGenerator::needsClassFieldInitializer const):
2782         (JSC::UnlinkedCodeBlockGenerator::isStrictMode const):
2783         (JSC::UnlinkedCodeBlockGenerator::usesEval const):
2784         (JSC::UnlinkedCodeBlockGenerator::parseMode const):
2785         (JSC::UnlinkedCodeBlockGenerator::isArrowFunction):
2786         (JSC::UnlinkedCodeBlockGenerator::derivedContextType const):
2787         (JSC::UnlinkedCodeBlockGenerator::evalContextType const):
2788         (JSC::UnlinkedCodeBlockGenerator::isArrowFunctionContext const):
2789         (JSC::UnlinkedCodeBlockGenerator::isClassContext const):
2790         (JSC::UnlinkedCodeBlockGenerator::numCalleeLocals const):
2791         (JSC::UnlinkedCodeBlockGenerator::numVars const):
2792         (JSC::UnlinkedCodeBlockGenerator::numParameters const):
2793         (JSC::UnlinkedCodeBlockGenerator::thisRegister const):
2794         (JSC::UnlinkedCodeBlockGenerator::scopeRegister const):
2795         (JSC::UnlinkedCodeBlockGenerator::wasCompiledWithDebuggingOpcodes const):
2796         (JSC::UnlinkedCodeBlockGenerator::hasCheckpoints const):
2797         (JSC::UnlinkedCodeBlockGenerator::hasTailCalls const):
2798         (JSC::UnlinkedCodeBlockGenerator::setHasCheckpoints):
2799         (JSC::UnlinkedCodeBlockGenerator::setHasTailCalls):
2800         (JSC::UnlinkedCodeBlockGenerator::setNumCalleeLocals):
2801         (JSC::UnlinkedCodeBlockGenerator::setNumVars):
2802         (JSC::UnlinkedCodeBlockGenerator::setThisRegister):
2803         (JSC::UnlinkedCodeBlockGenerator::setScopeRegister):
2804         (JSC::UnlinkedCodeBlockGenerator::setNumParameters):
2805         (JSC::UnlinkedCodeBlockGenerator::metadata):
2806         (JSC::UnlinkedCodeBlockGenerator::addOpProfileControlFlowBytecodeOffset):
2807         (JSC::UnlinkedCodeBlockGenerator::numberOfJumpTargets const):
2808         (JSC::UnlinkedCodeBlockGenerator::addJumpTarget):
2809         (JSC::UnlinkedCodeBlockGenerator::jumpTarget const):
2810         (JSC::UnlinkedCodeBlockGenerator::lastJumpTarget const):
2811         (JSC::UnlinkedCodeBlockGenerator::numberOfSwitchJumpTables const):
2812         (JSC::UnlinkedCodeBlockGenerator::addSwitchJumpTable):
2813         (JSC::UnlinkedCodeBlockGenerator::switchJumpTable):
2814         (JSC::UnlinkedCodeBlockGenerator::numberOfStringSwitchJumpTables const):
2815         (JSC::UnlinkedCodeBlockGenerator::addStringSwitchJumpTable):
2816         (JSC::UnlinkedCodeBlockGenerator::stringSwitchJumpTable):
2817         (JSC::UnlinkedCodeBlockGenerator::numberOfExceptionHandlers const):
2818         (JSC::UnlinkedCodeBlockGenerator::exceptionHandler):
2819         (JSC::UnlinkedCodeBlockGenerator::addExceptionHandler):
2820         (JSC::UnlinkedCodeBlockGenerator::bitVector):
2821         (JSC::UnlinkedCodeBlockGenerator::addBitVector):
2822         (JSC::UnlinkedCodeBlockGenerator::numberOfConstantIdentifierSets const):
2823         (JSC::UnlinkedCodeBlockGenerator::constantIdentifierSets):
2824         (JSC::UnlinkedCodeBlockGenerator::addSetConstant):
2825         (JSC::UnlinkedCodeBlockGenerator::constantRegister const):
2826         (JSC::UnlinkedCodeBlockGenerator::constantRegisters):
2827         (JSC::UnlinkedCodeBlockGenerator::getConstant const):
2828         (JSC::UnlinkedCodeBlockGenerator::constantsSourceCodeRepresentation):
2829         (JSC::UnlinkedCodeBlockGenerator::addConstant):
2830         (JSC::UnlinkedCodeBlockGenerator::addFunctionDecl):
2831         (JSC::UnlinkedCodeBlockGenerator::addFunctionExpr):
2832         (JSC::UnlinkedCodeBlockGenerator::numberOfIdentifiers const):
2833         (JSC::UnlinkedCodeBlockGenerator::identifier const):
2834         (JSC::UnlinkedCodeBlockGenerator::addIdentifier):
2835         (JSC::UnlinkedCodeBlockGenerator::outOfLineJumpOffset):
2836         (JSC::UnlinkedCodeBlockGenerator::replaceOutOfLineJumpTargets):
2837         (JSC::UnlinkedCodeBlockGenerator::metadataSizeInBytes):
2838         * bytecompiler/BytecodeGenerator.cpp:
2839         (JSC::BytecodeGenerator::generate):
2840         (JSC::BytecodeGenerator::BytecodeGenerator):
2841         (JSC::BytecodeGenerator::initializeNextParameter):
2842         (JSC::BytecodeGenerator::emitPushFunctionNameScope):
2843         (JSC::prepareJumpTableForSwitch):
2844         (JSC::ForInContext::finalize):
2845         (JSC::StructureForInContext::finalize):
2846         (JSC::IndexedForInContext::finalize):
2847         * bytecompiler/BytecodeGenerator.h:
2848         * bytecompiler/BytecodeGeneratorBaseInlines.h:
2849         (JSC::BytecodeGeneratorBase<Traits>::newRegister):
2850         (JSC::BytecodeGeneratorBase<Traits>::addVar):
2851         * runtime/CachedTypes.cpp:
2852         (JSC::CachedVector::encode):
2853         (JSC::CachedVector::decode const):
2854         * wasm/WasmFunctionCodeBlock.h:
2855         (JSC::Wasm::FunctionCodeBlock::setNumVars):
2856         (JSC::Wasm::FunctionCodeBlock::setNumCalleeLocals):
2857
2858 2020-02-04  Devin Rousso  <drousso@apple.com>
2859
2860         Web Inspector: REGRESSION(r248287): Console: function objects saved to a $n will be invoked instead of just referenced when evaluating in the Console
2861         https://bugs.webkit.org/show_bug.cgi?id=207180
2862         <rdar://problem/58860268>
2863
2864         Reviewed by Joseph Pecoraro.
2865
2866         * inspector/InjectedScriptSource.js:
2867         (CommandLineAPI):
2868         Instead of deciding whether to wrap the value given for a `$n` getter based on if the value
2869         is already a function, always wrap getter values in a function so that if the value being
2870         stored in the getter is already a function, it isn't used as the callback for the getter and
2871         therefore invoked when the getter is referenced.
2872
2873 2020-02-03  Yusuke Suzuki  <ysuzuki@apple.com>
2874
2875         [JSC] Use PackedPtr for VariableEnvironment
2876         https://bugs.webkit.org/show_bug.cgi?id=207172
2877
2878         Reviewed by Mark Lam.
2879
2880         Since VariableEnvironment's KeyValue is key: pointer + value: 2 byte, using PackedPtr can make it 8 bytes, 50% reduction.
2881
2882         * parser/VariableEnvironment.h:
2883         * runtime/CachedTypes.cpp:
2884         (JSC::CachedRefPtr::encode):
2885         (JSC::CachedRefPtr::decode const): CachedTypes should handle PackedPtr too since VariableEnvironment starts using it.
2886
2887 2020-02-03  Alexey Shvayka  <shvaikalesh@gmail.com>
2888
2889         \0 identity escapes should be syntax errors in Unicode patterns only
2890         https://bugs.webkit.org/show_bug.cgi?id=207114
2891
2892         Reviewed by Darin Adler.
2893
2894         This change adds a separate check for null character because `strchr`
2895         always returns a non-null pointer when called with '\0' as second argument.
2896
2897         Grammar: https://tc39.es/ecma262/#prod-annexB-IdentityEscape
2898         (/u flag precludes the use of SourceCharacterIdentityEscape)
2899
2900         * yarr/YarrParser.h:
2901         (JSC::Yarr::Parser::isIdentityEscapeAnError):
2902
2903 2020-02-01  Alexey Shvayka  <shvaikalesh@gmail.com>
2904
2905         Non-alphabetical \c escapes should be syntax errors in Unicode patterns only
2906         https://bugs.webkit.org/show_bug.cgi?id=207091
2907
2908         Reviewed by Darin Adler.
2909
2910         This change adds SyntaxError for non-alphabetical and identity \c escapes
2911         in Unicode patterns, aligning JSC with V8 and SpiderMonkey.
2912
2913         Grammar: https://tc39.es/ecma262/#prod-annexB-ClassEscape
2914         (/u flag precludes the use of ClassControlLetter)
2915
2916         * yarr/YarrErrorCode.cpp:
2917         (JSC::Yarr::errorMessage):
2918         (JSC::Yarr::errorToThrow):
2919         * yarr/YarrErrorCode.h:
2920         * yarr/YarrParser.h:
2921         (JSC::Yarr::Parser::parseEscape):
2922
2923 2020-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
2924
2925         [JSC] Hold StructureID instead of Structure* in PolyProtoAccessChain and DFG::CommonData
2926         https://bugs.webkit.org/show_bug.cgi?id=207086
2927
2928         Reviewed by Mark Lam.
2929
2930         PolyProtoAccessChain and DFG::CommonData are kept alive so long as associated AccessCase / DFG/FTL CodeBlock
2931         is alive. They hold Vector<Structure*> / Vector<WriteBarrier<Structure*>>, but access frequency is low. And
2932         We should hold Vector<StructureID> instead to cut 50% of the size.
2933
2934         * bytecode/AccessCase.cpp:
2935         (JSC::AccessCase::commit):
2936         (JSC::AccessCase::forEachDependentCell const):
2937         (JSC::AccessCase::doesCalls const):
2938         (JSC::AccessCase::visitWeak const):
2939         (JSC::AccessCase::propagateTransitions const):
2940         (JSC::AccessCase::generateWithGuard):
2941         * bytecode/AccessCase.h:
2942         * bytecode/CodeBlock.cpp:
2943         (JSC::CodeBlock::propagateTransitions):
2944         (JSC::CodeBlock::determineLiveness):
2945         (JSC::CodeBlock::stronglyVisitWeakReferences):
2946         * bytecode/GetByStatus.cpp:
2947         (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
2948         * bytecode/InByIdStatus.cpp:
2949         (JSC::InByIdStatus::computeFor):
2950         (JSC::InByIdStatus::computeForStubInfo):
2951         (JSC::InByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
2952         * bytecode/InByIdStatus.h:
2953         * bytecode/InstanceOfStatus.cpp:
2954         (JSC::InstanceOfStatus::computeFor):
2955         (JSC::InstanceOfStatus::computeForStubInfo):
2956         * bytecode/InstanceOfStatus.h:
2957         * bytecode/PolyProtoAccessChain.cpp:
2958         (JSC::PolyProtoAccessChain::create):
2959         (JSC::PolyProtoAccessChain::needImpurePropertyWatchpoint const):
2960         (JSC::PolyProtoAccessChain::dump const):
2961         * bytecode/PolyProtoAccessChain.h:
2962         (JSC::PolyProtoAccessChain::chain const):
2963         (JSC::PolyProtoAccessChain::forEach const):
2964         (JSC::PolyProtoAccessChain::slotBaseStructure const):
2965         (JSC::PolyProtoAccessChain:: const): Deleted.
2966         * bytecode/PolymorphicAccess.cpp:
2967         (JSC::PolymorphicAccess::regenerate):
2968         * bytecode/PutByIdStatus.cpp:
2969         (JSC::PutByIdStatus::computeForStubInfo):
2970         * bytecode/StructureStubInfo.cpp:
2971         (JSC::StructureStubInfo::summary const):
2972         (JSC::StructureStubInfo::summary):
2973         * bytecode/StructureStubInfo.h:
2974         * dfg/DFGCommonData.h:
2975         * dfg/DFGDesiredWeakReferences.cpp:
2976         (JSC::DFG::DesiredWeakReferences::reallyAdd):
2977         * dfg/DFGPlan.cpp:
2978         (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
2979         * jit/Repatch.cpp:
2980         (JSC::tryCacheGetBy):
2981         (JSC::tryCachePutByID):
2982         (JSC::tryCacheInByID):
2983
2984 2020-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
2985
2986         [JSC] ShrinkToFit some vectors kept by JIT data structures
2987         https://bugs.webkit.org/show_bug.cgi?id=207085
2988
2989         Reviewed by Mark Lam.
2990
2991         1. We are allocating RareCaseProfile by using SegmentedVector since JIT code is directly accessing to RareCaseProfile*. But when creating RareCaseProfile, we can know
2992            how many RareCaseProfiles should we create: RareCaseProfile is created per slow paths of Baseline JIT bytecode. Since we already scan bytecode for the main paths,
2993            we can count it and use this number when creating RareCaseProfile.
2994         2. Vectors held by PolymorphicAccess and PolymorphicCallStubRoutine should be kept small by calling shrinkToFit.
2995
2996         * bytecode/CodeBlock.cpp:
2997         (JSC::CodeBlock::setRareCaseProfiles):
2998         (JSC::CodeBlock::shrinkToFit):
2999         (JSC::CodeBlock::addRareCaseProfile): Deleted.
3000         * bytecode/CodeBlock.h:
3001         * bytecode/PolyProtoAccessChain.cpp:
3002         (JSC::PolyProtoAccessChain::create):
3003         * bytecode/PolymorphicAccess.cpp:
3004         (JSC::PolymorphicAccess::regenerate):
3005         * bytecode/ValueProfile.h:
3006         (JSC::RareCaseProfile::RareCaseProfile):
3007         * jit/JIT.cpp:
3008         (JSC::JIT::privateCompileMainPass):
3009         (JSC::JIT::privateCompileSlowCases):
3010         * jit/JIT.h:
3011         * jit/PolymorphicCallStubRoutine.cpp:
3012         (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine):
3013
3014 2020-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
3015
3016         [JSC] DFG::CommonData::shrinkToFit called before DFG::Plan::reallyAdd is called
3017         https://bugs.webkit.org/show_bug.cgi?id=207083
3018
3019         Reviewed by Mark Lam.
3020
3021         We are calling DFG::CommonData::shrinkToFit, but calling this too early: we execute
3022         DFG::Plan::reallyAdd(DFG::CommonData*) after that, and this adds many entries to
3023         DFG::CommonData*. We should call DFG::CommonData::shrinkToFit after calling DFG::Plan::reallyAdd.
3024
3025         To implement it, we make DFG::JITCode::shrinkToFit virtual function in JSC::JITCode. Then, we
3026         can also implement FTL::JITCode::shrinkToFit which was previously not implemented.
3027
3028         * dfg/DFGJITCode.cpp:
3029         (JSC::DFG::JITCode::shrinkToFit):
3030         * dfg/DFGJITCode.h:
3031         * dfg/DFGJITCompiler.cpp:
3032         (JSC::DFG::JITCompiler::compile):
3033         (JSC::DFG::JITCompiler::compileFunction):
3034         * dfg/DFGPlan.cpp:
3035         (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
3036         * ftl/FTLJITCode.cpp:
3037         (JSC::FTL::JITCode::shrinkToFit):
3038         * ftl/FTLJITCode.h:
3039         * jit/JITCode.cpp:
3040         (JSC::JITCode::shrinkToFit):
3041         * jit/JITCode.h:
3042
3043 2020-01-31  Saam Barati  <sbarati@apple.com>
3044
3045         GetButterfly should check if the input value is an object in safe to execute
3046         https://bugs.webkit.org/show_bug.cgi?id=207082
3047
3048         Reviewed by Mark Lam.
3049
3050         We can only hoist GetButterfly when we know the incoming value is an object.
3051         We might want to reconsider making GetButterfly use ObjectUse as its edge
3052         kind, but that's out of the scope of this patch. Currently, we use CellUse
3053         for GetButterfly node's child1.
3054
3055         * dfg/DFGSafeToExecute.h:
3056         (JSC::DFG::safeToExecute):
3057
3058 2020-01-31  Saam Barati  <sbarati@apple.com>
3059
3060         safe to execute should return false when we know code won't be moved
3061         https://bugs.webkit.org/show_bug.cgi?id=207074
3062
3063         Reviewed by Yusuke Suzuki.
3064
3065         We use safeToExecute to determine inside LICM whether it's safe to execute
3066         a node somewhere else in the program. We were returning true for nodes
3067         we knew would never be moved, because they were effectful. Things like Call
3068         and GetById. This patch makes those nodes return false now, since we want
3069         to make it easier to audit the nodes that return true. This makes that audit
3070         easier, since it gets rid of the obvious things that will never be hoisted.
3071
3072         * dfg/DFGSafeToExecute.h:
3073         (JSC::DFG::safeToExecute):
3074
3075 2020-01-31  Saam Barati  <sbarati@apple.com>
3076
3077         GetGetterSetterByOffset and GetGetter/GetSetter are not always safe to execute
3078         https://bugs.webkit.org/show_bug.cgi?id=206805
3079         <rdar://problem/58898161>
3080
3081         Reviewed by Yusuke Suzuki.
3082
3083         This patch fixes two bugs. The first is GetGetterSetterByOffset. Previously,
3084         we were just checking that we could load the value safely. However, because
3085         GetGetterSetterByOffset returns a GetterSetter object, we can only safely
3086         move this node into a context where it's guaranteed that the offset loaded
3087         will return a GetterSetter.
3088         
3089         The second fix is GetGetter/GetSetter were both always marked as safe to execute.
3090         However, they're only safe to execute when the incoming value to load from
3091         is a GetterSetter object.
3092
3093         * dfg/DFGSafeToExecute.h:
3094         (JSC::DFG::safeToExecute):
3095
3096 2020-01-31  Alexey Shvayka  <shvaikalesh@gmail.com>
3097
3098         Unmatched ] or } brackets should be syntax errors in Unicode patterns only
3099         https://bugs.webkit.org/show_bug.cgi?id=207023
3100
3101         Reviewed by Darin Adler.
3102
3103         This change adds SyntaxError for Unicode patterns, aligning JSC with
3104         V8 and SpiderMonkey.
3105
3106         Grammar: https://tc39.es/ecma262/#prod-annexB-Term
3107         (/u flag precludes the use of ExtendedAtom and thus ExtendedPatternCharacter)
3108
3109         * yarr/YarrErrorCode.cpp:
3110         (JSC::Yarr::errorMessage):
3111         (JSC::Yarr::errorToThrow):
3112         * yarr/YarrErrorCode.h:
3113         * yarr/YarrParser.h:
3114         (JSC::Yarr::Parser::parseTokens):
3115
3116 2020-01-31  Don Olmstead  <don.olmstead@sony.com>
3117
3118         [CMake] Add _PRIVATE_LIBRARIES to framework
3119         https://bugs.webkit.org/show_bug.cgi?id=207004
3120
3121         Reviewed by Konstantin Tokarev.
3122
3123         Move uses of PRIVATE within _LIBRARIES to _PRIVATE_LIBRARIES. Any _LIBRARIES appended
3124         afterwards will have that visibility set erroneously.
3125
3126         * PlatformFTW.cmake:
3127
3128 2020-01-30  Mark Lam  <mark.lam@apple.com>
3129
3130         Some improvements to DFG and FTL dumps to improve readability and searchability.
3131         https://bugs.webkit.org/show_bug.cgi?id=207024
3132
3133         Reviewed by Saam Barati.
3134
3135         This patch applies the following changes:
3136
3137         1. Prefix Air and B2 dumps with a tierName prefix.
3138            The tierName prefix strings are as follows:
3139
3140                "FTL ", "DFG ", "b3  ", "Air ", "asm "
3141
3142            The choice to use a lowercase "b3" and "asm" with upper case "Air" is
3143            deliberate because I found this combination to be easier to read and scan as
3144            prefixes of the dump lines.  See dump samples below.
3145
3146         2. Make DFG node IDs consistently expressed as D@<node index> e.g. D@104.
3147            The definition of the node will be the id followed by a colon e.g. D@104:
3148            This makes it easy to search references to this node anywhere in the dump.
3149
3150            Make B3 nodes expressed as b@<node index> e.g. b@542.
3151            This also makes it searchable since there's now no ambiguity between b@542 and
3152            D@542.
3153
3154            The choice to use a lowercase "b" and an uppercase "D" is intentional because
3155            "b@542" and "d@542" looks too similar, and I prefer to not use too much
3156            uppercase.  Plus this makes the node consistent in capitalization with the
3157            tierName prefixes above of "b3  " and "DFG " respectively.
3158
3159         Here's a sample of what the dumps now look like:
3160
3161         DFG graph dump:
3162         <code>
3163             ...
3164                  6 55:   <-- foo#DFndCW:<0x62d0000b8140, bc#65, Call, known callee: Object: 0x62d000035920 with butterfly 0x0 (Structure %AN:Function), StructureID: 12711, numArgs+this = 1, numFixup = 0, stackOffset = -16 (loc0 maps to loc16)>
3165               3  6 55:   D@79:< 3:->    ArithAdd(Int32:Kill:D@95, Int32:D@42, Int32|PureNum|UseAsOther, Int32, CheckOverflow, Exits, bc#71, ExitValid)
3166               4  6 55:    D@3:<!0:->    KillStack(MustGen, loc7, W:Stack(loc7), ClobbersExit, bc#71, ExitInvalid)
3167               5  6 55:   D@85:<!0:->    MovHint(Check:Untyped:D@79, MustGen, loc7, W:SideState, ClobbersExit, bc#71, ExitInvalid)
3168               6  6 55:  D@102:< 1:->    CompareLess(Int32:D@79, Int32:D@89, Boolean|UseAsOther, Bool, Exits, bc#74, ExitValid)
3169               7  6 55:  D@104:<!0:->    Branch(KnownBoolean:Kill:D@102, MustGen, T:#1/w:10.000000, F:#7/w:1.000000, W:SideState, bc#74, ExitInvalid)
3170             ...
3171         </code>
3172
3173         B3 graph dump:
3174         <code>
3175             ...
3176             b3  BB#14: ; frequency = 10.000000
3177             b3    Predecessors: #13
3178             b3      Int32 b@531 = CheckAdd(b@10:WarmAny, $1(b@1):WarmAny, b@64:ColdAny, b@10:ColdAny, generator = 0x606000022e80, earlyClobbered = [], lateClobbered = [], usedRegisters = [], ExitsSideways|Reads:Top, D@79)
3179             b3      Int32 b@539 = LessThan(b@531, $100(b@578), D@102)
3180             b3      Void b@542 = Branch(b@539, Terminal, D@104)
3181             b3    Successors: Then:#2, Else:#15
3182             ...
3183         </code>
3184
3185         Air graph dump:
3186         <code>
3187             ...
3188             Air BB#5: ; frequency = 10.000000
3189             Air   Predecessors: #4
3190             Air     Move -96(%rbp), %rax, b@531
3191             Air     Patch &BranchAdd32(3,ForceLateUseUnlessRecoverable)3, Overflow, $1, %rax, -104(%rbp), -96(%rbp), b@531
3192             Air     Branch32 LessThan, %rax, $100, b@542
3193             Air   Successors: #1, #6
3194             ...
3195         </code>
3196
3197         FTL disassembly dump:
3198         <code>
3199             ...
3200             Air BB#5: ; frequency = 10.000000
3201             Air   Predecessors: #4
3202             DFG       D@42:< 2:->   JSConstant(JS|PureInt, Int32, Int32: 1, bc#0, ExitInvalid)
3203             DFG       D@79:< 3:->   ArithAdd(Int32:Kill:D@95, Int32:D@42, Int32|PureNum|UseAsOther, Int32, CheckOverflow, Exits, bc#71, ExitValid)
3204             b3            Int32 b@1 = Const32(1)
3205             b3            Int32 b@531 = CheckAdd(b@10:WarmAny, $1(b@1):WarmAny, b@64:ColdAny, b@10:ColdAny, generator = 0x606000022e80, earlyClobbered = [], lateClobbered = [], usedRegisters = [%rax, %rbx, %rbp, %r12], ExitsSideways|Reads:Top, D@79)
3206             Air               Move -96(%rbp), %rax, b@531
3207             asm                   0x4576b9c04712: mov -0x60(%rbp), %rax
3208             Air               Patch &BranchAdd32(3,ForceLateUseUnlessRecoverable)3, Overflow, $1, %rax, -104(%rbp), -96(%rbp), b@531
3209             asm                   0x4576b9c04716: inc %eax
3210             asm                   0x4576b9c04718: jo 0x4576b9c04861
3211             DFG       D@89:< 1:->   JSConstant(JS|PureNum|UseAsOther, NonBoolInt32, Int32: 100, bc#0, ExitInvalid)
3212             DFG      D@102:< 1:->   CompareLess(Int32:D@79, Int32:D@89, Boolean|UseAsOther, Bool, Exits, bc#74, ExitValid)
3213             DFG      D@104:<!0:->   Branch(KnownBoolean:Kill:D@102, MustGen, T:#1/w:10.000000, F:#7/w:1.000000, W:SideState, bc#74, ExitInvalid)
3214             b3            Int32 b@578 = Const32(100, D@89)
3215             b3            Int32 b@539 = LessThan(b@531, $100(b@578), D@102)
3216             b3            Void b@542 = Branch(b@539, Terminal, D@104)
3217             Air               Branch32 LessThan, %rax, $100, b@542
3218             asm                   0x4576b9c0471e: cmp $0x64, %eax
3219             asm                   0x4576b9c04721: jl 0x4576b9c0462f
3220             Air   Successors: #1, #6
3221             ...
3222         </code>
3223
3224         * b3/B3BasicBlock.cpp:
3225         (JSC::B3::BasicBlock::deepDump const):
3226         * b3/B3Common.cpp:
3227         * b3/B3Common.h:
3228         * b3/B3Generate.cpp:
3229         (JSC::B3::generateToAir):
3230         * b3/B3Procedure.cpp:
3231         (JSC::B3::Procedure::dump const):
3232         * b3/B3Value.cpp:
3233         * b3/air/AirBasicBlock.cpp:
3234         (JSC::B3::Air::BasicBlock::deepDump const):
3235         (JSC::B3::Air::BasicBlock::dumpHeader const):
3236         (JSC::B3::Air::BasicBlock::dumpFooter const):
3237         * b3/air/AirCode.cpp:
3238         (JSC::B3::Air::Code::dump const):
3239         * b3/air/AirCode.h:
3240         * b3/air/AirDisassembler.cpp:
3241         (JSC::B3::Air::Disassembler::dump):
3242         * b3/air/AirGenerate.cpp:
3243         (JSC::B3::Air::prepareForGeneration):
3244         * dfg/DFGCommon.cpp:
3245         * dfg/DFGCommon.h:
3246         * dfg/DFGGraph.cpp:
3247         (JSC::DFG::Graph::dump):
3248         (JSC::DFG::Graph::dumpBlockHeader):
3249         * dfg/DFGNode.cpp:
3250         (WTF::printInternal):
3251         * ftl/FTLCompile.cpp:
3252         (JSC::FTL::compile):
3253         * ftl/FTLCompile.h:
3254         * ftl/FTLState.cpp:
3255         (JSC::FTL::State::State):
3256
3257 2020-01-30  Yusuke Suzuki  <ysuzuki@apple.com>
3258
3259         [WTF] Remove PackedIntVector
3260         https://bugs.webkit.org/show_bug.cgi?id=207018
3261
3262         Reviewed by Mark Lam.
3263
3264         * bytecode/BytecodeBasicBlock.h:
3265
3266 2020-01-30  Yusuke Suzuki  <ysuzuki@apple.com>
3267
3268         [JSC] Remove unnecessary allocations in BytecodeBasicBlock
3269         https://bugs.webkit.org/show_bug.cgi?id=206986
3270
3271         Reviewed by Mark Lam.
3272
3273         We know that BytecodeBasicBlock itself takes 2MB in Gmail. And each BytecodeBasicBlock has Vector<unsigned>
3274         and Vector<BytecodeBasicBlock*>.
3275
3276         BytecodeBasicBlock holds all the offset per bytecode as unsigned in m_offsets. But this offset is
3277         only used when reverse iterating a bytecode in a BytecodeBasicBlock. We can hold a length of each
3278         bytecode instead, which is much smaller (unsigned v.s. uint8_t).
3279
3280         Since each BytecodeBasicBlock has index, we should hold successors in Vector<unsigned> instead of Vector<BytecodeBasicBlock*>.
3281
3282         We are also allocating BytecodeBasicBlock in makeUnique<> and having them in Vector<std::unique_ptr<BytecodeBasicBlock>>.
3283         But this is not necessary since only BytecodeBasicBlock::compute can modify this vector. We should generate Vector<BytecodeBasicBlock>
3284         from BytecodeBasicBlock::compute.
3285
3286         We are also planning purging BytecodeBasicBlock in UnlinkedCodeBlock if it is not used so much. But this will be done in a separate patch.
3287
3288         * bytecode/BytecodeBasicBlock.cpp:
3289         (JSC::BytecodeBasicBlock::BytecodeBasicBlock):
3290         (JSC::BytecodeBasicBlock::addLength):
3291         (JSC::BytecodeBasicBlock::shrinkToFit):
3292         (JSC::BytecodeBasicBlock::computeImpl):
3293         (JSC::BytecodeBasicBlock::compute):
3294         * bytecode/BytecodeBasicBlock.h:
3295         (JSC::BytecodeBasicBlock::delta const):
3296         (JSC::BytecodeBasicBlock::successors const):
3297         (JSC::BytecodeBasicBlock::operator bool const):
3298         (JSC::BytecodeBasicBlock::addSuccessor):
3299         (JSC::BytecodeBasicBlock::offsets const): Deleted.
3300         (JSC::BytecodeBasicBlock:: const): Deleted.
3301         (JSC::BytecodeBasicBlock::BytecodeBasicBlock): Deleted.
3302         (JSC::BytecodeBasicBlock::addLength): Deleted.
3303         * bytecode/BytecodeGeneratorification.cpp:
3304         (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
3305         * bytecode/BytecodeGraph.h:
3306         (JSC::BytecodeGraph::blockContainsBytecodeOffset):
3307         (JSC::BytecodeGraph::findBasicBlockForBytecodeOffset):
3308         (JSC::BytecodeGraph::findBasicBlockWithLeaderOffset):
3309         (JSC::BytecodeGraph::at const):
3310         (JSC::BytecodeGraph::operator[] const):
3311         (JSC::BytecodeGraph::begin):
3312         (JSC::BytecodeGraph::end):
3313         (JSC::BytecodeGraph::first):
3314         (JSC::BytecodeGraph::last):
3315         (JSC::BytecodeGraph::BytecodeGraph):
3316         (JSC::BytecodeGraph::begin const): Deleted.
3317         (JSC::BytecodeGraph::end const): Deleted.
3318         * bytecode/BytecodeLivenessAnalysis.cpp:
3319         (JSC::BytecodeLivenessAnalysis::getLivenessInfoAtBytecodeIndex):
3320         (JSC::BytecodeLivenessAnalysis::computeFullLiveness):
3321         (JSC::BytecodeLivenessAnalysis::computeKills):
3322         (JSC::BytecodeLivenessAnalysis::dumpResults):
3323         * bytecode/BytecodeLivenessAnalysis.h:
3324         * bytecode/BytecodeLivenessAnalysisInlines.h:
3325         (JSC::BytecodeLivenessPropagation::computeLocalLivenessForBytecodeIndex):
3326         (JSC::BytecodeLivenessPropagation::computeLocalLivenessForBlock):
3327         (JSC::BytecodeLivenessPropagation::getLivenessInfoAtBytecodeIndex):
3328         (JSC::BytecodeLivenessPropagation::runLivenessFixpoint):
3329         * bytecode/InstructionStream.h:
3330         (JSC::InstructionStream::MutableRef::operator-> const):
3331         (JSC::InstructionStream::MutableRef::ptr const):
3332         (JSC::InstructionStream::MutableRef::unwrap const):
3333         * bytecode/Opcode.h:
3334         * generator/Section.rb:
3335         * jit/JIT.cpp:
3336         (JSC::JIT::privateCompileMainPass):
3337         * llint/LLIntData.cpp:
3338         (JSC::LLInt::initialize):
3339         * llint/LowLevelInterpreter.cpp:
3340         (JSC::CLoop::execute):
3341
3342 2020-01-30  Alexey Shvayka  <shvaikalesh@gmail.com>
3343
3344         Incomplete braced quantifiers should be banned in Unicode patterns only
3345         https://bugs.webkit.org/show_bug.cgi?id=206776
3346
3347         Reviewed by Darin Adler.
3348
3349         This change adds SyntaxError for Unicode patterns, aligning JSC with
3350         V8 and SpiderMonkey, and also capitalizes "Unicode" in error messages.
3351
3352         Grammar: https://tc39.es/ecma262/#prod-annexB-Term
3353         (/u flag precludes the use of ExtendedAtom and thus InvalidBracedQuantifier)
3354
3355         * yarr/YarrErrorCode.cpp:
3356         (JSC::Yarr::errorMessage):
3357         (JSC::Yarr::errorToThrow):
3358         * yarr/YarrErrorCode.h:
3359         * yarr/YarrParser.h:
3360         (JSC::Yarr::Parser::parseTokens):
3361
3362 2020-01-30  Yusuke Suzuki  <ysuzuki@apple.com>
3363
3364         [JSC] Make SourceProviderCacheItem small
3365         https://bugs.webkit.org/show_bug.cgi?id=206987
3366
3367         Reviewed by Mark Lam.
3368
3369         We know this becomes very large when parsing a large script, and it is noticeable in some of RAMification tests.
3370         We should use PackedPtr to shrink size of SourceProviderCacheItem.
3371
3372         * parser/Parser.h:
3373         (JSC::Scope::restoreFromSourceProviderCache):
3374         * parser/SourceProviderCacheItem.h:
3375         (JSC::SourceProviderCacheItem::usedVariables const):
3376         (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
3377
3378 2020-01-30  Keith Miller  <keith_miller@apple.com>
3379
3380         Parser needs to restore unary stack state when backtracking
3381         https://bugs.webkit.org/show_bug.cgi?id=206972
3382
3383         Reviewed by Saam Barati.
3384
3385         Previously we would try to parse possibly stale unary operator
3386         stack entries after backtracking from a parse error.  This would
3387         cause us to think one token was a different token while reparsing
3388         after backtracking. Additionally, this patch fixes an issue where
3389         the syntax checker would think assignment expressions were resolve
3390         expressions. Intrestingly, this was not tested in test262.
3391
3392         Lastly, I tried adding some assertions to improve help diagnose
3393         when our source text locations are incorrect.
3394
3395         * bytecompiler/BytecodeGenerator.h:
3396         (JSC::BytecodeGenerator::emitExpressionInfo):
3397         * bytecompiler/NodesCodegen.cpp:
3398         (JSC::ThisNode::emitBytecode):
3399         (JSC::ResolveNode::emitBytecode):
3400         (JSC::EmptyVarExpression::emitBytecode):
3401         (JSC::EmptyLetExpression::emitBytecode):
3402         (JSC::ForInNode::emitLoopHeader):
3403         (JSC::ForOfNode::emitBytecode):
3404         (JSC::DefineFieldNode::emitBytecode):
3405         * parser/ASTBuilder.h:
3406         (JSC::ASTBuilder::unaryTokenStackDepth const):
3407         (JSC::ASTBuilder::setUnaryTokenStackDepth):
3408         * parser/Lexer.cpp:
3409         (JSC::Lexer<T>::Lexer):
3410         * parser/Lexer.h:
3411         (JSC::Lexer::setLineNumber):
3412         * parser/Nodes.cpp:
3413         (JSC::FunctionMetadataNode::operator== const):
3414         * parser/Nodes.h:
3415         (JSC::ThrowableExpressionData::ThrowableExpressionData):
3416         (JSC::ThrowableExpressionData::setExceptionSourceCode):
3417         (JSC::ThrowableExpressionData::checkConsistency const):
3418         * parser/Parser.cpp:
3419         (JSC::Parser<LexerType>::isArrowFunctionParameters):
3420         (JSC::Parser<LexerType>::parseSourceElements):
3421         (JSC::Parser<LexerType>::parseModuleSourceElements):
3422         (JSC::Parser<LexerType>::parseStatementListItem):
3423         (JSC::Parser<LexerType>::parseAssignmentElement):
3424         (JSC::Parser<LexerType>::parseForStatement):
3425         (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
3426         (JSC::Parser<LexerType>::parseFunctionInfo):
3427         (JSC::Parser<LexerType>::parseClass):
3428         (JSC::Parser<LexerType>::parseExportDeclaration):
3429         (JSC::Parser<LexerType>::parseAssignmentExpression):
3430         (JSC::Parser<LexerType>::parseYieldExpression):
3431         (JSC::Parser<LexerType>::parseProperty):
3432         (JSC::Parser<LexerType>::parseMemberExpression):
3433         (JSC::Parser<LexerType>::parseUnaryExpression):
3434         * parser/Parser.h:
3435         (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
3436         (JSC::Parser::internalSaveParserState):
3437         (JSC::Parser::restoreParserState):
3438         (JSC::Parser::internalSaveState):
3439         (JSC::Parser::swapSavePointForError):
3440         (JSC::Parser::createSavePoint):
3441         (JSC::Parser::internalRestoreState):
3442         (JSC::Parser::restoreSavePointWithError):
3443         (JSC::Parser::restoreSavePoint):
3444         (JSC::Parser::createSavePointForError): Deleted.
3445         * parser/ParserTokens.h:
3446         (JSC::JSTextPosition::JSTextPosition):
3447         (JSC::JSTextPosition::checkConsistency):
3448         * parser/SyntaxChecker.h:
3449         (JSC::SyntaxChecker::operatorStackPop):
3450
3451 2020-01-29  Mark Lam  <mark.lam@apple.com>
3452
3453         Fix bad assertion in InternalFunctionAllocationProfile::createAllocationStructureFromBase().
3454         https://bugs.webkit.org/show_bug.cgi?id=206981
3455         <rdar://problem/58985736>
3456
3457         Reviewed by Keith Miller.
3458
3459         InternalFunctionAllocationProfile::createAllocationStructureFromBase() is only
3460         called from FunctionRareData::createInternalFunctionAllocationStructureFromBase(),
3461         which in turn is only called from InternalFunction::createSubclassStructureSlow().
3462
3463         InternalFunction::createSubclassStructureSlow() only allows a call to
3464         FunctionRareData::createInternalFunctionAllocationStructureFromBase() under
3465         certain conditions.  One of these conditions is that the baseGlobalObject is
3466         different than the newTarget's globalObject.
3467
3468         InternalFunctionAllocationProfile::createAllocationStructureFromBase() has an
3469         ASSERT on the same set of conditions, with one ommission: the one above.  This
3470         patch fixes the ASSERT by adding the missing condition to match the check in
3471         InternalFunction::createSubclassStructureSlow().
3472
3473         * bytecode/InternalFunctionAllocationProfile.h:
3474         (JSC::InternalFunctionAllocationProfile::createAllocationStructureFromBase):
3475
3476 2020-01-29  Robin Morisset  <rmorisset@apple.com>
3477
3478         Remove Options::enableSpectreMitigations
3479         https://bugs.webkit.org/show_bug.cgi?id=193885
3480
3481         Reviewed by Saam Barati.
3482
3483         From what I remember we decided to remove the spectre-specific mitigations we had tried (in favor of things like process-per-origin).
3484         I don't think anyone is using the SpectreGadget we had added for experiments either.
3485         So this patch removes the following three options, and all the code that depended on them:
3486         - enableSpectreMitigations (was true, only used in one place)
3487         - enableSpectreGadgets (was false)
3488         - zeroStackFrame (was false, and was an experiment about Spectre variant 4 if I remember correctly)
3489
3490         * b3/air/AirCode.cpp:
3491         (JSC::B3::Air::defaultPrologueGenerator):
3492         * dfg/DFGJITCompiler.cpp:
3493         (JSC::DFG::JITCompiler::compile):
3494         (JSC::DFG::JITCompiler::compileFunction):
3495         * dfg/DFGSpeculativeJIT.cpp:
3496         (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
3497         * ftl/FTLLowerDFGToB3.cpp:
3498         (JSC::FTL::DFG::LowerDFGToB3::lower):
3499         * jit/AssemblyHelpers.h:
3500         * jit/JIT.cpp:
3501         (JSC::JIT::compileWithoutLinking):
3502         * runtime/OptionsList.h:
3503         * wasm/WasmB3IRGenerator.cpp:
3504         (JSC::Wasm::B3IRGenerator::addCallIndirect):
3505         * yarr/YarrJIT.cpp:
3506         (JSC::Yarr::YarrGenerator::initCallFrame):
3507
3508 2020-01-29  Devin Rousso  <drousso@apple.com>
3509
3510         Web Inspector: add instrumentation for showing existing Web Animations
3511         https://bugs.webkit.org/show_bug.cgi?id=205434
3512         <rdar://problem/28328087>
3513
3514         Reviewed by Brian Burg.
3515
3516         * inspector/protocol/Animation.json:
3517         Add types/commands/events for instrumenting the lifecycle of `Animation` objects, as well as
3518         commands for getting the JavaScript wrapper object and the target DOM node.
3519
3520 2020-01-29  Robin Morisset  <rmorisset@apple.com>
3521
3522         Don't include CCallHelpers.h in B3Procedure.h
3523         https://bugs.webkit.org/show_bug.cgi?id=206966
3524
3525         Reviewed by Saam Barati.
3526
3527         I verified through -ftime-trace and it massively speeds up a few of the compilation units (e.g. UnifiedSource10.cpp).
3528
3529         * b3/B3Procedure.cpp:
3530         * b3/B3Procedure.h:
3531         * b3/testb3_6.cpp:
3532         (testEntrySwitchSimple):
3533         (testEntrySwitchNoEntrySwitch):
3534         (testEntrySwitchWithCommonPaths):
3535         (testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint):
3536         (testEntrySwitchLoop):
3537         * ftl/FTLCompile.cpp:
3538         (JSC::FTL::compile):
3539         * wasm/WasmParser.h:
3540
3541 2020-01-29  Justin Michaud  <justin_michaud@apple.com>
3542
3543         Fix small memory regression caused by r206365
3544         https://bugs.webkit.org/show_bug.cgi?id=206557
3545
3546         Reviewed by Yusuke Suzuki.
3547
3548         Put StructureRareData::m_giveUpOnObjectToStringValueCache into m_objectToStringValue to prevent increasing StructureRareData's size. We make a special value for the pointer
3549         objectToStringCacheGiveUpMarker() to signal that we should not cache the string value. As a result, adding m_transitionOffset does not increase the size of the class.
3550
3551         * runtime/Structure.h:
3552         * runtime/StructureRareData.cpp:
3553         (JSC::StructureRareData::StructureRareData):
3554         (JSC::StructureRareData::visitChildren):
3555         (JSC::StructureRareData::setObjectToStringValue):
3556         (JSC::StructureRareData::clearObjectToStringValue):
3557         * runtime/StructureRareData.h:
3558         * runtime/StructureRareDataInlines.h:
3559         (JSC::StructureRareData::objectToStringValue const):
3560
3561 2020-01-28  Yusuke Suzuki  <ysuzuki@apple.com>
3562
3563         [JSC] Give up IC when unknown structure transition happens
3564         https://bugs.webkit.org/show_bug.cgi?id=206846
3565
3566         Reviewed by Mark Lam.
3567
3568         When we are creating Put IC for a new property, we grab the old Structure before performing
3569         the put. For a custom ::put, our convention is that the implemented ::put should mark the PutPropertySlot
3570         as non-cachable. The IC code relies on this in order to work correctly. If we didn't mark it as non-cacheable,
3571         a semantic failure can happen. This patch hardens the code against this semantic failure case by giving up trying
3572         to cache the IC when the newStructure calculated from oldStructure does not match against
3573         the actual structure after the put operation.
3574
3575         * jit/Repatch.cpp:
3576         (JSC::tryCachePutByID):
3577         (JSC::repatchPutByID):
3578         * llint/LLIntSlowPaths.cpp:
3579         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3580         * runtime/Structure.cpp:
3581         (JSC::Structure::flattenDictionaryStructure):
3582         * tools/JSDollarVM.cpp:
3583         (JSC::functionCreateObjectDoingSideEffectPutWithoutCorrectSlotStatus):
3584         (JSC::JSDollarVM::finishCreation):
3585         (JSC::JSDollarVM::visitChildren):
3586         * tools/JSDollarVM.h:
3587
3588 2020-01-28  Robin Morisset  <rmorisset@apple.com>
3589
3590         Remove the include of BytecodeGenerator.h in CodeCache.h
3591         https://bugs.webkit.org/show_bug.cgi?id=206851
3592
3593         Reviewed by Tadeu Zagallo.
3594
3595         This reduces the number of times that BytecodeStructs.h has to be parsed from 33 to 25 times, and unblocks https://bugs.webkit.org/show_bug.cgi?id=206720.
3596
3597         * runtime/CodeCache.cpp:
3598         (JSC::generateUnlinkedCodeBlockForFunctions):
3599         (JSC::generateUnlinkedCodeBlockImpl):
3600         (JSC::generateUnlinkedCodeBlock):
3601         (JSC::generateUnlinkedCodeBlockForDirectEval):
3602         (JSC::recursivelyGenerateUnlinkedCodeBlockForProgram):
3603         (JSC::recursivelyGenerateUnlinkedCodeBlockForModuleProgram):
3604         * runtime/CodeCache.h:
3605         * runtime/Completion.cpp:
3606         (JSC::generateProgramBytecode):
3607         (JSC::generateModuleBytecode):
3608         * runtime/DirectEvalExecutable.cpp:
3609         (JSC::DirectEvalExecutable::create):
3610         * runtime/JSGlobalObject.cpp:
3611         * runtime/VM.cpp:
3612
3613 2020-01-28  Mark Lam  <mark.lam@apple.com>
3614
3615         Some website needs more stack space.
3616         https://bugs.webkit.org/show_bug.cgi?id=206891
3617
3618         Reviewed by Saam Barati.
3619
3620         We're bumping the maximum stack usage limit (JSC_maxPerThreadStackUsage) to 5M
3621         to give websites a little more stack space when available.  The actual useable
3622         stack space is still the minimum of JSC_maxPerThreadStackUsage and the stack size
3623         that the OS provisions, minus some overhead.
3624
3625         * runtime/OptionsList.h:
3626
3627 2020-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>
3628
3629         [GTK] Remote Inspector: add support for service workers targets
3630         https://bugs.webkit.org/show_bug.cgi?id=206821
3631
3632         Reviewed by Žan Doberšek.
3633
3634         Handle ServiceWorker target type.
3635
3636         * inspector/remote/glib/RemoteInspectorGlib.cpp:
3637         (Inspector::targetDebuggableType):
3638         (Inspector::RemoteInspector::listingForInspectionTarget const):
3639
3640 2020-01-27  Jonathan Bedard  <jbedard@apple.com>
3641
3642         Fix OpenSource iphoneos arm64e build
3643         https://bugs.webkit.org/show_bug.cgi?id=206703
3644
3645         Reviewed by Yusuke Suzuki.
3646
3647         * runtime/MachineContext.h:
3648         (JSC::MachineContext::stackPointerImpl): Conditionalize function existence on
3649         USE(DARWIN_REGISTER_MACROS).
3650         (JSC::MachineContext::stackPointer): Use Darwin's register macros if available.
3651         (JSC::MachineContext::setStackPointer): Ditto.
3652         (JSC::MachineContext::instructionPointerImpl): Conditionalize function existence
3653         on USE(DARWIN_REGISTER_MACROS).
3654         (JSC::MachineContext::instructionPointer): Use Darwin's register macros if available.
3655         (JSC::MachineContext::setInstructionPointer): Ditto.
3656         (JSC::MachineContext::linkRegister): Ditto.
3657         (JSC::MachineContext::setLinkRegister): Ditto.
3658         (JSC::MachineContext::linkRegisterImpl): Deleted.
3659
3660 2020-01-27  Devin Rousso  <drousso@apple.com>
3661
3662         Web Inspector: unable to evaluate in the isolated world of content scripts injected by safari app extensions
3663         https://bugs.webkit.org/show_bug.cgi?id=206110
3664         <rdar://problem/16945643>
3665
3666         Reviewed by Timothy Hatcher, Joseph Pecoraro, and Brian Burg.
3667
3668         In addition to evaluating in subframe execution contexts, add the ability for Web Inspector
3669         to evaluate in non-normal isolated worlds.
3670
3671         * inspector/protocol/Runtime.json:
3672         Introduce an `ExecutionContextType` enum instead of `isPageContext` so the frontend can
3673         decide whether/how to show a picker for that execution context.
3674
3675 2020-01-27  Stephan Szabo  <stephan.szabo@sony.com>
3676
3677         Python 3: generate-js-builtins hits SyntaxWarning for "is 0"
3678         https://bugs.webkit.org/show_bug.cgi?id=206840
3679
3680         Reviewed by Jonathan Bedard.
3681
3682         * Scripts/generate-js-builtins.py: Replace is 0 with == 0
3683
3684 2020-01-27  David Kilzer  <ddkilzer@apple.com>
3685
3686         REGRESSION (r250009): testair crashes in (anonymous namespace)::matchAll
3687         <https://webkit.org/b/206797>
3688         <rdar://problem/58893221>
3689
3690         Reviewed by Yusuke Suzuki.
3691
3692         * b3/air/testair.cpp:
3693         ((anonymous namespace)::matchAll): Don't replace `str` in the
3694         body of the for loop since `match` references it.
3695
3696 2020-01-27  Ryan Haddad  <ryanhaddad@apple.com>
3697
3698         Unreviewed, rolling out r255159.
3699
3700         Broke the watchOS build.
3701
3702         Reverted changeset:
3703
3704         "Fix OpenSource iphoneos arm64e build"
3705         https://bugs.webkit.org/show_bug.cgi?id=206703
3706         https://trac.webkit.org/changeset/255159
3707
3708 2020-01-27  Jonathan Bedard  <jbedard@apple.com>
3709
3710         Fix OpenSource iphoneos arm64e build
3711         https://bugs.webkit.org/show_bug.cgi?id=206703
3712
3713         Reviewed by Yusuke Suzuki.
3714
3715         * runtime/MachineContext.h:
3716         (JSC::MachineContext::stackPointerImpl): Conditionalize function existence on
3717         USE(DARWIN_REGISTER_MACROS).
3718         (JSC::MachineContext::stackPointer): Use Darwin's register macros if available.
3719         (JSC::MachineContext::setStackPointer): Ditto.
3720         (JSC::MachineContext::instructionPointerImpl): Conditionalize function existence
3721         on USE(DARWIN_REGISTER_MACROS).
3722         (JSC::MachineContext::instructionPointer): Use Darwin's register macros if available.
3723         (JSC::MachineContext::setInstructionPointer): Ditto.
3724         (JSC::MachineContext::linkRegister): Ditto.
3725         (JSC::MachineContext::setLinkRegister): Ditto.
3726         (JSC::MachineContext::linkRegisterImpl): Deleted.
3727
3728 2020-01-27  Paulo Matos  <pmatos@igalia.com>
3729
3730         Remove internal fields in promise assertion for 32bits
3731         https://bugs.webkit.org/show_bug.cgi?id=206823
3732
3733         Reviewed by Mark Lam.
3734
3735         This assertion was removed for 64bits under bug 201159 but left around
3736         in 32bits. 
3737
3738         * jit/JITPropertyAccess32_64.cpp:
3739         (JSC::JIT::emit_op_get_internal_field):
3740         (JSC::JIT::emit_op_put_internal_field):
3741
3742 2020-01-26  Alexey Shvayka  <shvaikalesh@gmail.com>
3743
3744         Invalid ranges in character classes should be banned in Unicode patterns only
3745         https://bugs.webkit.org/show_bug.cgi?id=206768
3746
3747         Reviewed by Darin Adler.
3748
3749         In ES5, grammar of CharacterRange was ambiguous, resulting in invalid ranges
3750         like /[\d-a]/ being allowed. As of ES2015, invalid ranges are SyntaxError in
3751         Unicode patterns, yet still allowed in regular ones to avoid breaking the web.
3752         (https://tc39.es/ecma262/#sec-patterns-static-semantics-early-errors-annexb)
3753
3754         This change adds SyntaxError for Unicode patterns and updates explanatory
3755         comments. ErrorCode::CharacterClassOutOfOrder is renamed for consistency
3756         with newly added error code and ErrorCode::ParenthesesTypeInvalid.
3757
3758         * yarr/YarrErrorCode.cpp:
3759         (JSC::Yarr::errorMessage):
3760         (JSC::Yarr::errorToThrow):
3761         * yarr/YarrErrorCode.h:
3762         * yarr/YarrParser.h:
3763         (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate):
3764         (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter):
3765         (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass):
3766         (JSC::Yarr::Parser::parseCharacterClass):
3767
3768 2020-01-24  Mark Lam  <mark.lam@apple.com>
3769
3770         Move singleton Intl string locales out of JSGlobalObject.
3771         https://bugs.webkit.org/show_bug.cgi?id=206791
3772         <rdar://problem/58889037>
3773
3774         Reviewed by Yusuke Suzuki and Andy Wagoner.
3775
3776         We were creating an instance of these for each JSGlobalObject when they can be a
3777         global singleton since they are always initialized with the same intl data
3778         (barring a mid-flight change in intl settings, which we don't support even in the
3779         existing code).
3780
3781         It turns out that intlPluralRulesAvailableLocales() wasn't called anywhere.
3782         IntlPluralRules code currently just uses intlNumberFormatAvailableLocales().
3783         To document that this is intentional, we do the following:
3784         1. have IntlPluralRules code call intlPluralRulesAvailableLocales(), and
3785         2. have intlPluralRulesAvailableLocales() call intlNumberFormatAvailableLocales()
3786            for its implementation.
3787         See https://bugs.webkit.org/show_bug.cgi?id=206791#c7 and
3788         https://bugs.webkit.org/show_bug.cgi?id=206791#c8.
3789
3790         In addMissingScriptLocales(), I'm deliberately naming the string with underscores
3791         because it's much easier to read pa_PK_String and see that it refers to "pa-PK"
3792         as opposed to paPKString.  Ditto for zh_CN_String, zh_HK_String, zh_SG_String,
3793         and zh_TW_String.
3794
3795         * runtime/IntlCollator.cpp:
3796         (JSC::IntlCollator::initializeCollator):
3797         * runtime/IntlCollatorConstructor.cpp:
3798         (JSC::IntlCollatorConstructorFuncSupportedLocalesOf):
3799         * runtime/IntlDateTimeFormat.cpp:
3800         (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
3801         * runtime/IntlDateTimeFormatConstructor.cpp:
3802         (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf):
3803         * runtime/IntlNumberFormat.cpp:
3804         (JSC::IntlNumberFormat::initializeNumberFormat):
3805         * runtime/IntlNumberFormatConstructor.cpp:
3806         (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf):
3807         * runtime/IntlObject.cpp:
3808         (JSC::convertICULocaleToBCP47LanguageTag):
3809         (JSC::addMissingScriptLocales):
3810         (JSC::intlCollatorAvailableLocales):
3811         (JSC::intlDateTimeFormatAvailableLocales):
3812         (JSC::intlNumberFormatAvailableLocales):
3813         (JSC::defaultLocale):
3814         * runtime/IntlObject.h:
3815         * runtime/IntlPluralRules.cpp:
3816         (JSC::IntlPluralRules::initializePluralRules):
3817         * runtime/IntlPluralRulesConstructor.cpp:
3818         (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf):
3819         * runtime/JSGlobalObject.cpp:
3820         (JSC::addMissingScriptLocales): Deleted.
3821         (JSC::JSGlobalObject::intlCollatorAvailableLocales): Deleted.
3822         (JSC::JSGlobalObject::intlDateTimeFormatAvailableLocales): Deleted.
3823         (JSC::JSGlobalObject::intlNumberFormatAvailableLocales): Deleted.
3824         (JSC::JSGlobalObject::intlPluralRulesAvailableLocales): Deleted.
3825         * runtime/JSGlobalObject.h:
3826
3827 2020-01-24  Mark Lam  <mark.lam@apple.com>
3828
3829         IntlObject's cached strings should be immortal and safe for concurrent access.
3830         https://bugs.webkit.org/show_bug.cgi?id=206779
3831         <rdar://problem/58831763>
3832
3833         Reviewed by Yusuke Suzuki.
3834
3835         In IntlObject's numberingSystemsForLocale(), we have a never destroyed
3836         cachedNumberingSystems which is a singleton vector of Strings which are shared
3837         multiple VMs.  Hence, the strings in this vector should be a StaticStringImpl
3838         so that it will be immortal, and can be access concurrently from multiple VMs
3839         on different threads without any ref/deref'ing race issues.
3840
3841         * runtime/IntlObject.cpp:
3842         (JSC::numberingSystemsForLocale):
3843
3844 2020-01-24  Caio Lima  <ticaiolima@gmail.com>
3845
3846         [ARMv7][JIT] Implement checkpoint support
3847         https://bugs.webkit.org/show_bug.cgi?id=206611
3848
3849         Reviewed by Yusuke Suzuki.
3850
3851         This patch is adding code path to properly support checkpoint on ARMv7.
3852
3853         * dfg/DFGOSREntry.cpp:
3854         (JSC::DFG::prepareOSREntry):
3855
3856         We changed the scratch buffer population to properly handle
3857         callee-saved registers on 32-bits. For more details, check comments on
3858         source code.
3859
3860         * dfg/DFGOSRExit.cpp:
3861         (JSC::DFG::OSRExit::compileExit):
3862         * jit/GPRInfo.h:
3863         (JSC::GPRInfo::toRegister):
3864         (JSC::GPRInfo::toIndex):
3865
3866         We are adding back `regCS1` to be used as GPRReg on DFG and
3867         scratch registers. This was necessary because some code generated by
3868         GetByVal IC requires at least 9 registers available.
3869         Given that, we also added such register to `dfgCalleeSaveRegisters`
3870         set.
3871
3872         * jit/JITPropertyAccess32_64.cpp:
3873         (JSC::JIT::emitPutByValWithCachedId):
3874         * jit/RegisterSet.cpp:
3875         (JSC::RegisterSet::dfgCalleeSaveRegisters):
3876         * llint/LowLevelInterpreter.asm:
3877
3878 2020-01-24  Keith Miller  <keith_miller@apple.com>
3879
3880         JSC should produce a module map.
3881         https://bugs.webkit.org/show_bug.cgi?id=206717
3882
3883         Reviewed by Mark Lam.
3884
3885         * Configurations/JavaScriptCore.xcconfig:
3886         * JavaScriptCore.modulemap:
3887
3888 2020-01-24  Commit Queue  <commit-queue@webkit.org>
3889
3890         Unreviewed, rolling out r255052.
3891         https://bugs.webkit.org/show_bug.cgi?id=206758
3892
3893         "Broke production builds" (Requested by rmorisset on #webkit).
3894
3895         Reverted changeset:
3896
3897         "Break the dependency between jsc and DerivedSources"
3898         https://bugs.webkit.org/show_bug.cgi?id=206720
3899         https://trac.webkit.org/changeset/255052
3900
3901 2020-01-24  Adrian Perez de Castro  <aperez@igalia.com>
3902
3903         Fix various non-unified build issues introduced since r254751
3904         https://bugs.webkit.org/show_bug.cgi?id=206736
3905
3906         Reviewed by Carlos Garcia Campos.
3907
3908         * tools/CompilerTimingScope.cpp: Add missing inclusions of wtf/Vector.h and wtf/text/WTFString.h
3909
3910 2020-01-24  Paulo Matos  <pmatos@igalia.com>
3911
3912         Fix number of callee saved register count on MIPS
3913         https://bugs.webkit.org/show_bug.cgi?id=206732
3914
3915         Reviewed by Žan Doberšek.