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