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