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