\b escapes inside character classes should be valid in Unicode patterns
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2020-03-25  Alexey Shvayka  <shvaikalesh@gmail.com>
2
3         \b escapes inside character classes should be valid in Unicode patterns
4         https://bugs.webkit.org/show_bug.cgi?id=209528
5
6         Reviewed by Darin Adler.
7
8         This change removes isIdentityEscapeAnError('b') check, allowing \b escapes
9         inside character classes in Unicode patterns match U+0008 (BACKSPACE) characters,
10         aligning JSC with V8 and SpiderMonkey.
11
12         Grammar: https://tc39.es/ecma262/#prod-ClassEscape
13         ('b' comes before CharacterEscape :: IdentityEscape)
14
15         * yarr/YarrParser.h:
16         (JSC::Yarr::Parser::parseEscape):
17
18 2020-03-24  Ross Kirsling  <ross.kirsling@sony.com>
19
20         Introduce @tryGetByIdWithWellKnownSymbol instead of repurposing @tryGetById itself
21         https://bugs.webkit.org/show_bug.cgi?id=209524
22
23         Reviewed by Saam Barati and Yusuke Suzuki.
24
25         r258865 allowed @tryGetById to take any ResolveNode, such that a built-in could pass a well-known symbol.
26         This is much more permissive than necessary, since we shouldn't really need a ResolveNode in the first place; 
27         instead, let's make a new bytecode intrinsic function @tryGetByIdWithWellKnownSymbol for this purpose.
28
29         * builtins/RegExpPrototype.js:
30         (globalPrivate.hasObservableSideEffectsForRegExpSplit):
31         * bytecode/BytecodeIntrinsicRegistry.h:
32         * bytecompiler/NodesCodegen.cpp:
33         (JSC::BytecodeIntrinsicNode::emit_intrinsic_tryGetById): Revert change from r258865.
34         (JSC::BytecodeIntrinsicNode::emit_intrinsic_tryGetByIdWithWellKnownSymbol): Added.
35
36 2020-03-24  Tadeu Zagallo  <tzagallo@apple.com>
37
38         LLIntGenerator must link switch jumps to otherwise redundant labels
39         https://bugs.webkit.org/show_bug.cgi?id=209333
40         <rdar://problem/60827987>
41
42         Reviewed by Saam Barati.
43
44         The LLIntGenerator optimizes jumps at the end of blocks. It does so when a block ends, by checking if
45         the last instruction emitted was a jump, if it pointed to the end of the current block and if it was
46         the only jump that pointed there. If all those conditions are satisfied, the jump is removed and it's
47         not necessary to emit the label at the end of block, since the only jump that pointed to it was removed.
48         However, switches (br_table) are handled specially by the LLIntGenerator and therefore are not counted
49         in Label::unresolvedJumps, which was used to check whether we could skip emitting the label.
50         The end result is that we might skip linking a switch jump if it points to a block that ends with a jump.
51
52
53         * wasm/WasmLLIntGenerator.cpp:
54         (JSC::Wasm::LLIntGenerator::addEndToUnreachable):
55         (JSC::Wasm::LLIntGenerator::linkSwitchTargets):
56         (JSC::GenericLabel<Wasm::GeneratorTraits>::setLocation):
57
58 2020-03-24  Saam Barati  <sbarati@apple.com>
59
60         Memory::fastMappedBytes() is wrong
61         https://bugs.webkit.org/show_bug.cgi?id=209488
62
63         Reviewed by Mark Lam.
64
65         * wasm/WasmMemory.cpp:
66         (JSC::Wasm::Memory::fastMappedBytes):
67
68 2020-03-24  Keith Miller  <keith_miller@apple.com>
69
70         Fix isEmpty AssemblyHelpers function and add isNotEmpty
71         https://bugs.webkit.org/show_bug.cgi?id=209507
72
73         Reviewed by Saam Barati.
74
75         This fixes the 32 version of my HasIndexedProperty patch as well
76         as properly names the functions for what they do.
77
78         * dfg/DFGSpeculativeJIT.cpp:
79         (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
80         * jit/AssemblyHelpers.h:
81         (JSC::AssemblyHelpers::isEmpty):
82         (JSC::AssemblyHelpers::isNotEmpty):
83
84 2020-03-23  Keith Miller  <keith_miller@apple.com>
85
86         HasIndexedProperty should know about sane chain
87         https://bugs.webkit.org/show_bug.cgi?id=209457
88
89         Reviewed by Saam Barati.
90
91         This patch makes it so HasIndexedProperty is aware of
92         sane chain. This is useful because, most of the time we do an
93         indexed in it is on an array. If the array has a sane chain (i.e.
94         no indexed properties on it's prototypes and has the default
95         prototype chain) then we can just test for the index being a hole.
96
97         Note, we could also just convert OOB indices into false but that
98         should happen in another patch.
99         https://bugs.webkit.org/show_bug.cgi?id=209456
100
101         I didn't add any tests because it turns out we already have a ton.
102         I know this because I broke most of them repeatedly... >.>
103
104         * dfg/DFGAbstractInterpreterInlines.h:
105         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
106         * dfg/DFGClobberize.h:
107         (JSC::DFG::clobberize):
108         * dfg/DFGFixupPhase.cpp:
109         (JSC::DFG::FixupPhase::fixupNode):
110         (JSC::DFG::FixupPhase::setSaneChainIfPossible):
111         (JSC::DFG::FixupPhase::convertToHasIndexedProperty):
112         * dfg/DFGNodeType.h:
113         * dfg/DFGSpeculativeJIT.cpp:
114         (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
115         * ftl/FTLLowerDFGToB3.cpp:
116         (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):
117         (JSC::FTL::DFG::LowerDFGToB3::speculateAndJump):
118         * jit/AssemblyHelpers.h:
119         (JSC::AssemblyHelpers::isEmpty):
120
121 2020-03-23  Yusuke Suzuki  <ysuzuki@apple.com>
122
123         [JSC] Caller of Delete IC should emit write-barrier onto owner
124         https://bugs.webkit.org/show_bug.cgi?id=209392
125         <rdar://problem/60683173>
126
127         Reviewed by Saam Barati.
128
129         DeleteIC can change Structure of the owner cell in the fast path. However it is not emitting write-barrier,
130         while we are writing a Structure cell id into a JSObject's header.
131         In this patch,
132
133             1. Emit write-barrier in baseline. Be careful about when emitting write-barrier since it clobbers registers.
134             2. DFG and FTL recognize DeleteById / DeleteByVal in DFGStoreBarrierInsertionPhase.
135             3. DFGStoreBarrierInsertionPhase only accepts nodes which base is speculated as a Cell. Current DeleteById / DeleteByVal
136                can have UntypedUse base value, but we miss emitting write-barrier DeleteById / DeleteByVal with UntypedUse in the fast path.
137                In this patch, we optimize DeleteById / DeleteByVal only when we speculate child1 as a cell. We can take the further
138                steps after fixing this bug, e.g. (1) accepting UntypedUse in store-barrier-insertion[1] or (2) emitting write-barrier
139                if child1's speculation is UntypedUse. For now, we fix the bug by taking a generic path when child1 is not speculated
140                as a cell. And we can optimize it in a separate change[2].
141
142         This is following the design of PutIC.
143         Currently, we use ShouldFilterBase for emitWriteBarrier. But we could use UnconditionalWriteBarrier here since
144         we already filter non-cells in Baseline's hot path. I filed it as a separate bug in [3].
145
146         [1]: https://bugs.webkit.org/show_bug.cgi?id=209396
147         [2]: https://bugs.webkit.org/show_bug.cgi?id=209397
148         [3]: https://bugs.webkit.org/show_bug.cgi?id=209395
149
150         * dfg/DFGFixupPhase.cpp:
151         (JSC::DFG::FixupPhase::fixupNode):
152         * dfg/DFGSpeculativeJIT64.cpp:
153         (JSC::DFG::SpeculativeJIT::compileDeleteById):
154         (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
155         * dfg/DFGStoreBarrierInsertionPhase.cpp:
156         * ftl/FTLLowerDFGToB3.cpp:
157         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteById):
158         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal):
159         * jit/JIT.h:
160         * jit/JITPropertyAccess.cpp:
161         (JSC::JIT::emitPutByValWithCachedId):
162         (JSC::JIT::emit_op_del_by_id):
163         (JSC::JIT::emit_op_del_by_val):
164         (JSC::JIT::emit_op_put_by_id):
165         (JSC::JIT::emitWriteBarrier):
166         * jit/JITPropertyAccess32_64.cpp:
167         (JSC::JIT::emitPutByValWithCachedId):
168         (JSC::JIT::emit_op_put_by_id):
169
170 2020-03-23  Yusuke Suzuki  <ysuzuki@apple.com>
171
172         [JSC] DFG OSR exit cannot find StructureStubInfo for put_by_val if CodeBlock is once converved from Baseline to LLInt
173         https://bugs.webkit.org/show_bug.cgi?id=209327
174         <rdar://problem/60631061>
175
176         Reviewed by Saam Barati.
177
178         DFG compiles op_put_by_val as PutById and inlines SetterCall only when DFG found StructureStubInfo for this op_put_by_val.
179         However, it is still possible that DFG OSR exit cannot find StructureStubInfo for SetterCall generated by op_put_by_val.
180         Let's consider the following scenario.
181
182             1. Baseline CodeBlock (A) is compiled.
183             2. (A) gets DFG (B).
184             3. Since (A) collects enough information for put_by_val, (B) can get StructureStubInfo from (A) and compile it as inlined Setter call.
185             4. (A)'s JITData is destroyed since it is not executed. Then, (A) becomes LLInt.
186             5. The CodeBlock inlining (A) gets OSR exit. So (A) is executed and (A) eventually gets Baseline CodeBlock again.
187             6. (B) gets OSR exit. (B) attempts to search for StructureStubInfo in (A) for PutById (originally, put_by_val). But it does not exist since (A)'s JITData is cleared once.
188
189         We should just link to doneTarget of ByValInfo when the SetterCall is generated by `op_put_by_val`. ByValInfo and its doneTarget always exists per op_put_by_val.
190
191         * bytecode/ByValInfo.h:
192         (JSC::ByValInfo::ByValInfo):
193         * bytecode/CodeBlock.cpp:
194         (JSC::CodeBlock::findByValInfo):
195         * bytecode/CodeBlock.h:
196         * dfg/DFGOSRExitCompilerCommon.cpp:
197         (JSC::DFG::callerReturnPC):
198         * jit/JITOpcodes.cpp:
199         (JSC::JIT::privateCompileHasIndexedProperty):
200         * jit/JITOpcodes32_64.cpp:
201         (JSC::JIT::privateCompileHasIndexedProperty):
202         * jit/JITPropertyAccess.cpp:
203         (JSC::JIT::privateCompilePutByVal):
204         (JSC::JIT::privateCompilePutByValWithCachedId):
205
206 2020-03-23  Ross Kirsling  <ross.kirsling@sony.com>
207
208         Unreviewed, address Yusuke's feedback on r258801.
209
210         * builtins/RegExpPrototype.js:
211         (globalPrivate.hasObservableSideEffectsForRegExpSplit):
212         * bytecompiler/NodesCodegen.cpp:
213         (JSC::BytecodeIntrinsicNode::emit_intrinsic_tryGetById):
214
215 2020-03-23  Ross Kirsling  <ross.kirsling@sony.com>
216
217         Catch parameters must not be lexically redeclared
218         https://bugs.webkit.org/show_bug.cgi?id=208976
219
220         Reviewed by Keith Miller.
221
222         From https://tc39.es/ecma262/#sec-try-statement-static-semantics-early-errors:
223           Catch : catch ( CatchParameter ) Block
224             It is a Syntax Error if any element of the BoundNames of CatchParameter
225             also occurs in the LexicallyDeclaredNames of Block.
226
227         In other words, let/const/class/function declarations in the immediate catch block scope
228         must not shadow catch parameters.
229
230         * parser/Parser.cpp:
231         (JSC::Parser<LexerType>::parseTryStatement):
232         (JSC::Parser<LexerType>::parseBlockStatement):
233         * parser/Parser.h:
234         (JSC::Scope::Scope):
235         (JSC::Scope::setIsCatchBlockScope): Added.
236         (JSC::Scope::isCatchBlockScope): Added.
237         (JSC::Parser::declareVariable):
238         (JSC::Parser::declareFunction):
239
240 2020-03-23  Michael Catanzaro  <mcatanzaro@gnome.org>
241
242         REGRESSION(r249808): [GTK] Crash in JSC Config::permanentlyFreeze() on architecture ppc64el
243         https://bugs.webkit.org/show_bug.cgi?id=209236
244
245         Reviewed by Mark Lam.
246
247         * heap/MarkedBlock.h: Use new CeilingOnPageSize.
248         * runtime/JSCConfig.cpp:
249         (JSC::Config::permanentlyFreeze): Use pageSize instead of vmPageSize.
250         * runtime/JSCConfig.h: Use new CeilingOnPageSize.
251
252 2020-03-22  Yusuke Suzuki  <ysuzuki@apple.com>
253
254         Unreviewed, rename keepAlive to ensureStillAliveHere
255         https://bugs.webkit.org/show_bug.cgi?id=209398
256
257         Based on Geoff and Mark's feedback, renaming keepAlive to ensureStillAliveHere
258         to make the effect of keepAlive clear.
259
260         * ftl/FTLLowerDFGToB3.cpp:
261         (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite):
262         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
263         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
264         (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice):
265         (JSC::FTL::DFG::LowerDFGToB3::ensureStillAliveHere):
266         (JSC::FTL::DFG::LowerDFGToB3::keepAlive): Deleted.
267         * heap/HeapCell.cpp:
268         (JSC::ensureStillAliveHere):
269         (JSC::keepAlive): Deleted.
270         * heap/HeapCell.h:
271         (JSC::ensureStillAliveHere):
272         (JSC::HeapCell::use const):
273         (JSC::keepAlive): Deleted.
274         * runtime/JSCJSValue.cpp:
275         (JSC::ensureStillAliveHere):
276         (JSC::keepAlive): Deleted.
277         * runtime/JSCJSValue.h:
278         (JSC::ensureStillAliveHere):
279         (JSC::keepAlive): Deleted.
280         * wasm/js/WebAssemblyModuleRecord.cpp:
281         (JSC::WebAssemblyModuleRecord::link):
282
283 2020-03-22  Yusuke Suzuki  <ysuzuki@apple.com>
284
285         [JSC] Add JSC::keepAlive(JSValue)
286         https://bugs.webkit.org/show_bug.cgi?id=209398
287
288         Reviewed by Mark Lam.
289
290         Add JSC::keepAlive(JSValue). This is useful to make some JSValue variable alive from GC.
291
292         * heap/HeapCell.cpp:
293         * runtime/JSCJSValue.cpp:
294         (JSC::keepAlive):
295         * runtime/JSCJSValue.h:
296         (JSC::keepAlive):
297
298 2020-03-20  Ross Kirsling  <ross.kirsling@sony.com>
299
300         hasObservableSideEffectsForRegExpSplit doesn't check for @@match override
301         https://bugs.webkit.org/show_bug.cgi?id=209363
302
303         Reviewed by Michael Saboff.
304
305         Our RegExp.prototype[@@split] implementation has a fast path for unadultered RegExp objects,
306         but we're using that fast path even when @@match has been overridden.
307
308         This is illegitimate because the RegExp species constructor calls IsRegExp, which hits the @@match getter.
309
310         * builtins/BuiltinNames.h:
311         * builtins/RegExpPrototype.js:
312         (globalPrivate.hasObservableSideEffectsForRegExpSplit):
313         * bytecode/LinkTimeConstant.h:
314         * runtime/JSGlobalObject.cpp:
315         (JSC::JSGlobalObject::init):
316
317 2020-03-20  Ross Kirsling  <ross.kirsling@sony.com>
318
319         RegExp.prototype[@@replace] doesn't coerce result index to integer
320         https://bugs.webkit.org/show_bug.cgi?id=209323
321
322         Reviewed by Yusuke Suzuki.
323
324         From https://tc39.es/ecma262/#sec-regexp.prototype-@@replace:
325           21.2.5.10 RegExp.prototype [ @@replace ] ( string, replaceValue )
326             ...
327             14. For each result in results, do
328               ...
329               e. Let position be ? ToInteger(? Get(result, "index")).
330               f. Set position to max(min(position, lengthS), 0).
331
332         result.index may be undefined, so it doesn't suffice to coerce it with comparison operators.
333
334         * builtins/RegExpPrototype.js:
335
336 2020-03-20  Justin Michaud  <justin@justinmichaud.com>
337
338         Fix JSCOnly build without unified sources
339         https://bugs.webkit.org/show_bug.cgi?id=209343
340
341         Reviewed by Keith Miller.
342
343         I managed to get clangd to work for code completion using the following command:
344
345         ./Tools/Scripts/build-webkit --jsc-only --cmakeargs="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DENABLE_UNIFIED_BUILDS=OFF" && compdb -p WebKitBuild/Release/ list > compile_commands.json
346
347         This patch fixes the build for non-unified sources, and adds some extra clangd files to .gitignore.
348
349         * API/MarkedJSValueRefArray.h:
350         * jit/JITPropertyAccess.cpp:
351
352 2020-03-20  Tim Horton  <timothy_horton@apple.com>
353
354         Upstream a variety of Cocoa-platform HAVE and ENABLE macros
355         https://bugs.webkit.org/show_bug.cgi?id=209307
356
357         Reviewed by Andy Estes.
358
359         * Configurations/FeatureDefines.xcconfig:
360
361 2020-03-20  Jacob Uphoff  <jacob_uphoff@apple.com>
362
363         Unreviewed, reverting r258748.
364
365         This commit broke the Catalina build
366
367         Reverted changeset:
368
369         "Upstream a variety of Cocoa-platform HAVE and ENABLE macros"
370         https://bugs.webkit.org/show_bug.cgi?id=209307
371         https://trac.webkit.org/changeset/258748
372
373 2020-03-19  Tim Horton  <timothy_horton@apple.com>
374
375         Upstream a variety of Cocoa-platform HAVE and ENABLE macros
376         https://bugs.webkit.org/show_bug.cgi?id=209307
377
378         Reviewed by Andy Estes.
379
380         * Configurations/FeatureDefines.xcconfig:
381
382 2020-03-19  Yusuke Suzuki  <ysuzuki@apple.com>
383
384         [JSC] StructureStubInfo::bufferedStructures should not ref/deref UniquedStringImpl
385         https://bugs.webkit.org/show_bug.cgi?id=209266
386         <rdar://problem/60508312>
387
388         Reviewed by Saam Barati.
389
390         StructureStubInfo::bufferedStructures includes RefPtr<UniquedStringImpl>. So destroying StructureStubInfo in
391         CodeBlock::finalizeUnconditionally can access to AtomStringTable, and get nullptr AtomStringTable since
392         CodeBlock::finalizeUnconditionally can be executed in heap-thread.
393
394         Temporarily setting AtomStringTable in the heap-thread when executing GC End phase is dangerous: Web worker's
395         JSC VM is releasing heapAccess when waiting for the next message in the RunLoop. This potentially means that
396         Web worker's main thread can run concurrently with Web worker's JSC VM's End phase heap-thread until the web
397         worker takes JSLock. (This is not a problem in WebCore since WebCore JSC VM never releases heapAccess. We cannot
398         take the same design since we would like to run End phase even if web worker is not getting any messages).
399
400         And removing resetJITData in CodeBlock::finalizeUnconditionally does not fix as well since CodeBlock::finalizeUnconditionally
401         calls StructureStubInfo::visitWeakReferences, and it removes some of entries of StructureStubInfo::bufferedStructures after
402         ByVal extension is introduced into StructureStubInfo.
403
404         This patch uses CacheableIdentifier for bufferedStructures. We make BufferedStructure class which holds Structure and CacheableIdentifier.
405         And StructureStubInfo holds HashSet<BufferedStructure>. We also visit CacheableIdentifier in StructureStubInfo::visitAggregate. To allow
406         concurrent collector to run this, we introduce m_bufferedStructuresLock in StructureStubInfo to guard m_bufferedStructures.
407
408         * bytecode/StructureStubInfo.cpp:
409         (JSC::StructureStubInfo::StructureStubInfo):
410         (JSC::StructureStubInfo::addAccessCase):
411         (JSC::StructureStubInfo::reset):
412         (JSC::StructureStubInfo::visitAggregate):
413         (JSC::StructureStubInfo::visitWeakReferences):
414         * bytecode/StructureStubInfo.h:
415         (JSC::StructureStubInfo::considerCaching):
416         (JSC::StructureStubInfo::getByIdSelfIdentifier):
417         (JSC::StructureStubInfo::cacheType const):
418         (JSC::StructureStubInfo::clearBufferedStructures):
419         (JSC::StructureStubInfo::BufferedStructure::BufferedStructure):
420         (JSC::StructureStubInfo::BufferedStructure::isHashTableDeletedValue const):
421         (JSC::StructureStubInfo::BufferedStructure::hash const):
422         (JSC::StructureStubInfo::BufferedStructure::operator==):
423         (JSC::StructureStubInfo::BufferedStructure::operator!=):
424         (JSC::StructureStubInfo::BufferedStructure::Hash::hash):
425         (JSC::StructureStubInfo::BufferedStructure::Hash::equal):
426         (JSC::StructureStubInfo::BufferedStructure::structure const):
427         (JSC::StructureStubInfo::BufferedStructure::byValId const):
428         * jit/JITOperations.cpp:
429         * runtime/CacheableIdentifier.h:
430         (JSC::CacheableIdentifier::hash const):
431
432 2020-03-19  Yusuke Suzuki  <ysuzuki@apple.com>
433
434         Unreviewed, build fix after r258717
435         https://bugs.webkit.org/show_bug.cgi?id=199295
436
437         * llint/LowLevelInterpreter.asm:
438
439 2020-03-18  Yusuke Suzuki  <ysuzuki@apple.com>
440
441         sanitizeStackForVMImpl writes below stack pointer, triggers huge warning spam from valgrind
442         https://bugs.webkit.org/show_bug.cgi?id=199295
443
444         Reviewed by Mark Lam.
445
446         During sanitizeStackForVMImpl, we should not access to the region beyond the stack-pointer.
447         This patch changes stack-pointer while sanitizeStackForVMImpl is zero-filling the old stack region.
448
449         * llint/LowLevelInterpreter.asm:
450
451 2020-03-19  Charlie Turner  <cturner@igalia.com>
452
453         Fix many warnings with Clang 7.0 on GTK x86-64 in Debug.
454         https://bugs.webkit.org/show_bug.cgi?id=209146
455
456         Reviewed by Darin Adler.
457
458         * runtime/JSCellInlines.h:
459         (JSC::CallFrame::deprecatedVM const): A reference may not be NULL, so
460         this ASSERT() can never trip.
461
462 2020-03-18  Yusuke Suzuki  <ysuzuki@apple.com>
463
464         Add a way to mark a rejected promise as handled
465         https://bugs.webkit.org/show_bug.cgi?id=209241
466
467         Reviewed by Michael Saboff.
468
469         Some of WebCore promise implementations (WebAnimation etc.) want to reject promise
470         as handled state to suppress UnhandledPromiseRejection tracking. For example, a
471         lot of WebCore implementations expose Promise DOM attributes which will be rejected
472         at some conditions. But we do not want to force users setting a handler for each such an
473         attribute.
474
475         This patch adds `JSPromise::rejectAsHandled` C++ function. This simply sets isHandledFlag
476         before executing `JSPromise::reject` if we are not calling a reject function yet.
477
478         * runtime/JSPromise.cpp:
479         (JSC::JSPromise::rejectAsHandled):
480         * runtime/JSPromise.h:
481         * tools/JSDollarVM.cpp:
482         (JSC::functionRejectPromiseAsHandled):
483         (JSC::JSDollarVM::finishCreation):
484
485 2020-03-17  Yusuke Suzuki  <ysuzuki@apple.com>
486
487         [JSC] DeleteIC patchpoint in FTL should require tag and mask registers
488         https://bugs.webkit.org/show_bug.cgi?id=209197
489         <rdar://problem/60531308>
490
491         Reviewed by Tadeu Zagallo and Saam Barati.
492
493         DeleteIC patchpoint is emitting `branchIfNotCell` machine code. This requires a mask register
494         while we are not reserving them when creating a patchpoint.
495
496         In general, our IC code is assuming usual CCallHelpers environment which provides macro-assembler
497         scratch, tag, and mask registers. We should offer them even if IC is emitted from FTL. In this
498         patch, we offer tag and mask registers for Delete IC even if this IC is not currently using tag
499         register.
500
501         * ftl/FTLLowerDFGToB3.cpp:
502         (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
503
504 2020-03-17  Tadeu Zagallo  <tzagallo@apple.com>
505
506         AccessCase::canReplace should allow a Getter to replace an IntrinsicGetter
507         https://bugs.webkit.org/show_bug.cgi?id=209158
508         <rdar://problem/59222012>
509
510         Reviewed by Saam Barati.
511
512         When we override an intrinsic getter with a user defined getter, we might end up with the
513         same offset and attributes. In which case, an inline cache that contained an entry for the
514         intrisic getter will believe that it is still valid, and add a new getter access case,
515         leading to duplicate entries for the same structure.
516
517         * bytecode/AccessCase.cpp:
518         (JSC::AccessCase::canReplace const):
519
520 2020-03-16  Yusuke Suzuki  <ysuzuki@apple.com>
521
522         [JSC] JSMapIterator and JSSetIterator are CellType
523         https://bugs.webkit.org/show_bug.cgi?id=209168
524         <rdar://problem/59705631>
525
526         Reviewed by Saam Barati.
527
528         They are JSCell, not JSObject since they are not used as a user-observable set/map iterators in JSC.
529         However, their JSType is ObjectType. They should use CellType instead.
530
531         * runtime/JSMapIterator.h:
532         * runtime/JSSetIterator.h:
533
534 2020-03-16  Keith Miller  <keith_miller@apple.com>
535
536         JavaScript identifier grammar supports unescaped astral symbols, but JSC doesn’t
537         https://bugs.webkit.org/show_bug.cgi?id=208998
538
539         Reviewed by Michael Saboff.
540
541         This patch fixes a bug in the parser that allows for surrogate pairs when parsing identifiers.
542         It also makes a few other changes to the parser:
543
544         1) When looking for keywords we just need to check that subsequent
545         character cannot be a identifier part or an escape start.
546
547         2) The only time we call parseIdentifierSlowCase is when we hit an
548         escape start or a surrogate pair so we can optimize that to just
549         copy everything up slow character into our buffer.
550
551         3) We shouldn't allow for asking if a UChar is an identifier start/part.
552
553         * KeywordLookupGenerator.py:
554         (Trie.printSubTreeAsC):
555         (Trie.printAsC):
556         * parser/Lexer.cpp:
557         (JSC::isNonLatin1IdentStart):
558         (JSC::isIdentStart):
559         (JSC::isSingleCharacterIdentStart):
560         (JSC::cannotBeIdentStart):
561         (JSC::isIdentPart):
562         (JSC::isSingleCharacterIdentPart):
563         (JSC::cannotBeIdentPartOrEscapeStart):
564         (JSC::Lexer<LChar>::currentCodePoint const):
565         (JSC::Lexer<UChar>::currentCodePoint const):
566         (JSC::Lexer<LChar>::parseIdentifier):
567         (JSC::Lexer<UChar>::parseIdentifier):
568         (JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
569         (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
570         (JSC::Lexer<T>::scanRegExp):
571         (JSC::isIdentPartIncludingEscapeTemplate): Deleted.
572         (JSC::isIdentPartIncludingEscape): Deleted.
573         * parser/Lexer.h:
574         (JSC::Lexer::setOffsetFromSourcePtr): Deleted.
575         * parser/Parser.cpp:
576         (JSC::Parser<LexerType>::printUnexpectedTokenText):
577         * parser/ParserTokens.h:
578
579 2020-03-13  Sergio Villar Senin  <svillar@igalia.com>
580
581         [WebXR] IDLs, stubs and build configuration for WPE
582         https://bugs.webkit.org/show_bug.cgi?id=208702
583
584         Reviewed by Dean Jackson.
585
586         * Configurations/FeatureDefines.xcconfig: Added ENABLE_WEBXR, off by default.
587
588 2020-03-15  Yusuke Suzuki  <ysuzuki@apple.com>
589
590         reportZappedCellAndCrash should handle PreciseAllocation in IsoSubspace
591         https://bugs.webkit.org/show_bug.cgi?id=209042
592
593         Reviewed by Mark Lam.
594
595         This patch adds support of PreciseAllocation cells to reportZappedCellAndCrash, since now it is frequently used
596         as a lower-tier cells in IsoSubspace.
597
598         * heap/IsoSubspace.h:
599         * heap/IsoSubspaceInlines.h:
600         (JSC::IsoSubspace::forEachLowerTierFreeListedPreciseAllocation):
601         * runtime/JSCell.cpp:
602         (JSC::reportZappedCellAndCrash):
603
604 2020-03-15  Yusuke Suzuki  <ysuzuki@apple.com>
605
606         Should not use variable-length-array (VLA)
607         https://bugs.webkit.org/show_bug.cgi?id=209043
608
609         Reviewed by Mark Lam.
610
611         This patch disables variable-length-array (VLA). If this feature uses user-input, user can
612         control the stack height consumed by C++ code. This patch avoids using VLA. To achieve that,
613
614             1. We set `-Wvla` warning option to trigger warnings if it is used.
615             2. Introduce MarkedJSValueRefArray for API. This replaces `JSValueRef arguments[variableLength]` use case.
616                MarkedJSValueRefArray registers itself to JSC GC so that GC can mark it as a strong root.
617
618         * API/JSContext.mm:
619         (+[JSContext currentArguments]):
620         * API/JSValue.mm:
621         (-[JSValue callWithArguments:]):
622         (-[JSValue constructWithArguments:]):
623         (-[JSValue invokeMethod:withArguments:]):
624         * API/MarkedJSValueRefArray.cpp: Added.
625         (JSC::MarkedJSValueRefArray::MarkedJSValueRefArray):
626         (JSC::MarkedJSValueRefArray::~MarkedJSValueRefArray):
627         (JSC::MarkedJSValueRefArray::visitAggregate):
628         * API/MarkedJSValueRefArray.h: Added.
629         * API/tests/minidom.c:
630         (print):
631         * API/tests/testapi.cpp:
632         (TestAPI::markedJSValueArrayAndGC):
633         (testCAPIViaCpp):
634         * Configurations/Base.xcconfig:
635         * JavaScriptCore.xcodeproj/project.pbxproj:
636         * Sources.txt:
637         * heap/Heap.cpp:
638         (JSC::Heap::addCoreConstraints):
639         (JSC::Heap::addMarkedJSValueRefArray):
640         * heap/Heap.h:
641         * heap/MarkedSpace.h:
642         (JSC::MarkedSpace::activeWeakSetsBegin): Deleted.
643         (JSC::MarkedSpace::activeWeakSetsEnd): Deleted.
644         (JSC::MarkedSpace::newActiveWeakSetsBegin): Deleted.
645         (JSC::MarkedSpace::newActiveWeakSetsEnd): Deleted.
646         * runtime/ArgList.h:
647
648 2020-03-14  Saam Barati  <sbarati@apple.com>
649
650         Unreviewed. Fix windows build by making configSizeToProtect stay 4KB.
651
652         * runtime/JSCConfig.h:
653
654 2020-03-13  Saam Barati  <sbarati@apple.com>
655
656         configSizeToProtect should be 16KB
657         https://bugs.webkit.org/show_bug.cgi?id=209068
658
659         Reviewed by Keith Miller.
660
661         * runtime/JSCConfig.h:
662
663 2020-03-13  Yusuke Suzuki  <ysuzuki@apple.com>
664
665         Unreviewed, fix JSC / test262 tests
666         https://bugs.webkit.org/show_bug.cgi?id=209033
667         <rdar://problem/58946936>
668
669         Follow-up change for DisallowGC causes crash because CodeBlock is nullptr when function call is non JS calls.
670
671         * interpreter/Interpreter.cpp:
672         (JSC::Interpreter::executeCall):
673         (JSC::Interpreter::executeConstruct):
674
675 2020-03-13  Tadeu Zagallo  <tzagallo@apple.com>
676
677         Missing arithMode for ArithAbs and ArithNegate in DFGClobberize
678         https://bugs.webkit.org/show_bug.cgi?id=208685
679         <rdar://problem/60115088>
680
681         Reviewed by Saam Barati.
682
683         In the pure case of ArithNegate and ArithAbs in DFGClobberize, their PureValues did not include their
684         respective ArithMode. That means that e.g. a CheckOverflow ArithNegate/Abs could be considered equivalent
685         to an Unchecked version of the same node.
686
687         Thanks to Samuel Groß of Google Project Zero for identifying this bug.
688
689         * dfg/DFGClobberize.h:
690         (JSC::DFG::clobberize):
691
692 2020-03-13  Myles C. Maxfield  <mmaxfield@apple.com>
693
694         [Cocoa] Push applicationSDKVersion() down from WebCore into WTF
695         https://bugs.webkit.org/show_bug.cgi?id=209030
696
697         Reviewed by Simon Fraser.
698
699         dyld_get_program_sdk_version() gives you the wrong answer in the Web Process (or at least
700         not the answer you actually want). There are already facilities for the UI Process to tell
701         the Web Process what the real value is, but those functions are currently in WebCore,
702         which is inaccessible to WTF. This patch is in preparation for
703         https://bugs.webkit.org/show_bug.cgi?id=208969 which needs to know this information in WTF.
704
705         I also found a few places which were calling dyld_get_program_sdk_version() in JavaScriptCore
706         and WebCore (which is wrong because those libraries exist in the Web Process), and have fixed
707         them up to use applicationSDKVersion() instead.
708
709         * API/JSWrapperMap.mm:
710         (supportsInitMethodConstructors):
711
712 2020-03-13  Yusuke Suzuki  <ysuzuki@apple.com>
713
714         [JSC] Reload CodeBlock or suppress GC while setting up calls
715         https://bugs.webkit.org/show_bug.cgi?id=209033
716         <rdar://problem/58946936>
717
718         Reviewed by Saam Barati.
719
720         The sequence of Interpreter::execute is the following.
721
722             1. Getting CodeBlock from Executable
723             2. Doing a lot of setups
724             3. Setting (1)'s CodeBlock to ProtoFrame
725             4. Calling code through Executable
726
727         During (2), it would be possible that GC happens and it replaces CodeBlock in Executable.
728         Then, when executing JITCode with CodeBlock in (4), we use new JITCode with old CodeBlock.
729
730         In this patch,
731
732         For ProgramExecutable, FunctionExecutable, ModuleProgramExecutable, we ensure that no GC happens
733         after getting CodeBlock by placing DisallowGC. For EvalExecutable, we reload CodeBlock after setting
734         up environment. It is possible that FunctionExecutable* stored in CodeBlock can be different when
735         executing a new CodeBlock, but this is OK since this different does not appear and we do not rely on
736         this: we are touching `name` of FunctionExecutable* which is retrieved from CodeBlock. But this name
737         will not be changed since this is derived from UnlinkedFunctionExecutable which is shared by multiple
738         CodeBlocks. And FunctionExecutable* generation ordering must be the same for every CodeBlock generation
739         from the same UnlinkedCodeBlock.
740
741         * bytecode/CodeBlock.h:
742         (JSC::ScriptExecutable::prepareForExecution):
743         * interpreter/Interpreter.cpp:
744         (JSC::Interpreter::executeProgram):
745         (JSC::Interpreter::executeCall):
746         (JSC::Interpreter::executeConstruct):
747         (JSC::Interpreter::execute):
748         (JSC::Interpreter::executeModuleProgram):
749         * interpreter/InterpreterInlines.h:
750         (JSC::Interpreter::execute):
751         * runtime/DisallowScope.h:
752         (JSC::DisallowScope::disable):
753         * runtime/StringPrototype.cpp:
754
755 2020-03-12  Yusuke Suzuki  <ysuzuki@apple.com>
756
757         [JSC] Delete IC creation should check mayNeedToCheckCell/canCacheDeleteIC regardless of Structure::outOfLineCapacity
758         https://bugs.webkit.org/show_bug.cgi?id=209027
759
760         Reviewed by Saam Barati.
761
762         Delete IC code generation assumes that mayNeedToCheckCell (it is replaced with canCacheDeleteIC) is false
763         while we are looking into this status only if Structure::outOfLineCapacity meets a certain condition. We should avoid
764         create Delete IC when mayNeedToCheckCell/canCacheDeleteIC is true regardless of Structure::outOfLineCapacity
765
766         * bytecode/AccessCase.cpp:
767         (JSC::AccessCase::createDelete):
768         (JSC::AccessCase::generateImpl):
769         * runtime/Structure.h:
770         * runtime/StructureInlines.h:
771         (JSC::Structure::mayHaveIndexingHeader const):
772         (JSC::Structure::canCacheDeleteIC const):
773
774 2020-03-13  Alexey Shvayka  <shvaikalesh@gmail.com>
775
776         Bound functions should pass correct NewTarget value
777         https://bugs.webkit.org/show_bug.cgi?id=209057
778
779         Reviewed by Keith Miller.
780
781         This change implements steps 5-6 of bound function's [[Construct]] method [1],
782         fixing bound function subclasses and aligning JSC with V8 and SpiderMonkey.
783
784         [1]: https://tc39.es/ecma262/#sec-bound-function-exotic-objects-construct-argumentslist-newtarget
785
786         * runtime/JSBoundFunction.cpp:
787         (JSC::boundThisNoArgsFunctionConstruct):
788         (JSC::boundFunctionConstruct):
789
790 2020-03-13  Yusuke Suzuki  <ysuzuki@apple.com>
791
792         Unreviewed, change ASSERT to ASSERT_WITH_SECURITY_IMPLICATION since it is now enabled under ENABLE(SECURITY_ASSERTIONS)
793         https://bugs.webkit.org/show_bug.cgi?id=209041
794         <rdar://problem/59705631>
795
796         * runtime/JSCast.h:
797         (JSC::jsCast):
798
799 2020-03-12  Yusuke Suzuki  <ysuzuki@apple.com>
800
801         Report crashed cell in jsCast in debug builds
802         https://bugs.webkit.org/show_bug.cgi?id=209041
803         <rdar://problem/59705631>
804
805         Reviewed by Mark Lam.
806
807         To collect more information when crashing with jsCast, we attempt to use reportZappedCellAndCrash.
808         If it succeeds, we can get more information in registers. We enable this only for ASSERT_ENABLED
809         build. For non ASSERT_ENABLED, we keep the original assertion since this assertion can be enabled
810         via ENABLE(SECURITY_ASSERTIONS).
811
812         * heap/SlotVisitor.cpp:
813         (JSC::SlotVisitor::appendToMarkStack):
814         (JSC::SlotVisitor::visitChildren):
815         (JSC::SlotVisitor::reportZappedCellAndCrash): Deleted.
816         * heap/SlotVisitor.h:
817         * runtime/JSCast.h:
818         (JSC::jsCast):
819         * runtime/JSCell.cpp:
820         (JSC::reportZappedCellAndCrash):
821         * runtime/JSCell.h:
822
823 2020-03-12  Keith Miller  <keith_miller@apple.com>
824
825         DFG nodes that take a TypedArray's storage need to keepAlive the TypedArray
826         https://bugs.webkit.org/show_bug.cgi?id=209035
827
828         Reviewed by Saam Barati.
829
830         It might be possible to produce a graph where the last reference to a TypedArray
831         is via a GetByVal or PutByVal. Since those nodes don't create any reference to the
832         TypedArray in B3 we may end up not keeping the TypedArray alive until after the
833         storage access.
834
835         * ftl/FTLLowerDFGToB3.cpp:
836         (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite):
837         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
838         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
839
840 2020-03-12  Yusuke Suzuki  <ysuzuki@apple.com>
841
842         [JSC] Use CacheableIdentifier in ByValInfo
843         https://bugs.webkit.org/show_bug.cgi?id=208978
844
845         Reviewed by Saam Barati.
846
847         CodeBlock::finalizeUnconditionally discards JITData. And this includes ByValInfo, which holds Identifier.
848         However, finalizeUnconditionally is only guaranteeing that the main thread is not working. It can be invoked
849         in the heap thread, and it is not not setting the AtomStringTable for this heap thread. If Identifier destroys
850         AtomStringImpl, which fails to unregister itself from the table.
851
852         In this patch,
853
854             1. We explicitly set nullptr for the current AtomStringTable to catch the bug as soon as possible in GC end phase.
855             2. We use CacheableIdentifier in ByValInfo to avoid destroying Identifier in CodeBlock::finalizeUnconditionally.
856
857         * CMakeLists.txt:
858         * JavaScriptCore.xcodeproj/project.pbxproj:
859         * Sources.txt:
860         * bytecode/ByValInfo.cpp: Added.
861         (JSC::ByValInfo::visitAggregate):
862         * bytecode/ByValInfo.h:
863         * bytecode/CodeBlock.cpp:
864         (JSC::CodeBlock::stronglyVisitStrongReferences):
865         * bytecode/CodeBlock.h:
866         * dfg/DFGByteCodeParser.cpp:
867         (JSC::DFG::ByteCodeParser::handlePutByVal):
868         * heap/Heap.cpp:
869         (JSC::Heap::runEndPhase):
870         * jit/JIT.h:
871         * jit/JITOperations.cpp:
872         * jit/JITPropertyAccess.cpp:
873         (JSC::JIT::emitByValIdentifierCheck):
874         * runtime/CacheableIdentifier.h:
875
876 2020-03-11  Keith Miller  <keith_miller@apple.com>
877
878         Test262-runner should always consider crashes as new failures
879         https://bugs.webkit.org/show_bug.cgi?id=208943
880
881         Reviewed by Yusuke Suzuki.
882
883         BigInt.asUintN() / BigInt.asIntN() should not crash when called even if we have
884         not implemented them yet...
885
886         * runtime/BigIntConstructor.cpp:
887         (JSC::bigIntConstructorFuncAsUintN):
888         (JSC::bigIntConstructorFuncAsIntN):
889
890 2020-03-11  Keith Miller  <keith_miller@apple.com>
891
892         Throws incorrectly a syntax error when declaring a top level catch variable the same as a parameter
893         https://bugs.webkit.org/show_bug.cgi?id=189914
894
895         Reviewed by Saam Barati.
896
897         When we are parsing catch block parameters we should increment the statement depth so we don't think
898         we are trying to shadow top level lexical variables in the same statement depth.
899
900         * parser/Parser.cpp:
901         (JSC::Parser<LexerType>::parseTryStatement):
902
903 2020-03-10  Yusuke Suzuki  <ysuzuki@apple.com>
904
905         [JSC] Fix iso-subspace static_assert for JSJavaScriptCallFramePrototype
906         https://bugs.webkit.org/show_bug.cgi?id=208874
907
908         Reviewed by Saam Barati.
909
910         This static_assert should ensure the condition for JSJavaScriptCallFramePrototype, not for JSInjectedScriptHostPrototype.
911
912         * inspector/JSJavaScriptCallFramePrototype.h:
913
914 2020-03-09  Don Olmstead  <don.olmstead@sony.com>
915
916         Remove obsolete feature flags
917         https://bugs.webkit.org/show_bug.cgi?id=208830
918
919         Reviewed by Alex Christensen.
920
921         Remove ENABLE_CUSTOM_SCHEME_HANDLER and ENABLE_MAC_VIDEO_TOOLBOX since they
922         are no longer used.
923
924         * Configurations/FeatureDefines.xcconfig:
925
926 2020-03-09  Alexey Shvayka  <shvaikalesh@gmail.com>
927
928         @putByValDirect does not perform [[DefineOwnProperty]] correctly
929         https://bugs.webkit.org/show_bug.cgi?id=208708
930
931         Reviewed by Yusuke Suzuki.
932
933         This change adds inSparseIndexingMode() check to canDoFastPutDirectIndex(), fixing slow path
934         of @putByValDirect() to perform [[DefineOwnProperty]] according to spec [1] and aligning JSC
935         with V8 and SpiderMonkey.
936
937         This patch preserves existing behavior for Arguments exotic objects (thus the checks order)
938         and aligns slow path checks in JSObject::putDirectIndexSlowOrBeyondVectorLength
939         with JSObject::defineOwnIndexedProperty.
940
941         JetStream2 benchmark is neutral.
942
943         [1]: https://tc39.es/ecma262/#sec-validateandapplypropertydescriptor
944
945         * runtime/JSObject.cpp:
946         (JSC::canDoFastPutDirectIndex):
947
948 2020-03-09  Antoine Quint  <graouts@apple.com>
949
950         Remove the compile-time flag for Pointer Events
951         https://bugs.webkit.org/show_bug.cgi?id=208821
952         <rdar://problem/60223471>
953
954         Reviewed by Dean Jackson.
955
956         * Configurations/FeatureDefines.xcconfig:
957
958 2020-03-09  Caio Lima  <ticaiolima@gmail.com>
959
960         Tail calls are broken on ARM_THUMB2 and MIPS
961         https://bugs.webkit.org/show_bug.cgi?id=197797
962
963         Reviewed by Yusuke Suzuki.
964
965         `prepareForTailCall` operation expects that header size + parameters
966         size is aligned with stack (alignment is 16-bytes for every architecture).
967         This means that headerSizeInBytes + argumentsIncludingThisInBytes needs
968         to be multiple of 16. This was not being preserved during getter IC code
969         for 32-bits. The code generated was taking in account only
970         headerSizeInRegisters (it is 4 on 32-bits) and argumentsIncludingThis
971         (that is always 1 for getters) and allocating 32-bytes when applying
972         operation `(headerSize + argumentsIncludingThis) * 8 - sizeof(CallerFrameAndPC)`.
973         This results in a stack frame with size of 40 bytes (after we push
974         `lr` and `sp`). Since `prepareForTailCall` expects frames to be
975         16-bytes aligned, it will then calculate the top of such frame
976         considering it is 48 bytes, cloberring values of previous frame and
977         causing unexpected behavior. This patch is fixing how this IC code
978         calculates the stack frame using `roundArgumentCountToAlignFrame(numberOfParameters)`
979         aligning with what we do on code without IC installed.
980         This was not a problem for getter and setter IC on 64-bits because
981         `roundArgumentCountToAlignFrame(1) == 1` and `roundArgumentCountToAlignFrame(2) == 3`
982         while it is `roundArgumentCountToAlignFrame(1) == 2` and
983         `roundArgumentCountToAlignFrame(2) == 2` for MIPS and ARMv7.
984
985         * bytecode/AccessCase.cpp:
986         (JSC::AccessCase::generateImpl):
987
988 2020-03-08  Brady Eidson  <beidson@apple.com>
989
990         Remember completed subranges during incremental PDF loading.
991         https://bugs.webkit.org/show_bug.cgi?id=208785
992
993         Reviewed by Tim Horton.
994
995         Move 'using WTF::Range' from the WTF/Range.h header to these JSC users.
996         
997         The alternative to making these 3 changes was to make over 20 changes up in the WebCore/WebKits
998         to resolve the conflict with WebCore::Range.
999         
1000         * b3/B3HeapRange.h:
1001         * b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:
1002         * heap/JITStubRoutineSet.h:
1003
1004 2020-03-07  Alexey Shvayka  <shvaikalesh@gmail.com>
1005
1006         REGRESSION (r258049): Unchecked JS exception in jsc::Stringifier::toJSON
1007         https://bugs.webkit.org/show_bug.cgi?id=208766
1008
1009         Reviewed by Yusuke Suzuki.
1010
1011         * runtime/JSONObject.cpp:
1012         (JSC::Stringifier::toJSON): Add missing RELEASE_AND_RETURN.
1013
1014 2020-03-07  Mark Lam  <mark.lam@apple.com>
1015
1016         Remove bad assertion in FTLLowerDFGToB3's compileDelBy().
1017         https://bugs.webkit.org/show_bug.cgi?id=208764
1018         <rdar://problem/59940095>
1019
1020         Reviewed by Keith Miller.
1021
1022         The assertion ASSERT(base.gpr() != params[2].gpr()) is wrong because it is legal
1023         JS to pass in the same value as the base and subscript.  The runtime will handle
1024         it properly.
1025
1026         * ftl/FTLLowerDFGToB3.cpp:
1027         (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
1028
1029 2020-03-05  Sam Weinig  <weinig@apple.com>
1030
1031         Move JavaScriptCore related feature defines from FeatureDefines.xcconfig to PlatformEnableCocoa.h
1032         https://bugs.webkit.org/show_bug.cgi?id=207436
1033         <rdar://problem/59296762>
1034
1035         Reviewed by Darin Adler.
1036
1037         * Configurations/FeatureDefines.xcconfig:
1038         Remove JSC related defines.
1039
1040 2020-03-06  Yusuke Suzuki  <ysuzuki@apple.com>
1041
1042         [JSC] Enable public class fields
1043         https://bugs.webkit.org/show_bug.cgi?id=208756
1044
1045         Reviewed by Mark Lam.
1046
1047         This patch turns public-class-fields feature on, implemented in r254653.
1048         To separate from private-class-fields, this patch renames the flag from useClassFields to usePublicClassFields,
1049         and first enable public-class-fields feature.
1050
1051         * bytecompiler/BytecodeGenerator.cpp:
1052         (JSC::BytecodeGenerator::BytecodeGenerator):
1053         * bytecompiler/NodesCodegen.cpp:
1054         (JSC::FunctionCallValueNode::emitBytecode):
1055         * parser/Parser.cpp:
1056         (JSC::Parser<LexerType>::parseClass):
1057         * runtime/OptionsList.h:
1058
1059 2020-03-06  Mark Lam  <mark.lam@apple.com>
1060
1061         Add "AndOrdered" to the names of ordered DoubleConditions.
1062         https://bugs.webkit.org/show_bug.cgi?id=208736
1063
1064         Reviewed by Keith Miller.
1065
1066         Renamed the following:
1067             DoubleEqual ==> DoubleEqualAndOrdered
1068             DoubleNotEqual ==> DoubleNotEqualAndOrdered
1069             DoubleGreaterThan ==> DoubleGreaterThanAndOrdered
1070             DoubleGreaterThanOrEqual ==> DoubleGreaterThanOrEqualAndOrdered
1071             DoubleLessThan ==> DoubleLessThanAndOrdered
1072             DoubleLessThanOrEqual ==> DoubleLessThanOrEqualAndOrdered
1073
1074         The comment for these enums in MacroAssemblerARM64.h says:
1075             // These conditions will only evaluate to true if the comparison is ordered - i.e. neither operand is NaN.
1076
1077         Adding "AndOrdered" to their names makes this property explicit.
1078
1079         From reading the original names, one might intuitively think that these conditions
1080         map directly to the C++ double comparisons.  This intuition is incorrect.
1081         Consider the DoubleNotEqual case: let's compare 2 doubles, a and b:
1082
1083             result = (a != b);
1084
1085         For C++, if either a or b are NaNs, then a != b will actually return true.
1086         This is contrary to the behavior documented in the MacroAssemblerARM64.h comment
1087         above about how DoubleNotEqual should behave.  In our code, DoubleNotEqual actually
1088         means DoubleNotEqualAndOrdered.  The C++ != behavior actually matches our
1089         DoubleNotEqualOrUnordered condition instead.
1090
1091         The tendency to want to associate DoubleNotEqual with the behavior of the C++
1092         != operator is precisely why we should give these conditions better names.
1093         Adding the "AndOperand" name make the expected behavior explicit in the name, and
1094         leave no room for confusion with C++ double comparison semantics.
1095
1096         * assembler/MacroAssembler.cpp:
1097         (WTF::printInternal):
1098         * assembler/MacroAssembler.h:
1099         (JSC::MacroAssembler::invert):
1100         * assembler/MacroAssemblerARM64.h:
1101         (JSC::MacroAssemblerARM64::moveConditionallyAfterFloatingPointCompare):
1102         (JSC::MacroAssemblerARM64::moveDoubleConditionallyAfterFloatingPointCompare):
1103         (JSC::MacroAssemblerARM64::jumpAfterFloatingPointCompare):
1104         (JSC::MacroAssemblerARM64::floatingPointCompare):
1105         * assembler/MacroAssemblerARMv7.h:
1106         (JSC::MacroAssemblerARMv7::branchDouble):
1107         * assembler/MacroAssemblerMIPS.h:
1108         (JSC::MacroAssemblerMIPS::branchDouble):
1109         (JSC::MacroAssemblerMIPS::branchDoubleNonZero):
1110         * assembler/MacroAssemblerX86Common.h:
1111         (JSC::MacroAssemblerX86Common::branchDoubleNonZero):
1112         (JSC::MacroAssemblerX86Common::moveConditionallyDouble):
1113         (JSC::MacroAssemblerX86Common::invert):
1114         (JSC::MacroAssemblerX86Common::floatingPointCompare):
1115         (JSC::MacroAssemblerX86Common::jumpAfterFloatingPointCompare):
1116         (JSC::MacroAssemblerX86Common::moveConditionallyAfterFloatingPointCompare):
1117         * assembler/MacroAssemblerX86_64.h:
1118         (JSC::MacroAssemblerX86_64::truncateDoubleToUint64):
1119         (JSC::MacroAssemblerX86_64::truncateFloatToUint64):
1120         * assembler/testmasm.cpp:
1121         (JSC::testCompareDouble):
1122         (JSC::testCompareDoubleSameArg):
1123         (JSC::testMoveConditionallyFloatingPoint):
1124         (JSC::testMoveDoubleConditionallyDouble):
1125         (JSC::testMoveDoubleConditionallyDoubleDestSameAsThenCase):
1126         (JSC::testMoveDoubleConditionallyDoubleDestSameAsElseCase):
1127         (JSC::testMoveDoubleConditionallyFloat):
1128         (JSC::testMoveDoubleConditionallyFloatDestSameAsThenCase):
1129         (JSC::testMoveDoubleConditionallyFloatDestSameAsElseCase):
1130         (JSC::testMoveConditionallyFloatingPointSameArg):
1131         (JSC::run):
1132         * b3/B3LowerToAir.cpp:
1133         * dfg/DFGSpeculativeJIT.cpp:
1134         (JSC::DFG::compileClampDoubleToByte):
1135         (JSC::DFG::SpeculativeJIT::compileArithRounding):
1136         (JSC::DFG::SpeculativeJIT::compileArithMinMax):
1137         (JSC::DFG::SpeculativeJIT::compileArithPow):
1138         (JSC::DFG::SpeculativeJIT::compileStrictEq):
1139         (JSC::DFG::SpeculativeJIT::compileArrayIndexOf):
1140         (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
1141         * dfg/DFGSpeculativeJIT32_64.cpp:
1142         (JSC::DFG::SpeculativeJIT::compile):
1143         * dfg/DFGSpeculativeJIT64.cpp:
1144         (JSC::DFG::SpeculativeJIT::compile):
1145         * ftl/FTLLowerDFGToB3.cpp:
1146         (JSC::FTL::DFG::LowerDFGToB3::compileNumberIsInteger):
1147         * jit/AssemblyHelpers.h:
1148         (JSC::AssemblyHelpers::branchIfNotNaN):
1149         * jit/JITArithmetic.cpp:
1150         (JSC::JIT::emitSlow_op_jless):
1151         (JSC::JIT::emitSlow_op_jlesseq):
1152         (JSC::JIT::emitSlow_op_jgreater):
1153         (JSC::JIT::emitSlow_op_jgreatereq):
1154         * jit/JITArithmetic32_64.cpp:
1155         (JSC::JIT::emitBinaryDoubleOp):
1156         * jit/ThunkGenerators.cpp:
1157         (JSC::floorThunkGenerator):
1158         (JSC::roundThunkGenerator):
1159         * wasm/WasmAirIRGenerator.cpp:
1160         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Le>):
1161         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Lt>):
1162         (JSC::Wasm::AirIRGenerator::addFloatingPointMinOrMax):
1163         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Gt>):
1164         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ge>):
1165         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Lt>):
1166         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Eq>):
1167         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Le>):
1168         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ge>):
1169         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Eq>):
1170         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Gt>):
1171
1172 2020-03-06  David Kilzer  <ddkilzer@apple.com>
1173
1174         REGRESSION (r258038): Build failure on Windows 10 bots
1175         <https://bugs.webkit.org/show_bug.cgi?id=208731>
1176         <rdar://problem/59222568>
1177
1178         * assembler/testmasm.cpp:
1179         (JSC::testCompareDouble):
1180         (JSC::testCompareDoubleSameArg):
1181         (JSC::testMoveConditionallyFloatingPoint):
1182         (JSC::testMoveConditionallyFloatingPointSameArg):
1183         - Add RELEASE_ASSERT_NOT_REACHED() statements to try to fix the
1184           bots.
1185
1186 2020-03-06  Yusuke Suzuki  <ysuzuki@apple.com>
1187
1188         Put remaining fixed-sized cells into IsoSubspace
1189         https://bugs.webkit.org/show_bug.cgi?id=208754
1190
1191         Reviewed by Keith Miller.
1192
1193         Put remaining fixed-sized cells into IsoSubspace. Now all the fixed-sized cells have their own IsoSubspaces.
1194
1195         1. JSArray (We need to care about RAMification number, or compensate RAMification regression with improvements).
1196         2. Inspector's objects
1197         3. All prototype objects have one IsoSubspace since they are plain objects.
1198
1199         * inspector/JSInjectedScriptHost.cpp:
1200         (Inspector::JSInjectedScriptHost::JSInjectedScriptHost):
1201         * inspector/JSInjectedScriptHost.h:
1202         * inspector/JSInjectedScriptHostPrototype.h:
1203         * inspector/JSJavaScriptCallFrame.cpp:
1204         (Inspector::JSJavaScriptCallFrame::JSJavaScriptCallFrame):
1205         * inspector/JSJavaScriptCallFrame.h:
1206         * inspector/JSJavaScriptCallFramePrototype.h:
1207         * jsc.cpp:
1208         (JSC::Masquerader::subspaceFor):
1209         (JSCMemoryFootprint::subspaceFor):
1210         * runtime/ArrayIteratorPrototype.h:
1211         * runtime/ArrayPrototype.h:
1212         * runtime/AsyncFromSyncIteratorPrototype.h:
1213         * runtime/AsyncFunctionPrototype.h:
1214         * runtime/AsyncGeneratorFunctionPrototype.h:
1215         * runtime/AsyncGeneratorPrototype.h:
1216         * runtime/AsyncIteratorPrototype.h:
1217         * runtime/AtomicsObject.h:
1218         * runtime/BigIntPrototype.h:
1219         * runtime/ConsoleObject.h:
1220         * runtime/DatePrototype.h:
1221         * runtime/ErrorPrototype.h:
1222         * runtime/ExceptionHelpers.h:
1223         * runtime/GeneratorFunctionPrototype.h:
1224         * runtime/GeneratorPrototype.h:
1225         * runtime/InspectorInstrumentationObject.h:
1226         * runtime/IntlCollatorPrototype.h:
1227         * runtime/IntlDateTimeFormatPrototype.h:
1228         * runtime/IntlNumberFormatPrototype.h:
1229         * runtime/IntlObject.h:
1230         * runtime/IntlPluralRulesPrototype.h:
1231         * runtime/IteratorPrototype.h:
1232         * runtime/JSArray.h:
1233         (JSC::JSArray::subspaceFor):
1234         * runtime/JSArrayBufferPrototype.h:
1235         * runtime/JSDataViewPrototype.h:
1236         * runtime/JSDestructibleObject.h:
1237         (JSC::JSDestructibleObject::subspaceFor): Deleted.
1238         * runtime/JSGenericTypedArrayViewPrototype.h:
1239         * runtime/JSModuleLoader.h:
1240         * runtime/JSONObject.h:
1241         * runtime/JSObject.h:
1242         * runtime/JSObjectInlines.h:
1243         (JSC::JSFinalObject::subspaceFor):
1244         (JSC::JSObject::subspaceFor): Deleted.
1245         * runtime/JSPromisePrototype.h:
1246         (JSC::JSPromisePrototype::subspaceFor):
1247         * runtime/JSTypedArrayViewPrototype.h:
1248         * runtime/MapIteratorPrototype.h:
1249         * runtime/MapPrototype.h:
1250         * runtime/MathObject.h:
1251         * runtime/NativeErrorPrototype.h:
1252         * runtime/ObjectPrototype.h:
1253         * runtime/ReflectObject.h:
1254         * runtime/RegExpPrototype.h:
1255         * runtime/RegExpStringIteratorPrototype.h:
1256         * runtime/SetIteratorPrototype.h:
1257         * runtime/SetPrototype.h:
1258         * runtime/StringIteratorPrototype.h:
1259         * runtime/SymbolPrototype.h:
1260         * runtime/VM.cpp:
1261         (JSC::VM::VM):
1262         * runtime/VM.h:
1263         * runtime/WeakMapPrototype.h:
1264         * runtime/WeakObjectRefPrototype.h:
1265         * runtime/WeakSetPrototype.h:
1266         * tools/JSDollarVM.cpp:
1267         * tools/JSDollarVM.h:
1268         * wasm/js/JSWebAssembly.h:
1269         * wasm/js/WebAssemblyCompileErrorPrototype.h:
1270         * wasm/js/WebAssemblyGlobalPrototype.h:
1271         * wasm/js/WebAssemblyInstancePrototype.h:
1272         * wasm/js/WebAssemblyLinkErrorPrototype.h:
1273         * wasm/js/WebAssemblyMemoryPrototype.h:
1274         * wasm/js/WebAssemblyModulePrototype.h:
1275         * wasm/js/WebAssemblyRuntimeErrorPrototype.h:
1276         * wasm/js/WebAssemblyTablePrototype.h:
1277
1278 2020-03-06  Alexey Shvayka  <shvaikalesh@gmail.com>
1279
1280         JSON.stringify should call replacer on deleted properties
1281         https://bugs.webkit.org/show_bug.cgi?id=208725
1282
1283         Reviewed by Ross Kirsling.
1284
1285         This change removes extra `hasProperty` check from `appendNextProperty` as
1286         it does not exist in the spec [1], aligning JSC with V8 and SpiderMonkey.
1287
1288         This patch also replaces 3 usages of `getPropertySlot` with semantically
1289         equivalent (yet more concise) `get` and inlines `toJSONImpl` (this change
1290         is performance-neutral).
1291
1292         [1]: https://tc39.es/ecma262/#sec-serializejsonobject (steps 6, 8.a)
1293
1294         * runtime/JSONObject.cpp:
1295         (JSC::Stringifier::toJSON):
1296         (JSC::Stringifier::Holder::appendNextProperty):
1297         (JSC::Stringifier::toJSONImpl): Deleted.
1298
1299 2020-03-06  Mark Lam  <mark.lam@apple.com>
1300
1301         Fix some issues in the ARM64 moveConditionallyAfterFloatingPointCompare() and moveDoubleConditionallyAfterFloatingPointCompare().
1302         https://bugs.webkit.org/show_bug.cgi?id=208731
1303         <rdar://problem/59222568>
1304
1305         Reviewed by Saam Barati.
1306
1307         Both the ARM64 moveConditionallyAfterFloatingPointCompare() and
1308         moveDoubleConditionallyAfterFloatingPointCompare() had the following issues:
1309
1310         1. For the DoubleNotEqual condition, they fail to set the result register if
1311            one or both of the comparison operands is a NaN.
1312
1313         2. For the DoubleEqualOrUnordered condition, they can clobber the else case
1314            input register if one of the comparison operands is a NaN.
1315
1316         This patch fixes both of these, and exhaustive testmasm test cases for affected
1317         MacroAssembler instruction emitters using these functions.
1318
1319         * assembler/MacroAssemblerARM64.h:
1320         (JSC::MacroAssemblerARM64::moveConditionallyAfterFloatingPointCompare):
1321         (JSC::MacroAssemblerARM64::moveDoubleConditionallyAfterFloatingPointCompare):
1322         * assembler/testmasm.cpp:
1323         (JSC::testCompareDouble):
1324         (JSC::testCompareDoubleSameArg):
1325         (JSC::testMoveConditionallyFloatingPoint):
1326         (JSC::testMoveConditionallyDouble2):
1327         (JSC::testMoveConditionallyDouble3):
1328         (JSC::testMoveConditionallyDouble3DestSameAsThenCase):
1329         (JSC::testMoveConditionallyDouble3DestSameAsElseCase):
1330         (JSC::testMoveConditionallyFloat2):
1331         (JSC::testMoveConditionallyFloat3):
1332         (JSC::testMoveConditionallyFloat3DestSameAsThenCase):
1333         (JSC::testMoveConditionallyFloat3DestSameAsElseCase):
1334         (JSC::testMoveDoubleConditionallyDouble):
1335         (JSC::testMoveDoubleConditionallyDoubleDestSameAsThenCase):
1336         (JSC::testMoveDoubleConditionallyDoubleDestSameAsElseCase):
1337         (JSC::testMoveDoubleConditionallyFloat):
1338         (JSC::testMoveDoubleConditionallyFloatDestSameAsThenCase):
1339         (JSC::testMoveDoubleConditionallyFloatDestSameAsElseCase):
1340         (JSC::testMoveConditionallyFloatingPointSameArg):
1341         (JSC::testMoveConditionallyDouble2SameArg):
1342         (JSC::testMoveConditionallyDouble3SameArg):
1343         (JSC::testMoveConditionallyFloat2SameArg):
1344         (JSC::testMoveConditionallyFloat3SameArg):
1345         (JSC::testMoveDoubleConditionallyDoubleSameArg):
1346         (JSC::testMoveDoubleConditionallyFloatSameArg):
1347         (JSC::run):
1348
1349 2020-03-05  Paulo Matos  <pmatos@igalia.com>
1350
1351         [JSCOnly] 32-bits warning on memset of JSValue
1352         https://bugs.webkit.org/show_bug.cgi?id=204411
1353
1354         Reviewed by Mark Lam.
1355
1356         Fixes warning on 32bit builds. This is required because GCC knows
1357         it is not safe to use memset on non-POD types and warns against its use.
1358
1359         * heap/GCMemoryOperations.h:
1360         (JSC::gcSafeZeroMemory):
1361
1362 2020-03-04  Mark Lam  <mark.lam@apple.com>
1363
1364         Handle an out of memory error while constructing the BytecodeGenerator.
1365         https://bugs.webkit.org/show_bug.cgi?id=208622
1366         <rdar://problem/59341136>
1367
1368         Reviewed by Saam Barati.
1369
1370         Added the ability to handle out of memory errors encountered during the
1371         construction of the BytecodeGenerator.  Currently, we only use this for the
1372         case where we fail to instantiate a ScopedArgumentsTable.
1373
1374         * bytecompiler/BytecodeGenerator.cpp:
1375         (JSC::BytecodeGenerator::generate):
1376         (JSC::BytecodeGenerator::BytecodeGenerator):
1377         * bytecompiler/BytecodeGeneratorBase.h:
1378         * runtime/ScopedArgumentsTable.cpp:
1379         (JSC::ScopedArgumentsTable::tryCreate):
1380         * runtime/ScopedArgumentsTable.h:
1381         * runtime/SymbolTable.h:
1382
1383 2020-03-04  Paulo Matos  <pmatos@igalia.com>
1384
1385         JSC 32bits broken in debug mode by r257399
1386         https://bugs.webkit.org/show_bug.cgi?id=208439
1387
1388         Reviewed by Carlos Alberto Lopez Perez.
1389
1390         Use uses() method call instead of gpr() on assert to that it
1391         works for both 64 and 32 bits.
1392
1393         * bytecode/AccessCase.cpp:
1394         (JSC::AccessCase::generateImpl):
1395
1396 2020-03-03  Saam Barati  <sbarati@apple.com>
1397
1398         Refactor FixedVMPoolExecutableAllocator to not have member functions which are really just helper functions
1399         https://bugs.webkit.org/show_bug.cgi?id=208537
1400
1401         Reviewed by Mark Lam.
1402
1403         There were a few member functions in FixedVMPoolExecutableAllocator that were
1404         essentially helper functions. I've factored them out, and made FixedVMPoolExecutableAllocator
1405         call them directly. This refactoring is needed when I implement the 1GB
1406         executable pool on arm64 since the implementation of that will create split
1407         implementations of something like FixedVMPoolExecutableAllocator.
1408
1409         * jit/ExecutableAllocator.cpp:
1410         (JSC::jitWriteThunkGenerator):
1411         (JSC::genericWriteToJITRegion):
1412         (JSC::initializeSeparatedWXHeaps):
1413         (JSC::initializeJITPageReservation):
1414         (JSC::ExecutableAllocator::isValid const):
1415         (JSC::ExecutableAllocator::underMemoryPressure):
1416         (JSC::ExecutableAllocator::memoryPressureMultiplier):
1417         (JSC::ExecutableAllocator::allocate):
1418         (JSC::ExecutableAllocator::isValidExecutableMemory):
1419         (JSC::ExecutableAllocator::getLock const):
1420         (JSC::ExecutableAllocator::committedByteCount):
1421         (JSC::ExecutableAllocator::dumpProfile):
1422         (JSC::startOfFixedExecutableMemoryPoolImpl):
1423         (JSC::endOfFixedExecutableMemoryPoolImpl):
1424         (JSC::isJITPC):
1425
1426 2020-03-03  Ross Kirsling  <ross.kirsling@sony.com>
1427
1428         Introduce JSRemoteInspectorServerStart API for socket-based RWI.
1429         https://bugs.webkit.org/show_bug.cgi?id=208349
1430
1431         Reviewed by Joseph Pecoraro.
1432
1433         * API/JSRemoteInspectorServer.cpp: Added.
1434         (JSRemoteInspectorServerStart):
1435         * API/JSRemoteInspectorServer.h: Added.
1436         * CMakeLists.txt:
1437
1438 2020-03-03  Basuke Suzuki  <basuke.suzuki@sony.com>
1439
1440         [WinCairo][PlayStation] Add interface to get listening port of RemoteInspectorServer
1441         https://bugs.webkit.org/show_bug.cgi?id=208391
1442
1443         Reviewed by Don Olmstead.
1444
1445         When passing zero as a port argument, system will pick an available port for it.
1446         Without this method, client cannot get which port is listening.
1447
1448         * inspector/remote/socket/RemoteInspectorServer.cpp:
1449         (Inspector::RemoteInspectorServer::start):
1450         (Inspector::RemoteInspectorServer::getPort):
1451         * inspector/remote/socket/RemoteInspectorServer.h:
1452
1453 2020-03-03  Yusuke Suzuki  <ysuzuki@apple.com>
1454
1455         [JSC] @hasOwnLengthProperty returns wrong value if "length" is attempted to be modified
1456         https://bugs.webkit.org/show_bug.cgi?id=208497
1457         <rdar://problem/59913544>
1458
1459         Reviewed by Mark Lam.
1460
1461         When "length" of JSFunction is attempted to be modified, we put a flag. And @hasOwnLengthProperty
1462         does not correctly use this flag to return a value for the fast path. This affects on "length"
1463         property of bound functions. For example,
1464
1465             function userFunction(a) { }
1466             userFunction.length = 20; // This field is read-only. So, it is not changed.
1467             userFunction.bind().length; // Should be 1, but it returns 0.
1468
1469         1. We rename m_hasModifiedLength to m_hasModifiedLengthForNonHostFunction and m_hasModifiedName
1470            to m_hasModifiedNameForNonHostFunction since we are not tracking these states for host-functions
1471            which can eagerly initialize them.
1472         2. We rename areNameAndLengthOriginal to canAssumeNameAndLengthAreOriginal to allow it to return
1473            "false" for host functions. If it returns true, we go to the fast path.
1474         3. Correctly use canAssumeNameAndLengthAreOriginal information in @hasOwnLengthProperty.
1475
1476         * runtime/FunctionRareData.cpp:
1477         (JSC::FunctionRareData::FunctionRareData):
1478         * runtime/FunctionRareData.h:
1479         * runtime/JSFunction.cpp:
1480         (JSC::JSFunction::put):
1481         (JSC::JSFunction::deleteProperty):
1482         (JSC::JSFunction::defineOwnProperty):
1483         * runtime/JSFunction.h:
1484         * runtime/JSFunctionInlines.h:
1485         (JSC::JSFunction::canAssumeNameAndLengthAreOriginal):
1486         (JSC::JSFunction::areNameAndLengthOriginal): Deleted.
1487         * runtime/JSGlobalObject.cpp:
1488         (JSC::hasOwnLengthProperty):
1489         * tools/JSDollarVM.cpp:
1490         (JSC::functionHasOwnLengthProperty):
1491
1492 2020-03-02  Alan Coon  <alancoon@apple.com>
1493
1494         Add new Mac target numbers
1495         https://bugs.webkit.org/show_bug.cgi?id=208398
1496
1497         Reviewed by Alexey Proskuryakov.
1498
1499         * Configurations/Base.xcconfig:
1500         * Configurations/DebugRelease.xcconfig:
1501         * Configurations/Version.xcconfig:
1502         * Configurations/WebKitTargetConditionals.xcconfig:
1503
1504 2020-03-02  Justin Michaud  <justin_michaud@apple.com>
1505
1506         Delete by val caching does not keep the subscript alive
1507         https://bugs.webkit.org/show_bug.cgi?id=208393
1508
1509         Reviewed by Yusuke Suzuki.
1510
1511         Before, the provided test case crashed with asan because we did not keep deleteByVal
1512         subscripts alive. This patch changes CacheableIdentifier to make this mistake harder
1513         to make again, by making the constructor calls more explicit when CacheableIdentifier
1514         will not keep an Identifier alive.
1515
1516         * jit/JITOperations.cpp:
1517         * jit/Repatch.cpp:
1518         (JSC::tryCachePutByID):
1519         (JSC::tryCacheDeleteBy):
1520         (JSC::repatchDeleteBy):
1521         (JSC::tryCacheInByID):
1522         (JSC::tryCacheInstanceOf):
1523         (JSC::tryCacheDelBy): Deleted.
1524         (JSC::repatchDelBy): Deleted.
1525         * jit/Repatch.h:
1526         * runtime/CacheableIdentifier.h:
1527         * runtime/CacheableIdentifierInlines.h:
1528         (JSC::CacheableIdentifier::createFromIdentifierOwnedByCodeBlock):
1529         (JSC::CacheableIdentifier::createFromCell):
1530
1531 2020-03-02  Paulo Matos  <pmatos@igalia.com>
1532
1533         Fix JSC 32bit alignment increase gcc warning
1534         https://bugs.webkit.org/show_bug.cgi?id=208445
1535
1536         Reviewed by Yusuke Suzuki.
1537
1538         Use reinterpret_cast_ptr<>() instead of reinterpret_cast<>() to
1539         avoid GCC warning about increase in alignment requirement for cast
1540         target type.
1541
1542         * dfg/DFGOSRExit.cpp:
1543         (JSC::DFG::OSRExit::compileExit):
1544
1545 2020-03-02  Yusuke Suzuki  <ysuzuki@apple.com>
1546
1547         Unreviewed, fix wrong assertion
1548         https://bugs.webkit.org/show_bug.cgi?id=208404
1549         <rdar://problem/59956592>
1550
1551         * runtime/CachedTypes.cpp:
1552         (JSC::CachedUniquedStringImplBase::decode const):
1553
1554 2020-03-01  Charles Turner  <cturner@igalia.com>
1555
1556         undefined reference to `JSC::ExecutableBase::hasJITCodeForCall() const'
1557         https://bugs.webkit.org/show_bug.cgi?id=207890
1558
1559         Reviewed by Yusuke Suzuki.
1560
1561         Encountered on arm-buildroot-linux-gnueabihf with GCC 9.2.0.
1562
1563         * runtime/NativeExecutable.cpp: Inclusion of
1564         ExecutableBaseInlines.h resolves the issue for me.
1565
1566 2020-02-29  Yusuke Suzuki  <ysuzuki@apple.com>
1567
1568         Remove std::lock_guard
1569         https://bugs.webkit.org/show_bug.cgi?id=206451
1570
1571         Reviewed by Anders Carlsson.
1572
1573         * API/JSVirtualMachine.mm:
1574         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
1575         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
1576         * API/glib/JSCVirtualMachine.cpp:
1577         (addWrapper):
1578         (removeWrapper):
1579         * heap/HeapSnapshotBuilder.cpp:
1580         (JSC::HeapSnapshotBuilder::analyzeNode):
1581         (JSC::HeapSnapshotBuilder::analyzeEdge):
1582         (JSC::HeapSnapshotBuilder::analyzePropertyNameEdge):
1583         (JSC::HeapSnapshotBuilder::analyzeVariableNameEdge):
1584         (JSC::HeapSnapshotBuilder::analyzeIndexEdge):
1585         (JSC::HeapSnapshotBuilder::setOpaqueRootReachabilityReasonForCell):
1586         * heap/MachineStackMarker.cpp:
1587         (JSC::MachineThreads::tryCopyOtherThreadStacks):
1588         * runtime/JSRunLoopTimer.cpp:
1589         (JSC::JSRunLoopTimer::timerDidFire):
1590
1591 2020-02-28  Yusuke Suzuki  <ysuzuki@apple.com>
1592
1593         [JSC] BuiltinNames' HashMap should be small
1594         https://bugs.webkit.org/show_bug.cgi?id=208404
1595
1596         Reviewed by Mark Lam.
1597
1598         This patch converts public-to-private-name-map from HashMap<RefPtr<UniquedStringImpl>, SymbolImpl*> to HashSet<String> to save half of memory.
1599         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
1600         private names, and we can get private names.
1601
1602         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
1603         the same content to the public string. So the above assumption is broken.
1604
1605         To make the above assumption valid, we have a separate small HashMap which holds string <-> non-private well-known Symbol mappings. Since # of
1606         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
1607         converting HashMap to HashSet for private names (32KB).
1608
1609         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
1610         identifier as a well-known Symbol.
1611
1612         * builtins/ArrayConstructor.js:
1613         (from.wrapper.iterator):
1614         (from):
1615         (from.wrapper.iteratorSymbol): Deleted.
1616         * builtins/ArrayPrototype.js:
1617         (globalPrivate.concatSlowPath):
1618         (concat):
1619         * builtins/BuiltinNames.cpp:
1620         (JSC::BuiltinNames::BuiltinNames):
1621         (JSC::CharBufferSeacher::hash):
1622         (JSC::CharBufferSeacher::equal):
1623         (JSC::lookUpPrivateNameImpl):
1624         (JSC::lookUpWellKnownSymbolImpl):
1625         (JSC::BuiltinNames::lookUpPrivateName const):
1626         (JSC::BuiltinNames::lookUpWellKnownSymbol const):
1627         * builtins/BuiltinNames.h:
1628         (JSC::BuiltinNames::lookUpPrivateName const):
1629         (JSC::BuiltinNames::lookUpWellKnownSymbol const):
1630         (JSC::BuiltinNames::checkPublicToPrivateMapConsistency):
1631         (JSC::BuiltinNames::appendExternalName):
1632         (JSC::BuiltinNames::getPublicName const): Deleted.
1633         * builtins/GlobalOperations.js:
1634         (globalPrivate.speciesConstructor):
1635         * builtins/IteratorHelpers.js:
1636         (performIteration):
1637         * builtins/StringPrototype.js:
1638         (match):
1639         (matchAll):
1640         (intrinsic.StringPrototypeReplaceIntrinsic.replace):
1641         (replaceAll):
1642         (search):
1643         (split):
1644         * builtins/TypedArrayConstructor.js:
1645         (from.wrapper.iterator):
1646         (from):
1647         (from.wrapper.iteratorSymbol): Deleted.
1648         * builtins/TypedArrayPrototype.js:
1649         (globalPrivate.typedArraySpeciesConstructor):
1650         (map):
1651         (filter):
1652         * bytecompiler/NodesCodegen.cpp:
1653         (JSC::BytecodeIntrinsicNode::emit_intrinsic_getByIdDirectPrivate):
1654         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
1655         * parser/Lexer.cpp:
1656         (JSC::Lexer<LChar>::parseIdentifier):
1657         (JSC::Lexer<UChar>::parseIdentifier):
1658         * runtime/CachedTypes.cpp:
1659         (JSC::CachedUniquedStringImplBase::encode):
1660         (JSC::CachedUniquedStringImplBase::decode const):
1661         * runtime/CommonIdentifiers.cpp:
1662         (JSC::CommonIdentifiers::CommonIdentifiers):
1663         (JSC::CommonIdentifiers::lookUpPrivateName const): Deleted.
1664         (JSC::CommonIdentifiers::getPublicName const): Deleted.
1665         * runtime/CommonIdentifiers.h:
1666         * tools/JSDollarVM.cpp:
1667         (JSC::functionGetPrivateProperty):
1668
1669 2020-02-28  Saam Barati  <sbarati@apple.com>
1670
1671         Clean up code with how we choose Gigacage sizes and whether or not to use Wasm fast memory
1672         https://bugs.webkit.org/show_bug.cgi?id=208392
1673
1674         Reviewed by Yusuke Suzuki.
1675
1676         * runtime/OptionsList.h:
1677
1678 2020-02-27  Saam Barati  <sbarati@apple.com>
1679
1680         Fix debug arm64 Wasm tests
1681         https://bugs.webkit.org/show_bug.cgi?id=208362
1682
1683         Reviewed by Yusuke Suzuki.
1684
1685         * wasm/WasmAirIRGenerator.cpp:
1686         (JSC::Wasm::AirIRGenerator::emitChecksForModOrDiv):
1687
1688         We were assuming that "-1" is a valid imm on arm64, but it's not, we need
1689         to use big imm.
1690
1691 2020-02-27  Justin Michaud  <justin_michaud@apple.com>
1692
1693         Poly proto should work with property delete transitions
1694         https://bugs.webkit.org/show_bug.cgi?id=208261
1695
1696         Reviewed by Saam Barati.
1697
1698         This patch fixes a bug where the combination of inline caching
1699         and poly proto cause us to cache a setter call along a prototype chain that 
1700         is no longer the correct setter to call. This is exposed as a result of
1701         https://bugs.webkit.org/show_bug.cgi?id=206430 since DefineOwnProperty used 
1702         to transition to uncacheable dictionary.
1703
1704         The case looks like this:
1705         A - setter for x redefines x
1706         |
1707         B
1708         |
1709         C
1710
1711         We set (new C).x
1712
1713         Right now, we first call A's setter, then we try to figure out what the state of things
1714         were before it was called in order to cache it. We just assume that A's setter still exists, and we cache it
1715         without ever checking, In this patch, we ensure that the property exists and the attributes match in order to prevent crashing. 
1716
1717         In the code, A = target, C = base.
1718
1719         Get is correct because it collects caching information before any calls.
1720
1721         The bug https://bugs.webkit.org/show_bug.cgi?id=208337 tracks the remaining semantic bugs around this code.
1722
1723         * jit/Repatch.cpp:
1724         (JSC::tryCachePutByID):
1725
1726 2020-02-27  Basuke Suzuki  <basuke.suzuki@sony.com>
1727
1728         [WinCairo] Fix RemoteInspector reconnect issue
1729         https://bugs.webkit.org/show_bug.cgi?id=208256
1730
1731         Reviewed by Devin Rousso.
1732
1733         Call target's disconnection sequence asynchronously to avoid deadlock.
1734
1735         * inspector/remote/RemoteConnectionToTarget.cpp:
1736         (Inspector::RemoteConnectionToTarget::close):
1737         * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
1738         (Inspector::RemoteInspectorSocketEndpoint::workerThread):
1739
1740 2020-02-26  Mark Lam  <mark.lam@apple.com>
1741
1742         Enhance JSObjectGetProperty() to mitigate against null object pointers.
1743         https://bugs.webkit.org/show_bug.cgi?id=208275
1744         <rdar://problem/59826325>
1745
1746         Reviewed by Robin Morisset.
1747
1748         * API/JSObjectRef.cpp:
1749         (JSObjectGetProperty):
1750
1751 2020-02-26  Saam Barati  <sbarati@apple.com>
1752
1753         Make testair pass on arm64
1754         https://bugs.webkit.org/show_bug.cgi?id=208258
1755
1756         Reviewed by Tadeu Zagallo.
1757
1758         testElideMoveThenRealloc and testElideSimpleMove were never tested
1759         on arm64. This patch makes those tests work. 
1760         - testElideMoveThenRealloc was using a BitImm that is invalid on arm64
1761         - testElideSimpleMove was testing for the wrong disassembly
1762
1763         * b3/air/testair.cpp:
1764
1765 2020-02-26  Don Olmstead  <don.olmstead@sony.com>
1766
1767         Allow setting of stack sizes for threads
1768         https://bugs.webkit.org/show_bug.cgi?id=208223
1769
1770         Reviewed by Yusuke Suzuki.
1771
1772         Specify ThreadType at the Thread::create callsite.
1773
1774         * heap/Heap.cpp:
1775         (JSC::Heap::notifyIsSafeToCollect):
1776
1777 2020-02-26  Caio Lima  <ticaiolima@gmail.com>
1778
1779         [JSC][MIPS] Adding support to Checkpoints
1780         https://bugs.webkit.org/show_bug.cgi?id=208196
1781
1782         Reviewed by Yusuke Suzuki.
1783
1784         This patch is adding changes to properly support OSR to
1785         checkpoints on MIPS. It required fixes on JIT probe and some
1786         adjustment on Offlineasm to correct generate `$gp` load when executing 
1787         `checkpoint_osr_exit_from_inlined_call_trampoline`.
1788
1789         * assembler/MacroAssemblerMIPS.cpp:
1790
1791         Probe trampoline needs to allocate 16 bytes for 4 arguments to
1792         properly follow C calling conventions. This space is used by callee
1793         when the JSC is compiled with `-O0` flags
1794         (Check "DEFAULT C CALLING CONVENTION (O32)" section on
1795         https://www.mips.com/downloads/mips32-instruction-set-quick-reference-v1-01).
1796
1797         * llint/LowLevelInterpreter.asm:
1798
1799         As we need to do on ARMv7, 64-bits arguments needs to be passed in
1800         register pairs `$a1:$a0` or `$a3:$a2` (little-endian mode). Since `$a0`
1801         contais `CallFrame*`, we need to pass `EncodedJSValue` on `$a3:$a2`
1802         pair.
1803
1804         * offlineasm/mips.rb:
1805
1806         Following the same reason for return locations on OSR to LLInt, we
1807         need to adjust `$gp` using `$ra` instead of `$t9` on
1808         `checkpoint_osr_exit_from_inlined_call_trampoline`, given it is only
1809         reachable through `ret` operations. For detailed explanation, check
1810         ChangeLog of https://trac.webkit.org/changeset/252713.
1811
1812 2020-02-25  Devin Rousso  <drousso@apple.com>
1813
1814         Web Inspector: safari app extension isolated worlds and injected files use the extension's identifier instead of its name
1815         https://bugs.webkit.org/show_bug.cgi?id=206911
1816         <rdar://problem/58026635>
1817
1818         Reviewed by Brian Burg.
1819
1820         * inspector/protocol/Browser.json: Added.
1821         Add a `Browser` agent that can communicate with the inspected page's containing browser. It
1822         lives in the UIProcess alongside the `Target` agent (meaning there should only be one per
1823         debuggable rather than one per target) and as such is not routed through the `Target` agent.
1824
1825         * CMakeLists.txt:
1826         * DerivedSources-input.xcfilelist:
1827         * DerivedSources.make:
1828
1829 2020-02-25  Justin Michaud  <justin_michaud@apple.com>
1830
1831         Inline Cache delete by id/val
1832         https://bugs.webkit.org/show_bug.cgi?id=207522
1833
1834         Reviewed by Keith Miller and Filip Pizlo.
1835
1836         We add inline caching for deleteById/val for baseline only. We also fix a concurrency bug in ICStats used for testing.
1837         We add three new access cases (no inline code is emitted at this time): 
1838         - Delete is a cached delete of an existing property
1839         - DeleteMiss is a delete of a property that does not exist
1840         - DeleteNonConfigurable is a delete of a property that exists, but should not be deleted.
1841         There are no conditions required for these caches, since the structure id must change and the prototype does not matter.
1842         This gives the following microbenchmark results:
1843
1844         delete-property-keeps-cacheable-structure (neutral)
1845         delete-property-inline-cache              definitely 3.9096x faster
1846         delete-property-inline-cache-polymorphic  definitely 1.5239x faster
1847         delete-property-from-prototype-chain      (neutral)
1848
1849         * API/JSCallbackObject.h:
1850         * API/JSCallbackObjectFunctions.h:
1851         (JSC::JSCallbackObject<Parent>::deleteProperty):
1852         (JSC::JSCallbackObject<Parent>::deletePropertyByIndex):
1853         * API/JSObjectRef.cpp:
1854         (JSObjectDeletePropertyForKey):
1855         (JSObjectDeleteProperty):
1856         * CMakeLists.txt:
1857         * JavaScriptCore.xcodeproj/project.pbxproj:
1858         * bytecode/AccessCase.cpp:
1859         (JSC::AccessCase::create):
1860         (JSC::AccessCase::createTransition):
1861         (JSC::AccessCase::createDelete):
1862         (JSC::AccessCase::requiresIdentifierNameMatch const):
1863         (JSC::AccessCase::requiresInt32PropertyCheck const):
1864         (JSC::AccessCase::needsScratchFPR const):
1865         (JSC::AccessCase::forEachDependentCell const):
1866         (JSC::AccessCase::doesCalls const):
1867         (JSC::AccessCase::canReplace const):
1868         (JSC::AccessCase::dump const):
1869         (JSC::AccessCase::propagateTransitions const):
1870         (JSC::AccessCase::generateImpl):
1871         * bytecode/AccessCase.h:
1872         (JSC::AccessCase::structure const):
1873         (JSC::AccessCase::newStructure const):
1874         * bytecode/PolymorphicAccess.cpp:
1875         (WTF::printInternal):
1876         * bytecode/StructureStubInfo.cpp:
1877         (JSC::StructureStubInfo::reset):
1878         * bytecode/StructureStubInfo.h:
1879         * debugger/DebuggerScope.cpp:
1880         (JSC::DebuggerScope::deleteProperty):
1881         * debugger/DebuggerScope.h:
1882         * dfg/DFGFixupPhase.cpp:
1883         (JSC::DFG::FixupPhase::fixupNode):
1884         * dfg/DFGJITCompiler.cpp:
1885         (JSC::DFG::JITCompiler::link):
1886         * dfg/DFGJITCompiler.h:
1887         (JSC::DFG::JITCompiler::addDelById):
1888         (JSC::DFG::JITCompiler::addDelByVal):
1889         * dfg/DFGSpeculativeJIT.cpp:
1890         (JSC::DFG::SpeculativeJIT::compileDeleteById): Deleted.
1891         (JSC::DFG::SpeculativeJIT::compileDeleteByVal): Deleted.
1892         * dfg/DFGSpeculativeJIT32_64.cpp:
1893         (JSC::DFG::SpeculativeJIT::compileDeleteById):
1894         (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
1895         * dfg/DFGSpeculativeJIT64.cpp:
1896         (JSC::DFG::SpeculativeJIT::compileDeleteById):
1897         (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
1898         * ftl/FTLLowerDFGToB3.cpp:
1899         (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
1900         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteById):
1901         (JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal):
1902         * jit/ICStats.h:
1903         * jit/JIT.cpp:
1904         (JSC::JIT::privateCompileSlowCases):
1905         (JSC::JIT::link):
1906         * jit/JIT.h:
1907         * jit/JITInlineCacheGenerator.cpp:
1908         (JSC::JITDelByValGenerator::JITDelByValGenerator):
1909         (JSC::JITDelByValGenerator::generateFastPath):
1910         (JSC::JITDelByValGenerator::finalize):
1911         (JSC::JITDelByIdGenerator::JITDelByIdGenerator):
1912         (JSC::JITDelByIdGenerator::generateFastPath):
1913         (JSC::JITDelByIdGenerator::finalize):
1914         * jit/JITInlineCacheGenerator.h:
1915         (JSC::JITDelByValGenerator::JITDelByValGenerator):
1916         (JSC::JITDelByValGenerator::slowPathJump const):
1917         (JSC::JITDelByIdGenerator::JITDelByIdGenerator):
1918         (JSC::JITDelByIdGenerator::slowPathJump const):
1919         * jit/JITOperations.cpp:
1920         * jit/JITOperations.h:
1921         * jit/JITPropertyAccess.cpp:
1922         (JSC::JIT::emit_op_del_by_id):
1923         (JSC::JIT::emitSlow_op_del_by_id):
1924         (JSC::JIT::emit_op_del_by_val):
1925         (JSC::JIT::emitSlow_op_del_by_val):
1926         * jit/JITPropertyAccess32_64.cpp:
1927         (JSC::JIT::emit_op_del_by_id):
1928         (JSC::JIT::emit_op_del_by_val):
1929         (JSC::JIT::emitSlow_op_del_by_val):
1930         (JSC::JIT::emitSlow_op_del_by_id):
1931         * jit/Repatch.cpp:
1932         (JSC::tryCachePutByID):
1933         (JSC::tryCacheDelBy):
1934         (JSC::repatchDelBy):
1935         (JSC::resetPutByID):
1936         (JSC::resetDelBy):
1937         * jit/Repatch.h:
1938         * llint/LLIntSlowPaths.cpp:
1939         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
1940         * runtime/CacheableIdentifierInlines.h:
1941         (JSC::CacheableIdentifier::CacheableIdentifier):
1942         * runtime/ClassInfo.h:
1943         * runtime/ClonedArguments.cpp:
1944         (JSC::ClonedArguments::deleteProperty):
1945         * runtime/ClonedArguments.h:
1946         * runtime/CommonSlowPaths.cpp:
1947         (JSC::SLOW_PATH_DECL):
1948         * runtime/DeletePropertySlot.h: Added.
1949         (JSC::DeletePropertySlot::DeletePropertySlot):
1950         (JSC::DeletePropertySlot::setConfigurableMiss):
1951         (JSC::DeletePropertySlot::setNonconfigurable):
1952         (JSC::DeletePropertySlot::setHit):
1953         (JSC::DeletePropertySlot::isCacheableDelete const):
1954         (JSC::DeletePropertySlot::isDeleteHit const):
1955         (JSC::DeletePropertySlot::isConfigurableDeleteMiss const):
1956         (JSC::DeletePropertySlot::isNonconfigurable const):
1957         (JSC::DeletePropertySlot::cachedOffset const):
1958         (JSC::DeletePropertySlot::disableCaching):
1959         (JSC::DeletePropertySlot::isCacheable const):
1960         * runtime/ErrorConstructor.cpp:
1961         (JSC::ErrorConstructor::deleteProperty):
1962         * runtime/ErrorConstructor.h:
1963         * runtime/ErrorInstance.cpp:
1964         (JSC::ErrorInstance::deleteProperty):
1965         * runtime/ErrorInstance.h:
1966         * runtime/GenericArguments.h:
1967         * runtime/GenericArgumentsInlines.h:
1968         (JSC::GenericArguments<Type>::put):
1969         (JSC::GenericArguments<Type>::deleteProperty):
1970         * runtime/GetterSetter.h:
1971         * runtime/JSArray.cpp:
1972         (JSC::JSArray::deleteProperty):
1973         * runtime/JSArray.h:
1974         * runtime/JSCJSValue.h:
1975         * runtime/JSCell.cpp:
1976         (JSC::JSCell::deleteProperty):
1977         * runtime/JSCell.h:
1978         * runtime/JSDataView.cpp:
1979         (JSC::JSDataView::deleteProperty):
1980         * runtime/JSDataView.h:
1981         * runtime/JSFunction.cpp:
1982         (JSC::JSFunction::deleteProperty):
1983         * runtime/JSFunction.h:
1984         * runtime/JSGenericTypedArrayView.h:
1985         * runtime/JSGenericTypedArrayViewInlines.h:
1986         (JSC::JSGenericTypedArrayView<Adaptor>::deleteProperty):
1987         (JSC::JSGenericTypedArrayView<Adaptor>::deletePropertyByIndex):
1988         * runtime/JSGlobalObject.cpp:
1989         (JSC::JSGlobalObject::addFunction):
1990         * runtime/JSLexicalEnvironment.cpp:
1991         (JSC::JSLexicalEnvironment::deleteProperty):
1992         * runtime/JSLexicalEnvironment.h:
1993         * runtime/JSModuleEnvironment.cpp:
1994         (JSC::JSModuleEnvironment::deleteProperty):
1995         * runtime/JSModuleEnvironment.h:
1996         * runtime/JSModuleNamespaceObject.cpp:
1997         (JSC::JSModuleNamespaceObject::deleteProperty):
1998         * runtime/JSModuleNamespaceObject.h:
1999         * runtime/JSONObject.cpp:
2000         (JSC::Walker::walk):
2001         * runtime/JSObject.cpp:
2002         (JSC::JSObject::deleteProperty):
2003         (JSC::JSObject::deletePropertyByIndex):
2004         (JSC::validateAndApplyPropertyDescriptor):
2005         * runtime/JSObject.h:
2006         * runtime/JSProxy.cpp:
2007         (JSC::JSProxy::deleteProperty):
2008         * runtime/JSProxy.h:
2009         * runtime/JSSymbolTableObject.cpp:
2010         (JSC::JSSymbolTableObject::deleteProperty):
2011         * runtime/JSSymbolTableObject.h:
2012         * runtime/ProxyObject.cpp:
2013         (JSC::ProxyObject::deleteProperty):
2014         * runtime/ProxyObject.h:
2015         * runtime/RegExpObject.cpp:
2016         (JSC::RegExpObject::deleteProperty):
2017         * runtime/RegExpObject.h:
2018         * runtime/StrictEvalActivation.cpp:
2019         (JSC::StrictEvalActivation::deleteProperty):
2020         * runtime/StrictEvalActivation.h:
2021         * runtime/StringObject.cpp:
2022         (JSC::StringObject::deleteProperty):
2023         * runtime/StringObject.h:
2024         * runtime/Structure.cpp:
2025         (JSC::Structure::removePropertyTransition):
2026         (JSC::Structure::removePropertyTransitionFromExistingStructureImpl):
2027         (JSC::Structure::removePropertyTransitionFromExistingStructure):
2028         (JSC::Structure::removePropertyTransitionFromExistingStructureConcurrently):
2029         (JSC::Structure::removeNewPropertyTransition):
2030         (JSC::Structure::dump const):
2031         * runtime/Structure.h:
2032         * runtime/StructureInlines.h:
2033         (JSC::Structure::hasIndexingHeader const):
2034         (JSC::Structure::mayHaveIndexingHeader const):
2035         * tools/JSDollarVM.cpp:
2036         (JSC::functionHasOwnLengthProperty):
2037         (JSC::JSDollarVM::finishCreation):
2038
2039 2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
2040
2041         [WTF] Attach WARN_UNUSED_RETURN to makeScopeExit and fix existing wrong usage
2042         https://bugs.webkit.org/show_bug.cgi?id=208162
2043
2044         Reviewed by Robin Morisset.
2045
2046         * parser/Parser.cpp:
2047         (JSC::Parser<LexerType>::parseUnaryExpression):
2048
2049 2020-02-24  Keith Miller  <keith_miller@apple.com>
2050
2051         LLInt should fast path for jtrue/false on Symbols and Objects
2052         https://bugs.webkit.org/show_bug.cgi?id=208151
2053
2054         Reviewed by Yusuke Suzuki.
2055
2056         64-bit interpreter can fast path the case where an object or symbol
2057         is passed to a jtrue or jfalse opcode. This is because these values
2058         are always truthy.
2059
2060         Also, fix some weird indentation in LowLevelInterpreter.asm.
2061
2062         * llint/LowLevelInterpreter.asm:
2063         * llint/LowLevelInterpreter32_64.asm:
2064         * llint/LowLevelInterpreter64.asm:
2065         * runtime/JSType.h:
2066
2067 2020-02-24  Caio Lima  <ticaiolima@gmail.com>
2068
2069         [JSC] 32-bits debug build broken after r257212
2070         https://bugs.webkit.org/show_bug.cgi?id=208149
2071
2072         Reviewed by Yusuke Suzuki.
2073
2074         Changing `Structure::setCachedPrototypeChain` to use
2075         `m_cachedPrototypeChainOrRareData.setMayBeNull`, since `chain` may be
2076         null.
2077
2078         * runtime/StructureInlines.h:
2079         (JSC::Structure::setCachedPrototypeChain):
2080
2081 2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
2082
2083         Unreviewed, fix watchOS build
2084         https://bugs.webkit.org/show_bug.cgi?id=207827
2085
2086         While watchOS does not use FTL at all, it still compiles.
2087
2088         * ftl/FTLLowerDFGToB3.cpp:
2089         (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys):
2090         (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
2091         (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
2092         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
2093         (JSC::FTL::DFG::LowerDFGToB3::loadStructureClassInfo):
2094         (JSC::FTL::DFG::LowerDFGToB3::loadStructureCachedPrototypeChainOrRareData):
2095
2096 2020-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
2097
2098         Unreviewed, build fix for 32bit pointer architectures
2099         https://bugs.webkit.org/show_bug.cgi?id=207827
2100
2101         * runtime/Structure.h:
2102
2103 2020-02-23  Yusuke Suzuki  <ysuzuki@apple.com>
2104
2105         [JSC] Shrink Structure
2106         https://bugs.webkit.org/show_bug.cgi?id=207827
2107
2108         Reviewed by Saam Barati.
2109
2110         This patch shrinks sizeof(Structure) from 112 to 96 (16 bytes) in architectures using 64 bit pointers.
2111         Structure is one of the most frequently allocated JSCell in JSC. So it is worth doing
2112         all the sort of bit hacks to make it compact as much as possible.
2113
2114             1. Put outOfLineTypeFlags, maxOffset and transitionOffset into highest bits of m_propertyTableUnsafe,
2115                m_cachedPrototypeChain, m_classInfo, and m_transitionPropertyName. Do not use PackedPtr here since
2116                some of them are concurrently accessed by GC.
2117             2. Put m_inlineCapacity into lower 8 bits of m_propertyHash.
2118             3. Remove m_lock, and use Structure::cellLock() instead.
2119             4. Remove m_cachedPrototypeChain clearing from the concurrent collector since it is dead code, it was old code.
2120                We were setting m_cachedPrototypeChain only if Structure is for JSObject. Clearing happened only if it was not
2121                a Structure for JSObject.
2122             5. Previous Structure is held as StructureID m_previous. And m_previousOrRareData becomes m_cachedPrototypeChainOrRareData.
2123
2124         Many pairs are using CompactPointerTuple to make code clean.
2125         Combining all of the above techniques saves us 16 bytes.
2126
2127         * bytecode/AccessCase.cpp:
2128         (JSC::AccessCase::create):
2129         (JSC::AccessCase::propagateTransitions const):
2130         * bytecode/AccessCase.h:
2131         (JSC::AccessCase::structure const):
2132         * dfg/DFGSpeculativeJIT.cpp:
2133         (JSC::DFG::SpeculativeJIT::compileCheckSubClass):
2134         (JSC::DFG::SpeculativeJIT::compileObjectKeys):
2135         (JSC::DFG::SpeculativeJIT::compileCreateThis):
2136         (JSC::DFG::SpeculativeJIT::compileCreatePromise):
2137         (JSC::DFG::SpeculativeJIT::compileCreateInternalFieldObject):
2138         * ftl/FTLAbstractHeapRepository.h:
2139         * ftl/FTLLowerDFGToB3.cpp:
2140         (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys):
2141         (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
2142         (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
2143         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
2144         * jit/AssemblyHelpers.h:
2145         (JSC::AssemblyHelpers::emitLoadClassInfoFromStructure):
2146         * jit/JITOpcodes.cpp:
2147         (JSC::JIT::emit_op_create_this):
2148         * jit/JITOpcodes32_64.cpp:
2149         (JSC::JIT::emit_op_create_this):
2150         * jit/Repatch.cpp:
2151         (JSC::tryCachePutByID):
2152         * llint/LLIntSlowPaths.cpp:
2153         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2154         * runtime/ClonedArguments.cpp:
2155         (JSC::ClonedArguments::createStructure):
2156         * runtime/ConcurrentJSLock.h:
2157         (JSC::ConcurrentJSLockerBase::ConcurrentJSLockerBase):
2158         (JSC::GCSafeConcurrentJSLockerImpl::GCSafeConcurrentJSLockerImpl):
2159         (JSC::GCSafeConcurrentJSLockerImpl::~GCSafeConcurrentJSLockerImpl):
2160         (JSC::ConcurrentJSLockerImpl::ConcurrentJSLockerImpl):
2161         (JSC::GCSafeConcurrentJSLocker::GCSafeConcurrentJSLocker): Deleted.
2162         (JSC::GCSafeConcurrentJSLocker::~GCSafeConcurrentJSLocker): Deleted.
2163         (JSC::ConcurrentJSLocker::ConcurrentJSLocker): Deleted.
2164         * runtime/JSCell.h:
2165         * runtime/JSObject.cpp:
2166         (JSC::JSObject::deleteProperty):
2167         (JSC::JSObject::shiftButterflyAfterFlattening):
2168         * runtime/JSObject.h:
2169         (JSC::JSObject::getDirectConcurrently const):
2170         * runtime/JSObjectInlines.h:
2171         (JSC::JSObject::prepareToPutDirectWithoutTransition):
2172         * runtime/JSType.cpp:
2173         (WTF::printInternal):
2174         * runtime/JSType.h:
2175         * runtime/Structure.cpp:
2176         (JSC::StructureTransitionTable::contains const):
2177         (JSC::StructureTransitionTable::get const):
2178         (JSC::StructureTransitionTable::add):
2179         (JSC::Structure::dumpStatistics):
2180         (JSC::Structure::Structure):
2181         (JSC::Structure::create):
2182         (JSC::Structure::findStructuresAndMapForMaterialization):
2183         (JSC::Structure::materializePropertyTable):
2184         (JSC::Structure::addPropertyTransitionToExistingStructureImpl):
2185         (JSC::Structure::addPropertyTransitionToExistingStructureConcurrently):
2186         (JSC::Structure::addNewPropertyTransition):
2187         (JSC::Structure::removeNewPropertyTransition):
2188         (JSC::Structure::changePrototypeTransition):
2189         (JSC::Structure::attributeChangeTransition):
2190         (JSC::Structure::toDictionaryTransition):
2191         (JSC::Structure::takePropertyTableOrCloneIfPinned):
2192         (JSC::Structure::nonPropertyTransitionSlow):
2193         (JSC::Structure::flattenDictionaryStructure):
2194         (JSC::Structure::pin):
2195         (JSC::Structure::pinForCaching):
2196         (JSC::Structure::allocateRareData):
2197         (JSC::Structure::ensurePropertyReplacementWatchpointSet):
2198         (JSC::Structure::copyPropertyTableForPinning):
2199         (JSC::Structure::add):
2200         (JSC::Structure::remove):
2201         (JSC::Structure::visitChildren):
2202         (JSC::Structure::canCachePropertyNameEnumerator const):
2203         * runtime/Structure.h:
2204         * runtime/StructureInlines.h:
2205         (JSC::Structure::get):
2206         (JSC::Structure::ruleOutUnseenProperty const):
2207         (JSC::Structure::seenProperties const):
2208         (JSC::Structure::addPropertyHashAndSeenProperty):
2209         (JSC::Structure::forEachPropertyConcurrently):
2210         (JSC::Structure::transitivelyTransitionedFrom):
2211         (JSC::Structure::cachedPrototypeChain const):
2212         (JSC::Structure::setCachedPrototypeChain):
2213         (JSC::Structure::prototypeChain const):
2214         (JSC::Structure::propertyReplacementWatchpointSet):
2215         (JSC::Structure::checkOffsetConsistency const):
2216         (JSC::Structure::add):
2217         (JSC::Structure::remove):
2218         (JSC::Structure::removePropertyWithoutTransition):
2219         (JSC::Structure::setPropertyTable):
2220         (JSC::Structure::clearPropertyTable):
2221         (JSC::Structure::setOutOfLineTypeFlags):
2222         (JSC::Structure::setInlineCapacity):
2223         (JSC::Structure::setClassInfo):
2224         (JSC::Structure::setPreviousID):
2225         (JSC::Structure::clearPreviousID):
2226         * runtime/StructureRareData.cpp:
2227         (JSC::StructureRareData::createStructure):
2228         (JSC::StructureRareData::create):
2229         (JSC::StructureRareData::StructureRareData):
2230         (JSC::StructureRareData::visitChildren):
2231         * runtime/StructureRareData.h:
2232         * runtime/StructureRareDataInlines.h:
2233         (JSC::StructureRareData::setCachedPrototypeChain):
2234         (JSC::StructureRareData::setPreviousID): Deleted.
2235         (JSC::StructureRareData::clearPreviousID): Deleted.
2236         * tools/JSDollarVM.cpp:
2237         (JSC::JSDollarVMHelper::functionGetStructureTransitionList):
2238         * wasm/js/WebAssemblyFunction.cpp:
2239         (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
2240
2241 2020-02-20  Mark Lam  <mark.lam@apple.com>
2242
2243         Make support for bytecode caching more robust against file corruption.
2244         https://bugs.webkit.org/show_bug.cgi?id=207972
2245         <rdar://problem/59260595>
2246
2247         Reviewed by Yusuke Suzuki.
2248
2249         If a bytecode cache file is corrupted, we currently will always crash every time
2250         we try to read it (in perpetuity as long as the corrupted cache file continues to
2251         exist on disk).  To guard against this, we'll harden the bytecode caching mechanism
2252         as follows:
2253
2254         1. Modify the writeCache operation to always write the cache file in a transactional
2255            manner i.e. we'll first write to a .tmp file, and then rename the .tmp file to
2256            the cache file only if the entire file has been written in completeness.
2257
2258            This ensures that we won't get corrupted cache files due to interrupted writes.
2259
2260         2. Modify the writeCache operation to also compute a SHA1 hash of the cache file
2261            and append the hash at end of the file.  Modify the readCache operation to
2262            first authenticate the SHA1 hash before allowing the cache file to be used.
2263            If the hash does not match, the file is bad, and we'll just delete it.
2264
2265            This ensures that we won't be crashing while decoding a corrupted cache file.
2266
2267         Manually tested with the following scenarios and ensuring that the client recovers
2268         with no crashes:
2269
2270         1. no cache file on disk.
2271         2. a 0-sized cache file on a disk.
2272         3. a truncated cache file on disk.
2273         4. a corrupted cache file on disk.
2274         5. an uncorrupted cache file on disk.
2275
2276         Also added some static_asserts in CachedTypes.cpp to document some invariants that
2277         the pre-existing code is dependent on.
2278
2279         * API/JSScript.mm:
2280         (-[JSScript readCache]):
2281         (-[JSScript writeCache:]):
2282         * runtime/CachedTypes.cpp:
2283
2284 2020-02-19  Ross Kirsling  <ross.kirsling@sony.com>
2285
2286         Computed Properties with increment sometimes produces incorrect results
2287         https://bugs.webkit.org/show_bug.cgi?id=170934
2288
2289         Reviewed by Yusuke Suzuki.
2290
2291         When the key and value of a computed property each have side effects, the eval order should be key-before-value.
2292         Not only have we had this backwards, we've also been giving them both the same target register.
2293
2294         * bytecompiler/NodesCodegen.cpp:
2295         (JSC::PropertyListNode::emitPutConstantProperty):
2296
2297 2020-02-19  Keith Miller  <keith_miller@apple.com>
2298
2299         Disable Wasm reference types by default
2300         https://bugs.webkit.org/show_bug.cgi?id=207952
2301
2302         Reviewed by Mark Lam.
2303
2304         * runtime/OptionsList.h:
2305
2306 2020-02-19  Stephan Szabo  <stephan.szabo@sony.com>
2307
2308         [PlayStation] Get jsc test wrappers using find_package
2309         https://bugs.webkit.org/show_bug.cgi?id=207914
2310
2311         Reviewed by Ross Kirsling.
2312
2313         * shell/PlatformPlayStation.cmake:
2314
2315 2020-02-18  Keith Miller  <keith_miller@apple.com>
2316
2317         Add an os_log PrintStream
2318         https://bugs.webkit.org/show_bug.cgi?id=207898
2319
2320         Reviewed by Mark Lam.
2321
2322         Add jsc option to write dataLogs to os_log.
2323
2324         * runtime/Options.cpp:
2325         (JSC::Options::initialize):
2326         * runtime/OptionsList.h:
2327
2328 2020-02-18  Paulo Matos  <pmatos@igalia.com>
2329
2330         Fix order (in MIPS) under which CS-registers are saved/restored
2331         https://bugs.webkit.org/show_bug.cgi?id=207752
2332
2333         Reviewed by Keith Miller.
2334
2335         This has been causing several segfaults on MIPS with JIT enabled
2336         because during an OSR to baseline, the order in which LLInt was
2337         saving the registers was not in sync with the way baseline was
2338         restoring them.
2339
2340         * llint/LowLevelInterpreter.asm:
2341
2342 2020-02-18  Ross Kirsling  <ross.kirsling@sony.com>
2343
2344         [JSC] Computed function properties compute their keys twice
2345         https://bugs.webkit.org/show_bug.cgi?id=207297
2346
2347         Reviewed by Keith Miller.
2348
2349         If a pseudo-String is used as the key of a computed function property,
2350         any side effects from resolving the string value occur in duplicate.
2351
2352         The cause has two parts:
2353           - We aren't ensuring that the string value is resolved before doing SetFunctionName and PutByVal.
2354           - Our implementation of SetFunctionName (https://tc39.es/ecma262/#sec-setfunctionname)
2355             calls toString on a non-symbol argument, instead of assuming the type is a string.
2356
2357         * bytecompiler/BytecodeGenerator.cpp:
2358         (JSC::BytecodeGenerator::shouldSetFunctionName): Added.
2359         (JSC::BytecodeGenerator::emitSetFunctionName): Added.
2360         (JSC::BytecodeGenerator::emitSetFunctionNameIfNeededImpl): Deleted.
2361         (JSC::BytecodeGenerator::emitSetFunctionNameIfNeeded): Deleted.
2362         * bytecompiler/BytecodeGenerator.h:
2363         Split the "if needed" logic out into its own function.
2364
2365         * bytecompiler/NodesCodegen.cpp:
2366         (JSC::PropertyListNode::emitBytecode):
2367         (JSC::PropertyListNode::emitPutConstantProperty):
2368         (JSC::DefineFieldNode::emitBytecode):
2369         Never emit OpSetFunctionName for a name of unknown type.
2370         (But also, don't perform a needless ToPropertyKey for non-function computed property keys.)
2371
2372         * runtime/JSFunction.cpp:
2373         (JSC::JSFunction::setFunctionName):
2374         Don't call toString, assert isString.
2375
2376 2020-02-17  Yusuke Suzuki  <ysuzuki@apple.com>
2377
2378         [JSC] JITThunk should be HashSet<Weak<NativeExecutable>> with appropriate GC weakness handling
2379         https://bugs.webkit.org/show_bug.cgi?id=207715
2380
2381         Reviewed by Darin Adler.
2382
2383         This patch refines JITThunks GC-aware Weak hash map for NativeExecutable. Previously, we have
2384         HashMap<std::tuple<TaggedNativeFunction, TaggedNativeFunction, String>, Weak<NativeExecutable>> table.
2385         But this is not good because the first tuple's information is already in NativeExecutable.
2386         But we were using this design since Weak<NativeExecutable> can be nullified because of Weak<>. If this
2387         happens, we could have invalid Entry in HashMap which does not have corresponding values. This will
2388         cause crash when rehasing requires hash code for this entry.
2389
2390         But this HashMap is very bad in terms of memory usage. Each entry has 32 bytes, and this table gets enough
2391         large. We identified that this table is consuming much memory in Membuster. So it is worth designing
2392         carefully crafted data structure which only holds Weak<NativeExecutable> by leveraging the deep interaction
2393         with our GC implementation.
2394
2395         This patch implements new design of JITThunks, which uses HashSet<Weak<NativeExecutable>> and carefully crafted
2396         HashTraits / KeyTraits to handle Weak<> well.
2397
2398         1. Each Weak should have finalizer, and this finalizer should remove dead Weak<NativeExecutable> from HashSet.
2399
2400             This is ensuring that all the keys in HashSet is, even if Weak<> is saying it is Dead, it still has an way
2401             to access content of NativeExecutable if the content is not a JS objects. For example, we can get function
2402             pointer from dead Weak<NativeExecutable> if it is not yet finalized. Since we remove all finalized Weak<>
2403             from the table, this finalizer mechanism allows us to access function pointers etc. from Weak<NativeExecutable>
2404             so long as it is held in this table.
2405
2406         2. Getting NativeExecutable* from JITThunks should have special protocol.
2407
2408             When getting NativeExecutable* from JITThunks, we do the following,
2409
2410             1. First, we check we have an Entry in JITThunks. If it does not exist, we should insert it anyway.
2411                 1.1. If it exists, we should check whether this Weak<NativeExecutable> is dead or not. It is possible that
2412                      dead one is still in the table because "dead" does not mean that it is "finalized". Until finalizing happens (and
2413                      it can be delayed by incremental-sweeper), Weak<NativeExecutable> can be dead but still accessible. So the table
2414                      is still holding dead one. If we get dead one, we should insert a new one.
2415                 1.2. If it is not dead, we return it.
2416             2. Second, we create a new NativeExecutable and insert it. In that case, it is possible that the table already has Weak<NativeExecutable>,
2417                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
2418                replaced, finalizer of Weak<> will not be invoked since it immediately deallocates Weak<>. So, it does not happen that this newly
2419                inserted NativeExecutable* is removed by the finalizer registered by the old Weak<>.
2420
2421         This change makes memory usage of JITThunks table 1/4.
2422
2423         * heap/Weak.cpp:
2424         (JSC::weakClearSlowCase):
2425         * heap/Weak.h:
2426         (JSC::Weak::Weak):
2427         (JSC::Weak::isHashTableEmptyValue const):
2428         (JSC::Weak::unsafeImpl const):
2429         (WTF::HashTraits<JSC::Weak<T>>::isEmptyValue):
2430         * heap/WeakInlines.h:
2431         (JSC::Weak<T>::Weak):
2432         * jit/JITThunks.cpp:
2433         (JSC::JITThunks::JITThunks):
2434         (JSC::JITThunks::WeakNativeExecutableHash::hash):
2435         (JSC::JITThunks::WeakNativeExecutableHash::equal):
2436         (JSC::JITThunks::HostKeySearcher::hash):
2437         (JSC::JITThunks::HostKeySearcher::equal):
2438         (JSC::JITThunks::NativeExecutableTranslator::hash):
2439         (JSC::JITThunks::NativeExecutableTranslator::equal):
2440         (JSC::JITThunks::NativeExecutableTranslator::translate):
2441         (JSC::JITThunks::finalize):
2442         (JSC::JITThunks::hostFunctionStub):
2443         (JSC::JITThunks::clearHostFunctionStubs): Deleted.
2444         * jit/JITThunks.h:
2445         * runtime/NativeExecutable.h:
2446         * tools/JSDollarVM.cpp:
2447         (JSC::functionGCSweepAsynchronously):
2448         (JSC::functionCreateEmptyFunctionWithName):
2449         (JSC::JSDollarVM::finishCreation):
2450
2451 2020-02-17  Tadeu Zagallo  <tzagallo@apple.com>
2452
2453         [Wasm] REGRESSION(r256665): Wasm->JS call IC needs to save memory size register
2454         https://bugs.webkit.org/show_bug.cgi?id=207849
2455
2456         Reviewed by Mark Lam.
2457
2458         When generating the call IC, we should select the callee saves using BoundsChecking mode in order
2459         to obey to the calling conventions described in r256665. Currently, we won't restore the memory size
2460         register when calling the Wasm LLInt through the call IC.
2461
2462         * wasm/js/WebAssemblyFunction.cpp:
2463         (JSC::WebAssemblyFunction::calleeSaves const):
2464
2465 2020-02-17  Per Arne Vollan  <pvollan@apple.com>
2466
2467         Mach lookup to com.apple.webinspector should not be allowed in WebKit's WebContent process
2468         https://bugs.webkit.org/show_bug.cgi?id=203214
2469
2470         Reviewed by Brent Fulgham.
2471
2472         Add static flag in RemoteInspector to indicate whether a sandbox extension is needed. The remote inspector will only be
2473         started if the sandbox extension is not needed. Only the WebContent process will need a sandbox extension, since this
2474         patch removes mach access to 'com.apple.webinspector' for this process. Also add name and domain for the
2475         'Enable Remote Inspector' setting, since this will be used in the UI process.
2476
2477         * inspector/remote/RemoteInspector.cpp:
2478         * inspector/remote/RemoteInspector.h:
2479         * inspector/remote/RemoteInspectorConstants.h:
2480         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
2481         (Inspector::RemoteInspector::singleton):
2482
2483 2020-02-16  Fujii Hironori  <Hironori.Fujii@sony.com>
2484
2485         Remove remaining WTF_EXPORT and WTF_IMPORT by replacing them with WTF_EXPORT_DECLARATION and WTF_IMPORT_DECLARATION
2486         https://bugs.webkit.org/show_bug.cgi?id=207746
2487
2488         Reviewed by Don Olmstead.
2489
2490         * runtime/JSExportMacros.h:
2491
2492 2020-02-16  Paulo Matos  <pmatos@igalia.com>
2493
2494         Remove nonArgGPR1 for ARMv7 and ARM64 (unused)
2495         https://bugs.webkit.org/show_bug.cgi?id=207753
2496
2497         Reviewed by Darin Adler.
2498
2499         Cleanup commit - nonArgGPR1 is unused for both ARMv7
2500         and ARM64.
2501
2502         * jit/GPRInfo.h:
2503
2504 2020-02-14  Tadeu Zagallo  <tzagallo@apple.com> and Michael Saboff  <msaboff@apple.com>
2505
2506         [WASM] Wasm interpreter's calling convention doesn't match Wasm JIT's convention.
2507         https://bugs.webkit.org/show_bug.cgi?id=207727
2508
2509         Reviewed by Mark Lam.
2510
2511         The Wasm JIT has unusual calling conventions, which were further complicated by the addition
2512         of the interpreter, and the interpreter did not correctly follow these conventions (by incorrectly
2513         saving and restoring the callee save registers used for the memory base and size). Here's a summary
2514         of the calling convention:
2515
2516         - When entering Wasm from JS, the wrapper must:
2517             - Preserve the base and size when entering LLInt regardless of the mode. (Prior to this
2518               patch we only preserved the base in Signaling mode)
2519             - Preserve the memory base in either mode, and the size for BoundsChecking.
2520         - Both tiers must preserve every *other* register they use. e.g. the LLInt must preserve PB
2521           and wasmInstance, but must *not* preserve memoryBase and memorySize.
2522         - Changes to memoryBase and memorySize are visible to the caller. This means that:
2523             - Intra-module calls can assume these registers are up-to-date even if the memory was
2524               resized. The only exception here is if the LLInt calls a signaling JIT, in which case
2525               the JIT will not update the size register, since it won't be using it.
2526             - Inter-module and JS calls require the caller to reload these registers. These calls may
2527               result in memory changes (e.g. the callee may call memory.grow).
2528             - A Signaling JIT caller must be aware that the LLInt may trash the size register, since
2529               it always bounds checks.
2530
2531         * llint/WebAssembly.asm:
2532         * wasm/WasmAirIRGenerator.cpp:
2533         (JSC::Wasm::AirIRGenerator::addCall):
2534         * wasm/WasmB3IRGenerator.cpp:
2535         (JSC::Wasm::B3IRGenerator::addCall):
2536         * wasm/WasmCallee.cpp:
2537         (JSC::Wasm::LLIntCallee::calleeSaveRegisters):
2538         * wasm/WasmCallingConvention.h:
2539         * wasm/WasmLLIntPlan.cpp:
2540         (JSC::Wasm::LLIntPlan::didCompleteCompilation):
2541         * wasm/WasmMemoryInformation.cpp:
2542         (JSC::Wasm::PinnedRegisterInfo::get):
2543         (JSC::Wasm::getPinnedRegisters): Deleted.
2544
2545 2020-02-13  Stephan Szabo  <stephan.szabo@sony.com>
2546
2547         [PlayStation] Make special udis86 C file handling only happen for Visual Studio
2548         https://bugs.webkit.org/show_bug.cgi?id=207729
2549
2550         Reviewed by Don Olmstead.
2551
2552         * PlatformPlayStation.cmake:
2553
2554 2020-02-13  Caio Lima  <ticaiolima@gmail.com>
2555
2556         [ESNext][BigInt] We don't support BigInt literal as PropertyName
2557         https://bugs.webkit.org/show_bug.cgi?id=206888
2558
2559         Reviewed by Ross Kirsling.
2560
2561         According to spec (https://tc39.es/ecma262/#prod-PropertyName),
2562         BigInt literals are valid property names. Given that, we should not
2563         throw a SyntaxError when using BigInt literals on destructuring
2564         pattern, method declaration, object literals, etc.
2565         This patch is adding BigInt literal as a valid syntax to PropertyName.
2566
2567         * parser/Parser.cpp:
2568         (JSC::Parser<LexerType>::parseDestructuringPattern):
2569         (JSC::Parser<LexerType>::parseClass):
2570         (JSC::Parser<LexerType>::parseInstanceFieldInitializerSourceElements):
2571         (JSC::Parser<LexerType>::parseProperty):
2572         (JSC::Parser<LexerType>::parseGetterSetter):
2573         * parser/ParserArena.cpp:
2574         (JSC::IdentifierArena::makeBigIntDecimalIdentifier):
2575         * parser/ParserArena.h:
2576
2577 2020-02-12  Mark Lam  <mark.lam@apple.com>
2578
2579         Add options for debugging WASM code.
2580         https://bugs.webkit.org/show_bug.cgi?id=207677
2581         <rdar://problem/59411390>
2582
2583         Reviewed by Yusuke Suzuki.
2584
2585         Specifically ...
2586
2587             JSC_useBBQJIT                            - allows the BBQ JIT to be used if true
2588             JSC_useOMGJIT                            - allows the OMG JIT to be used if true
2589             JSC_useWasmLLIntPrologueOSR              - allows prologue OSR from Wasm LLInt if true
2590             JSC_useWasmLLIntLoopOSR                  - allows loop OSR from Wasm LLInt if true
2591             JSC_useWasmLLIntEpilogueOSR              - allows epilogue OSR from Wasm LLInt if true
2592             JSC_wasmFunctionIndexRangeToCompile=N:M  - wasm function index range to allow compilation on, e.g. 1:100
2593
2594         * JavaScriptCore.xcodeproj/project.pbxproj:
2595         * runtime/Options.cpp:
2596         (JSC::Options::ensureOptionsAreCoherent):
2597         * runtime/OptionsList.h:
2598         * wasm/WasmBBQPlan.cpp:
2599         (JSC::Wasm::BBQPlan::BBQPlan):
2600         * wasm/WasmOMGForOSREntryPlan.cpp:
2601         (JSC::Wasm::OMGForOSREntryPlan::OMGForOSREntryPlan):
2602         * wasm/WasmOMGPlan.cpp:
2603         (JSC::Wasm::OMGPlan::OMGPlan):
2604         * wasm/WasmOperations.cpp:
2605         (JSC::Wasm::shouldJIT):
2606         (JSC::Wasm::operationWasmTriggerOSREntryNow):
2607         (JSC::Wasm::operationWasmTriggerTierUpNow):
2608         * wasm/WasmSlowPaths.cpp:
2609         (JSC::LLInt::shouldJIT):
2610         (JSC::LLInt::WASM_SLOW_PATH_DECL):
2611
2612 2020-02-12  Yusuke Suzuki  <ysuzuki@apple.com>
2613
2614         [JSC] Compact JITCodeMap by storing BytecodeIndex and CodeLocation separately
2615         https://bugs.webkit.org/show_bug.cgi?id=207673
2616
2617         Reviewed by Mark Lam.
2618
2619         While BytecodeIndex is 4 bytes, CodeLocation is 8 bytes. So the tuple of them "JITCodeMap::Entry"
2620         becomes 16 bytes because it adds 4 bytes padding. We should store BytecodeIndex and CodeLocation separately
2621         to avoid this padding.
2622
2623         This patch introduces JITCodeMapBuilder. We use this to build JITCodeMap data structure as a immutable final result.
2624
2625         * jit/JIT.cpp:
2626         (JSC::JIT::link):
2627         * jit/JITCodeMap.h:
2628         (JSC::JITCodeMap::JITCodeMap):
2629         (JSC::JITCodeMap::find const):
2630         (JSC::JITCodeMap::operator bool const):
2631         (JSC::JITCodeMap::codeLocations const):
2632         (JSC::JITCodeMap::indexes const):
2633         (JSC::JITCodeMapBuilder::append):
2634         (JSC::JITCodeMapBuilder::finalize):
2635         (JSC::JITCodeMap::Entry::Entry): Deleted.
2636         (JSC::JITCodeMap::Entry::bytecodeIndex const): Deleted.
2637         (JSC::JITCodeMap::Entry::codeLocation): Deleted.
2638         (JSC::JITCodeMap::append): Deleted.
2639         (JSC::JITCodeMap::finish): Deleted.
2640
2641 2020-02-12  Pavel Feldman  <pavel.feldman@gmail.com>
2642
2643         Web Inspector: encode binary web socket frames using base64
2644         https://bugs.webkit.org/show_bug.cgi?id=207448
2645         
2646         Previous representation of binary frames is lossy using fromUTF8WithLatin1Fallback,
2647         this patch consistently encodes binary data using base64.
2648
2649         Reviewed by Timothy Hatcher.
2650
2651         * inspector/protocol/Network.json:
2652
2653 2020-02-12  Simon Fraser  <simon.fraser@apple.com>
2654
2655         Remove CSS_DEVICE_ADAPTATION
2656         https://bugs.webkit.org/show_bug.cgi?id=203479
2657
2658         Reviewed by Tim Horton.
2659
2660         CSS Working Group resolved to remove @viewport <https://github.com/w3c/csswg-drafts/issues/4766>,
2661         so remove the code.
2662
2663         * Configurations/FeatureDefines.xcconfig:
2664
2665 2020-02-12  Yusuke Suzuki  <ysuzuki@apple.com>
2666
2667         [JSC] Compact StructureTransitionTable
2668         https://bugs.webkit.org/show_bug.cgi?id=207616
2669
2670         Reviewed by Mark Lam.
2671
2672         Some of StructureTransitionTable are shown as very large HashMap and we can compact it by encoding key.
2673         We leverage 48bit pointers and 8byte alignment of UniquedStringImpl* to encode other parameters into it.
2674
2675         * runtime/Structure.cpp:
2676         (JSC::StructureTransitionTable::contains const):
2677         (JSC::StructureTransitionTable::get const):
2678         (JSC::StructureTransitionTable::add):
2679         * runtime/Structure.h:
2680         * runtime/StructureTransitionTable.h:
2681         (JSC::StructureTransitionTable::Hash::Key::Key):
2682         (JSC::StructureTransitionTable::Hash::Key::isHashTableDeletedValue const):
2683         (JSC::StructureTransitionTable::Hash::Key::impl const):
2684         (JSC::StructureTransitionTable::Hash::Key::isAddition const):
2685         (JSC::StructureTransitionTable::Hash::Key::attributes const):
2686         (JSC::StructureTransitionTable::Hash::Key::operator==):
2687         (JSC::StructureTransitionTable::Hash::Key::operator!=):
2688         (JSC::StructureTransitionTable::Hash::hash):
2689         (JSC::StructureTransitionTable::Hash::equal):
2690
2691 2020-02-12  Yusuke Suzuki  <ysuzuki@apple.com>
2692
2693         [JSC] Make RegExpCache small
2694         https://bugs.webkit.org/show_bug.cgi?id=207619
2695
2696         Reviewed by Mark Lam.
2697
2698         We can compact RegExpKey by using PackedRefPtr, so that we can shrink memory consumption of RegExpCache.
2699
2700         * runtime/RegExpKey.h:
2701
2702 2020-02-10  Mark Lam  <mark.lam@apple.com>
2703
2704         Placate exception check validator in GenericArguments<Type>::put().
2705         https://bugs.webkit.org/show_bug.cgi?id=207485
2706         <rdar://problem/59302535>
2707
2708         Reviewed by Robin Morisset.
2709
2710         * runtime/GenericArgumentsInlines.h:
2711         (JSC::GenericArguments<Type>::put):
2712
2713 2020-02-10  Mark Lam  <mark.lam@apple.com>
2714
2715         Missing exception check in GenericArguments<Type>::deletePropertyByIndex().
2716         https://bugs.webkit.org/show_bug.cgi?id=207483
2717         <rdar://problem/59302616>
2718
2719         Reviewed by Yusuke Suzuki.
2720
2721         * runtime/GenericArgumentsInlines.h:
2722         (JSC::GenericArguments<Type>::deletePropertyByIndex):
2723
2724 2020-02-10  Truitt Savell  <tsavell@apple.com>
2725
2726         Unreviewed, rolling out r256091.
2727
2728         Broke internal builds
2729
2730         Reverted changeset:
2731
2732         "Move trivial definitions from FeatureDefines.xcconfig to
2733         PlatformEnableCocoa.h"
2734         https://bugs.webkit.org/show_bug.cgi?id=207155
2735         https://trac.webkit.org/changeset/256091
2736
2737 2020-02-10  Truitt Savell  <tsavell@apple.com>
2738
2739         Unreviewed, rolling out r256103.
2740
2741         This patch is blocking the rollout of r256091
2742
2743         Reverted changeset:
2744
2745         "Move JavaScriptCore related feature defines from
2746         FeatureDefines.xcconfig to PlatformEnableCocoa.h"
2747         https://bugs.webkit.org/show_bug.cgi?id=207436
2748         https://trac.webkit.org/changeset/256103
2749
2750 2020-02-09  Keith Rollin  <krollin@apple.com>
2751
2752         Re-enable LTO for ARM builds
2753         https://bugs.webkit.org/show_bug.cgi?id=207402
2754         <rdar://problem/49190767>
2755
2756         Reviewed by Sam Weinig.
2757
2758         Bug 190758 re-enabled LTO for Production builds for x86-family CPUs.
2759         Enabling it for ARM was left out due to a compiler issue. That issue
2760         has been fixed, and so now we can re-enable LTO for ARM.
2761
2762         * Configurations/Base.xcconfig:
2763
2764 2020-02-08  Sam Weinig  <weinig@apple.com>
2765
2766         Move JavaScriptCore related feature defines from FeatureDefines.xcconfig to PlatformEnableCocoa.h
2767         https://bugs.webkit.org/show_bug.cgi?id=207436
2768
2769         Reviewed by Tim Horton.
2770
2771         * Configurations/FeatureDefines.xcconfig:
2772         Remove ENABLE_FAST_JIT_PERMISSIONS and ENABLE_FTL_JIT.
2773
2774 2020-02-08  Sam Weinig  <weinig@apple.com>
2775
2776         Move trivial definitions from FeatureDefines.xcconfig to PlatformEnableCocoa.h
2777         https://bugs.webkit.org/show_bug.cgi?id=207155
2778
2779         Reviewed by Tim Horton.
2780         
2781         Move all trivial definitions (just ENABLE_FOO = ENABLE_FOO; or ENABLE_BAR = ;)
2782         from the FeatureDefines.xcconfigs to PlatformEnableCocoa.h, ensuring each one
2783         also has a default value in PlatformEnable.h
2784
2785         To support the move, DerivedSources.make has been updated to generate the list
2786         of ENABLE_* features by directly from preprocessing Platform.h, rather than 
2787         just getting the partial list from the xcconfig file.
2788
2789         * Configurations/FeatureDefines.xcconfig:
2790         * DerivedSources.make:
2791
2792 2020-02-07  Robin Morisset  <rmorisset@apple.com>
2793
2794         Throw OutOfMemory exception instead of crashing if DirectArguments/ScopedArguments can't be created
2795         https://bugs.webkit.org/show_bug.cgi?id=207423
2796
2797         Reviewed by Mark Lam.
2798
2799         AllocationFailureMode::Assert is problematic because fuzzers keep producing spurious error reports when they generate code that tries allocating infinite amount of memory.
2800         The right approach is to use AllocationFailureMode::ReturnNull, and throw a JS exception upon receiving null.
2801
2802         In this patch I fixed two functions that were using AllocationFailureMode::Assert:
2803             DirectArguments::DirectArguments::overrideThings
2804             GenericArguments<Type>::initModifiedArgumentsDescriptor
2805
2806         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).
2807
2808         * runtime/DirectArguments.h:
2809         * runtime/GenericArguments.h:
2810         * runtime/GenericArgumentsInlines.h:
2811         (JSC::GenericArguments<Type>::deletePropertyByIndex):
2812         (JSC::GenericArguments<Type>::defineOwnProperty):
2813         (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptor):
2814         (JSC::GenericArguments<Type>::initModifiedArgumentsDescriptorIfNecessary):
2815         (JSC::GenericArguments<Type>::setModifiedArgumentDescriptor):
2816         * runtime/ScopedArguments.h:
2817
2818 2020-02-07  Ryan Haddad  <ryanhaddad@apple.com>
2819
2820         Unreviewed, rolling out r256051.
2821
2822         Broke internal builds.
2823
2824         Reverted changeset:
2825
2826         "Move trivial definitions from FeatureDefines.xcconfig to
2827         PlatformEnableCocoa.h"
2828         https://bugs.webkit.org/show_bug.cgi?id=207155
2829         https://trac.webkit.org/changeset/256051
2830
2831 2020-02-07  Sam Weinig  <weinig@apple.com>
2832
2833         Move trivial definitions from FeatureDefines.xcconfig to PlatformEnableCocoa.h
2834         https://bugs.webkit.org/show_bug.cgi?id=207155
2835
2836         Reviewed by Tim Horton.
2837         
2838         Move all trivial definitions (just ENABLE_FOO = ENABLE_FOO; or ENABLE_BAR = ;)
2839         from the FeatureDefines.xcconfigs to PlatformEnableCocoa.h, ensuring each one
2840         also has a default value in PlatformEnable.h
2841
2842         To support the move, DerivedSources.make has been updated to generate the list
2843         of ENABLE_* features by directly from preprocessing Platform.h, rather than 
2844         just getting the partial list from the xcconfig file.
2845
2846         * Configurations/FeatureDefines.xcconfig:
2847         * DerivedSources.make:
2848
2849 2020-02-07  Yusuke Suzuki  <ysuzuki@apple.com>
2850
2851         [JSC] CodeBlock::shrinkToFit should shrink m_constantRegisters and m_constantsSourceCodeRepresentation in 64bit architectures
2852         https://bugs.webkit.org/show_bug.cgi?id=207356
2853
2854         Reviewed by Mark Lam.
2855
2856         Only 32bit architectures are using m_constantRegisters's address. 64bit architectures are not relying on m_constantRegisters's address.
2857         This patches fixes the thing so that CodeBlock::shrinkToFit will shrink m_constantRegisters and m_constantsSourceCodeRepresentation
2858         regardless of whether this is EarlyShrink or not. We also move DFG/FTL's LateShrink call to the place after calling DFGCommon reallyAdd
2859         since they can add more constant registers.
2860
2861         Relanding it by fixing dead-lock.
2862
2863         * bytecode/CodeBlock.cpp:
2864         (JSC::CodeBlock::shrinkToFit):
2865         * bytecode/CodeBlock.h:
2866         * dfg/DFGJITCompiler.cpp:
2867         (JSC::DFG::JITCompiler::compile):
2868         (JSC::DFG::JITCompiler::compileFunction):
2869         * dfg/DFGJITFinalizer.cpp:
2870         (JSC::DFG::JITFinalizer::finalizeCommon):
2871         * dfg/DFGPlan.cpp:
2872         (JSC::DFG::Plan::compileInThreadImpl):
2873         (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
2874         * jit/JIT.cpp:
2875         (JSC::JIT::link):
2876         * jit/JIT.h:
2877         * jit/JITInlines.h:
2878         (JSC::JIT::emitLoadDouble):
2879         (JSC::JIT::emitLoadInt32ToDouble): Deleted.
2880
2881 2020-02-06  Robin Morisset  <rmorisset@apple.com>
2882
2883         Most of B3 and Air does not need to include CCallHelpers.h
2884         https://bugs.webkit.org/show_bug.cgi?id=206975
2885
2886         Reviewed by Mark Lam.
2887
2888         They only do to use CCallHelpers::Jump or CCallHelpers::Label.
2889         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).
2890
2891         * b3/B3CheckSpecial.cpp:
2892         * b3/B3CheckSpecial.h:
2893         * b3/B3LowerMacros.cpp:
2894         * b3/B3PatchpointSpecial.cpp:
2895         (JSC::B3::PatchpointSpecial::generate):
2896         * b3/B3PatchpointSpecial.h:
2897         * b3/B3StackmapGenerationParams.cpp:
2898         (JSC::B3::StackmapGenerationParams::successorLabels const):
2899         * b3/B3StackmapGenerationParams.h:
2900         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h:
2901         * b3/air/AirCCallSpecial.cpp:
2902         * b3/air/AirCCallSpecial.h:
2903         * b3/air/AirCode.cpp:
2904         * b3/air/AirCode.h:
2905         (JSC::B3::Air::Code::entrypointLabel const):
2906         * b3/air/AirCustom.cpp:
2907         (JSC::B3::Air::CCallCustom::generate):
2908         (JSC::B3::Air::ShuffleCustom::generate):
2909         (JSC::B3::Air::WasmBoundsCheckCustom::generate):
2910         * b3/air/AirCustom.h:
2911         (JSC::B3::Air::PatchCustom::generate):
2912         (JSC::B3::Air::EntrySwitchCustom::generate):
2913         * b3/air/AirDisassembler.cpp:
2914         (JSC::B3::Air::Disassembler::addInst):
2915         * b3/air/AirDisassembler.h:
2916         * b3/air/AirGenerationContext.h:
2917         * b3/air/AirInst.h:
2918         * b3/air/AirPrintSpecial.cpp:
2919         (JSC::B3::Air::PrintSpecial::generate):
2920         * b3/air/AirPrintSpecial.h:
2921         * b3/air/AirSpecial.h:
2922         * b3/air/AirValidate.cpp:
2923         * b3/air/opcode_generator.rb:
2924
2925 2020-02-06  Commit Queue  <commit-queue@webkit.org>
2926
2927         Unreviewed, rolling out r255987.
2928         https://bugs.webkit.org/show_bug.cgi?id=207369
2929
2930         JSTests failures (Requested by yusukesuzuki on #webkit).
2931
2932         Reverted changeset:
2933
2934         "[JSC] CodeBlock::shrinkToFit should shrink
2935         m_constantRegisters and m_constantsSourceCodeRepresentation in
2936         64bit architectures"
2937         https://bugs.webkit.org/show_bug.cgi?id=207356
2938         https://trac.webkit.org/changeset/255987
2939
2940 2020-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2941
2942         [JSC] CodeBlock::shrinkToFit should shrink m_constantRegisters and m_constantsSourceCodeRepresentation in 64bit architectures
2943         https://bugs.webkit.org/show_bug.cgi?id=207356
2944
2945         Reviewed by Mark Lam.
2946
2947         Only 32bit architectures are using m_constantRegisters's address. 64bit architectures are not relying on m_constantRegisters's address.
2948         This patches fixes the thing so that CodeBlock::shrinkToFit will shrink m_constantRegisters and m_constantsSourceCodeRepresentation
2949         regardless of whether this is EarlyShrink or not. We also move DFG/FTL's LateShrink call to the place after calling DFGCommon reallyAdd
2950         since they can add more constant registers.
2951
2952         * bytecode/CodeBlock.cpp:
2953         (JSC::CodeBlock::shrinkToFit):
2954         * bytecode/CodeBlock.h:
2955         * dfg/DFGJITCompiler.cpp:
2956         (JSC::DFG::JITCompiler::compile):
2957         (JSC::DFG::JITCompiler::compileFunction):
2958         * dfg/DFGJITFinalizer.cpp:
2959         (JSC::DFG::JITFinalizer::finalizeCommon):
2960         * dfg/DFGPlan.cpp:
2961         (JSC::DFG::Plan::compileInThreadImpl):
2962         (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
2963         * jit/JIT.cpp:
2964         (JSC::JIT::link):
2965         * jit/JIT.h:
2966         * jit/JITInlines.h:
2967         (JSC::JIT::emitLoadDouble):
2968         (JSC::JIT::emitLoadInt32ToDouble): Deleted.
2969
2970 2020-02-05  Don Olmstead  <don.olmstead@sony.com>
2971
2972         [PlayStation] Build a shared JavaScriptCore
2973         https://bugs.webkit.org/show_bug.cgi?id=198446
2974
2975         Reviewed by Fujii Hironori.
2976
2977         Add TARGET_OBJECTS for bmalloc and WTF so JavaScriptCore links. Add bmalloc and
2978         WTF compile definitions so exports are exposed.
2979
2980         * PlatformPlayStation.cmake:
2981
2982 2020-02-05  Justin Michaud  <justin_michaud@apple.com>
2983
2984         Deleting a property should not turn structures into uncacheable dictionaries
2985         https://bugs.webkit.org/show_bug.cgi?id=206430
2986
2987         Reviewed by Yusuke Suzuki.
2988
2989         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:
2990
2991         1) Break the assumption that structure transition offsets increase monotonically
2992
2993         We add a new flag to tell that a structure has deleted its property, and update materializePropertyTable to use it.
2994
2995         2) Add a new transition map and transition kind for deletes
2996
2997         We cache the delete transition. We will not transition back to a previous structure if you add then immediately remove a property.
2998
2999         3) Find some heuristic for when we should actually transition to uncacheable dictionary.
3000
3001         Since deleting properties is expected to be rare, we just walk the structure list and count its size on removal. 
3002
3003         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.
3004
3005         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).
3006
3007         * heap/HeapInlines.h:
3008         (JSC::Heap::decrementDeferralDepthAndGCIfNeeded):
3009         * runtime/JSObject.cpp:
3010         (JSC::JSObject::deleteProperty):
3011         * runtime/OptionsList.h:
3012         * runtime/PropertyMapHashTable.h:
3013         (JSC::PropertyTable::get):
3014         (JSC::PropertyTable::add):
3015         (JSC::PropertyTable::addDeletedOffset):
3016         (JSC::PropertyTable::reinsert):
3017         * runtime/Structure.cpp:
3018         (JSC::StructureTransitionTable::contains const):
3019         (JSC::StructureTransitionTable::get const):
3020         (JSC::StructureTransitionTable::add):
3021         (JSC::Structure::Structure):
3022         (JSC::Structure::materializePropertyTable):
3023         (JSC::Structure::addNewPropertyTransition):
3024         (JSC::Structure::removePropertyTransition):
3025         (JSC::Structure::removePropertyTransitionFromExistingStructure):
3026         (JSC::Structure::removeNewPropertyTransition):
3027         (JSC::Structure::toUncacheableDictionaryTransition):
3028         (JSC::Structure::remove):
3029         (JSC::Structure::visitChildren):
3030         * runtime/Structure.h:
3031         * runtime/StructureInlines.h:
3032         (JSC::Structure::forEachPropertyConcurrently):
3033         (JSC::Structure::add):
3034         (JSC::Structure::remove):
3035         (JSC::Structure::removePropertyWithoutTransition):
3036         * runtime/StructureTransitionTable.h:
3037         (JSC::StructureTransitionTable::Hash::hash):
3038         * tools/JSDollarVM.cpp:
3039         (JSC::JSDollarVMHelper::functionGetStructureTransitionList):
3040         (JSC::functionGetConcurrently):
3041         (JSC::JSDollarVM::finishCreation):
3042
3043 2020-02-05  Devin Rousso  <drousso@apple.com>
3044
3045         Web Inspector: Sources: add a special breakpoint for controlling whether `debugger` statements pause
3046         https://bugs.webkit.org/show_bug.cgi?id=206818
3047
3048         Reviewed by Timothy Hatcher.
3049
3050         * inspector/protocol/Debugger.json:
3051         * inspector/agents/InspectorDebuggerAgent.h:
3052         * inspector/agents/InspectorDebuggerAgent.cpp:
3053         (Inspector::InspectorDebuggerAgent::setPauseOnDebuggerStatements): Added.
3054
3055         * bytecompiler/NodesCodegen.cpp:
3056         (JSC::DebuggerStatementNode::emitBytecode):
3057         * bytecode/CodeBlock.cpp:
3058         (JSC::CodeBlock::finishCreation):
3059         * bytecode/UnlinkedCodeBlock.cpp:
3060         (JSC::dumpLineColumnEntry):
3061         * interpreter/Interpreter.h:
3062         * interpreter/Interpreter.cpp:
3063         (JSC::Interpreter::debug):
3064         (WTF::printInternal):
3065         * debugger/Debugger.h:
3066         (JSC::Debugger::setPauseOnDebuggerStatements): Added.
3067         * debugger/Debugger.cpp:
3068         (JSC::Debugger::didReachDebuggerStatement): Added.
3069         (JSC::Debugger::didReachBreakpoint): Deleted.
3070         Replace `DebugHookType::DidReachBreakpoint` with `DebugHookType::DidReachDebuggerStatement`,
3071         as it is only actually used for `debugger;` statements, not breakpoints.
3072
3073 2020-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
3074
3075         [JSC] Structure::setMaxOffset and setTransitionOffset are racy
3076         https://bugs.webkit.org/show_bug.cgi?id=207249
3077
3078         Reviewed by Mark Lam.
3079
3080         We hit crash in JSTests/stress/array-slice-osr-exit-2.js. The situation is following.
3081
3082             1. The mutator thread (A) is working.
3083             2. The concurrent collector (B) is working.
3084             3. A attempts to set m_maxOffset in StructureRareData by allocating it. First, A sets Structure::m_maxOffset to useRareDataFlag.
3085             3. B is in JSObject::visitButterflyImpl, and executing Structure::maxOffset().
3086             4. B detects that m_maxOffset is useRareDataFlag.
3087             5. B attempts to load rareData, but this is not a StructureRareData since A is just now setting up StructureRareData.
3088             6. B crashes.
3089
3090         Set useRareDataFlag after StructureRareData is set. Ensuring this store-order by using storeStoreFence.
3091
3092         * runtime/Structure.h:
3093
3094 2020-02-04  Adrian Perez de Castro  <aperez@igalia.com>
3095
3096         Non-unified build fixes early February 2020 edition
3097         https://bugs.webkit.org/show_bug.cgi?id=207227
3098
3099         Reviewed by Don Olmstead.
3100
3101         * bytecode/PolyProtoAccessChain.h: Add missing inclusions of StructureIDTable.h and VM.h
3102
3103 2020-02-04  Alex Christensen  <achristensen@webkit.org>
3104
3105         Fix Mac CMake build
3106         https://bugs.webkit.org/show_bug.cgi?id=207231
3107
3108         * PlatformMac.cmake:
3109
3110 2020-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
3111
3112         [JSC] Use PackedRefPtr in UnlinkedCodeBlock
3113         https://bugs.webkit.org/show_bug.cgi?id=207229
3114
3115         Reviewed by Mark Lam.
3116
3117         Use PackedRefPtr in UnlinkedCodeBlock to compact it from 168 to 160, which saves 16 bytes (10%) per UnlinkedCodeBlock since
3118         we have 16 bytes alignment for GC cells.
3119
3120         * bytecode/UnlinkedCodeBlock.h:
3121         (JSC::UnlinkedCodeBlock::sourceURLDirective const):
3122         (JSC::UnlinkedCodeBlock::sourceMappingURLDirective const):
3123         (JSC::UnlinkedCodeBlock::setSourceURLDirective):
3124         (JSC::UnlinkedCodeBlock::setSourceMappingURLDirective):
3125         * runtime/CachedTypes.cpp:
3126         (JSC::CachedCodeBlock::sourceURLDirective const):
3127         (JSC::CachedCodeBlock::sourceMappingURLDirective const):
3128         (JSC::CachedCodeBlock<CodeBlockType>::encode):
3129         * runtime/CodeCache.cpp:
3130         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
3131
3132 2020-02-04  Alexey Shvayka  <shvaikalesh@gmail.com>
3133
3134         Quantifiers after lookahead assertions should be syntax errors in Unicode patterns only
3135         https://bugs.webkit.org/show_bug.cgi?id=206988
3136
3137         Reviewed by Darin Adler and Ross Kirsling.
3138
3139         This change adds SyntaxError for quantifiable assertions in Unicode patterns,
3140         aligning JSC with V8 and SpiderMonkey.
3141
3142         Grammar: https://tc39.es/ecma262/#prod-annexB-Term
3143         (/u flag precludes the use of QuantifiableAssertion)
3144
3145         Return value of parseParenthesesEnd() now matches with parseEscape() and
3146         parseAtomEscape().
3147
3148         * yarr/YarrParser.h:
3149         (JSC::Yarr::Parser::parseParenthesesBegin):
3150         (JSC::Yarr::Parser::parseParenthesesEnd):
3151         (JSC::Yarr::Parser::parseTokens):
3152
3153 2020-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
3154
3155         [JSC] Introduce UnlinkedCodeBlockGenerator and reduce sizeof(UnlinkedCodeBlock)
3156         https://bugs.webkit.org/show_bug.cgi?id=207087
3157
3158         Reviewed by Tadeu Zagallo.
3159
3160         While UnlinkedCodeBlock is immutable once it is created from BytecodeGenerator, it has many mutable Vectors.
3161         This is because we are using UnlinkedCodeBlock as a builder of UnlinkedCodeBlock itself too in BytecodeGenerator.
3162         Since Vector takes 16 bytes to allow efficient expansions, it is nice if we can use RefCountedArray instead when
3163         we know this Vector is immutable.
3164
3165         In this patch, we introduce UnlinkedCodeBlockGenerator wrapper. BytecodeGenerator, BytecodeRewriter, BytecodeDumper,
3166         and BytecodeGeneratorification interact with UnlinkedCodeBlockGenerator instead of UnlinkedCodeBlock. And UnlinkedCodeBlockGenerator
3167         will generate the finalized UnlinkedCodeBlock. This design allows us to use RefCountedArray for data in UnlinkedCodeBlock,
3168         which is (1) smaller and (2) doing shrinkToFit operation when creating it from Vector.
3169
3170         This patch reduces sizeof(UnlinkedCodeBlock) from 256 to 168, 88 bytes reduction.
3171
3172         * JavaScriptCore.xcodeproj/project.pbxproj:
3173         * Sources.txt:
3174         * bytecode/BytecodeBasicBlock.cpp:
3175         (JSC::BytecodeBasicBlock::compute):
3176         * bytecode/BytecodeBasicBlock.h:
3177         * bytecode/BytecodeDumper.cpp:
3178         * bytecode/BytecodeGeneratorification.cpp:
3179         (JSC::BytecodeGeneratorification::BytecodeGeneratorification):
3180         (JSC::GeneratorLivenessAnalysis::run):
3181         (JSC::BytecodeGeneratorification::run):
3182         (JSC::performGeneratorification):
3183         * bytecode/BytecodeGeneratorification.h:
3184         * bytecode/BytecodeRewriter.h:
3185         (JSC::BytecodeRewriter::BytecodeRewriter):
3186         * bytecode/CodeBlock.cpp:
3187         (JSC::CodeBlock::finishCreation):
3188         (JSC::CodeBlock::setConstantIdentifierSetRegisters):
3189         (JSC::CodeBlock::setConstantRegisters):
3190         (JSC::CodeBlock::handlerForIndex):
3191         (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
3192         * bytecode/CodeBlock.h:
3193         (JSC::CodeBlock::numberOfSwitchJumpTables const):
3194         (JSC::CodeBlock::numberOfStringSwitchJumpTables const):
3195         (JSC::CodeBlock::addSwitchJumpTable): Deleted.
3196         (JSC::CodeBlock::addStringSwitchJumpTable): Deleted.
3197         * bytecode/HandlerInfo.h:
3198         (JSC::HandlerInfoBase::handlerForIndex):
3199         * bytecode/JumpTable.h:
3200         (JSC::SimpleJumpTable::add): Deleted.
3201         * bytecode/PreciseJumpTargets.cpp:
3202         (JSC::computePreciseJumpTargets):
3203         (JSC::recomputePreciseJumpTargets):
3204         (JSC::findJumpTargetsForInstruction):
3205         * bytecode/PreciseJumpTargets.h:
3206         * bytecode/UnlinkedCodeBlock.cpp:
3207         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
3208         (JSC::UnlinkedCodeBlock::visitChildren):
3209         (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
3210         (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeIndex const):
3211         (JSC::UnlinkedCodeBlock::handlerForIndex):
3212         (JSC::UnlinkedCodeBlock::addExpressionInfo): Deleted.
3213         (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo): Deleted.
3214         (JSC::UnlinkedCodeBlock::setInstructions): Deleted.
3215         (JSC::UnlinkedCodeBlock::applyModification): Deleted.
3216         (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
3217         (JSC::UnlinkedCodeBlock::addOutOfLineJumpTarget): Deleted.
3218         * bytecode/UnlinkedCodeBlock.h:
3219         (JSC::UnlinkedCodeBlock::expressionInfo):
3220         (JSC::UnlinkedCodeBlock::setNumParameters):
3221         (JSC::UnlinkedCodeBlock::numberOfIdentifiers const):
3222         (JSC::UnlinkedCodeBlock::identifiers const):
3223         (JSC::UnlinkedCodeBlock::bitVector):
3224         (JSC::UnlinkedCodeBlock::constantRegisters):
3225         (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation):
3226         (JSC::UnlinkedCodeBlock::constantIdentifierSets):
3227         (JSC::UnlinkedCodeBlock::numberOfJumpTargets const):
3228         (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables const):
3229         (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables const):
3230         (JSC::UnlinkedCodeBlock::numberOfFunctionDecls):
3231         (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers const):
3232         (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets const):
3233         (JSC::UnlinkedCodeBlock::createRareDataIfNecessary):
3234         (JSC::UnlinkedCodeBlock::addParameter): Deleted.
3235         (JSC::UnlinkedCodeBlock::addIdentifier): Deleted.
3236         (JSC::UnlinkedCodeBlock::addBitVector): Deleted.
3237         (JSC::UnlinkedCodeBlock::addSetConstant): Deleted.
3238         (JSC::UnlinkedCodeBlock::addConstant): Deleted.
3239         (JSC::UnlinkedCodeBlock::addJumpTarget): Deleted.
3240         (JSC::UnlinkedCodeBlock::addSwitchJumpTable): Deleted.
3241         (JSC::UnlinkedCodeBlock::addStringSwitchJumpTable): Deleted.
3242         (JSC::UnlinkedCodeBlock::addFunctionDecl): Deleted.
3243         (JSC::UnlinkedCodeBlock::addFunctionExpr): Deleted.
3244         (JSC::UnlinkedCodeBlock::addExceptionHandler): Deleted.
3245         (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset): Deleted.
3246         (JSC::UnlinkedCodeBlock::replaceOutOfLineJumpTargets): Deleted.
3247         * bytecode/UnlinkedCodeBlockGenerator.cpp: Added.
3248         (JSC::UnlinkedCodeBlockGenerator::getLineAndColumn const):
3249         (JSC::UnlinkedCodeBlockGenerator::addExpressionInfo):
3250         (JSC::UnlinkedCodeBlockGenerator::addTypeProfilerExpressionInfo):
3251         (JSC::UnlinkedCodeBlockGenerator::finalize):
3252         (JSC::UnlinkedCodeBlockGenerator::handlerForBytecodeIndex):
3253         (JSC::UnlinkedCodeBlockGenerator::handlerForIndex):
3254         (JSC::UnlinkedCodeBlockGenerator::applyModification):
3255         (JSC::UnlinkedCodeBlockGenerator::addOutOfLineJumpTarget):
3256         (JSC::UnlinkedCodeBlockGenerator::outOfLineJumpOffset):
3257         (JSC::UnlinkedCodeBlockGenerator::dump const):
3258         * bytecode/UnlinkedCodeBlockGenerator.h: Added.
3259         (JSC::UnlinkedCodeBlockGenerator::UnlinkedCodeBlockGenerator):
3260         (JSC::UnlinkedCodeBlockGenerator::vm):
3261         (JSC::UnlinkedCodeBlockGenerator::isConstructor const):
3262         (JSC::UnlinkedCodeBlockGenerator::constructorKind const):
3263         (JSC::UnlinkedCodeBlockGenerator::superBinding const):
3264         (JSC::UnlinkedCodeBlockGenerator::scriptMode const):
3265         (JSC::UnlinkedCodeBlockGenerator::needsClassFieldInitializer const):
3266         (JSC::UnlinkedCodeBlockGenerator::isStrictMode const):
3267         (JSC::UnlinkedCodeBlockGenerator::usesEval const):
3268         (JSC::UnlinkedCodeBlockGenerator::parseMode const):
3269         (JSC::UnlinkedCodeBlockGenerator::isArrowFunction):
3270         (JSC::UnlinkedCodeBlockGenerator::derivedContextType const):
3271         (JSC::UnlinkedCodeBlockGenerator::evalContextType const):
3272         (JSC::UnlinkedCodeBlockGenerator::isArrowFunctionContext const):
3273         (JSC::UnlinkedCodeBlockGenerator::isClassContext const):
3274         (JSC::UnlinkedCodeBlockGenerator::numCalleeLocals const):
3275         (JSC::UnlinkedCodeBlockGenerator::numVars const):
3276         (JSC::UnlinkedCodeBlockGenerator::numParameters const):
3277         (JSC::UnlinkedCodeBlockGenerator::thisRegister const):
3278         (JSC::UnlinkedCodeBlockGenerator::scopeRegister const):
3279         (JSC::UnlinkedCodeBlockGenerator::wasCompiledWithDebuggingOpcodes const):
3280         (JSC::UnlinkedCodeBlockGenerator::hasCheckpoints const):
3281         (JSC::UnlinkedCodeBlockGenerator::hasTailCalls const):
3282         (JSC::UnlinkedCodeBlockGenerator::setHasCheckpoints):
3283         (JSC::UnlinkedCodeBlockGenerator::setHasTailCalls):
3284         (JSC::UnlinkedCodeBlockGenerator::setNumCalleeLocals):
3285         (JSC::UnlinkedCodeBlockGenerator::setNumVars):
3286         (JSC::UnlinkedCodeBlockGenerator::setThisRegister):
3287         (JSC::UnlinkedCodeBlockGenerator::setScopeRegister):
3288         (JSC::UnlinkedCodeBlockGenerator::setNumParameters):
3289         (JSC::UnlinkedCodeBlockGenerator::metadata):
3290         (JSC::UnlinkedCodeBlockGenerator::addOpProfileControlFlowBytecodeOffset):
3291         (JSC::UnlinkedCodeBlockGenerator::numberOfJumpTargets const):
3292         (JSC::UnlinkedCodeBlockGenerator::addJumpTarget):
3293         (JSC::UnlinkedCodeBlockGenerator::jumpTarget const):
3294         (JSC::UnlinkedCodeBlockGenerator::lastJumpTarget const):
3295         (JSC::UnlinkedCodeBlockGenerator::numberOfSwitchJumpTables const):
3296         (JSC::UnlinkedCodeBlockGenerator::addSwitchJumpTable):
3297         (JSC::UnlinkedCodeBlockGenerator::switchJumpTable):
3298         (JSC::UnlinkedCodeBlockGenerator::numberOfStringSwitchJumpTables const):
3299         (JSC::UnlinkedCodeBlockGenerator::addStringSwitchJumpTable):
3300         (JSC::UnlinkedCodeBlockGenerator::stringSwitchJumpTable):
3301         (JSC::UnlinkedCodeBlockGenerator::numberOfExceptionHandlers const):
3302         (JSC::UnlinkedCodeBlockGenerator::exceptionHandler):
3303         (JSC::UnlinkedCodeBlockGenerator::addExceptionHandler):
3304         (JSC::UnlinkedCodeBlockGenerator::bitVector):
3305         (JSC::UnlinkedCodeBlockGenerator::addBitVector):
3306         (JSC::UnlinkedCodeBlockGenerator::numberOfConstantIdentifierSets const):
3307         (JSC::UnlinkedCodeBlockGenerator::constantIdentifierSets):
3308         (JSC::UnlinkedCodeBlockGenerator::addSetConstant):
3309         (JSC::UnlinkedCodeBlockGenerator::constantRegister const):
3310         (JSC::UnlinkedCodeBlockGenerator::constantRegisters):
3311         (JSC::UnlinkedCodeBlockGenerator::getConstant const):
3312         (JSC::UnlinkedCodeBlockGenerator::constantsSourceCodeRepresentation):
3313         (JSC::UnlinkedCodeBlockGenerator::addConstant):
3314         (JSC::UnlinkedCodeBlockGenerator::addFunctionDecl):
3315         (JSC::UnlinkedCodeBlockGenerator::addFunctionExpr):
3316         (JSC::UnlinkedCodeBlockGenerator::numberOfIdentifiers const):
3317         (JSC::UnlinkedCodeBlockGenerator::identifier const):
3318         (JSC::UnlinkedCodeBlockGenerator::addIdentifier):
3319         (JSC::UnlinkedCodeBlockGenerator::outOfLineJumpOffset):
3320         (JSC::UnlinkedCodeBlockGenerator::replaceOutOfLineJumpTargets):
3321         (JSC::UnlinkedCodeBlockGenerator::metadataSizeInBytes):
3322         * bytecompiler/BytecodeGenerator.cpp:
3323         (JSC::BytecodeGenerator::generate):
3324         (JSC::BytecodeGenerator::BytecodeGenerator):
3325         (JSC::BytecodeGenerator::initializeNextParameter):
3326         (JSC::BytecodeGenerator::emitPushFunctionNameScope):
3327         (JSC::prepareJumpTableForSwitch):
3328         (JSC::ForInContext::finalize):
3329         (JSC::StructureForInContext::finalize):
3330         (JSC::IndexedForInContext::finalize):
3331         * bytecompiler/BytecodeGenerator.h:
3332         * bytecompiler/BytecodeGeneratorBaseInlines.h:
3333         (JSC::BytecodeGeneratorBase<Traits>::newRegister):
3334         (JSC::BytecodeGeneratorBase<Traits>::addVar):
3335         * runtime/CachedTypes.cpp:
3336         (JSC::CachedVector::encode):
3337         (JSC::CachedVector::decode const):
3338         * wasm/WasmFunctionCodeBlock.h:
3339         (JSC::Wasm::FunctionCodeBlock::setNumVars):
3340         (JSC::Wasm::FunctionCodeBlock::setNumCalleeLocals):
3341
3342 2020-02-04  Devin Rousso  <drousso@apple.com>
3343
3344         Web Inspector: REGRESSION(r248287): Console: function objects saved to a $n will be invoked instead of just referenced when evaluating in the Console
3345         https://bugs.webkit.org/show_bug.cgi?id=207180
3346         <rdar://problem/58860268>
3347
3348         Reviewed by Joseph Pecoraro.
3349
3350         * inspector/InjectedScriptSource.js:
3351         (CommandLineAPI):
3352         Instead of deciding whether to wrap the value given for a `$n` getter based on if the value
3353         is already a function, always wrap getter values in a function so that if the value being
3354         stored in the getter is already a function, it isn't used as the callback for the getter and
3355         therefore invoked when the getter is referenced.
3356
3357 2020-02-03  Yusuke Suzuki  <ysuzuki@apple.com>
3358
3359         [JSC] Use PackedPtr for VariableEnvironment
3360         https://bugs.webkit.org/show_bug.cgi?id=207172
3361
3362         Reviewed by Mark Lam.
3363