Unreviewed, build fix after r241954
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
2
3         Unreviewed, build fix after r241954
4         https://bugs.webkit.org/show_bug.cgi?id=194939
5
6         Renaming setCanAccessHeap was incomplete.
7
8         * runtime/SmallStrings.cpp:
9         (JSC::SmallStrings::initializeCommonStrings):
10         * runtime/VM.cpp:
11         (JSC::VM::~VM):
12
13 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
14
15         [JSC] SmallStringsStorage is unnecessary
16         https://bugs.webkit.org/show_bug.cgi?id=194939
17
18         Reviewed by Mark Lam.
19
20         SmallStrings hold common small JSStrings. Their underlying StringImpl is also held by SmallStringsStorage.
21         But it is duplicate since we can get StringImpl from small JSStrings. This patch removes SmallStringsStorage,
22         and get StringImpls from JSStrings if necessary.
23
24         We also add m_canAccessHeap flag to SmallStrings. At the time of VM destruction, JSStrings are destroyed when
25         VM's Heap is finalized. We must not touch JSStrings before VM's heap (and JSStrings in SmallStrings) is initialized,
26         and after VM's Heap is destroyed. We add this m_canAccessHeap flag to allow users to get StringImpl during the
27         this sensitive period. If m_canAccessHeap is false, we get StringImpl from AtomicStringImpl::add.
28
29         * runtime/SmallStrings.cpp:
30         (JSC::SmallStrings::initializeCommonStrings):
31         (JSC::SmallStrings::singleCharacterStringRep):
32         (JSC::SmallStringsStorage::rep): Deleted.
33         (JSC::SmallStringsStorage::SmallStringsStorage): Deleted.
34         (JSC::SmallStrings::createSingleCharacterString): Deleted.
35         * runtime/SmallStrings.h:
36         (JSC::SmallStrings::setCanAccessHeap):
37         * runtime/VM.cpp:
38         (JSC::VM::VM):
39         (JSC::VM::~VM):
40
41 2019-02-22  Tadeu Zagallo  <tzagallo@apple.com>
42
43         Cache CompactVariableMap::Handle instead of VariableEnvironment for UnlinkedFunctionExecutable
44         https://bugs.webkit.org/show_bug.cgi?id=194706
45
46         Reviewed by Saam Barati.
47
48         In https://bugs.webkit.org/show_bug.cgi?id=194583 we started using a
49         CompactVariableMap::Handle instead of VariableEnvironment for
50         UnlinkedFunctionExecutables, but we were creating the full environment
51         to encode the executable in the bytecode cache. This patch changes it so
52         that we cache the handle instead of the environment. This avoids duplicating
53         the VariableEnvironment whenever we have to cache two handles that point
54         to the environment.
55
56         * bytecode/UnlinkedFunctionExecutable.h:
57         * parser/VariableEnvironment.cpp:
58         (JSC::CompactVariableMap::get):
59         * parser/VariableEnvironment.h:
60         * runtime/CachedTypes.cpp:
61         (JSC::CachedCompactVariableEnvironment::encode):
62         (JSC::CachedCompactVariableEnvironment::decode const):
63         (JSC::CachedCompactVariableMapHandle::encode):
64         (JSC::CachedCompactVariableMapHandle::decode const):
65         (JSC::CachedFunctionExecutable::encode):
66         (JSC::CachedFunctionExecutable::decode const):
67         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
68
69 2019-02-21  Saam Barati  <sbarati@apple.com>
70
71         Update JSScript SPI based on feedback
72         https://bugs.webkit.org/show_bug.cgi?id=194517
73
74         Reviewed by Keith Miller.
75
76         This patch updates the JSScript SPI in the following ways:
77         - JSScript can now represent both modules and programs. This is a property
78         of the script determined during creation.
79         - JSScript now takes a sourceURL during construction. For modules, this acts
80         as the module identifier.
81         - JSScript now has SPI for writing the cache out to disk. We don't do this
82         automatically.
83         - JSScript will load the bytecode cache on creation if it exists.
84         - We retrofit these new requirements on the prior JSScript SPI that
85         we're going to remove as soon as we can: https://bugs.webkit.org/show_bug.cgi?id=194909.
86         Previous SPI assumes all JSScripts are modules. Previous SPI also assigns
87         a sourceURL to the JSScript based on what the module loader decided the
88         identifier should be. We'll remove this once we remove the old SPI.
89         
90         This patch also adds SPI to JSContext to evaluate a JSScript. For modules,
91         this is like returning the result of doing dynamic import. For programs,
92         this does normal program evaluation.
93         
94         This patch also fixes a bug in generateBytecode/generateModuleBytecode where
95         we would try to cache the bytecode even if recursivelyGenerateUnlinkedCodeBlock
96         returned null. E.g, if the script had a syntax error.
97         
98         When writing tests, I also discovered that someone previously broke
99         testapi. This patch also fixes those failures. They were broken when
100         we switched to using a testapiScripts directory to hold our test .js
101         scripts. 
102
103         * API/JSAPIGlobalObject.h:
104         * API/JSAPIGlobalObject.mm:
105         (JSC::JSAPIGlobalObject::moduleLoaderResolve):
106         (JSC::JSAPIGlobalObject::moduleLoaderFetch):
107         (JSC::JSAPIGlobalObject::loadAndEvaluateJSScriptModule):
108         * API/JSBase.cpp:
109         (JSEvaluateScriptInternal):
110         (JSEvaluateScript):
111         * API/JSBaseInternal.h: Added.
112         * API/JSContext.mm:
113         (-[JSContext evaluateScript:withSourceURL:]):
114         (-[JSContext evaluateJSScript:]):
115         * API/JSContextPrivate.h:
116         * API/JSScript.h:
117         * API/JSScript.mm:
118         (+[JSScript scriptWithSource:inVirtualMachine:]):
119         (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
120         (createError):
121         (+[JSScript scriptOfType:inVirtualMachine:withSourceURL:andSource:andBytecodeCache:error:]):
122         (+[JSScript scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error:]):
123         (-[JSScript cacheBytecodeWithError:]):
124         (-[JSScript sourceURL]):
125         (-[JSScript type]):
126         (-[JSScript jsSourceCode]):
127         (-[JSScript writeCache:]):
128         (-[JSScript setSourceURL:]):
129         (-[JSScript forceRecreateJSSourceCode]):
130         (-[JSScript writeCache]): Deleted.
131         (-[JSScript jsSourceCode:]): Deleted.
132         * API/JSScriptInternal.h:
133         * API/tests/FunctionOverridesTest.cpp:
134         (testFunctionOverrides):
135         * API/tests/testapi.c:
136         (main):
137         * API/tests/testapi.mm:
138         (tempFile):
139         (testModuleBytecodeCache):
140         (testProgramBytecodeCache):
141         (testBytecodeCacheWithSyntaxError):
142         (testProgramJSScriptException):
143         (testLoadBasicFileLegacySPI):
144         (+[JSContextMemoryMappedLoaderDelegate newContext]):
145         (-[JSContextMemoryMappedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
146         (testLoadBasicFile):
147         (+[JSContextAugmentedLoaderDelegate newContext]):
148         (-[JSContextAugmentedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
149         (testJSScriptURL):
150         (testObjectiveCAPI):
151         (testBytecodeCache): Deleted.
152         * API/tests/testapiScripts/foo.js: Added.
153         * JavaScriptCore.xcodeproj/project.pbxproj:
154         * runtime/Completion.cpp:
155         (JSC::generateBytecode):
156         (JSC::generateModuleBytecode):
157
158 2019-02-21  Mark Lam  <mark.lam@apple.com>
159
160         Add more doesGC() assertions.
161         https://bugs.webkit.org/show_bug.cgi?id=194911
162         <rdar://problem/48285723>
163
164         Reviewed by Saam Barati and Yusuke Suzuki.
165
166         * dfg/DFGOSRExit.cpp:
167         (JSC::DFG::OSRExit::compileOSRExit):
168         - Set expectDoesGC here because we no longer have to worry about missing store
169           barriers in optimized code after this point.  This will prevent false positive
170           assertion failures arising from functions called beneath compileOSRExit().
171
172         (JSC::DFG::OSRExit::compileExit):
173         - Add a comment to explain why the generated ramp needs to set expectDoesGC even
174           though compileOSRExit() also sets it.  Reason: compileOSRExit() is only called
175           for the first OSR from this code origin, the generated ramp is called for many
176           subsequents OSR exits from this code origin.
177
178         * ftl/FTLOSRExitCompiler.cpp:
179         (JSC::FTL::compileStub):
180         - Added a comment for the equivalent reason to the one above.
181
182         (JSC::FTL::compileFTLOSRExit):
183         - Set expectDoesGC here because we no longer have to worry about missing store
184           barriers in optimized code after this point.  This will prevent false positive
185           assertion failures arising from functions called beneath compileFTLOSRExit().
186
187         * heap/CompleteSubspace.cpp:
188         (JSC::CompleteSubspace::tryAllocateSlow):
189         * heap/CompleteSubspaceInlines.h:
190         (JSC::CompleteSubspace::allocateNonVirtual):
191         - assert expectDoesGC.
192
193         * heap/DeferGC.h:
194         (JSC::DeferGC::~DeferGC):
195         - assert expectDoesGC.
196         - Also added WTF_FORBID_HEAP_ALLOCATION to DeferGC, DeferGCForAWhile, and DisallowGC
197           because all 3 should be stack allocated RAII objects.
198
199         * heap/GCDeferralContext.h:
200         * heap/GCDeferralContextInlines.h:
201         (JSC::GCDeferralContext::~GCDeferralContext):
202         - Added WTF_FORBID_HEAP_ALLOCATION.
203         - assert expectDoesGC.
204
205         * heap/Heap.cpp:
206         (JSC::Heap::collectNow):
207         (JSC::Heap::collectAsync):
208         (JSC::Heap::collectSync):
209         (JSC::Heap::stopIfNecessarySlow):
210         (JSC::Heap::collectIfNecessaryOrDefer):
211         * heap/HeapInlines.h:
212         (JSC::Heap::acquireAccess):
213         (JSC::Heap::stopIfNecessary):
214         * heap/LargeAllocation.cpp:
215         (JSC::LargeAllocation::tryCreate):
216         * heap/LocalAllocatorInlines.h:
217         (JSC::LocalAllocator::allocate):
218         - conservatively assert expectDoesGC on these functions that may trigger a GC
219           though they don't always do.
220
221         * runtime/DisallowScope.h:
222         - DisallowScope should be stack allocated because it's an RAII object.
223
224         * runtime/JSCellInlines.h:
225         (JSC::tryAllocateCellHelper):
226         - Remove the expectDoesGC assertion because it is now covered by assertions in
227           CompleteSubspace, LargeAllocation, and LocalAllocator.
228
229         * runtime/RegExpMatchesArray.h:
230         (JSC::createRegExpMatchesArray):
231         - assert expectDoesGC.
232
233 2019-02-21  Yusuke Suzuki  <ysuzuki@apple.com>
234
235         [JSC] Use Fast Malloc as much as possible
236         https://bugs.webkit.org/show_bug.cgi?id=194316
237
238         Reviewed by Mark Lam.
239
240         We should use Fast Malloc as much as possible to offer the whole memory view to bmalloc.
241
242         * inspector/scripts/codegen/cpp_generator_templates.py:
243         * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
244         * inspector/scripts/tests/generic/expected/enum-values.json-result:
245         * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
246         * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
247         * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
248         * jit/ExecutableAllocator.h:
249         * jsc.cpp:
250         * runtime/JSRunLoopTimer.h:
251         * tools/VMInspector.h:
252         * wasm/WasmThunks.h:
253
254 2019-02-20  Yusuke Suzuki  <ysuzuki@apple.com>
255
256         [JSC] Remove WatchpointSet creation for SymbolTable entries if VM::canUseJIT() returns false
257         https://bugs.webkit.org/show_bug.cgi?id=194891
258
259         Reviewed by Geoffrey Garen.
260
261         WatchpointSet in SymbolTable is used to fold the value into a constant in JIT tiers. And it is
262         not useful under the non-JIT mode. This patch avoids creation of WatchpointSet in SymbolTable
263         if VM::canUseJIT() returns false.
264
265         * llint/LowLevelInterpreter32_64.asm:
266         * llint/LowLevelInterpreter64.asm:
267         * runtime/SymbolTable.cpp:
268         (JSC::SymbolTableEntry::addWatchpoint): Deleted.
269         * runtime/SymbolTable.h:
270         (JSC::SymbolTableEntry::isWatchable const):
271         (JSC::SymbolTableEntry::watchpointSet):
272
273 2019-02-20  Mark Lam  <mark.lam@apple.com>
274
275         Add code to validate expected GC activity modelled by doesGC() against what the runtime encounters.
276         https://bugs.webkit.org/show_bug.cgi?id=193938
277         <rdar://problem/47616277>
278
279         Reviewed by Michael Saboff, Saam Barati, and Robin Morisset.
280
281         In DFG::SpeculativeJIT::compile() and FTL::LowerDFGToB3::compileNode(), before
282         emitting code / B3IR for each DFG node, we emit a write to set Heap::m_expectDoesGC
283         to the value returned by doesGC() for that node.  In the runtime (i.e. in allocateCell()
284         and functions that can resolve a rope), we assert that Heap::m_expectDoesGC is
285         true.
286
287         This validation code is currently only enabled for debug builds.  It is disabled
288         for release builds by default, but it can easily be made to run on release builds
289         as well by forcing ENABLE_DFG_DOES_GC_VALIDATION to 1 in Heap.h.
290
291         To allow this validation code to run on release builds as well, the validation uses
292         RELEASE_ASSERT instead of ASSERT.
293
294         To ensure that Heap.h is #include'd for all files that needs to do this validation
295         (so that the validation code is accidentally disabled), we guard the validation
296         code with an if conditional on constexpr bool validateDFGDoesGC (instead of using
297         a #if ENABLE(DFG_DOES_GC_VALIDATION)).  This way, if Heap.h isn't #include'd, the
298         validation code will fail to build (no silent failures).
299
300         Currently, all JSC tests and Layout tests should pass with this validation enabled
301         in debug builds.  We'll only see new failures if there's a regression or if new
302         tests reveal a previously untested code path that has an undetected issue.
303
304         * dfg/DFGOSRExit.cpp:
305         (JSC::DFG::OSRExit::executeOSRExit):
306         (JSC::DFG::OSRExit::compileExit):
307         * dfg/DFGSpeculativeJIT64.cpp:
308         (JSC::DFG::SpeculativeJIT::compile):
309         * ftl/FTLLowerDFGToB3.cpp:
310         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
311         * ftl/FTLOSRExitCompiler.cpp:
312         (JSC::FTL::compileStub):
313         * heap/Heap.h:
314         (JSC::Heap::expectDoesGC const):
315         (JSC::Heap::setExpectDoesGC):
316         (JSC::Heap::addressOfExpectDoesGC):
317         * jit/JITArithmetic.cpp:
318         (JSC::JIT::emit_compareAndJump):
319         * runtime/JSCellInlines.h:
320         (JSC::tryAllocateCellHelper):
321         * runtime/JSString.h:
322         (JSC::jsSingleCharacterString):
323         (JSC::JSString::toAtomicString const):
324         (JSC::JSString::toExistingAtomicString const):
325         (JSC::JSString::value const):
326         (JSC::JSString::tryGetValue const):
327         (JSC::JSRopeString::unsafeView const):
328         (JSC::JSRopeString::viewWithUnderlyingString const):
329         (JSC::JSString::unsafeView const):
330
331 2019-02-20  Andy Estes  <aestes@apple.com>
332
333         [Xcode] Add SDKVariant.xcconfig to various Xcode projects
334         https://bugs.webkit.org/show_bug.cgi?id=194869
335
336         Rubber-stamped by Jer Noble.
337
338         * JavaScriptCore.xcodeproj/project.pbxproj:
339
340 2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>
341
342         Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
343         https://bugs.webkit.org/show_bug.cgi?id=172848
344         <rdar://problem/25709212>
345
346         Reviewed by Mark Lam.
347
348         * heap/HeapSnapshotBuilder.h:
349         * heap/HeapSnapshotBuilder.cpp:
350         Update the snapshot version. Change the node's 0 | 1 internal value
351         to be a 32bit bit flag. This is nice in that it is both compatible
352         with the previous snapshot version and the same size. We can use more
353         flags in the future.
354
355         (JSC::HeapSnapshotBuilder::json):
356         In cases where the classInfo gives us "Object" check for a better
357         class name by checking (o).__proto__.constructor.name. We avoid this
358         check in cases where (o).hasOwnProperty("constructor") which is the
359         case for most Foo.prototype objects. Otherwise this would get the
360         name of the Foo superclass for the Foo.prototype object.
361
362         * runtime/JSObject.cpp:
363         (JSC::JSObject::calculatedClassName):
364         Handle some possible edge cases that were not handled before, such as
365         a JSObject without a GlobalObject or an object which doesn't
366         have a default getPrototype. Try to make the code a little clearer.
367
368 2019-02-19  Truitt Savell  <tsavell@apple.com>
369
370         Unreviewed, rolling out r241784.
371
372         Broke all OpenSource builds.
373
374         Reverted changeset:
375
376         "Web Inspector: Improve ES6 Class instances in Heap Snapshot
377         instances view"
378         https://bugs.webkit.org/show_bug.cgi?id=172848
379         https://trac.webkit.org/changeset/241784
380
381 2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>
382
383         Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
384         https://bugs.webkit.org/show_bug.cgi?id=172848
385         <rdar://problem/25709212>
386
387         Reviewed by Mark Lam.
388
389         * heap/HeapSnapshotBuilder.h:
390         * heap/HeapSnapshotBuilder.cpp:
391         Update the snapshot version. Change the node's 0 | 1 internal value
392         to be a 32bit bit flag. This is nice in that it is both compatible
393         with the previous snapshot version and the same size. We can use more
394         flags in the future.
395
396         (JSC::HeapSnapshotBuilder::json):
397         In cases where the classInfo gives us "Object" check for a better
398         class name by checking (o).__proto__.constructor.name. We avoid this
399         check in cases where (o).hasOwnProperty("constructor") which is the
400         case for most Foo.prototype objects. Otherwise this would get the
401         name of the Foo superclass for the Foo.prototype object.
402
403         * runtime/JSObject.cpp:
404         (JSC::JSObject::calculatedClassName):
405         Handle some possible edge cases that were not handled before, such as
406         a JSObject without a GlobalObject or an object which doesn't
407         have a default getPrototype. Try to make the code a little clearer.
408
409 2019-02-19  Robin Morisset  <rmorisset@apple.com>
410
411         B3-O2 incorrectly optimizes this subtest
412         https://bugs.webkit.org/show_bug.cgi?id=194625
413
414         Reviewed by Saam Barati.
415
416         Trivial fix. Instead of doing
417             if (!cond) foo else bar => if (cond) bar else foo
418         B3LowerToAir was doing
419             if (x^C) foo else bar => if (cond) bar else foo whenever C&1, even if C was for example 3.
420
421         * b3/B3LowerToAir.cpp:
422         * b3/testb3.cpp:
423         (JSC::B3::testBitNotOnBooleanAndBranch32):
424         (JSC::B3::testNotOnBooleanAndBranch32): Added.
425
426 2019-02-19  Robin Morisset  <rmorisset@apple.com>
427
428         CachedCall should not consider it UNLIKELY that it will not stack overflow
429         https://bugs.webkit.org/show_bug.cgi?id=194831
430
431         Reviewed by Mark Lam.
432
433         * interpreter/CachedCall.h:
434         (JSC::CachedCall::CachedCall):
435
436 2019-02-19  Mark Lam  <mark.lam@apple.com>
437
438         Fix DFG doesGC() for TryGetById and ProfileType nodes.
439         https://bugs.webkit.org/show_bug.cgi?id=194821
440         <rdar://problem/48206690>
441
442         Reviewed by Saam Barati.
443
444         Fix doesGC() for the following nodes:
445
446             ProfileType:
447                 calls operationProcessTypeProfilerLogDFG(), which can calculatedClassName(),
448                 which can call JSString::tryGetValue(), which can resolve a rope.
449
450             TryGetById:
451                 calls operationTryGetByIdOptimize(), which can startWatchingPropertyForReplacements()
452                 on a structure, which can allocate StructureRareData.
453
454         * dfg/DFGDoesGC.cpp:
455         (JSC::DFG::doesGC):
456
457 2019-02-18  Yusuke Suzuki  <ysuzuki@apple.com>
458
459         [JSC] Introduce JSNonDestructibleProxy for JavaScriptCore.framework's GlobalThis
460         https://bugs.webkit.org/show_bug.cgi?id=194799
461
462         Reviewed by Saam Barati.
463
464         JSProxy is destructible one because we have JSWindowProxy which has ref counted object.
465         However, JavaScriptCore.framework's JSProxy for GlobalThis does not need to be destructible.
466         This is important since we need to separate Heap subspaces between destructible and non-destructible objects.
467         If we can put more and more objects in non-destructible status, we can get rid of low-usage MarkedBlock.
468         This patch adds JSNonDestructibleProxy, which is not destructible JSProxy. While it inherits JSDestructibleObject,
469         we can make the subclass still non-destructible thanks to Subspace mechanism. This drops one more low-usage MarkedBlock.
470
471         * CMakeLists.txt:
472         * JavaScriptCore.xcodeproj/project.pbxproj:
473         * Sources.txt:
474         * runtime/JSGlobalObject.cpp:
475         (JSC::JSGlobalObject::resetPrototype):
476         (JSC::JSGlobalObject::finishCreation):
477         * runtime/JSNonDestructibleProxy.cpp: Added.
478         * runtime/JSNonDestructibleProxy.h: Added.
479         (JSC::JSNonDestructibleProxy::subspaceFor):
480         (JSC::JSNonDestructibleProxy::create):
481         (JSC::JSNonDestructibleProxy::createStructure):
482         (JSC::JSNonDestructibleProxy::JSNonDestructibleProxy):
483         * runtime/JSProxy.h:
484         (JSC::JSProxy::JSProxy):
485
486 2019-02-19  Robin Morisset  <rmorisset@apple.com>
487
488         B3ReduceStrength::simplifyCFG() could do a lot more on each iteration
489         https://bugs.webkit.org/show_bug.cgi?id=194475
490
491         Reviewed by Saam Barati.
492
493         B3ReduceStrength::simplifyCFG() does three optimizations (which I will call A, B and C):
494         - A makes any terminal that points to a block that is empty except for a jump point to that jump's target instead.
495         - B transforms any branch or switch that points to a single block into a jump
496         - C finds blocks ending with jumps, whose successor has a single predecessor, and inline that successor block in place of the jump
497
498         It currently is limited in the following way:
499         - A and C can only fire once per block per iteration
500         - B can create jumps that would trigger A, but they may not be seen until the next iteration
501
502         Both problems are mitigated by going through the blocks in post-order, so that when a block is optimized most of its successors have already been optimized.
503         In a sense it is the symmetric of the peephole optimizer that goes in pre-order so that when an instruction is optimized most of its children have already been optimized.
504
505         On JetStream2 it reduces the average number of iterations from 3.35 to 3.24.
506
507         * b3/B3ReduceStrength.cpp:
508
509 2019-02-19  Tadeu Zagallo  <tzagallo@apple.com>
510
511         Move bytecode cache-related filesystem code out of CodeCache
512         https://bugs.webkit.org/show_bug.cgi?id=194675
513
514         Reviewed by Saam Barati.
515
516         The code is only used for the bytecode-cache tests, so it should live in
517         jsc.cpp rather than in the CodeCache. The logic now lives in ShellSourceProvider,
518         which overrides the a virtual method in SourceProvider, `cacheBytecode`,
519         in order to write the cache to disk.
520
521         * jsc.cpp:
522         (ShellSourceProvider::create):
523         (ShellSourceProvider::~ShellSourceProvider):
524         (ShellSourceProvider::cachePath const):
525         (ShellSourceProvider::loadBytecode):
526         (ShellSourceProvider::ShellSourceProvider):
527         (jscSource):
528         (GlobalObject::moduleLoaderFetch):
529         (functionDollarEvalScript):
530         (runWithOptions):
531         * parser/SourceProvider.h:
532         (JSC::SourceProvider::cacheBytecode const):
533         * runtime/CodeCache.cpp:
534         (JSC::writeCodeBlock):
535         * runtime/CodeCache.h:
536         (JSC::CodeCacheMap::fetchFromDiskImpl):
537
538 2019-02-18  Dominik Infuehr  <dinfuehr@igalia.com>
539
540         [ARM] Fix crash with sampling profiler
541         https://bugs.webkit.org/show_bug.cgi?id=194772
542
543         Reviewed by Mark Lam.
544
545         sampling-profiler-richards.js was crashing with an enabled sampling profiler. add32
546         did not update the stack pointer in a single instruction. The src register was first
547         moved into the stack pointer, the immediate imm was added in a subsequent instruction.
548
549         This was problematic when a signal handler was invoked before applying the immediate,
550         when the stack pointer is still set to the temporary value. Avoid this by calculating src+imm in
551         a temporary register and then move it in one go into the stack pointer.
552
553         * assembler/MacroAssemblerARMv7.h:
554         (JSC::MacroAssemblerARMv7::add32):
555
556 2019-02-18  Mark Lam  <mark.lam@apple.com>
557
558         Fix DFG doesGC() for CompareEq/Less/LessEq/Greater/GreaterEq and CompareStrictEq nodes.
559         https://bugs.webkit.org/show_bug.cgi?id=194800
560         <rdar://problem/48183773>
561
562         Reviewed by Yusuke Suzuki.
563
564         Fix doesGC() for the following nodes:
565
566             CompareEq:
567             CompareLess:
568             CompareLessEq:
569             CompareGreater:
570             CompareGreaterEq:
571             CompareStrictEq:
572                 Only return false (i.e. does not GC) for child node use kinds that have
573                 been vetted to not do anything that can GC.  For all other use kinds
574                 (including StringUse and BigIntUse), we return true (i.e. does GC).
575
576         * dfg/DFGDoesGC.cpp:
577         (JSC::DFG::doesGC):
578
579 2019-02-16  Darin Adler  <darin@apple.com>
580
581         Continue reducing use of String::format, now focusing on hex: "%p", "%x", etc.
582         https://bugs.webkit.org/show_bug.cgi?id=194752
583
584         Reviewed by Daniel Bates.
585
586         * heap/HeapSnapshotBuilder.cpp:
587         (JSC::HeapSnapshotBuilder::json): Added back the "0x" that was removed when changing
588         this file to use appendUnsignedAsHex instead of "%p". The intent at that time was to
589         keep behavior the same, so let's do that.
590
591         * parser/Lexer.cpp:
592         (JSC::Lexer<T>::invalidCharacterMessage const): Use makeString and hex instead of
593         String::format and "%04x".
594
595 2019-02-18  Yusuke Suzuki  <ysuzuki@apple.com>
596
597         [JSC] Add LazyClassStructure::getInitializedOnMainThread
598         https://bugs.webkit.org/show_bug.cgi?id=194784
599         <rdar://problem/48154820>
600
601         Reviewed by Mark Lam.
602
603         LazyClassStructure::get and LazyProperty::get functions do not allow compiler threads to call them. But for booleanPrototype, numberPrototype and symbolPrototype cases,
604         we would like to call them from compiler threads. We eagerly initialize them if VM::canUseJIT() is true, so that compiler threads can safely call LazyClassStructure::get
605         and LazyProperty::get for booleanPrototype, numberPrototype and symbolPrototype. But still assertion hits because the assertion requires that these functions need to be
606         called in non compiler threads. Calling `getConcurrently()` is not possible since symbolPrototype() function is called from both the main thread and compiler threads,
607         and we would like to lazily initialize SymbolPrototype object if it is called from the main thread, which can happen with non-JIT configuration.
608
609         This patch adds `getInitializedOnMainThread()`. Compiler threads can call it only when we know that the value is already initialized on the main thread. The main thread
610         can call it at anytime and this function lazily initializes the value. This is useful to make some of prototypes lazy with non-JIT configuration: With non-JIT configuration,
611         this function is always called from the main thread and it initializes the value lazily. Non-JIT configuration does not care about compiler threads since they do not exist.
612         With JIT configuration, we eagerly initialize them in JSGlobalObject::init so that `getInitializedOnMainThread()` always succeeds.
613
614         Basically, `getInitializedOnMainThread()` is `get` with different assertion location: While `get` always crashes if it is called from compiler threads, `getInitializedOnMainThread()`
615         crashes only when actual initialization happens on compiler threads. We do not merge them since `get` is still useful to find accidental initialization from compiler threads.
616
617         * runtime/JSGlobalObject.h:
618         (JSC::JSGlobalObject::booleanPrototype const):
619         (JSC::JSGlobalObject::numberPrototype const):
620         (JSC::JSGlobalObject::symbolPrototype const):
621         * runtime/LazyClassStructure.h:
622         (JSC::LazyClassStructure::getInitializedOnMainThread const):
623         (JSC::LazyClassStructure::prototypeInitializedOnMainThread const):
624         (JSC::LazyClassStructure::constructorInitializedOnMainThread const):
625         * runtime/LazyProperty.h:
626         (JSC::LazyProperty::get const):
627         (JSC::LazyProperty::getInitializedOnMainThread const):
628
629 2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>
630
631         Web Inspector: Better categorize CPU usage per-thread / worker
632         https://bugs.webkit.org/show_bug.cgi?id=194564
633
634         Reviewed by Devin Rousso.
635
636         * inspector/protocol/CPUProfiler.json:
637         Add additional properties per-Event, and new per-Thread object info.
638
639 2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>
640
641         Bytecode cache should a have a boot-specific validation
642         https://bugs.webkit.org/show_bug.cgi?id=194769
643         <rdar://problem/48149509>
644
645         Reviewed by Keith Miller.
646
647         Add the boot UUID to the cached bytecode to enforce that it is not reused
648         across reboots.
649
650         * runtime/CachedTypes.cpp:
651         (JSC::Encoder::malloc):
652         (JSC::GenericCacheEntry::GenericCacheEntry):
653         (JSC::GenericCacheEntry::tag const):
654         (JSC::CacheEntry::CacheEntry):
655         (JSC::CacheEntry::decode const):
656         (JSC::GenericCacheEntry::decode const):
657         (JSC::encodeCodeBlock):
658
659 2019-02-18  Eric Carlson  <eric.carlson@apple.com>
660
661         Add MSE logging configuration
662         https://bugs.webkit.org/show_bug.cgi?id=194719
663         <rdar://problem/48122151>
664
665         Reviewed by Joseph Pecoraro.
666
667         * inspector/ConsoleMessage.cpp:
668         (Inspector::messageSourceValue):
669         * inspector/protocol/Console.json:
670         * inspector/scripts/codegen/generator.py:
671         * runtime/ConsoleTypes.h:
672
673 2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>
674
675         Add version number to cached bytecode
676         https://bugs.webkit.org/show_bug.cgi?id=194768
677         <rdar://problem/48147968>
678
679         Reviewed by Saam Barati.
680
681         Add a version number to the bytecode cache that should be unique per build.
682
683         * CMakeLists.txt:
684         * DerivedSources-output.xcfilelist:
685         * DerivedSources.make:
686         * runtime/CachedTypes.cpp:
687         (JSC::Encoder::malloc):
688         (JSC::GenericCacheEntry::GenericCacheEntry):
689         (JSC::CacheEntry::CacheEntry):
690         (JSC::CacheEntry::encode):
691         (JSC::CacheEntry::decode const):
692         (JSC::GenericCacheEntry::decode const):
693         (JSC::decodeCodeBlockImpl):
694         * runtime/CodeCache.h:
695         (JSC::CodeCacheMap::fetchFromDiskImpl):
696
697 2019-02-17  Saam Barati  <sbarati@apple.com>
698
699         WasmB3IRGenerator models some effects incorrectly
700         https://bugs.webkit.org/show_bug.cgi?id=194038
701
702         Reviewed by Keith Miller.
703
704         * wasm/WasmB3IRGenerator.cpp:
705         (JSC::Wasm::B3IRGenerator::restoreWasmContextInstance):
706         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
707         These two functions were using global state instead of the
708         arguments passed into the function.
709
710         (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
711         (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
712         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF64>):
713         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF32>):
714         Any patchpoint that allows scratch register usage must
715         also say that it clobbers the scratch registers.
716
717 2019-02-17  Saam Barati  <sbarati@apple.com>
718
719         Deadlock when adding a Structure property transition and then doing incremental marking
720         https://bugs.webkit.org/show_bug.cgi?id=194767
721
722         Reviewed by Mark Lam.
723
724         This can happen in the following scenario:
725         
726         You have a Structure S. S is on the mark stack. Then:
727         1. S grabs its lock
728         2. S adds a new property transition
729         3. We find out we need to do some incremental marking
730         4. We mark S
731         5. visitChildren on S will try to grab its lock
732         6. We are now in a deadlock
733
734         * heap/Heap.cpp:
735         (JSC::Heap::performIncrement):
736         * runtime/Structure.cpp:
737         (JSC::Structure::addNewPropertyTransition):
738
739 2019-02-17  David Kilzer  <ddkilzer@apple.com>
740
741         Unreviewed, rolling out r241620.
742
743         "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
744         (Requested by ddkilzer on #webkit.)
745
746         Reverted changeset:
747
748         "[WTF] Add environment variable helpers"
749         https://bugs.webkit.org/show_bug.cgi?id=192405
750         https://trac.webkit.org/changeset/241620
751
752 2019-02-17  Commit Queue  <commit-queue@webkit.org>
753
754         Unreviewed, rolling out r241612.
755         https://bugs.webkit.org/show_bug.cgi?id=194762
756
757         "It regressed JetStream2 parsing tests by ~40%" (Requested by
758         saamyjoon on #webkit).
759
760         Reverted changeset:
761
762         "Move bytecode cache-related filesystem code out of CodeCache"
763         https://bugs.webkit.org/show_bug.cgi?id=194675
764         https://trac.webkit.org/changeset/241612
765
766 2019-02-16  Yusuke Suzuki  <ysuzuki@apple.com>
767
768         [JSC] JSWrapperObject should not be destructible
769         https://bugs.webkit.org/show_bug.cgi?id=194743
770
771         Reviewed by Saam Barati.
772
773         JSWrapperObject should be just a wrapper object for JSValue, thus, it should not be a JSDestructibleObject.
774         Currently it is destructible object because DateInstance uses it. This patch changes Base of DateInstance from
775         JSWrapperObject to JSDestructibleObject, and makes JSWrapperObject non-destructible.
776
777         * runtime/BigIntObject.cpp:
778         (JSC::BigIntObject::BigIntObject):
779         * runtime/BooleanConstructor.cpp:
780         (JSC::BooleanConstructor::finishCreation):
781         * runtime/BooleanObject.cpp:
782         (JSC::BooleanObject::BooleanObject):
783         * runtime/BooleanObject.h:
784         * runtime/DateInstance.cpp:
785         (JSC::DateInstance::DateInstance):
786         (JSC::DateInstance::finishCreation):
787         * runtime/DateInstance.h:
788         * runtime/DatePrototype.cpp:
789         (JSC::dateProtoFuncGetTime):
790         (JSC::dateProtoFuncSetTime):
791         (JSC::setNewValueFromTimeArgs):
792         (JSC::setNewValueFromDateArgs):
793         (JSC::dateProtoFuncSetYear):
794         * runtime/JSCPoison.h:
795         * runtime/JSWrapperObject.h:
796         (JSC::JSWrapperObject::JSWrapperObject):
797         * runtime/NumberObject.cpp:
798         (JSC::NumberObject::NumberObject):
799         * runtime/NumberObject.h:
800         * runtime/StringConstructor.cpp:
801         (JSC::StringConstructor::finishCreation):
802         * runtime/StringObject.cpp:
803         (JSC::StringObject::StringObject):
804         * runtime/StringObject.h:
805         (JSC::StringObject::internalValue const):
806         * runtime/SymbolObject.cpp:
807         (JSC::SymbolObject::SymbolObject):
808         * runtime/SymbolObject.h:
809
810 2019-02-16  Yusuke Suzuki  <ysuzuki@apple.com>
811
812         [JSC] Shrink UnlinkedFunctionExecutable
813         https://bugs.webkit.org/show_bug.cgi?id=194733
814
815         Reviewed by Mark Lam.
816
817         UnlinkedFunctionExecutable has sourceURLDirective and sourceMappingURLDirective. These
818         directives can be found in the comment of non typical function's source code (Program,
819         Eval code, and Global function from function constructor etc.), and tricky thing is that
820         SourceProvider's directives are updated by Parser. The reason why we have these fields in
821         UnlinkedFunctionExecutable is that we need to update the SourceProvider's directives even
822         if we skip parsing by using CodeCache. These fields are effective only if (1)
823         UnlinkedFunctionExecutable is for non typical function things, and (2) it has sourceURLDirective
824         or sourceMappingURLDirective. This is rare enough to purge them to a separated
825         UnlinkedFunctionExecutable::RareData to make UnlinkedFunctionExecutable small.
826         sizeof(UnlinkedFunctionExecutable) is very important since it is super frequently allocated
827         cell. Furthermore, the current JSC allocates two MarkedBlocks for UnlinkedFunctionExecutable
828         in JSGlobalObject initialization, but the usage of the second MarkedBlock is quite low (8%).
829         If we can reduce the size of UnlinkedFunctionExecutable, we can make them one MarkedBlock.
830         Since UnlinkedFunctionExecutable is allocated from IsoSubspace, we do not need to fit it to
831         one of size class.
832
833         This patch adds RareData to UnlinkedFunctionExecutable and move some rare datas into RareData.
834         And kill one MarkedBlock allocation in JSC initialization phase.
835
836         * bytecode/UnlinkedFunctionExecutable.cpp:
837         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
838         (JSC::UnlinkedFunctionExecutable::ensureRareDataSlow):
839         * bytecode/UnlinkedFunctionExecutable.h:
840         * debugger/DebuggerLocation.cpp:
841         (JSC::DebuggerLocation::DebuggerLocation):
842         * inspector/ScriptDebugServer.cpp:
843         (Inspector::ScriptDebugServer::dispatchDidParseSource):
844         * parser/Lexer.h:
845         (JSC::Lexer::sourceURLDirective const):
846         (JSC::Lexer::sourceMappingURLDirective const):
847         (JSC::Lexer::sourceURL const): Deleted.
848         (JSC::Lexer::sourceMappingURL const): Deleted.
849         * parser/Parser.h:
850         (JSC::Parser<LexerType>::parse):
851         * parser/SourceProvider.h:
852         (JSC::SourceProvider::sourceURLDirective const):
853         (JSC::SourceProvider::sourceMappingURLDirective const):
854         (JSC::SourceProvider::setSourceURLDirective):
855         (JSC::SourceProvider::setSourceMappingURLDirective):
856         (JSC::SourceProvider::sourceURL const): Deleted. We rename it from sourceURL to sourceURLDirective
857         since it is the correct name.
858         (JSC::SourceProvider::sourceMappingURL const): Deleted. We rename it from sourceMappingURL to
859         sourceMappingURLDirective since it is the correct name.
860         * runtime/CachedTypes.cpp:
861         (JSC::CachedSourceProviderShape::encode):
862         (JSC::CachedFunctionExecutableRareData::encode):
863         (JSC::CachedFunctionExecutableRareData::decode const): CachedFunctionExecutable did not have
864         sourceMappingURL to sourceMappingURLDirective. So this patch keeps the same logic.
865         (JSC::CachedFunctionExecutable::rareData const):
866         (JSC::CachedFunctionExecutable::encode):
867         (JSC::CachedFunctionExecutable::decode const):
868         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
869         * runtime/CodeCache.cpp:
870         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
871         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
872         * runtime/CodeCache.h:
873         (JSC::generateUnlinkedCodeBlockImpl):
874         * runtime/FunctionExecutable.h:
875         * runtime/SamplingProfiler.cpp:
876         (JSC::SamplingProfiler::StackFrame::url):
877
878 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
879
880         [JSC] Remove unused global private variables
881         https://bugs.webkit.org/show_bug.cgi?id=194741
882
883         Reviewed by Joseph Pecoraro.
884
885         There are some private functions and constants that are no longer referenced from builtin JS code.
886         This patch cleans up them.
887
888         * builtins/BuiltinNames.h:
889         * builtins/ObjectConstructor.js:
890         (entries):
891         * runtime/JSGlobalObject.cpp:
892         (JSC::JSGlobalObject::init):
893
894 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
895
896         [JSC] Lazily create empty RegExp
897         https://bugs.webkit.org/show_bug.cgi?id=194735
898
899         Reviewed by Keith Miller.
900
901         Some scripts do not have any RegExp. In that case, allocating MarkedBlock for RegExp is costly.
902         Previously, there was always one RegExp, "empty RegExp". This patch lazily creates it and drop
903         one MarkedBlock.
904
905         * runtime/JSGlobalObject.cpp:
906         (JSC::JSGlobalObject::init):
907         * runtime/RegExpCache.cpp:
908         (JSC::RegExpCache::ensureEmptyRegExpSlow):
909         (JSC::RegExpCache::initialize): Deleted.
910         * runtime/RegExpCache.h:
911         (JSC::RegExpCache::ensureEmptyRegExp):
912         (JSC::RegExpCache::emptyRegExp const): Deleted.
913         * runtime/RegExpCachedResult.cpp:
914         (JSC::RegExpCachedResult::lastResult):
915         * runtime/RegExpCachedResult.h:
916         * runtime/VM.cpp:
917         (JSC::VM::VM):
918
919 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
920
921         [JSC] Make builtin objects more lazily initialized under non-JIT mode
922         https://bugs.webkit.org/show_bug.cgi?id=194727
923
924         Reviewed by Saam Barati.
925
926         Boolean, Symbol, and Number constructors and prototypes are initialized eagerly, but this is largely
927         because concurrent compiler can touch NumberPrototype etc. when traversing object's prototypes. This
928         means that eager initialization is not necessary under non-JIT mode. While we can investigate all the
929         accesses to these prototypes from the concurrent compiler threads, this "lazily initialize under non-JIT"
930         is safe and beneficial to non-JIT mode. This patch lazily initializes them under non-JIT mode, and
931         drop some @Number references to avoid eager initialization. This removes some object allocations and 1
932         MarkedBlock allocation just for Symbols.
933
934         * runtime/JSGlobalObject.cpp:
935         (JSC::JSGlobalObject::init):
936         (JSC::JSGlobalObject::visitChildren):
937         * runtime/JSGlobalObject.h:
938         (JSC::JSGlobalObject::numberToStringWatchpoint):
939         (JSC::JSGlobalObject::booleanPrototype const):
940         (JSC::JSGlobalObject::numberPrototype const):
941         (JSC::JSGlobalObject::symbolPrototype const):
942         (JSC::JSGlobalObject::booleanObjectStructure const):
943         (JSC::JSGlobalObject::symbolObjectStructure const):
944         (JSC::JSGlobalObject::numberObjectStructure const):
945         (JSC::JSGlobalObject::stringObjectStructure const):
946
947 2019-02-15  Michael Saboff  <msaboff@apple.com>
948
949         RELEASE_ASSERT at com.apple.JavaScriptCore: JSC::jsSubstringOfResolved
950         https://bugs.webkit.org/show_bug.cgi?id=194558
951
952         Reviewed by Saam Barati.
953
954         Added an in bounds check before the read of the next character for Unicode regular expressions
955         for pattern generation that didn't already have such checks.
956
957         * yarr/YarrJIT.cpp:
958         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
959         (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
960         (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
961         (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
962
963 2019-02-15  Dean Jackson  <dino@apple.com>
964
965         Allow emulation of user gestures from Web Inspector console
966         https://bugs.webkit.org/show_bug.cgi?id=194725
967         <rdar://problem/48126604>
968
969         Reviewed by Joseph Pecoraro and Devin Rousso.
970
971         * inspector/agents/InspectorRuntimeAgent.cpp: Add a new optional parameter, emulateUserGesture,
972         to the evaluate function, and mark the function as override so that PageRuntimeAgent
973         can change the behaviour.
974         (Inspector::InspectorRuntimeAgent::evaluate):
975         * inspector/agents/InspectorRuntimeAgent.h:
976         * inspector/protocol/Runtime.json:
977
978 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
979
980         [JSC] Do not initialize Wasm related data if Wasm is not enabled
981         https://bugs.webkit.org/show_bug.cgi?id=194728
982
983         Reviewed by Mark Lam.
984
985         Under non-JIT mode, these data structures are unnecessary. Should not allocate extra memory for that.
986
987         * runtime/InitializeThreading.cpp:
988         (JSC::initializeThreading):
989         * runtime/JSLock.cpp:
990         (JSC::JSLock::didAcquireLock):
991
992 2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>
993
994         [WTF] Add environment variable helpers
995         https://bugs.webkit.org/show_bug.cgi?id=192405
996
997         Reviewed by Michael Catanzaro.
998
999         * inspector/remote/glib/RemoteInspectorGlib.cpp:
1000         (Inspector::RemoteInspector::RemoteInspector):
1001         (Inspector::RemoteInspector::start):
1002         * jsc.cpp:
1003         (startTimeoutThreadIfNeeded):
1004         * runtime/Options.cpp:
1005         (JSC::overrideOptionWithHeuristic):
1006         (JSC::Options::overrideAliasedOptionWithHeuristic):
1007         (JSC::Options::initialize):
1008         * runtime/VM.cpp:
1009         (JSC::enableAssembler):
1010         (JSC::VM::VM):
1011         * tools/CodeProfiling.cpp:
1012         (JSC::CodeProfiling::notifyAllocator):
1013         Utilize WTF::Environment where possible.
1014
1015 2019-02-15  Mark Lam  <mark.lam@apple.com>
1016
1017         SamplingProfiler::stackTracesAsJSON() should escape strings.
1018         https://bugs.webkit.org/show_bug.cgi?id=194649
1019         <rdar://problem/48072386>
1020
1021         Reviewed by Saam Barati.
1022
1023         Ditto for TypeSet::toJSONString() and TypeSet::toJSONString().
1024
1025         * runtime/SamplingProfiler.cpp:
1026         (JSC::SamplingProfiler::stackTracesAsJSON):
1027         * runtime/TypeSet.cpp:
1028         (JSC::TypeSet::toJSONString const):
1029         (JSC::StructureShape::toJSONString const):
1030
1031 2019-02-15  Robin Morisset  <rmorisset@apple.com>
1032
1033         CodeBlock::jettison should clear related watchpoints
1034         https://bugs.webkit.org/show_bug.cgi?id=194544
1035
1036         Reviewed by Mark Lam.
1037
1038         * bytecode/CodeBlock.cpp:
1039         (JSC::CodeBlock::jettison):
1040         * dfg/DFGCommonData.h:
1041         (JSC::DFG::CommonData::clearWatchpoints): Added.
1042         * dfg/CommonData.cpp:
1043         (JSC::DFG::CommonData::clearWatchpoints): Added.
1044
1045 2019-02-15  Tadeu Zagallo  <tzagallo@apple.com>
1046
1047         Move bytecode cache-related filesystem code out of CodeCache
1048         https://bugs.webkit.org/show_bug.cgi?id=194675
1049
1050         Reviewed by Saam Barati.
1051
1052         That code is only used for the bytecode-cache tests, so it should live in
1053         jsc.cpp rather than in the CodeCache.
1054
1055         * jsc.cpp:
1056         (CliSourceProvider::create):
1057         (CliSourceProvider::~CliSourceProvider):
1058         (CliSourceProvider::cachePath const):
1059         (CliSourceProvider::loadBytecode):
1060         (CliSourceProvider::CliSourceProvider):
1061         (jscSource):
1062         (GlobalObject::moduleLoaderFetch):
1063         (functionDollarEvalScript):
1064         (runWithOptions):
1065         * parser/SourceProvider.h:
1066         (JSC::SourceProvider::cacheBytecode const):
1067         * runtime/CodeCache.cpp:
1068         (JSC::writeCodeBlock):
1069         * runtime/CodeCache.h:
1070         (JSC::CodeCacheMap::fetchFromDiskImpl):
1071
1072 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1073
1074         [JSC] DFG, FTL, and Wasm worklist creation should be fenced
1075         https://bugs.webkit.org/show_bug.cgi?id=194714
1076
1077         Reviewed by Mark Lam.
1078
1079         Let's consider about the following extreme case.
1080
1081         1. VM (A) is created.
1082         2. Another VM (B) is created on a different thread.
1083         3. (A) is being destroyed. It calls DFG::existingWorklistForIndexOrNull in a destructor.
1084         4. At the same time, (B) starts using DFG Worklist and it is instantiated in call_once.
1085         5. But (A) reads the pointer directly through DFG::existingWorklistForIndexOrNull.
1086         6. (A) sees the half-baked worklist, which may be in the middle of creation.
1087
1088         This patch puts store-store fence just before putting a pointer to a global variable.
1089         This fence is executed only three times at most, for DFG, FTL, and Wasm worklist initializations.
1090
1091         * dfg/DFGWorklist.cpp:
1092         (JSC::DFG::ensureGlobalDFGWorklist):
1093         (JSC::DFG::ensureGlobalFTLWorklist):
1094         * wasm/WasmWorklist.cpp:
1095         (JSC::Wasm::ensureWorklist):
1096
1097 2019-02-15  Commit Queue  <commit-queue@webkit.org>
1098
1099         Unreviewed, rolling out r241559 and r241566.
1100         https://bugs.webkit.org/show_bug.cgi?id=194710
1101
1102         Causes layout test crashes under GuardMalloc (Requested by
1103         ryanhaddad on #webkit).
1104
1105         Reverted changesets:
1106
1107         "[WTF] Add environment variable helpers"
1108         https://bugs.webkit.org/show_bug.cgi?id=192405
1109         https://trac.webkit.org/changeset/241559
1110
1111         "Unreviewed build fix for WinCairo Debug after r241559."
1112         https://trac.webkit.org/changeset/241566
1113
1114 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1115
1116         [JSC] Do not even allocate JIT worklists in non-JIT mode
1117         https://bugs.webkit.org/show_bug.cgi?id=194693
1118
1119         Reviewed by Mark Lam.
1120
1121         Heap always allocates JIT worklists for Baseline, DFG, and FTL. While they do not have actual threads, Worklist itself already allocates some memory.
1122         And we do not perform any GC operations that are only meaningful in JIT environment.
1123
1124         1. We add VM::canUseJIT() check in Heap's ensureXXXWorklist things to prevent them from being allocated.
1125         2. We remove DFG marking constraint in non-JIT mode.
1126         3. We do not gather conservative roots from scratch buffers under the non-JIT mode (BTW, # of scratch buffers are always zero in non-JIT mode)
1127         4. We do not visit JITStubRoutineSet.
1128         5. Align JITWorklist function names to the other worklists.
1129
1130         * dfg/DFGOSRExitPreparation.cpp:
1131         (JSC::DFG::prepareCodeOriginForOSRExit):
1132         * dfg/DFGPlan.h:
1133         * dfg/DFGWorklist.cpp:
1134         (JSC::DFG::markCodeBlocks): Deleted.
1135         * dfg/DFGWorklist.h:
1136         * heap/Heap.cpp:
1137         (JSC::Heap::completeAllJITPlans):
1138         (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):
1139         (JSC::Heap::gatherScratchBufferRoots):
1140         (JSC::Heap::removeDeadCompilerWorklistEntries):
1141         (JSC::Heap::stopThePeriphery):
1142         (JSC::Heap::suspendCompilerThreads):
1143         (JSC::Heap::resumeCompilerThreads):
1144         (JSC::Heap::addCoreConstraints):
1145         * jit/JITWorklist.cpp:
1146         (JSC::JITWorklist::existingGlobalWorklistOrNull):
1147         (JSC::JITWorklist::ensureGlobalWorklist):
1148         (JSC::JITWorklist::instance): Deleted.
1149         * jit/JITWorklist.h:
1150         * llint/LLIntSlowPaths.cpp:
1151         (JSC::LLInt::jitCompileAndSetHeuristics):
1152         * runtime/VM.cpp:
1153         (JSC::VM::~VM):
1154         (JSC::VM::gatherScratchBufferRoots):
1155         (JSC::VM::gatherConservativeRoots): Deleted.
1156         * runtime/VM.h:
1157
1158 2019-02-15  Saam barati  <sbarati@apple.com>
1159
1160         [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
1161         https://bugs.webkit.org/show_bug.cgi?id=194036
1162
1163         Reviewed by Yusuke Suzuki.
1164
1165         This patch adds a new Air-O0 backend. Air-O0 runs fewer passes and doesn't
1166         use linear scan for register allocation. Instead of linear scan, Air-O0 does
1167         mostly block-local register allocation, and it does this as it's emitting
1168         code directly. The register allocator uses liveness analysis to reduce
1169         the number of spills. Doing register allocation as we're emitting code
1170         allows us to skip editing the IR to insert spills, which saves a non trivial
1171         amount of compile time. For stack allocation, we give each Tmp its own slot.
1172         This is less than ideal. We probably want to do some trivial live range analysis
1173         in the future. The reason this isn't a deal breaker for Wasm is that this patch
1174         makes it so that we reuse Tmps as we're generating Air IR in the AirIRGenerator.
1175         Because Wasm is a stack machine, we trivially know when we kill a stack value (its last use).
1176         
1177         This patch is another 25% Wasm startup time speedup. It seems to be worth
1178         another 1% on JetStream2.
1179
1180         * JavaScriptCore.xcodeproj/project.pbxproj:
1181         * Sources.txt:
1182         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp: Added.
1183         (JSC::B3::Air::GenerateAndAllocateRegisters::GenerateAndAllocateRegisters):
1184         (JSC::B3::Air::GenerateAndAllocateRegisters::buildLiveRanges):
1185         (JSC::B3::Air::GenerateAndAllocateRegisters::insertBlocksForFlushAfterTerminalPatchpoints):
1186         (JSC::B3::Air::callFrameAddr):
1187         (JSC::B3::Air::GenerateAndAllocateRegisters::flush):
1188         (JSC::B3::Air::GenerateAndAllocateRegisters::spill):
1189         (JSC::B3::Air::GenerateAndAllocateRegisters::alloc):
1190         (JSC::B3::Air::GenerateAndAllocateRegisters::freeDeadTmpsIfNeeded):
1191         (JSC::B3::Air::GenerateAndAllocateRegisters::assignTmp):
1192         (JSC::B3::Air::GenerateAndAllocateRegisters::isDisallowedRegister):
1193         (JSC::B3::Air::GenerateAndAllocateRegisters::prepareForGeneration):
1194         (JSC::B3::Air::GenerateAndAllocateRegisters::generate):
1195         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h: Added.
1196         * b3/air/AirCode.cpp:
1197         * b3/air/AirCode.h:
1198         * b3/air/AirGenerate.cpp:
1199         (JSC::B3::Air::prepareForGeneration):
1200         (JSC::B3::Air::generateWithAlreadyAllocatedRegisters):
1201         (JSC::B3::Air::generate):
1202         * b3/air/AirHandleCalleeSaves.cpp:
1203         (JSC::B3::Air::handleCalleeSaves):
1204         * b3/air/AirHandleCalleeSaves.h:
1205         * b3/air/AirTmpMap.h:
1206         * runtime/Options.h:
1207         * wasm/WasmAirIRGenerator.cpp:
1208         (JSC::Wasm::AirIRGenerator::didKill):
1209         (JSC::Wasm::AirIRGenerator::newTmp):
1210         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
1211         (JSC::Wasm::parseAndCompileAir):
1212         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
1213         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
1214         * wasm/WasmAirIRGenerator.h:
1215         * wasm/WasmB3IRGenerator.cpp:
1216         (JSC::Wasm::B3IRGenerator::didKill):
1217         * wasm/WasmBBQPlan.cpp:
1218         (JSC::Wasm::BBQPlan::compileFunctions):
1219         * wasm/WasmFunctionParser.h:
1220         (JSC::Wasm::FunctionParser<Context>::parseBody):
1221         (JSC::Wasm::FunctionParser<Context>::parseExpression):
1222         * wasm/WasmValidate.cpp:
1223         (JSC::Wasm::Validate::didKill):
1224
1225 2019-02-14  Saam barati  <sbarati@apple.com>
1226
1227         lowerStackArgs should lower Lea32/64 on ARM64 to Add
1228         https://bugs.webkit.org/show_bug.cgi?id=194656
1229
1230         Reviewed by Yusuke Suzuki.
1231
1232         On arm64, Lea is just implemented as an add. However, Air treats it as an
1233         address with a given width. Because of this width, we were incorrectly
1234         computing whether or not this immediate could fit into the instruction itself
1235         or it needed to be explicitly put into a register. This patch makes
1236         AirLowerStackArgs lower Lea to Add on arm64.
1237
1238         * b3/air/AirLowerStackArgs.cpp:
1239         (JSC::B3::Air::lowerStackArgs):
1240         * b3/air/AirOpcode.opcodes:
1241         * b3/air/testair.cpp:
1242
1243 2019-02-14  Saam Barati  <sbarati@apple.com>
1244
1245         Cache the results of BytecodeGenerator::getVariablesUnderTDZ
1246         https://bugs.webkit.org/show_bug.cgi?id=194583
1247         <rdar://problem/48028140>
1248
1249         Reviewed by Yusuke Suzuki.
1250
1251         This patch makes it so that getVariablesUnderTDZ caches a result of
1252         CompactVariableMap::Handle. getVariablesUnderTDZ is costly when
1253         it's called in an environment where there are a lot of variables.
1254         This patch makes it so we cache its results. This is profitable when
1255         getVariablesUnderTDZ is called repeatedly with the same environment
1256         state. This is common since we call this every time we encounter a
1257         function definition/expression node.
1258
1259         * builtins/BuiltinExecutables.cpp:
1260         (JSC::BuiltinExecutables::createExecutable):
1261         * bytecode/UnlinkedFunctionExecutable.cpp:
1262         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
1263         * bytecode/UnlinkedFunctionExecutable.h:
1264         * bytecompiler/BytecodeGenerator.cpp:
1265         (JSC::BytecodeGenerator::popLexicalScopeInternal):
1266         (JSC::BytecodeGenerator::liftTDZCheckIfPossible):
1267         (JSC::BytecodeGenerator::pushTDZVariables):
1268         (JSC::BytecodeGenerator::getVariablesUnderTDZ):
1269         (JSC::BytecodeGenerator::restoreTDZStack):
1270         * bytecompiler/BytecodeGenerator.h:
1271         (JSC::BytecodeGenerator::makeFunction):
1272         * parser/VariableEnvironment.cpp:
1273         (JSC::CompactVariableMap::Handle::Handle):
1274         (JSC::CompactVariableMap::Handle::operator=):
1275         * parser/VariableEnvironment.h:
1276         (JSC::CompactVariableMap::Handle::operator bool const):
1277         * runtime/CodeCache.cpp:
1278         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
1279
1280 2019-02-14  Yusuke Suzuki  <ysuzuki@apple.com>
1281
1282         [JSC] Non-JIT entrypoints should share NativeJITCode per entrypoint type
1283         https://bugs.webkit.org/show_bug.cgi?id=194659
1284
1285         Reviewed by Mark Lam.
1286
1287         Non-JIT entrypoints create NativeJITCode every time it is called. But it is meaningless since these entry point code are identical.
1288         We should create one per entrypoint type (for function, we should have CodeForCall and CodeForConstruct) and continue to use them.
1289         And we use NativeJITCode instead of DirectJITCode if it does not have difference between usual entrypoint and arity check entrypoint.
1290
1291         * dfg/DFGJITCode.h:
1292         * dfg/DFGJITFinalizer.cpp:
1293         (JSC::DFG::JITFinalizer::finalize):
1294         (JSC::DFG::JITFinalizer::finalizeFunction):
1295         * jit/JITCode.cpp:
1296         (JSC::DirectJITCode::initializeCodeRefForDFG):
1297         (JSC::DirectJITCode::initializeCodeRef): Deleted.
1298         (JSC::NativeJITCode::initializeCodeRef): Deleted.
1299         * jit/JITCode.h:
1300         * llint/LLIntEntrypoint.cpp:
1301         (JSC::LLInt::setFunctionEntrypoint):
1302         (JSC::LLInt::setEvalEntrypoint):
1303         (JSC::LLInt::setProgramEntrypoint):
1304         (JSC::LLInt::setModuleProgramEntrypoint): Retagged is removed since the tag is the same.
1305
1306 2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>
1307
1308         [WTF] Add environment variable helpers
1309         https://bugs.webkit.org/show_bug.cgi?id=192405
1310
1311         Reviewed by Michael Catanzaro.
1312
1313         * inspector/remote/glib/RemoteInspectorGlib.cpp:
1314         (Inspector::RemoteInspector::RemoteInspector):
1315         (Inspector::RemoteInspector::start):
1316         * jsc.cpp:
1317         (startTimeoutThreadIfNeeded):
1318         * runtime/Options.cpp:
1319         (JSC::overrideOptionWithHeuristic):
1320         (JSC::Options::overrideAliasedOptionWithHeuristic):
1321         (JSC::Options::initialize):
1322         * runtime/VM.cpp:
1323         (JSC::enableAssembler):
1324         (JSC::VM::VM):
1325         * tools/CodeProfiling.cpp:
1326         (JSC::CodeProfiling::notifyAllocator):
1327         Utilize WTF::Environment where possible.
1328
1329 2019-02-14  Yusuke Suzuki  <ysuzuki@apple.com>
1330
1331         [JSC] Should have default NativeJITCode
1332         https://bugs.webkit.org/show_bug.cgi?id=194634
1333
1334         Reviewed by Mark Lam.
1335
1336         In JSC_useJIT=false mode, we always create identical NativeJITCode for call and construct when we create NativeExecutable.
1337         This is meaningless since we do not modify NativeJITCode after the creation. This patch adds singleton used as a default one.
1338         Since NativeJITCode (& JITCode) is ThreadSafeRefCounted, we can just share it in a whole process level. This removes 446 NativeJITCode
1339         allocations, which takes 14KB.
1340
1341         * runtime/VM.cpp:
1342         (JSC::jitCodeForCallTrampoline):
1343         (JSC::jitCodeForConstructTrampoline):
1344         (JSC::VM::getHostFunction):
1345
1346 2019-02-14  Tadeu Zagallo  <tzagallo@apple.com>
1347
1348         generateUnlinkedCodeBlockForFunctions shouldn't need to create a FunctionExecutable just to get its source code
1349         https://bugs.webkit.org/show_bug.cgi?id=194576
1350
1351         Reviewed by Saam Barati.
1352
1353         Extract a new function, `linkedSourceCode` from UnlinkedFunctionExecutable::link
1354         and use it in `generateUnlinkedCodeBlockForFunctions` instead.
1355
1356         * bytecode/UnlinkedFunctionExecutable.cpp:
1357         (JSC::UnlinkedFunctionExecutable::linkedSourceCode const):
1358         (JSC::UnlinkedFunctionExecutable::link):
1359         * bytecode/UnlinkedFunctionExecutable.h:
1360         * runtime/CodeCache.cpp:
1361         (JSC::generateUnlinkedCodeBlockForFunctions):
1362
1363 2019-02-14  Tadeu Zagallo  <tzagallo@apple.com>
1364
1365         CachedBitVector's size must be converted from bits to bytes
1366         https://bugs.webkit.org/show_bug.cgi?id=194441
1367
1368         Reviewed by Saam Barati.
1369
1370         CachedBitVector used its size in bits for memcpy. That didn't cause any
1371         issues when encoding, since the size in bits was also used in the allocation,
1372         but would overflow the actual BitVector buffer when decoding.
1373
1374         * runtime/CachedTypes.cpp:
1375         (JSC::CachedBitVector::encode):
1376         (JSC::CachedBitVector::decode const):
1377
1378 2019-02-13  Brian Burg  <bburg@apple.com>
1379
1380         Web Inspector: don't include accessibility role in DOM.Node object payloads
1381         https://bugs.webkit.org/show_bug.cgi?id=194623
1382         <rdar://problem/36384037>
1383
1384         Reviewed by Devin Rousso.
1385
1386         Remove property of DOM.Node that is no longer being sent.
1387
1388         * inspector/protocol/DOM.json:
1389
1390 2019-02-13  Keith Miller  <keith_miller@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>
1391
1392         We should only make rope strings when concatenating strings long enough.
1393         https://bugs.webkit.org/show_bug.cgi?id=194465
1394
1395         Reviewed by Mark Lam.
1396
1397         This patch stops us from allocating a rope string if the resulting
1398         rope would be smaller than the size of the JSRopeString object we
1399         would need to allocate.
1400
1401         This patch also adds paths so that we don't unnecessarily allocate
1402         JSString cells for primitives we are going to concatenate with a
1403         string anyway.
1404
1405         The important change from the previous one is that we do not apply
1406         the above rule to JSRopeStrings generated by JSStrings. If we convert
1407         it to JSString, comparison of memory consumption becomes the following,
1408         because JSRopeString does not have StringImpl until it is resolved.
1409
1410             sizeof(JSRopeString) v.s. sizeof(JSString) + sizeof(StringImpl) + content
1411
1412         Since sizeof(JSString) + sizeof(StringImpl) is larger than sizeof(JSRopeString),
1413         resolving eagerly increases memory footprint. The point is that we need to
1414         account newly created JSString and JSRopeString from the operands. This is the
1415         reason why this patch adds different thresholds for each jsString functions.
1416
1417         This patch also avoids concatenation for ropes conservatively. Many ropes are
1418         temporary cells. So we do not resolve eagerly if one of operands is already a
1419         rope.
1420
1421         In CLI execution, this change is performance neutral in JetStream2 (run 6 times, 1 for warming up and average in latter 5.).
1422
1423             Before: 159.3778
1424             After:  160.72340000000003
1425
1426         * dfg/DFGOperations.cpp:
1427         * runtime/CommonSlowPaths.cpp:
1428         (JSC::SLOW_PATH_DECL):
1429         * runtime/JSString.h:
1430         (JSC::JSString::isRope const):
1431         * runtime/Operations.cpp:
1432         (JSC::jsAddSlowCase):
1433         * runtime/Operations.h:
1434         (JSC::jsString):
1435         (JSC::jsAddNonNumber):
1436         (JSC::jsAdd):
1437
1438 2019-02-13  Saam Barati  <sbarati@apple.com>
1439
1440         AirIRGenerator::addSwitch switch patchpoint needs to model clobbering the scratch register
1441         https://bugs.webkit.org/show_bug.cgi?id=194610
1442
1443         Reviewed by Michael Saboff.
1444
1445         BinarySwitch might use the scratch register. We must model the
1446         effects of that properly. This is already caught by our br-table
1447         tests on arm64.
1448
1449         * wasm/WasmAirIRGenerator.cpp:
1450         (JSC::Wasm::AirIRGenerator::addSwitch):
1451
1452 2019-02-13  Mark Lam  <mark.lam@apple.com>
1453
1454         Create a randomized free list for new StructureIDs on StructureIDTable resize.
1455         https://bugs.webkit.org/show_bug.cgi?id=194566
1456         <rdar://problem/47975502>
1457
1458         Reviewed by Michael Saboff.
1459
1460         Also isolate 32-bit implementation of StructureIDTable out more so the 64-bit
1461         implementation is a little easier to read.
1462
1463         This patch appears to be perf neutral on JetStream2 (as run from the command line).
1464
1465         * runtime/StructureIDTable.cpp:
1466         (JSC::StructureIDTable::StructureIDTable):
1467         (JSC::StructureIDTable::makeFreeListFromRange):
1468         (JSC::StructureIDTable::resize):
1469         (JSC::StructureIDTable::allocateID):
1470         (JSC::StructureIDTable::deallocateID):
1471         * runtime/StructureIDTable.h:
1472         (JSC::StructureIDTable::get):
1473         (JSC::StructureIDTable::deallocateID):
1474         (JSC::StructureIDTable::allocateID):
1475         (JSC::StructureIDTable::flushOldTables):
1476
1477 2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>
1478
1479         VariableLengthObject::allocate<T> should initialize objects
1480         https://bugs.webkit.org/show_bug.cgi?id=194534
1481
1482         Reviewed by Michael Saboff.
1483
1484         `buffer()` should not be called for empty VariableLengthObjects, but
1485         these cases were not being caught due to the objects not being properly
1486         initialized. Fix it so that allocate calls the constructor and fix the
1487         assertion failues.
1488
1489         * runtime/CachedTypes.cpp:
1490         (JSC::CachedObject::operator new):
1491         (JSC::VariableLengthObject::allocate):
1492         (JSC::CachedVector::encode):
1493         (JSC::CachedVector::decode const):
1494         (JSC::CachedUniquedStringImpl::decode const):
1495         (JSC::CachedBitVector::encode):
1496         (JSC::CachedBitVector::decode const):
1497         (JSC::CachedArray::encode):
1498         (JSC::CachedArray::decode const):
1499         (JSC::CachedImmutableButterfly::CachedImmutableButterfly):
1500         (JSC::CachedBigInt::decode const):
1501
1502 2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>
1503
1504         CodeBlocks read from disk should not be re-written
1505         https://bugs.webkit.org/show_bug.cgi?id=194535
1506
1507         Reviewed by Michael Saboff.
1508
1509         Keep track of which CodeBlocks have been read from disk or have already
1510         been serialized in CodeCache.
1511
1512         * runtime/CodeCache.cpp:
1513         (JSC::CodeCache::write):
1514         * runtime/CodeCache.h:
1515         (JSC::SourceCodeValue::SourceCodeValue):
1516         (JSC::CodeCacheMap::fetchFromDiskImpl):
1517
1518 2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>
1519
1520         SourceCode should be copied when generating bytecode for functions
1521         https://bugs.webkit.org/show_bug.cgi?id=194536
1522
1523         Reviewed by Saam Barati.
1524
1525         The FunctionExecutable might be collected while generating the bytecode
1526         for nested functions, in which case the SourceCode reference would no
1527         longer be valid.
1528
1529         * runtime/CodeCache.cpp:
1530         (JSC::generateUnlinkedCodeBlockForFunctions):
1531
1532 2019-02-12  Saam barati  <sbarati@apple.com>
1533
1534         JSScript needs to retain its cache path NSURL*
1535         https://bugs.webkit.org/show_bug.cgi?id=194577
1536
1537         Reviewed by Tim Horton.
1538
1539         * API/JSScript.mm:
1540         (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
1541         (-[JSScript dealloc]):
1542
1543 2019-02-12  Robin Morisset  <rmorisset@apple.com>
1544
1545         Make B3Value::returnsBool() more precise
1546         https://bugs.webkit.org/show_bug.cgi?id=194457
1547
1548         Reviewed by Saam Barati.
1549
1550         It is currently used repeatedly in B3ReduceStrength, as well as once in B3LowerToAir.
1551         It has a needlessly complex rule for BitAnd, and has no rule for other easy cases such as BitOr or Select.
1552         No new tests added as this should be indirectly tested by the already existing tests.
1553
1554         * b3/B3Value.cpp:
1555         (JSC::B3::Value::returnsBool const):
1556
1557 2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>
1558
1559         Unreviewed, fix -Wimplicit-fallthrough warning after r241140
1560         https://bugs.webkit.org/show_bug.cgi?id=194399
1561         <rdar://problem/47889777>
1562
1563         * dfg/DFGDoesGC.cpp:
1564         (JSC::DFG::doesGC):
1565
1566 2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>
1567
1568         [WPE][GTK] Unsafe g_unsetenv() use in WebProcessPool::platformInitialize
1569         https://bugs.webkit.org/show_bug.cgi?id=194370
1570
1571         Reviewed by Darin Adler.
1572
1573         Change a couple WTFLogAlways to use g_warning, for good measure. Of course this isn't
1574         necessary, but it will make errors more visible.
1575
1576         * inspector/remote/glib/RemoteInspectorGlib.cpp:
1577         (Inspector::RemoteInspector::start):
1578         (Inspector::dbusConnectionCallAsyncReadyCallback):
1579         * inspector/remote/glib/RemoteInspectorServer.cpp:
1580         (Inspector::RemoteInspectorServer::start):
1581
1582 2019-02-12  Andy Estes  <aestes@apple.com>
1583
1584         [iOSMac] Enable Parental Controls Content Filtering
1585         https://bugs.webkit.org/show_bug.cgi?id=194521
1586         <rdar://39732376>
1587
1588         Reviewed by Tim Horton.
1589
1590         * Configurations/FeatureDefines.xcconfig:
1591
1592 2019-02-11  Mark Lam  <mark.lam@apple.com>
1593
1594         Randomize insertion of deallocated StructureIDs into the StructureIDTable's free list.
1595         https://bugs.webkit.org/show_bug.cgi?id=194512
1596         <rdar://problem/47975465>
1597
1598         Reviewed by Yusuke Suzuki.
1599
1600         * runtime/StructureIDTable.cpp:
1601         (JSC::StructureIDTable::StructureIDTable):
1602         (JSC::StructureIDTable::allocateID):
1603         (JSC::StructureIDTable::deallocateID):
1604         * runtime/StructureIDTable.h:
1605
1606 2019-02-10  Mark Lam  <mark.lam@apple.com>
1607
1608         Remove the RELEASE_ASSERT check for duplicate cases in the BinarySwitch constructor.
1609         https://bugs.webkit.org/show_bug.cgi?id=194493
1610         <rdar://problem/36380852>
1611
1612         Reviewed by Yusuke Suzuki.
1613
1614         Having duplicate cases in the BinarySwitch is not a correctness issue.  It is
1615         however not good for performance and memory usage.  As such, a debug ASSERT will
1616         do.  We'll also do an audit of the clients of BinarySwitch to see if it's
1617         possible to be instantiated with duplicate cases in
1618         https://bugs.webkit.org/show_bug.cgi?id=194492 later.
1619
1620         Also added some value dumps to the RELEASE_ASSERT to help debug the issue when we
1621         see duplicate cases.
1622
1623         * jit/BinarySwitch.cpp:
1624         (JSC::BinarySwitch::BinarySwitch):
1625
1626 2019-02-10  Darin Adler  <darin@apple.com>
1627
1628         Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
1629         https://bugs.webkit.org/show_bug.cgi?id=194485
1630
1631         Reviewed by Daniel Bates.
1632
1633         * heap/HeapSnapshotBuilder.cpp:
1634         (JSC::HeapSnapshotBuilder::json): Use appendUnsignedAsHex along with
1635         reinterpret_cast<uintptr_t> to replace uses of String::format with "%p".
1636
1637         * runtime/JSGlobalObjectFunctions.cpp:
1638         (JSC::encode): Removed some unneeded casts in StringBuilder code,
1639         including one in a call to appendByteAsHex.
1640         (JSC::globalFuncEscape): Ditto.
1641
1642 2019-02-10  Commit Queue  <commit-queue@webkit.org>
1643
1644         Unreviewed, rolling out r241230.
1645         https://bugs.webkit.org/show_bug.cgi?id=194488
1646
1647         "It regressed JetStream2 by ~6%" (Requested by saamyjoon on
1648         #webkit).
1649
1650         Reverted changeset:
1651
1652         "We should only make rope strings when concatenating strings
1653         long enough."
1654         https://bugs.webkit.org/show_bug.cgi?id=194465
1655         https://trac.webkit.org/changeset/241230
1656
1657 2019-02-10  Saam barati  <sbarati@apple.com>
1658
1659         BBQ-Air: Emit better code for switch
1660         https://bugs.webkit.org/show_bug.cgi?id=194053
1661
1662         Reviewed by Yusuke Suzuki.
1663
1664         Instead of emitting a linear set of jumps for Switch, this patch
1665         makes the BBQ-Air backend emit a binary switch.
1666
1667         * wasm/WasmAirIRGenerator.cpp:
1668         (JSC::Wasm::AirIRGenerator::addSwitch):
1669
1670 2019-02-09  Yusuke Suzuki  <ysuzuki@apple.com>
1671
1672         Unreviewed, Lexer should use isLatin1 implementation in WTF
1673         https://bugs.webkit.org/show_bug.cgi?id=194466
1674
1675         Follow-up after r241233 pointed by Darin.
1676
1677         * parser/Lexer.cpp:
1678         (JSC::isLatin1): Deleted.
1679
1680 2019-02-09  Darin Adler  <darin@apple.com>
1681
1682         Eliminate unnecessary String temporaries by using StringConcatenateNumbers
1683         https://bugs.webkit.org/show_bug.cgi?id=194021
1684
1685         Reviewed by Geoffrey Garen.
1686
1687         * inspector/agents/InspectorConsoleAgent.cpp:
1688         (Inspector::InspectorConsoleAgent::count): Remove String::number and let
1689         makeString do the conversion without allocating/destroying a String.
1690         * inspector/agents/InspectorDebuggerAgent.cpp:
1691         (Inspector::objectGroupForBreakpointAction): Ditto.
1692         (Inspector::InspectorDebuggerAgent::setBreakpointByUrl): Ditto.
1693         (Inspector::InspectorDebuggerAgent::setBreakpoint): Ditto.
1694         * runtime/JSGenericTypedArrayViewInlines.h:
1695         (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty): Ditto.
1696         * runtime/NumberPrototype.cpp:
1697         (JSC::numberProtoFuncToFixed): Use String::numberToStringFixedWidth instead
1698         of calling numberToFixedWidthString to do the same thing.
1699         (JSC::numberProtoFuncToPrecision): Use String::number instead of calling
1700         numberToFixedPrecisionString to do the same thing.
1701         * runtime/SamplingProfiler.cpp:
1702         (JSC::SamplingProfiler::reportTopFunctions): Ditto.
1703
1704 2019-02-09  Yusuke Suzuki  <ysuzuki@apple.com>
1705
1706         Unreviewed, rolling in r241237 again
1707         https://bugs.webkit.org/show_bug.cgi?id=194469
1708
1709         * runtime/JSString.h:
1710         (JSC::jsSubstring):
1711
1712 2019-02-09  Commit Queue  <commit-queue@webkit.org>
1713
1714         Unreviewed, rolling out r241237.
1715         https://bugs.webkit.org/show_bug.cgi?id=194474
1716
1717         Shows significant memory increase in WSL (Requested by
1718         yusukesuzuki on #webkit).
1719
1720         Reverted changeset:
1721
1722         "[WTF] Use BufferInternal StringImpl if substring StringImpl
1723         takes more memory"
1724         https://bugs.webkit.org/show_bug.cgi?id=194469
1725         https://trac.webkit.org/changeset/241237
1726
1727 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1728
1729         [WTF] Use BufferInternal StringImpl if substring StringImpl takes more memory
1730         https://bugs.webkit.org/show_bug.cgi?id=194469
1731
1732         Reviewed by Geoffrey Garen.
1733
1734         * runtime/JSString.h:
1735         (JSC::jsSubstring):
1736
1737 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1738
1739         [JSC] CachedTypes should use jsString instead of JSString::create
1740         https://bugs.webkit.org/show_bug.cgi?id=194471
1741
1742         Reviewed by Mark Lam.
1743
1744         Use jsString() here because JSString::create is a bit low-level API and it requires some invariant like "length is not zero".
1745
1746         * runtime/CachedTypes.cpp:
1747         (JSC::CachedJSValue::decode const):
1748
1749 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1750
1751         [JSC] Increase StructureIDTable initial capacity
1752         https://bugs.webkit.org/show_bug.cgi?id=194468
1753
1754         Reviewed by Mark Lam.
1755
1756         Currently, # of structures just after initializing JSGlobalObject (precisely, initializing GlobalObject in
1757         JSC shell), 281, already exceeds the current initial value 256. We should increase the capacity since
1758         unnecessary resizing requires more operations, keeps old StructureID array until GC happens, and makes
1759         more memory dirty. We also remove some structures that are no longer used.
1760
1761         * runtime/JSGlobalObject.h:
1762         (JSC::JSGlobalObject::callbackObjectStructure const):
1763         (JSC::JSGlobalObject::propertyNameIteratorStructure const): Deleted.
1764         * runtime/StructureIDTable.h:
1765         * runtime/VM.h:
1766
1767 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1768
1769         [JSC] String.fromCharCode's slow path always generates 16bit string
1770         https://bugs.webkit.org/show_bug.cgi?id=194466
1771
1772         Reviewed by Keith Miller.
1773
1774         String.fromCharCode(a1) has a fast path and the most frequently used. And String.fromCharCode(a1, a2, ...)
1775         goes to the slow path. However, in the slow path, we always create 16bit string. 16bit string takes 2x memory,
1776         and even worse, taints ropes 16bit if 16bit string is included in the given rope. We find that acorn-wtb
1777         creates very large strings multiple times with String.fromCharCode, and String.fromCharCode always produces
1778         16bit string. However, only few strings are actually 16bit strings. This patch attempts to make 8bit string
1779         as much as possible.
1780
1781         It improves non JIT acorn-wtb's peak and current memory footprint by 6% and 3% respectively.
1782
1783         * runtime/StringConstructor.cpp:
1784         (JSC::stringFromCharCode):
1785
1786 2019-02-08  Keith Miller  <keith_miller@apple.com>
1787
1788         We should only make rope strings when concatenating strings long enough.
1789         https://bugs.webkit.org/show_bug.cgi?id=194465
1790
1791         Reviewed by Saam Barati.
1792
1793         This patch stops us from allocating a rope string if the resulting
1794         rope would be smaller than the size of the JSRopeString object we
1795         would need to allocate.
1796
1797         This patch also adds paths so that we don't unnecessarily allocate
1798         JSString cells for primitives we are going to concatenate with a
1799         string anyway.
1800
1801         * dfg/DFGOperations.cpp:
1802         * runtime/CommonSlowPaths.cpp:
1803         (JSC::SLOW_PATH_DECL):
1804         * runtime/JSString.h:
1805         * runtime/Operations.cpp:
1806         (JSC::jsAddSlowCase):
1807         * runtime/Operations.h:
1808         (JSC::jsString):
1809         (JSC::jsAdd):
1810
1811 2019-02-08  Saam barati  <sbarati@apple.com>
1812
1813         Nodes that rely on being dominated by CheckInBounds should have a child edge to it
1814         https://bugs.webkit.org/show_bug.cgi?id=194334
1815         <rdar://problem/47844327>
1816
1817         Reviewed by Mark Lam.
1818
1819         * dfg/DFGAbstractInterpreterInlines.h:
1820         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1821         * dfg/DFGArgumentsEliminationPhase.cpp:
1822         * dfg/DFGByteCodeParser.cpp:
1823         (JSC::DFG::ByteCodeParser::parseBlock):
1824         * dfg/DFGClobberize.h:
1825         (JSC::DFG::clobberize):
1826         * dfg/DFGConstantFoldingPhase.cpp:
1827         (JSC::DFG::ConstantFoldingPhase::foldConstants):
1828         * dfg/DFGFixupPhase.cpp:
1829         (JSC::DFG::FixupPhase::fixupNode):
1830         (JSC::DFG::FixupPhase::convertToHasIndexedProperty):
1831         * dfg/DFGIntegerCheckCombiningPhase.cpp:
1832         (JSC::DFG::IntegerCheckCombiningPhase::handleBlock):
1833         * dfg/DFGIntegerRangeOptimizationPhase.cpp:
1834         * dfg/DFGNodeType.h:
1835         * dfg/DFGSSALoweringPhase.cpp:
1836         (JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
1837         * dfg/DFGSpeculativeJIT.cpp:
1838         (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
1839         * ftl/FTLLowerDFGToB3.cpp:
1840         (JSC::FTL::DFG::LowerDFGToB3::compileCheckInBounds):
1841         (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):
1842
1843 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1844
1845         [JSC] Shrink sizeof(CodeBlock) more
1846         https://bugs.webkit.org/show_bug.cgi?id=194419
1847
1848         Reviewed by Mark Lam.
1849
1850         This patch further shrinks the size of CodeBlock, from 352 to 296 (304).
1851
1852         1. CodeBlock copies so many data from ScriptExecutable even if ScriptExecutable
1853         has the same information. These data is not touched in CodeBlock::~CodeBlock,
1854         so we can just use the data in ScriptExecutable instead of holding it in CodeBlock.
1855
1856         2. We remove m_instructions pointer since the ownership is managed by UnlinkedCodeBlock.
1857         And we do not touch it in CodeBlock::~CodeBlock.
1858
1859         3. We move m_calleeSaveRegisters from CodeBlock to CodeBlock::JITData. For baseline and LLInt
1860         cases, this patch offers RegisterAtOffsetList::llintBaselineCalleeSaveRegisters() which returns
1861         singleton to `const RegisterAtOffsetList*` usable for LLInt and Baseline JIT CodeBlocks.
1862
1863         4. Move m_catchProfiles to RareData and materialize only when op_catch's slow path is called.
1864
1865         5. Drop ownerScriptExecutable. ownerExecutable() returns ScriptExecutable*.
1866
1867         * bytecode/CodeBlock.cpp:
1868         (JSC::CodeBlock::hash const):
1869         (JSC::CodeBlock::sourceCodeForTools const):
1870         (JSC::CodeBlock::dumpAssumingJITType const):
1871         (JSC::CodeBlock::dumpSource):
1872         (JSC::CodeBlock::CodeBlock):
1873         (JSC::CodeBlock::finishCreation):
1874         (JSC::CodeBlock::propagateTransitions):
1875         (JSC::CodeBlock::finalizeLLIntInlineCaches):
1876         (JSC::CodeBlock::setCalleeSaveRegisters):
1877         (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffset):
1878         (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffsetSlow):
1879         (JSC::CodeBlock::lineNumberForBytecodeOffset):
1880         (JSC::CodeBlock::expressionRangeForBytecodeOffset const):
1881         (JSC::CodeBlock::hasOpDebugForLineAndColumn):
1882         (JSC::CodeBlock::newReplacement):
1883         (JSC::CodeBlock::replacement):
1884         (JSC::CodeBlock::computeCapabilityLevel):
1885         (JSC::CodeBlock::jettison):
1886         (JSC::CodeBlock::calleeSaveRegisters const):
1887         (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters):
1888         (JSC::CodeBlock::updateOSRExitCounterAndCheckIfNeedToReoptimize):
1889         (JSC::CodeBlock::getArrayProfile):
1890         (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
1891         (JSC::CodeBlock::notifyLexicalBindingUpdate):
1892         (JSC::CodeBlock::tryGetValueProfileForBytecodeOffset):
1893         (JSC::CodeBlock::validate):
1894         (JSC::CodeBlock::outOfLineJumpTarget):
1895         (JSC::CodeBlock::arithProfileForBytecodeOffset):
1896         (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
1897         * bytecode/CodeBlock.h:
1898         (JSC::CodeBlock::specializationKind const):
1899         (JSC::CodeBlock::isStrictMode const):
1900         (JSC::CodeBlock::isConstructor const):
1901         (JSC::CodeBlock::codeType const):
1902         (JSC::CodeBlock::isKnownNotImmediate):
1903         (JSC::CodeBlock::instructions const):
1904         (JSC::CodeBlock::ownerExecutable const):
1905         (JSC::CodeBlock::thisRegister const):
1906         (JSC::CodeBlock::source const):
1907         (JSC::CodeBlock::sourceOffset const):
1908         (JSC::CodeBlock::firstLineColumnOffset const):
1909         (JSC::CodeBlock::createRareDataIfNecessary):
1910         (JSC::CodeBlock::ownerScriptExecutable const): Deleted.
1911         (JSC::CodeBlock::setThisRegister): Deleted.
1912         (JSC::CodeBlock::calleeSaveRegisters const): Deleted.
1913         * bytecode/EvalCodeBlock.h:
1914         * bytecode/FunctionCodeBlock.h:
1915         * bytecode/GlobalCodeBlock.h:
1916         (JSC::GlobalCodeBlock::GlobalCodeBlock):
1917         * bytecode/ModuleProgramCodeBlock.h:
1918         * bytecode/ProgramCodeBlock.h:
1919         * debugger/Debugger.cpp:
1920         (JSC::Debugger::toggleBreakpoint):
1921         * debugger/DebuggerCallFrame.cpp:
1922         (JSC::DebuggerCallFrame::sourceID const):
1923         (JSC::DebuggerCallFrame::sourceIDForCallFrame):
1924         * debugger/DebuggerScope.cpp:
1925         (JSC::DebuggerScope::location const):
1926         * dfg/DFGByteCodeParser.cpp:
1927         (JSC::DFG::ByteCodeParser::InlineStackEntry::executable):
1928         (JSC::DFG::ByteCodeParser::inliningCost):
1929         (JSC::DFG::ByteCodeParser::parseCodeBlock):
1930         * dfg/DFGCapabilities.cpp:
1931         (JSC::DFG::isSupportedForInlining):
1932         (JSC::DFG::mightCompileEval):
1933         (JSC::DFG::mightCompileProgram):
1934         (JSC::DFG::mightCompileFunctionForCall):
1935         (JSC::DFG::mightCompileFunctionForConstruct):
1936         (JSC::DFG::canUseOSRExitFuzzing):
1937         * dfg/DFGGraph.h:
1938         (JSC::DFG::Graph::executableFor):
1939         * dfg/DFGJITCompiler.cpp:
1940         (JSC::DFG::JITCompiler::compileFunction):
1941         * dfg/DFGOSREntry.cpp:
1942         (JSC::DFG::prepareOSREntry):
1943         * dfg/DFGOSRExit.cpp:
1944         (JSC::DFG::restoreCalleeSavesFor):
1945         (JSC::DFG::saveCalleeSavesFor):
1946         (JSC::DFG::saveOrCopyCalleeSavesFor):
1947         * dfg/DFGOSRExitCompilerCommon.cpp:
1948         (JSC::DFG::handleExitCounts):
1949         * dfg/DFGOperations.cpp:
1950         * dfg/DFGToFTLDeferredCompilationCallback.cpp:
1951         (JSC::DFG::ToFTLDeferredCompilationCallback::compilationDidComplete):
1952         * ftl/FTLCapabilities.cpp:
1953         (JSC::FTL::canCompile):
1954         * ftl/FTLLink.cpp:
1955         (JSC::FTL::link):
1956         * ftl/FTLOSRExitCompiler.cpp:
1957         (JSC::FTL::compileStub):
1958         * interpreter/CallFrame.cpp:
1959         (JSC::CallFrame::callerSourceOrigin):
1960         * interpreter/Interpreter.cpp:
1961         (JSC::eval):
1962         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
1963         * interpreter/StackVisitor.cpp:
1964         (JSC::StackVisitor::Frame::calleeSaveRegisters):
1965         (JSC::StackVisitor::Frame::sourceURL const):
1966         (JSC::StackVisitor::Frame::sourceID):
1967         (JSC::StackVisitor::Frame::computeLineAndColumn const):
1968         * interpreter/StackVisitor.h:
1969         * jit/AssemblyHelpers.h:
1970         (JSC::AssemblyHelpers::emitSaveCalleeSavesFor):
1971         (JSC::AssemblyHelpers::emitSaveOrCopyCalleeSavesFor):
1972         (JSC::AssemblyHelpers::emitRestoreCalleeSavesFor):
1973         * jit/CallFrameShuffleData.cpp:
1974         (JSC::CallFrameShuffleData::setupCalleeSaveRegisters):
1975         * jit/JIT.cpp:
1976         (JSC::JIT::compileWithoutLinking):
1977         * jit/JITToDFGDeferredCompilationCallback.cpp:
1978         (JSC::JITToDFGDeferredCompilationCallback::compilationDidComplete):
1979         * jit/JITWorklist.cpp:
1980         (JSC::JITWorklist::Plan::finalize):
1981         (JSC::JITWorklist::compileNow):
1982         * jit/RegisterAtOffsetList.cpp:
1983         (JSC::RegisterAtOffsetList::llintBaselineCalleeSaveRegisters):
1984         * jit/RegisterAtOffsetList.h:
1985         (JSC::RegisterAtOffsetList::at const):
1986         * runtime/ErrorInstance.cpp:
1987         (JSC::appendSourceToError):
1988         * runtime/ScriptExecutable.cpp:
1989         (JSC::ScriptExecutable::newCodeBlockFor):
1990         * runtime/StackFrame.cpp:
1991         (JSC::StackFrame::sourceID const):
1992         (JSC::StackFrame::sourceURL const):
1993         (JSC::StackFrame::computeLineAndColumn const):
1994
1995 2019-02-08  Robin Morisset  <rmorisset@apple.com>
1996
1997         B3LowerMacros wrongly sets m_changed to true in the case of AtomicWeakCAS on x86
1998         https://bugs.webkit.org/show_bug.cgi?id=194460
1999
2000         Reviewed by Mark Lam.
2001
2002         Trivial fix, should already be covered by testAtomicWeakCAS in testb3.cpp.
2003
2004         * b3/B3LowerMacros.cpp:
2005
2006 2019-02-08  Mark Lam  <mark.lam@apple.com>
2007
2008         Use maxSingleCharacterString in comparisons instead of literal constants.
2009         https://bugs.webkit.org/show_bug.cgi?id=194452
2010
2011         Reviewed by Yusuke Suzuki.
2012
2013         This way, if we ever change maxSingleCharacterString, it won't break all this code
2014         that relies on it being 0xff implicitly.
2015
2016         * dfg/DFGSpeculativeJIT.cpp:
2017         (JSC::DFG::SpeculativeJIT::compileStringSlice):
2018         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
2019         * ftl/FTLLowerDFGToB3.cpp:
2020         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
2021         (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice):
2022         * jit/ThunkGenerators.cpp:
2023         (JSC::stringGetByValGenerator):
2024         (JSC::charToString):
2025
2026 2019-02-08  Mark Lam  <mark.lam@apple.com>
2027
2028         Fix DFG's doesGC() for CheckTierUp*, GetByVal, PutByVal*, and StringCharAt nodes.
2029         https://bugs.webkit.org/show_bug.cgi?id=194446
2030         <rdar://problem/47926792>
2031
2032         Reviewed by Saam Barati.
2033
2034         Fix doesGC() for the following nodes:
2035
2036             CheckTierUpAtReturn:
2037                 Calls triggerTierUpNow(), which calls triggerFTLReplacementCompile(),
2038                 which calls Worklist::completeAllReadyPlansForVM(), which uses DeferGC.
2039
2040             CheckTierUpInLoop:
2041                 Calls triggerTierUpNowInLoop(), which calls tierUpCommon(), which calls
2042                 Worklist::completeAllReadyPlansForVM(), which uses DeferGC.
2043
2044             CheckTierUpAndOSREnter:
2045                 Calls triggerOSREntryNow(), which calls tierUpCommon(), which calls
2046                 Worklist::completeAllReadyPlansForVM(), which uses DeferGC.
2047
2048             GetByVal:
2049                 case Array::String calls operationSingleCharacterString(), which calls
2050                 jsSingleCharacterString(), which can allocate a string.
2051
2052             PutByValDirect:
2053             PutByVal:
2054             PutByValAlias:
2055                 For the DFG only, the integer TypeArrays calls compilePutByValForIntTypedArray(),
2056                 which may call slow paths operationPutByValDirectStrict(), operationPutByValDirectNonStrict(),
2057                 operationPutByValStrict(), or operationPutByValNonStrict().  All of these
2058                 slow paths call putByValInternal(), which may create exception objects, or
2059                 call the generic JSValue::put() which may execute arbitrary code.
2060
2061             StringCharAt:
2062                 Can call operationSingleCharacterString(), which calls jsSingleCharacterString(),
2063                 which can allocate a string.
2064
2065         Also fix DFG::SpeculativeJIT::compileGetByValOnString() and FTL's compileStringCharAt()
2066         to use the maxSingleCharacterString constant instead of a literal constant.
2067
2068         * dfg/DFGDoesGC.cpp:
2069         (JSC::DFG::doesGC):
2070         * dfg/DFGSpeculativeJIT.cpp:
2071         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
2072         * dfg/DFGSpeculativeJIT64.cpp:
2073         (JSC::DFG::SpeculativeJIT::compile):
2074         * ftl/FTLLowerDFGToB3.cpp:
2075         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
2076         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
2077         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
2078
2079 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
2080
2081         [JSC] SourceProviderCacheItem should be small
2082         https://bugs.webkit.org/show_bug.cgi?id=194432
2083
2084         Reviewed by Saam Barati.
2085
2086         Some JetStream2 tests stress the JS parser. At that time, so many SourceProviderCacheItems are created.
2087         While they are removed when full-GC happens, it significantly increases the peak memory usage.
2088         This patch reduces the size of SourceProviderCacheItem from 56 to 32.
2089
2090         * parser/Parser.cpp:
2091         (JSC::Parser<LexerType>::parseFunctionInfo):
2092         * parser/ParserModes.h:
2093         * parser/ParserTokens.h:
2094         * parser/SourceProviderCacheItem.h:
2095         (JSC::SourceProviderCacheItem::endFunctionToken const):
2096         (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
2097
2098 2019-02-07  Robin Morisset  <rmorisset@apple.com>
2099
2100         Fix Abs(Neg(x)) -> Abs(x) optimization in B3ReduceStrength
2101         https://bugs.webkit.org/show_bug.cgi?id=194420
2102
2103         Reviewed by Saam Barati.
2104
2105         In https://bugs.webkit.org/show_bug.cgi?id=194250, I added an optimization: Abs(Neg(x)) -> Abs(x).
2106         But I introduced two bugs, one is that I actually implemented Abs(Neg(x)) -> x, and the other is that the test is looking at Abs(Abs(x)) instead (both were stupid copy-paste mistakes).
2107         This trivial patch fixes both.
2108
2109         * b3/B3ReduceStrength.cpp:
2110         * b3/testb3.cpp:
2111         (JSC::B3::testAbsNegArg):
2112
2113 2019-02-07  Keith Miller  <keith_miller@apple.com>
2114
2115         Better error messages for module loader SPI
2116         https://bugs.webkit.org/show_bug.cgi?id=194421
2117
2118         Reviewed by Saam Barati.
2119
2120         * API/JSAPIGlobalObject.mm:
2121         (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
2122
2123 2019-02-07  Mark Lam  <mark.lam@apple.com>
2124
2125         Fix more doesGC() for CheckTraps, GetMapBucket, and Switch nodes.
2126         https://bugs.webkit.org/show_bug.cgi?id=194399
2127         <rdar://problem/47889777>
2128
2129         Reviewed by Yusuke Suzuki.
2130
2131         Fix doesGC() for the following nodes:
2132
2133             CheckTraps:
2134                 We normally will not emit this node because Options::usePollingTraps() is
2135                 false by default.  However, as it is implemented now, CheckTraps can GC
2136                 because it can allocate a TerminatedExecutionException.  If we make the
2137                 TerminatedExecutionException a singleton allocated at initialization time,
2138                 doesGC() can return false for CheckTraps.
2139                 https://bugs.webkit.org/show_bug.cgi?id=194323
2140
2141             GetMapBucket:
2142                 Can call operationJSMapFindBucket() or operationJSSetFindBucket(),
2143                 which calls HashMapImpl::findBucket(), which calls jsMapHash(), which
2144                 can resolve a rope.
2145
2146             Switch:
2147                 If switchData kind is SwitchChar, can call operationResolveRope() .
2148                 If switchData kind is SwitchString and the child use kind is not StringIdentUse,
2149                     can call operationSwitchString() which resolves ropes.
2150
2151             DirectTailCall:
2152             ForceOSRExit:
2153             Return:
2154             TailCallForwardVarargs:
2155             TailCallVarargs:
2156             Throw:
2157                 These are terminal nodes.  It shouldn't really matter what doesGC() returns
2158                 for them, but following our conservative practice, unless we have a good
2159                 reason for doesGC() to return false, we should just return true.
2160
2161         * dfg/DFGDoesGC.cpp:
2162         (JSC::DFG::doesGC):
2163
2164 2019-02-07  Robin Morisset  <rmorisset@apple.com>
2165
2166         B3ReduceStrength: missing peephole optimizations for Neg and Sub
2167         https://bugs.webkit.org/show_bug.cgi?id=194250
2168
2169         Reviewed by Saam Barati.
2170
2171         Adds the following optimizations for integers:
2172         - Sub(x, x) => 0
2173             Already covered by the test testSubArg
2174         - Sub(x1, Neg(x2)) => Add (x1, x2)
2175             Added test: testSubNeg
2176         - Neg(Sub(x1, x2)) => Sub(x2, x1)
2177             Added test: testNegSub
2178         - Add(Neg(x1), x2) => Sub(x2, x1)
2179             Added test: testAddNeg1
2180         - Add(x1, Neg(x2)) => Sub(x1, x2)
2181             Added test: testAddNeg2
2182         Adds the following optimization for floating point values:
2183         - Abs(Neg(x)) => Abs(x)
2184             Added test: testAbsNegArg
2185             Adds the following optimization:
2186
2187         Also did some trivial refactoring, using m_value->isInteger() everywhere instead of isInt(m_value->type()), and using replaceWithNew<Value> instead of replaceWithNewValue(m_proc.add<Value(..))
2188
2189         * b3/B3ReduceStrength.cpp:
2190         * b3/testb3.cpp:
2191         (JSC::B3::testAddNeg1):
2192         (JSC::B3::testAddNeg2):
2193         (JSC::B3::testSubNeg):
2194         (JSC::B3::testNegSub):
2195         (JSC::B3::testAbsAbsArg):
2196         (JSC::B3::testAbsNegArg):
2197         (JSC::B3::run):
2198
2199 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2200
2201         [JSC] Use BufferInternal single character StringImpl for SmallStrings
2202         https://bugs.webkit.org/show_bug.cgi?id=194374
2203
2204         Reviewed by Geoffrey Garen.
2205
2206         Currently, we first create a large StringImpl, and create bunch of substrings with length = 1.
2207         But pointer is larger than single character. BufferInternal StringImpl with single character
2208         is more memory efficient.
2209
2210         * runtime/SmallStrings.cpp:
2211         (JSC::SmallStringsStorage::SmallStringsStorage):
2212         (JSC::SmallStrings::SmallStrings):
2213         * runtime/SmallStrings.h:
2214
2215 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2216
2217         [JSC] InitializeEntrypointArguments should produce SpecCellCheck if FlushFormat is FlushedCell
2218         https://bugs.webkit.org/show_bug.cgi?id=194369
2219         <rdar://problem/47813087>
2220
2221         Reviewed by Saam Barati.
2222
2223         InitializeEntrypointArguments says SpecCell if the FlushFormat is FlushedCell. But this actually has
2224         JSEmpty if it is TDZ. This incorrectly proved type information removes necessary CheckNotEmpty in
2225         constant folding phase.
2226
2227         * dfg/DFGAbstractInterpreterInlines.h:
2228         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2229
2230 2019-02-06  Devin Rousso  <drousso@apple.com>
2231
2232         Web Inspector: DOM: don't send the entire function string with each event listener
2233         https://bugs.webkit.org/show_bug.cgi?id=194293
2234         <rdar://problem/47822809>
2235
2236         Reviewed by Joseph Pecoraro.
2237
2238         * inspector/protocol/DOM.json:
2239
2240         * runtime/JSFunction.h:
2241         Export `calculatedDisplayName`.
2242
2243 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2244
2245         [JSC] PrivateName to PublicName hash table is wasteful
2246         https://bugs.webkit.org/show_bug.cgi?id=194277
2247
2248         Reviewed by Michael Saboff.
2249
2250         PrivateNames account for a lot of memory in the initial JSC footprint. BuiltinNames have Identifier fields corresponding to these PrivateNames
2251         which makes the sizeof(BuiltinNames) about 6KB. It also maintains hash tables for "PublicName to PrivateName" and "PrivateName to PublicName",
2252         each of which takes 16KB memory. While "PublicName to PrivateName" functionality is used in builtin JS (parsing "@xxx" and get a private
2253         name for "xxx"), "PrivateName to PublicName" is rarely used. Holding 16KB hash table for rarely used feature is costly.
2254
2255         In this patch, we add some rules to remove "PrivateName to PublicName" hash table.
2256
2257         1. PrivateName's content should be the same to PublicName.
2258         2. If PrivateName is not actually a private name (we introduced hacky mapping like "@iteratorSymbol" => Symbol.iterator),
2259            the public name should be easily crafted from the given PrivateName.
2260
2261         We modify the content of private names to ensure (1). And for (2), we can meet this requirement by ensuring that the "@xxxSymbol"
2262         is converted to "Symbol.xxx". (1) and (2) allow us to convert a private name to a public name without a large hash table.
2263
2264         We also remove unused identifiers in CommonIdentifiers. And we also move some of them to WebCore's WebCoreBuiltinNames if it is only used in
2265         WebCore.
2266
2267         * builtins/BuiltinNames.cpp:
2268         (JSC::BuiltinNames::BuiltinNames):
2269         * builtins/BuiltinNames.h:
2270         (JSC::BuiltinNames::lookUpPrivateName const):
2271         (JSC::BuiltinNames::getPublicName const):
2272         (JSC::BuiltinNames::checkPublicToPrivateMapConsistency):
2273         (JSC::BuiltinNames::appendExternalName):
2274         (JSC::BuiltinNames::lookUpPublicName const): Deleted.
2275         * builtins/BuiltinUtils.h:
2276         * bytecode/BytecodeDumper.cpp:
2277         (JSC::BytecodeDumper<Block>::dumpIdentifiers):
2278         * bytecompiler/NodesCodegen.cpp:
2279         (JSC::BytecodeIntrinsicNode::emit_intrinsic_getByIdDirectPrivate):
2280         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
2281         * parser/Lexer.cpp:
2282         (JSC::Lexer<LChar>::parseIdentifier):
2283         (JSC::Lexer<UChar>::parseIdentifier):
2284         * parser/Parser.cpp:
2285         (JSC::Parser<LexerType>::createGeneratorParameters):
2286         (JSC::Parser<LexerType>::parseFunctionDeclaration):
2287         (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
2288         (JSC::Parser<LexerType>::parseClassDeclaration):
2289         (JSC::Parser<LexerType>::parseExportDeclaration):
2290         (JSC::Parser<LexerType>::parseMemberExpression):
2291         * parser/ParserArena.h:
2292         (JSC::IdentifierArena::makeIdentifier):
2293         * runtime/CachedTypes.cpp:
2294         (JSC::CachedUniquedStringImpl::encode):
2295         (JSC::CachedUniquedStringImpl::decode const):
2296         * runtime/CommonIdentifiers.cpp:
2297         (JSC::CommonIdentifiers::CommonIdentifiers):
2298         (JSC::CommonIdentifiers::lookUpPrivateName const):
2299         (JSC::CommonIdentifiers::getPublicName const):
2300         (JSC::CommonIdentifiers::lookUpPublicName const): Deleted.
2301         * runtime/CommonIdentifiers.h:
2302         * runtime/ExceptionHelpers.cpp:
2303         (JSC::createUndefinedVariableError):
2304         * runtime/Identifier.cpp:
2305         (JSC::Identifier::dump const):
2306         * runtime/Identifier.h:
2307         * runtime/IdentifierInlines.h:
2308         (JSC::Identifier::fromUid):
2309         * runtime/JSTypedArrayViewPrototype.cpp:
2310         (JSC::JSTypedArrayViewPrototype::finishCreation):
2311         * tools/JSDollarVM.cpp:
2312         (JSC::functionGetPrivateProperty):
2313
2314 2019-02-06  Keith Rollin  <krollin@apple.com>
2315
2316         Really enable the automatic checking and regenerations of .xcfilelists during builds
2317         https://bugs.webkit.org/show_bug.cgi?id=194357
2318         <rdar://problem/47861231>
2319
2320         Reviewed by Chris Dumez.
2321
2322         Bug 194124 was supposed to enable the automatic checking and
2323         regenerating of .xcfilelist files during the build. While related
2324         changes were included in that patch, the change to actually enable the
2325         operation somehow was omitted. This patch actually enables the
2326         operation. The check-xcfilelist.sh scripts now check
2327         WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
2328         from the checking.
2329
2330         * Scripts/check-xcfilelists.sh:
2331
2332 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2333
2334         [JSC] Unify indirectEvalExecutableSpace and directEvalExecutableSpace
2335         https://bugs.webkit.org/show_bug.cgi?id=194339
2336
2337         Reviewed by Michael Saboff.
2338
2339         DirectEvalExecutable and IndirectEvalExecutable have completely same memory layout.
2340         They have even the same structure. This patch unifies the subspaces for them.
2341
2342         * runtime/DirectEvalExecutable.h:
2343         * runtime/EvalExecutable.h:
2344         (JSC::EvalExecutable::subspaceFor):
2345         * runtime/IndirectEvalExecutable.h:
2346         * runtime/VM.cpp:
2347         * runtime/VM.h:
2348         (JSC::VM::forEachScriptExecutableSpace):
2349
2350 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2351
2352         [JSC] NativeExecutable should be smaller
2353         https://bugs.webkit.org/show_bug.cgi?id=194331
2354
2355         Reviewed by Michael Saboff.
2356
2357         NativeExecutable takes 88 bytes now. Since our GC rounds the size with 16, it actually takes 96 bytes in IsoSubspaces.
2358         Since a lot of NativeExecutable are allocated, we already has two MarkedBlocks even just after JSGlobalObject initialization.
2359         This patch makes sizeof(NativeExecutable) 64 bytes, which is 32 bytes smaller than 96 bytes. Now our JSGlobalObject initialization
2360         only takes one MarkedBlock for NativeExecutable.
2361
2362         To make NativeExecutable smaller,
2363
2364         1. m_numParametersForCall and m_numParametersForConstruct in ExecutableBase are only meaningful in ScriptExecutable subclasses. Since
2365            they are not touched from JIT, we can remove them from ExecutableBase and move them to ScriptExecutable.
2366
2367         2. DOMJIT::Signature* is rarely used. Rather than having it in NativeExecutable, we should put it in NativeJITCode. Since NativeExecutable
2368            always has JITCode, we can safely query the value from NativeExecutable. This patch creates NativeDOMJITCode, which is a subclass of
2369            NativeJITCode, and instantiated only when DOMJIT::Signature* is given.
2370
2371         3. Move Intrinsic to a member of ScriptExecutable or JITCode. Since JITCode has some paddings to put things, we can leverage this to put
2372            Intrinsic for NativeExecutable.
2373
2374         We also move "clearCode" code from ExecutableBase to ScriptExecutable since it is only valid for ScriptExecutable subclasses.
2375
2376         * CMakeLists.txt:
2377         * JavaScriptCore.xcodeproj/project.pbxproj:
2378         * bytecode/CallVariant.h:
2379         * interpreter/Interpreter.cpp:
2380         * jit/JITCode.cpp:
2381         (JSC::DirectJITCode::DirectJITCode):
2382         (JSC::NativeJITCode::NativeJITCode):
2383         (JSC::NativeDOMJITCode::NativeDOMJITCode):
2384         * jit/JITCode.h:
2385         (JSC::JITCode::signature const):
2386         (JSC::JITCode::intrinsic):
2387         * jit/JITOperations.cpp:
2388         * jit/JITThunks.cpp:
2389         (JSC::JITThunks::hostFunctionStub):
2390         * jit/Repatch.cpp:
2391         * llint/LLIntSlowPaths.cpp:
2392         * runtime/ExecutableBase.cpp:
2393         (JSC::ExecutableBase::dump const):
2394         (JSC::ExecutableBase::hashFor const):
2395         (JSC::ExecutableBase::hasClearableCode const): Deleted.
2396         (JSC::ExecutableBase::clearCode): Deleted.
2397         * runtime/ExecutableBase.h:
2398         (JSC::ExecutableBase::ExecutableBase):
2399         (JSC::ExecutableBase::isModuleProgramExecutable):
2400         (JSC::ExecutableBase::isHostFunction const):
2401         (JSC::ExecutableBase::generatedJITCodeForCall const):
2402         (JSC::ExecutableBase::generatedJITCodeForConstruct const):
2403         (JSC::ExecutableBase::generatedJITCodeFor const):
2404         (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
2405         (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
2406         (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
2407         (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
2408         (JSC::ExecutableBase::hasJITCodeForCall const): Deleted.
2409         (JSC::ExecutableBase::hasJITCodeForConstruct const): Deleted.
2410         (JSC::ExecutableBase::intrinsic const): Deleted.
2411         * runtime/ExecutableBaseInlines.h: Added.
2412         (JSC::ExecutableBase::intrinsic const):
2413         (JSC::ExecutableBase::hasJITCodeForCall const):
2414         (JSC::ExecutableBase::hasJITCodeForConstruct const):
2415         * runtime/JSBoundFunction.cpp:
2416         * runtime/JSType.cpp:
2417         (WTF::printInternal):
2418         * runtime/JSType.h:
2419         * runtime/NativeExecutable.cpp:
2420         (JSC::NativeExecutable::create):
2421         (JSC::NativeExecutable::createStructure):
2422         (JSC::NativeExecutable::NativeExecutable):
2423         (JSC::NativeExecutable::signatureFor const):
2424         (JSC::NativeExecutable::intrinsic const):
2425         * runtime/NativeExecutable.h:
2426         * runtime/ScriptExecutable.cpp:
2427         (JSC::ScriptExecutable::ScriptExecutable):
2428         (JSC::ScriptExecutable::clearCode):
2429         (JSC::ScriptExecutable::installCode):
2430         (JSC::ScriptExecutable::hasClearableCode const):
2431         * runtime/ScriptExecutable.h:
2432         (JSC::ScriptExecutable::intrinsic const):
2433         (JSC::ScriptExecutable::hasJITCodeForCall const):
2434         (JSC::ScriptExecutable::hasJITCodeForConstruct const):
2435         * runtime/VM.cpp:
2436         (JSC::VM::getHostFunction):
2437
2438 2019-02-06  Pablo Saavedra  <psaavedra@igalia.com>
2439
2440         Build failure after r240431
2441         https://bugs.webkit.org/show_bug.cgi?id=194330
2442
2443         Reviewed by Žan Doberšek.
2444
2445         * API/glib/JSCOptions.cpp:
2446
2447 2019-02-05  Mark Lam  <mark.lam@apple.com>
2448
2449         Fix DFG's doesGC() for a few more nodes.
2450         https://bugs.webkit.org/show_bug.cgi?id=194307
2451         <rdar://problem/47832956>
2452
2453         Reviewed by Yusuke Suzuki.
2454
2455         Fix doesGC() for the following nodes:
2456
2457             NumberToStringWithValidRadixConstant:
2458                 Calls operationInt32ToStringWithValidRadix(), which calls int32ToString(),
2459                 which can allocate a string.
2460                 Calls operationInt52ToStringWithValidRadix(), which calls int52ToString(),
2461                 which can allocate a string.
2462                 Calls operationDoubleToStringWithValidRadix(), which calls numberToString(),
2463                 which can allocate a string.
2464
2465             RegExpExecNonGlobalOrSticky: calls createRegExpMatchesArray() which allocates
2466                 memory for all kinds of objects.
2467             RegExpMatchFast: calls operationRegExpMatchFastString(), which calls
2468                 RegExpObject::execInline() and RegExpObject::matchGlobal().  Both of
2469                 these allocates memory for the match result.
2470             RegExpMatchFastGlobal: calls operationRegExpMatchFastGlobalString(), which
2471                 calls RegExpObject's collectMatches(), which allocates an array amongst
2472                 other objects.
2473
2474             StringFromCharCode:
2475                 If the uint32 code to convert is greater than maxSingleCharacterString,
2476                 we'll call operationStringFromCharCode(), which calls jsSingleCharacterString(),
2477                 which allocates a new string if the code is greater than maxSingleCharacterString.
2478
2479         Also fix SpeculativeJIT::compileFromCharCode() and FTL's compileStringFromCharCode()
2480         to use maxSingleCharacterString instead of a literal constant.
2481
2482         * dfg/DFGDoesGC.cpp:
2483         (JSC::DFG::doesGC):
2484         * dfg/DFGSpeculativeJIT.cpp:
2485         (JSC::DFG::SpeculativeJIT::compileFromCharCode):
2486         * ftl/FTLLowerDFGToB3.cpp:
2487         (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode):
2488
2489 2019-02-05  Keith Rollin  <krollin@apple.com>
2490
2491         Enable the automatic checking and regenerations of .xcfilelists during builds
2492         https://bugs.webkit.org/show_bug.cgi?id=194124
2493         <rdar://problem/47721277>
2494
2495         Reviewed by Tim Horton.
2496
2497         Bug 193790 add a facility for checking -- during build time -- that
2498         any needed .xcfilelist files are up-to-date and for updating them if
2499         they are not. This facility was initially opt-in by setting
2500         WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
2501         the process seemed robust. Its now time to enable this facility and
2502         make it opt-out. If there is a need to disable this facility, set and
2503         export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
2504         running `make` or `build-webkit`, or before running Xcode from the
2505         command line.
2506
2507         Additionally, remove the step that generates a list of source files
2508         going into the UnifiedSources build step. It's only necessarily to
2509         specify Sources.txt and SourcesCocoa.txt as inputs.
2510
2511         * JavaScriptCore.xcodeproj/project.pbxproj:
2512         * UnifiedSources-input.xcfilelist: Removed.
2513
2514 2019-02-05  Keith Rollin  <krollin@apple.com>
2515
2516         Update .xcfilelist files
2517         https://bugs.webkit.org/show_bug.cgi?id=194121
2518         <rdar://problem/47720863>
2519
2520         Reviewed by Tim Horton.
2521
2522         Preparatory to enabling the facility for automatically updating the
2523         .xcfilelist files, check in a freshly-updated set so that not everyone
2524         runs up against having to regenerate them themselves.
2525
2526         * DerivedSources-input.xcfilelist:
2527         * DerivedSources-output.xcfilelist:
2528
2529 2019-02-05  Andy VanWagoner  <andy@vanwagoner.family>
2530
2531         [INTL] improve efficiency of Intl.NumberFormat formatToParts
2532         https://bugs.webkit.org/show_bug.cgi?id=185557
2533
2534         Reviewed by Mark Lam.
2535
2536         Since field nesting depth is minimal, this algorithm should be effectively O(n),
2537         where n is the number of characters in the formatted string.
2538         It may be less memory efficient than the previous impl, since the intermediate Vector
2539         is the length of the string, instead of the count of the fields.
2540
2541         * runtime/IntlNumberFormat.cpp:
2542         (JSC::IntlNumberFormat::formatToParts):
2543         * runtime/IntlNumberFormat.h:
2544
2545 2019-02-05  Mark Lam  <mark.lam@apple.com>
2546
2547         Move DFG nodes that clobberize() says will write(Heap) to the doesGC() list that returns true.
2548         https://bugs.webkit.org/show_bug.cgi?id=194298
2549         <rdar://problem/47827555>
2550
2551         Reviewed by Saam Barati.
2552
2553         We do this for 3 reasons:
2554         1. It's clearer when reading doesGC()'s code that these nodes will return true.
2555         2. If things change in the future where clobberize() no longer reports these nodes
2556            as write(Heap), each node should be vetted first to make sure that it can never
2557            GC before being moved back to the doesGC() list that returns false.
2558         3. This reduces the list of nodes that we need to audit to make sure doesGC() is
2559            correct in its claims about the nodes' GCing possibility.
2560
2561         The list of nodes moved are:
2562
2563             ArrayPush
2564             ArrayPop
2565             Call
2566             CallEval
2567             CallForwardVarargs
2568             CallVarargs
2569             Construct
2570             ConstructForwardVarargs
2571             ConstructVarargs
2572             DefineDataProperty
2573             DefineAccessorProperty
2574             DeleteById
2575             DeleteByVal
2576             DirectCall
2577             DirectConstruct
2578             DirectTailCallInlinedCaller
2579             GetById
2580             GetByIdDirect
2581             GetByIdDirectFlush
2582             GetByIdFlush
2583             GetByIdWithThis
2584             GetByValWithThis
2585             GetDirectPname
2586             GetDynamicVar
2587             HasGenericProperty
2588             HasOwnProperty
2589             HasStructureProperty
2590             InById
2591             InByVal
2592             InstanceOf
2593             InstanceOfCustom
2594             LoadVarargs
2595             NumberToStringWithRadix
2596             PutById
2597             PutByIdDirect
2598             PutByIdFlush
2599             PutByIdWithThis
2600             PutByOffset
2601             PutByValWithThis
2602             PutDynamicVar
2603             PutGetterById
2604             PutGetterByVal
2605             PutGetterSetterById
2606             PutSetterById
2607             PutSetterByVal
2608             PutStack
2609             PutToArguments
2610             RegExpExec
2611             RegExpTest
2612             ResolveScope
2613             ResolveScopeForHoistingFuncDeclInEval
2614             TailCall
2615             TailCallForwardVarargsInlinedCaller
2616             TailCallInlinedCaller
2617             TailCallVarargsInlinedCaller
2618             ToNumber
2619             ToPrimitive
2620             ValueNegate
2621
2622         * dfg/DFGDoesGC.cpp:
2623         (JSC::DFG::doesGC):
2624
2625 2019-02-05  Yusuke Suzuki  <ysuzuki@apple.com>
2626
2627         [JSC] Shrink sizeof(UnlinkedCodeBlock)
2628         https://bugs.webkit.org/show_bug.cgi?id=194281
2629
2630         Reviewed by Michael Saboff.
2631
2632         This patch first attempts to reduce the size of UnlinkedCodeBlock in a relatively simpler way. Reordering members, remove unused member, and
2633         move rarely used members to RareData. This changes sizeof(UnlinkedCodeBlock) from 312 to 256.
2634
2635         Still we have several chances to reduce sizeof(UnlinkedCodeBlock). Making more Vectors to RefCountedArrays can be done with some restructuring
2636         of generatorification phase. It would be possible to remove m_sourceURLDirective and m_sourceMappingURLDirective from UnlinkedCodeBlock since
2637         they should be in SourceProvider and that should be enough. These changes require some intrusive modifications and we make them as a future work.
2638
2639         * bytecode/CodeBlock.cpp:
2640         (JSC::CodeBlock::finishCreation):
2641         * bytecode/CodeBlock.h:
2642         (JSC::CodeBlock::bitVectors const): Deleted.
2643         * bytecode/CodeType.h:
2644         * bytecode/UnlinkedCodeBlock.cpp:
2645         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2646         (JSC::UnlinkedCodeBlock::shrinkToFit):
2647         * bytecode/UnlinkedCodeBlock.h:
2648         (JSC::UnlinkedCodeBlock::bitVector):
2649         (JSC::UnlinkedCodeBlock::addBitVector):
2650         (JSC::UnlinkedCodeBlock::addSetConstant):
2651         (JSC::UnlinkedCodeBlock::constantRegisters):
2652         (JSC::UnlinkedCodeBlock::numberOfConstantIdentifierSets const):
2653         (JSC::UnlinkedCodeBlock::constantIdentifierSets):
2654         (JSC::UnlinkedCodeBlock::codeType const):
2655         (JSC::UnlinkedCodeBlock::didOptimize const):
2656         (JSC::UnlinkedCodeBlock::setDidOptimize):
2657         (JSC::UnlinkedCodeBlock::usesGlobalObject const): Deleted.
2658         (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
2659         (JSC::UnlinkedCodeBlock::globalObjectRegister const): Deleted.
2660         (JSC::UnlinkedCodeBlock::bitVectors const): Deleted.
2661         * bytecompiler/BytecodeGenerator.cpp:
2662         (JSC::BytecodeGenerator::emitLoad):
2663         (JSC::BytecodeGenerator::emitLoadGlobalObject): Deleted.
2664         * bytecompiler/BytecodeGenerator.h:
2665         * runtime/CachedTypes.cpp:
2666         (JSC::CachedCodeBlockRareData::encode):
2667         (JSC::CachedCodeBlockRareData::decode const):
2668         (JSC::CachedCodeBlock::scopeRegister const):
2669         (JSC::CachedCodeBlock::codeType const):
2670         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2671         (JSC::CachedCodeBlock<CodeBlockType>::decode const):
2672         (JSC::CachedCodeBlock<CodeBlockType>::encode):
2673         (JSC::CachedCodeBlock::globalObjectRegister const): Deleted.
2674
2675 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2676
2677         Unreviewed, add missing exception checks after r240637
2678         https://bugs.webkit.org/show_bug.cgi?id=193546
2679
2680         * tools/JSDollarVM.cpp:
2681         (JSC::functionShadowChickenFunctionsOnStack):
2682
2683 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2684
2685         [JSC] Shrink size of VM by lazily allocating IsoSubspaces for non-common types
2686         https://bugs.webkit.org/show_bug.cgi?id=193993
2687
2688         Reviewed by Keith Miller.
2689
2690         JSC::VM has a lot of IsoSubspaces, and each takes 504B. This unnecessarily makes VM so large.
2691         And some of them are rarely used. We should allocate it lazily.
2692
2693         In this patch, we make some `IsoSubspaces` `std::unique_ptr<IsoSubspace>`. And we add ensureXXXSpace
2694         functions which allocate IsoSubspaces lazily. This function is used by subspaceFor<> in each class.
2695         And we also add subspaceForConcurrently<> function, which is called from concurrent JIT tiers. This
2696         returns nullptr if the subspace is not allocated yet. JSCell::subspaceFor now takes second template
2697         parameter which tells the function whether subspaceFor is concurrently done. If the IsoSubspace is
2698         lazily created, we may return nullptr for the concurrent access. We ensure the space's initialization
2699         by using WTF::storeStoreFence when lazily allocating it.
2700
2701         In GC's constraint solving, we may touch these lazily allocated spaces. At that time, we check the
2702         existence of the space before touching this. This is not racy because the main thread is stopped when
2703         the constraint solving is working.
2704
2705         This changes sizeof(VM) from 64736 to 56472.
2706
2707         Another interesting thing is that we removed `PreventCollectionScope preventCollectionScope(heap);` in
2708         `Subspace::initialize`. This is really dangerous API since it easily causes dead-lock between the
2709         collector and the mutator if IsoSubspace is dynamically created. We do want to make IsoSubspaces
2710         dynamically-created ones since the requirement of the pre-allocation poses a scalability problem
2711         of IsoSubspace adoption because IsoSubspace is large. Registered Subspace is only touched in the
2712         EndPhase, and the peripheries should be stopped when running EndPhase. Thus, as long as the main thread
2713         can run this IsoSubspace code, the collector is never EndPhase. So this is safe.
2714
2715         * API/JSCallbackFunction.h:
2716         * API/ObjCCallbackFunction.h:
2717         (JSC::ObjCCallbackFunction::subspaceFor):
2718         * API/glib/JSCCallbackFunction.h:
2719         * CMakeLists.txt:
2720         * JavaScriptCore.xcodeproj/project.pbxproj:
2721         * bytecode/CodeBlock.cpp:
2722         (JSC::CodeBlock::visitChildren):
2723         (JSC::CodeBlock::finalizeUnconditionally):
2724         * bytecode/CodeBlock.h:
2725         * bytecode/EvalCodeBlock.h:
2726         * bytecode/ExecutableToCodeBlockEdge.h:
2727         * bytecode/FunctionCodeBlock.h:
2728         * bytecode/ModuleProgramCodeBlock.h:
2729         * bytecode/ProgramCodeBlock.h:
2730         * bytecode/UnlinkedFunctionExecutable.cpp:
2731         (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
2732         * bytecode/UnlinkedFunctionExecutable.h:
2733         * dfg/DFGSpeculativeJIT.cpp:
2734         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject):
2735         (JSC::DFG::SpeculativeJIT::compileMakeRope):
2736         (JSC::DFG::SpeculativeJIT::compileNewObject):
2737         * ftl/FTLLowerDFGToB3.cpp:
2738         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
2739         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
2740         (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
2741         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject):
2742         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell):
2743         * heap/Heap.cpp:
2744         (JSC::Heap::finalizeUnconditionalFinalizers):
2745         (JSC::Heap::deleteAllCodeBlocks):
2746         (JSC::Heap::deleteAllUnlinkedCodeBlocks):
2747         (JSC::Heap::addCoreConstraints):
2748         * heap/Subspace.cpp:
2749         (JSC::Subspace::initialize):
2750         * jit/AssemblyHelpers.h:
2751         (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize):
2752         (JSC::AssemblyHelpers::emitAllocateVariableSizedCell):
2753         * jit/JITOpcodes.cpp:
2754         (JSC::JIT::emit_op_new_object):
2755         * jit/JITOpcodes32_64.cpp:
2756         (JSC::JIT::emit_op_new_object):
2757         * runtime/DirectArguments.h:
2758         * runtime/DirectEvalExecutable.h:
2759         * runtime/ErrorInstance.h:
2760         (JSC::ErrorInstance::subspaceFor):
2761         * runtime/ExecutableBase.h:
2762         * runtime/FunctionExecutable.h:
2763         * runtime/IndirectEvalExecutable.h:
2764         * runtime/InferredValue.cpp:
2765         (JSC::InferredValue::visitChildren):
2766         * runtime/InferredValue.h:
2767         * runtime/InferredValueInlines.h:
2768         (JSC::InferredValue::finalizeUnconditionally):
2769         * runtime/InternalFunction.h:
2770         * runtime/JSAsyncFunction.h:
2771         * runtime/JSAsyncGeneratorFunction.h:
2772         * runtime/JSBoundFunction.h:
2773         * runtime/JSCell.h:
2774         (JSC::subspaceFor):
2775         (JSC::subspaceForConcurrently):
2776         * runtime/JSCellInlines.h:
2777         (JSC::allocatorForNonVirtualConcurrently):
2778         * runtime/JSCustomGetterSetterFunction.h:
2779         * runtime/JSDestructibleObject.h:
2780         * runtime/JSFunction.h:
2781         * runtime/JSGeneratorFunction.h:
2782         * runtime/JSImmutableButterfly.h:
2783         * runtime/JSLexicalEnvironment.h:
2784         (JSC::JSLexicalEnvironment::subspaceFor):
2785         * runtime/JSNativeStdFunction.h:
2786         * runtime/JSSegmentedVariableObject.h:
2787         * runtime/JSString.h:
2788         * runtime/ModuleProgramExecutable.h:
2789         * runtime/NativeExecutable.h:
2790         * runtime/ProgramExecutable.h:
2791         * runtime/PropertyMapHashTable.h:
2792         * runtime/ProxyRevoke.h:
2793         * runtime/ScopedArguments.h:
2794         * runtime/ScriptExecutable.cpp:
2795         (JSC::ScriptExecutable::clearCode):
2796         (JSC::ScriptExecutable::installCode):
2797         * runtime/Structure.h:
2798         * runtime/StructureRareData.h:
2799         * runtime/SubspaceAccess.h: Copied from Source/JavaScriptCore/runtime/InferredValueInlines.h.
2800         * runtime/VM.cpp:
2801         (JSC::VM::VM):
2802         * runtime/VM.h:
2803         (JSC::VM::SpaceAndSet::SpaceAndSet):
2804         (JSC::VM::SpaceAndSet::setFor):
2805         (JSC::VM::forEachScriptExecutableSpace):
2806         (JSC::VM::SpaceAndFinalizerSet::SpaceAndFinalizerSet): Deleted.
2807         (JSC::VM::SpaceAndFinalizerSet::finalizerSetFor): Deleted.
2808         (JSC::VM::ScriptExecutableSpaceAndSet::ScriptExecutableSpaceAndSet): Deleted.
2809         (JSC::VM::ScriptExecutableSpaceAndSet::clearableCodeSetFor): Deleted.
2810         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::UnlinkedFunctionExecutableSpaceAndSet): Deleted.
2811         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::clearableCodeSetFor): Deleted.
2812         * runtime/WeakMapImpl.h:
2813         (JSC::WeakMapImpl::subspaceFor):
2814         * wasm/js/JSWebAssemblyCodeBlock.h:
2815         * wasm/js/JSWebAssemblyMemory.h:
2816         * wasm/js/WebAssemblyFunction.h:
2817         * wasm/js/WebAssemblyWrapperFunction.h:
2818
2819 2019-02-04  Keith Miller  <keith_miller@apple.com>
2820
2821         Change llint operand macros to inline functions
2822         https://bugs.webkit.org/show_bug.cgi?id=194248
2823
2824         Reviewed by Mark Lam.
2825
2826         * llint/LLIntSlowPaths.cpp:
2827         (JSC::LLInt::getNonConstantOperand):
2828         (JSC::LLInt::getOperand):
2829         (JSC::LLInt::llint_trace_value):
2830         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2831         (JSC::LLInt::getByVal):
2832         (JSC::LLInt::genericCall):
2833         (JSC::LLInt::varargsSetup):
2834         (JSC::LLInt::commonCallEval):
2835
2836 2019-02-04  Robin Morisset  <rmorisset@apple.com>
2837
2838         when lowering AssertNotEmpty, create the value before creating the patchpoint
2839         https://bugs.webkit.org/show_bug.cgi?id=194231
2840
2841         Reviewed by Saam Barati.
2842
2843         This is a very simple change: we should never generate B3 IR where an instruction depends on a value that comes later in the instruction stream.
2844         AssertNotEmpty was generating some such IR, it probably slipped through until now because it is a rather rare and tricky instruction to generate.
2845
2846         * ftl/FTLLowerDFGToB3.cpp:
2847         (JSC::FTL::DFG::LowerDFGToB3::compileAssertNotEmpty):
2848
2849 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2850
2851         [JSC] ExecutableToCodeBlockEdge should be smaller
2852         https://bugs.webkit.org/show_bug.cgi?id=194244
2853
2854         Reviewed by Michael Saboff.
2855
2856         ExecutableToCodeBlockEdge is allocated so many times. However its memory layout is not efficient.
2857         sizeof(ExecutableToCodeBlockEdge) is 24bytes, but it discards 7bytes due to one bool m_isActive flag.
2858         Because our size classes are rounded by 16bytes, ExecutableToCodeBlockEdge takes 32bytes. So, half of
2859         it is wasted. We should fit it into 16bytes so that we can efficiently allocate it.
2860
2861         In this patch, we leverages TypeInfoMayBePrototype bit in JSTypeInfo. It is a bit special TypeInfo bit
2862         since this is per-cell bit. We rename this to TypeInfoPerCellBit, and use it as a `m_isActive` mark in
2863         ExecutableToCodeBlockEdge. In JSObject subclasses, we use it as MayBePrototype flag.
2864
2865         Since this flag is not changed in CAS style, we must not change this in concurrent threads. This is OK
2866         for ExecutableToCodeBlockEdge's m_isActive flag since this is touched on the main thread (ScriptExecutable::installCode
2867         does not touch it if it is called in non-main threads).
2868
2869         * bytecode/ExecutableToCodeBlockEdge.cpp:
2870         (JSC::ExecutableToCodeBlockEdge::finishCreation):
2871         (JSC::ExecutableToCodeBlockEdge::visitChildren):
2872         (JSC::ExecutableToCodeBlockEdge::activate):
2873         (JSC::ExecutableToCodeBlockEdge::deactivate):
2874         (JSC::ExecutableToCodeBlockEdge::isActive const):
2875         * bytecode/ExecutableToCodeBlockEdge.h:
2876         * runtime/JSCell.h:
2877         * runtime/JSCellInlines.h:
2878         (JSC::JSCell::perCellBit const):
2879         (JSC::JSCell::setPerCellBit):
2880         (JSC::JSCell::mayBePrototype const): Deleted.
2881         (JSC::JSCell::didBecomePrototype): Deleted.
2882         * runtime/JSObject.cpp:
2883         (JSC::JSObject::setPrototypeDirect):
2884         * runtime/JSObject.h:
2885         * runtime/JSObjectInlines.h:
2886         (JSC::JSObject::mayBePrototype const):
2887         (JSC::JSObject::didBecomePrototype):
2888         * runtime/JSTypeInfo.h:
2889         (JSC::TypeInfo::perCellBit):
2890         (JSC::TypeInfo::mergeInlineTypeFlags):
2891         (JSC::TypeInfo::mayBePrototype): Deleted.
2892
2893 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2894
2895         [JSC] Shrink size of FunctionExecutable
2896         https://bugs.webkit.org/show_bug.cgi?id=194191
2897
2898         Reviewed by Michael Saboff.
2899
2900         This patch reduces the size of FunctionExecutable. Since it is allocated in IsoSubspace, reducing the size directly
2901         improves the allocation efficiency.
2902
2903         1. ScriptExecutable (base class of FunctionExecutable) has several members, but it is meaningful only in FunctionExecutable.
2904            We remove this from ScriptExecutable, and move it to FunctionExecutable.
2905
2906         2. FunctionExecutable has several data which are rarely used. One for FunctionOverrides functionality, which is typically
2907            used for JSC debugging purpose, and another is TypeSet and offsets for type profiler. We move them to RareData and reduce
2908            the size of FunctionExecutable in the common case.
2909
2910         This patch changes the size of FunctionExecutable from 176 to 144.
2911
2912         * bytecode/CodeBlock.cpp:
2913         (JSC::CodeBlock::dumpSource):
2914         (JSC::CodeBlock::finishCreation):
2915         * dfg/DFGNode.h:
2916         (JSC::DFG::Node::OpInfoWrapper::as const):
2917         * interpreter/StackVisitor.cpp:
2918         (JSC::StackVisitor::Frame::computeLineAndColumn const):
2919         * runtime/ExecutableBase.h:
2920         * runtime/FunctionExecutable.cpp:
2921         (JSC::FunctionExecutable::FunctionExecutable):
2922         (JSC::FunctionExecutable::ensureRareDataSlow):
2923         * runtime/FunctionExecutable.h:
2924         * runtime/Intrinsic.h:
2925         * runtime/ModuleProgramExecutable.cpp:
2926         (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
2927         * runtime/ProgramExecutable.cpp:
2928         (JSC::ProgramExecutable::ProgramExecutable):
2929         * runtime/ScriptExecutable.cpp:
2930         (JSC::ScriptExecutable::ScriptExecutable):
2931         (JSC::ScriptExecutable::overrideLineNumber const):
2932         (JSC::ScriptExecutable::typeProfilingStartOffset const):
2933         (JSC::ScriptExecutable::typeProfilingEndOffset const):
2934         * runtime/ScriptExecutable.h:
2935         (JSC::ScriptExecutable::firstLine const):
2936         (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
2937         (JSC::ScriptExecutable::hasOverrideLineNumber const): Deleted.
2938         (JSC::ScriptExecutable::overrideLineNumber const): Deleted.
2939         (JSC::ScriptExecutable::typeProfilingStartOffset const): Deleted.
2940         (JSC::ScriptExecutable::typeProfilingEndOffset const): Deleted.
2941         * runtime/StackFrame.cpp:
2942         (JSC::StackFrame::computeLineAndColumn const):
2943         * tools/JSDollarVM.cpp:
2944         (JSC::functionReturnTypeFor):
2945
2946 2019-02-04  Mark Lam  <mark.lam@apple.com>
2947
2948         DFG's doesGC() is incorrect about the SameValue node's behavior.
2949         https://bugs.webkit.org/show_bug.cgi?id=194211
2950         <rdar://problem/47608913>
2951
2952         Reviewed by Saam Barati.
2953
2954         Only the DoubleRepUse case is guaranteed to not GC.  The other case may GC because
2955         it calls operationSameValue() which may allocate memory for resolving ropes.
2956
2957         * dfg/DFGDoesGC.cpp:
2958         (JSC::DFG::doesGC):
2959
2960 2019-02-03  Yusuke Suzuki  <ysuzuki@apple.com>
2961
2962         [JSC] UnlinkedMetadataTable assumes that MetadataTable is destroyed before it is destructed, but order of destruction of JS heap cells are not guaranteed
2963         https://bugs.webkit.org/show_bug.cgi?id=194031
2964
2965         Reviewed by Saam Barati.
2966
2967         UnlinkedMetadataTable assumes that MetadataTable linked against this UnlinkedMetadataTable is already destroyed when UnlinkedMetadataTable is destroyed.
2968         This means that UnlinkedCodeBlock is destroyed after all the linked CodeBlocks are destroyed. But this assumption is not valid since GC's finalizer
2969         sweeps objects without considering the dependencies among swept objects. UnlinkedMetadataTable can be destroyed even before linked MetadataTable is
2970         destroyed if UnlinkedCodeBlock is destroyed before linked CodeBlock is destroyed.
2971
2972         To make the above assumption valid, we make UnlinkedMetadataTable RefCounted object, and make MetadataTable hold the strong ref to UnlinkedMetadataTable.
2973         This ensures that UnlinkedMetadataTable is destroyed after all the linked MetadataTables are destroyed.
2974
2975         * bytecode/MetadataTable.cpp:
2976         (JSC::MetadataTable::MetadataTable):
2977         (JSC::MetadataTable::~MetadataTable):
2978         * bytecode/UnlinkedCodeBlock.cpp:
2979         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2980         (JSC::UnlinkedCodeBlock::visitChildren):
2981         (JSC::UnlinkedCodeBlock::estimatedSize):
2982         (JSC::UnlinkedCodeBlock::setInstructions):
2983         * bytecode/UnlinkedCodeBlock.h:
2984         (JSC::UnlinkedCodeBlock::metadata):
2985         (JSC::UnlinkedCodeBlock::metadataSizeInBytes):
2986         * bytecode/UnlinkedMetadataTable.h:
2987         (JSC::UnlinkedMetadataTable::create):
2988         * bytecode/UnlinkedMetadataTableInlines.h:
2989         (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
2990         * runtime/CachedTypes.cpp:
2991         (JSC::CachedMetadataTable::decode const):
2992         (JSC::CachedCodeBlock::metadata const):
2993         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2994         (JSC::CachedCodeBlock<CodeBlockType>::decode const):
2995         (JSC::CachedCodeBlock<CodeBlockType>::encode):
2996
2997 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
2998
2999         [JSC] Decouple JIT related data from CodeBlock
3000         https://bugs.webkit.org/show_bug.cgi?id=194187
3001
3002         Reviewed by Saam Barati.
3003
3004         CodeBlock holds bunch of data which is only used after JIT starts compiling it.
3005         We have three types of data in CodeBlock.
3006
3007         1. The data which is always used. CodeBlock needs to hold it.
3008         2. The data which is touched even in LLInt, but it is only meaningful in JIT tiers. The example is profiling.
3009         3. The data which is used after the JIT compiler starts running for the given CodeBlock.
3010
3011         This patch decouples (3) from CodeBlock as CodeBlock::JITData. Even if we have bunch of CodeBlocks, only small
3012         number of them gets JIT compilation. Always allocating (3) data enlarges the size of CodeBlock, leading to the
3013         memory waste. Potentially we can decouple (2) in another data structure, but we first do (3) since (3) is beneficial
3014         in both non-JIT and *JIT* modes.
3015
3016         JITData is created only when JIT compiler wants to use it. So it can be concurrently created and used, so it is guarded
3017         by the lock of CodeBlock.
3018
3019         The size of CodeBlock is reduced from 512 to 352.
3020
3021         This patch improves memory footprint and gets 1.1% improvement in RAMification.
3022
3023             Footprint geomean: 36696503 (34.997 MB)
3024             Peak Footprint geomean: 38595988 (36.808 MB)
3025             Score: 37634263 (35.891 MB)
3026
3027             Footprint geomean: 37172768 (35.451 MB)
3028             Peak Footprint geomean: 38978288 (37.173 MB)
3029             Score: 38064824 (36.301 MB)
3030
3031         * bytecode/CodeBlock.cpp:
3032         (JSC::CodeBlock::~CodeBlock):
3033         (JSC::CodeBlock::propagateTransitions):
3034         (JSC::CodeBlock::ensureJITDataSlow):
3035         (JSC::CodeBlock::finalizeBaselineJITInlineCaches):
3036         (JSC::CodeBlock::getICStatusMap):
3037         (JSC::CodeBlock::addStubInfo):
3038         (JSC::CodeBlock::addJITAddIC):
3039         (JSC::CodeBlock::addJITMulIC):
3040         (JSC::CodeBlock::addJITSubIC):
3041         (JSC::CodeBlock::addJITNegIC):
3042         (JSC::CodeBlock::findStubInfo):
3043         (JSC::CodeBlock::addByValInfo):
3044         (JSC::CodeBlock::addCallLinkInfo):
3045         (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex):
3046         (JSC::CodeBlock::addRareCaseProfile):
3047         (JSC::CodeBlock::rareCaseProfileForBytecodeOffset):
3048         (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset):
3049         (JSC::CodeBlock::resetJITData):
3050         (JSC::CodeBlock::stronglyVisitStrongReferences):
3051         (JSC::CodeBlock::shrinkToFit):
3052         (JSC::CodeBlock::linkIncomingCall):
3053         (JSC::CodeBlock::linkIncomingPolymorphicCall):
3054         (JSC::CodeBlock::unlinkIncomingCalls):
3055         (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
3056         (JSC::CodeBlock::dumpValueProfiles):
3057         (JSC::CodeBlock::setPCToCodeOriginMap):
3058         (JSC::CodeBlock::findPC):
3059         (JSC::CodeBlock::dumpMathICStats):
3060         * bytecode/CodeBlock.h:
3061         (JSC::CodeBlock::ensureJITData):
3062         (JSC::CodeBlock::setJITCodeMap):
3063         (JSC::CodeBlock::jitCodeMap):
3064         (JSC::CodeBlock::likelyToTakeSlowCase):
3065         (JSC::CodeBlock::couldTakeSlowCase):
3066         (JSC::CodeBlock::lazyOperandValueProfiles):
3067         (JSC::CodeBlock::stubInfoBegin): Deleted.
3068         (JSC::CodeBlock::stubInfoEnd): Deleted.
3069         (JSC::CodeBlock::callLinkInfosBegin): Deleted.
3070         (JSC::CodeBlock::callLinkInfosEnd): Deleted.
3071         (JSC::CodeBlock::jitCodeMap const): Deleted.
3072         (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
3073         * bytecode/MethodOfGettingAValueProfile.cpp:
3074         (JSC::MethodOfGettingAValueProfile::emitReportValue const):
3075         (JSC::MethodOfGettingAValueProfile::reportValue):
3076         * dfg/DFGByteCodeParser.cpp:
3077         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
3078         * jit/JIT.h:
3079         * jit/JITOperations.cpp:
3080         (JSC::tryGetByValOptimize):
3081         * jit/JITPropertyAccess.cpp:
3082         (JSC::JIT::privateCompileGetByVal):
3083         (JSC::JIT::privateCompilePutByVal):
3084
3085 2018-12-16  Darin Adler  <darin@apple.com>
3086
3087         Convert additional String::format clients to alternative approaches
3088         https://bugs.webkit.org/show_bug.cgi?id=192746
3089
3090         Reviewed by Alexey Proskuryakov.
3091
3092         * inspector/agents/InspectorConsoleAgent.cpp:
3093         (Inspector::InspectorConsoleAgent::stopTiming): Use makeString
3094         and FormattedNumber::fixedWidth.
3095
3096 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3097
3098         [JSC] Remove some of IsoSubspaces for JSFunction subclasses
3099         https://bugs.webkit.org/show_bug.cgi?id=194177
3100
3101         Reviewed by Saam Barati.
3102
3103         JSGeneratorFunction, JSAsyncFunction, and JSAsyncGeneratorFunction do not add any fields / classInfo methods.
3104         We can share the IsoSubspace for JSFunction.
3105
3106         * runtime/JSAsyncFunction.h:
3107         * runtime/JSAsyncGeneratorFunction.h:
3108         * runtime/JSGeneratorFunction.h:
3109         * runtime/VM.cpp:
3110         (JSC::VM::VM):
3111         * runtime/VM.h:
3112
3113 2019-02-01  Mark Lam  <mark.lam@apple.com>
3114
3115         Remove invalid assertion in DFG's compileDoubleRep().
3116         https://bugs.webkit.org/show_bug.cgi?id=194130
3117         <rdar://problem/47699474>
3118
3119         Reviewed by Saam Barati.
3120
3121         * dfg/DFGSpeculativeJIT.cpp:
3122         (JSC::DFG::SpeculativeJIT::compileDoubleRep):
3123
3124 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3125
3126         [JSC] Unify CodeBlock IsoSubspaces
3127         https://bugs.webkit.org/show_bug.cgi?id=194167
3128
3129         Reviewed by Saam Barati.
3130
3131         When we move CodeBlock into its IsoSubspace, we create IsoSubspaces for each subclass of CodeBlock.
3132         But this is not necessary since,
3133
3134         1. They do not override the classInfo methods.
3135         2. sizeof(ProgramCodeBlock etc.) == sizeof(CodeBlock) since subclasses adds no additional fields.
3136
3137         Creating IsoSubspace for each subclass is costly in terms of memory. Especially, IsoSubspace for
3138         ProgramCodeBlock is. We typically create only one ProgramCodeBlock, and it means the rest of the
3139         MarkedBlock (16KB - sizeof(footer) - sizeof(ProgramCodeBlock)) is just wasted.
3140
3141         This patch unifies these IsoSubspaces into one.
3142
3143         * bytecode/CodeBlock.cpp:
3144         (JSC::CodeBlock::destroy):
3145         * bytecode/CodeBlock.h:
3146         * bytecode/EvalCodeBlock.cpp:
3147         (JSC::EvalCodeBlock::destroy): Deleted.
3148         * bytecode/EvalCodeBlock.h: We drop some utility functions in EvalCodeBlock and use UnlinkedEvalCodeBlock's one directly.
3149         * bytecode/FunctionCodeBlock.cpp:
3150         (JSC::FunctionCodeBlock::destroy): Deleted.
3151         * bytecode/FunctionCodeBlock.h:
3152         * bytecode/GlobalCodeBlock.h:
3153         * bytecode/ModuleProgramCodeBlock.cpp:
3154         (JSC::ModuleProgramCodeBlock::destroy): Deleted.
3155         * bytecode/ModuleProgramCodeBlock.h:
3156         * bytecode/ProgramCodeBlock.cpp:
3157         (JSC::ProgramCodeBlock::destroy): Deleted.
3158         * bytecode/ProgramCodeBlock.h:
3159         * interpreter/Interpreter.cpp:
3160         (JSC::Interpreter::execute):
3161         * runtime/VM.cpp:
3162         (JSC::VM::VM):
3163         * runtime/VM.h:
3164         (JSC::VM::forEachCodeBlockSpace):
3165
3166 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3167
3168         Unreviewed, follow-up after r240859
3169         https://bugs.webkit.org/show_bug.cgi?id=194145
3170
3171         Replace OOB HeapCellType with cellHeapCellType since they are completely the same.
3172         And rename cellDangerousBitsSpace back to cellSpace.
3173
3174         * runtime/JSCellInlines.h:
3175         (JSC::JSCell::subspaceFor):
3176         * runtime/VM.cpp:
3177         (JSC::VM::VM):
3178         * runtime/VM.h:
3179
3180 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3181
3182         [JSC] Remove cellJSValueOOBSpace
3183         https://bugs.webkit.org/show_bug.cgi?id=194145
3184
3185         Reviewed by Mark Lam.
3186
3187         * runtime/JSObject.h:
3188         (JSC::JSObject::subspaceFor): Deleted.
3189         * runtime/VM.cpp:
3190         (JSC::VM::VM):
3191         * runtime/VM.h:
3192
3193 2019-01-31  Mark Lam  <mark.lam@apple.com>
3194
3195         Remove poisoning from CodeBlock and LLInt code.
3196         https://bugs.webkit.org/show_bug.cgi?id=194113
3197
3198         Reviewed by Yusuke Suzuki.
3199
3200         * bytecode/CodeBlock.cpp:
3201         (JSC::CodeBlock::CodeBlock):
3202         (JSC::CodeBlock::~CodeBlock):
3203         (JSC::CodeBlock::setConstantRegisters):
3204         (JSC::CodeBlock::propagateTransitions):
3205         (JSC::CodeBlock::finalizeLLIntInlineCaches):
3206         (JSC::CodeBlock::jettison):
3207         (JSC::CodeBlock::predictedMachineCodeSize):
3208         * bytecode/CodeBlock.h:
3209         (JSC::CodeBlock::vm const):
3210         (JSC::CodeBlock::addConstant):
3211         (JSC::CodeBlock::heap const):
3212         (JSC::CodeBlock::replaceConstant):
3213         * llint/LLIntOfflineAsmConfig.h:
3214         * llint/LLIntSlowPaths.cpp:
3215         (JSC::LLInt::handleHostCall):
3216         (JSC::LLInt::setUpCall):
3217         * llint/LowLevelInterpreter.asm:
3218         * llint/LowLevelInterpreter32_64.asm:
3219         * llint/LowLevelInterpreter64.asm:
3220
3221 2019-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
3222
3223         [JSC] Remove finalizer in AsyncFromSyncIteratorPrototype
3224         https://bugs.webkit.org/show_bug.cgi?id=194107
3225
3226         Reviewed by Saam Barati.
3227
3228         AsyncFromSyncIteratorPrototype uses the finalizer, but it is not necessary since it does not hold any objects which require destruction.
3229         We drop this finalizer. And we also make methods of AsyncFromSyncIteratorPrototype lazily allocated.
3230
3231         * CMakeLists.txt:
3232         * DerivedSources.make:
3233         * JavaScriptCore.xcodeproj/project.pbxproj:
3234         * runtime/AsyncFromSyncIteratorPrototype.cpp:
3235         (JSC::AsyncFromSyncIteratorPrototype::AsyncFromSyncIteratorPrototype):
3236         (JSC::AsyncFromSyncIteratorPrototype::finishCreation):
3237         (JSC::AsyncFromSyncIteratorPrototype::create):
3238         * runtime/AsyncFromSyncIteratorPrototype.h:
3239
3240 2019-01-31  Tadeu Zagallo  <tzagallo@apple.com>
3241
3242         Fix `runJITThreadLimitTests` in testapi
3243         https://bugs.webkit.org/show_bug.cgi?id=194064
3244         <rdar://problem/46139147>
3245
3246         Reviewed by Mark Lam.
3247
3248         Fix typo where `targetNumberOfThreads` was not being used.
3249
3250         * API/tests/testapi.mm:
3251         (runJITThreadLimitTests):
3252
3253 2019-01-31  Tadeu Zagallo  <tzagallo@apple.com>
3254
3255         testapi fails RELEASE_ASSERT(codeBlock) in fetchFromDisk() of CodeCache.h
3256         https://bugs.webkit.org/show_bug.cgi?id=194112
3257
3258         Reviewed by Mark Lam.
3259
3260         `testBytecodeCache` does not populate the bytecode cache for the global
3261         CodeBlock, so it should only enable `forceDiskCache` after its execution.
3262
3263         * API/tests/testapi.mm:
3264         (testBytecodeCache):
3265
3266 2019-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
3267
3268         Unreviewed, follow-up after r240796
3269
3270         Initialize WriteBarrier<InferredValue> in the constructor. Otherwise, GC can see the broken one
3271         when allocating InferredValue in FunctionExecutable::finishCreation.
3272
3273         * runtime/FunctionExecutable.cpp:
3274         (JSC::FunctionExecutable::FunctionExecutable):
3275         (JSC::FunctionExecutable::finishCreation):
3276
3277 2019-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
3278
3279         [JSC] Do not use InferredValue in non-JIT configuration
3280         https://bugs.webkit.org/show_bug.cgi?id=194084
3281
3282         Reviewed by Saam Barati.
3283
3284         InferredValue is not meaningful if our VM is non-JIT configuration. InferredValue is used to watch the instantiation of the  FunctionExecutable's
3285         JSFunction and SymbolTable's JSScope to explore the chance of folding them into constants in DFG and FTL. If it is instantiated only once, we can
3286         put a watchpoint and fold it into this constant. But if JIT is disabled, we do not need to care it.
3287         Even in non-JIT configuration, we still use InferredValue for FunctionExecutable to determine whether the given FunctionExecutable is preferable
3288         target for poly proto. If JSFunction for the FunctionExecutable is used as a constructor and instantiated more than once, poly proto Structure
3289         seems appropriate for objects created by this JSFunction. But at that time, only thing we would like to know is that whether JSFunction for this
3290         FunctionExecutable is instantiated multiple times. This does not require the full feature of InferredValue, WatchpointState is enough.
3291         To summarize, since nobody uses InferredValue feature in non-JIT configuration, we should not create it.
3292
3293         * bytecode/ObjectAllocationProfileInlines.h:
3294         (JSC::ObjectAllocationProfile::initializeProfile):
3295         * runtime/FunctionExecutable.cpp:
3296         (JSC::FunctionExecutable::finishCreation):
3297         (JSC::FunctionExecutable::visitChildren):
3298         * runtime/FunctionExecutable.h:
3299         * runtime/InferredValue.cpp:
3300         (JSC::InferredValue::create):
3301         * runtime/JSAsyncFunction.cpp:
3302         (JSC::JSAsyncFunction::create):
3303         * runtime/JSAsyncGeneratorFunction.cpp:
3304         (JSC::JSAsyncGeneratorFunction::create):
3305         * runtime/JSFunction.cpp:
3306         (JSC::JSFunction::create):
3307         * runtime/JSFunctionInlines.h:
3308         (JSC::JSFunction::createWithInvalidatedReallocationWatchpoint):
3309         * runtime/JSGeneratorFunction.cpp:
3310         (JSC::JSGeneratorFunction::create):
3311         * runtime/JSSymbolTableObject.h:
3312         (JSC::JSSymbolTableObject::setSymbolTable):
3313         * runtime/SymbolTable.cpp:
3314         (JSC::SymbolTable::finishCreation):
3315         * runtime/VM.cpp:
3316         (JSC::VM::VM):
3317
3318 2019-01-31  Fujii Hironori  <Hironori.Fujii@sony.com>
3319
3320         [CMake][JSC] Changing ud_opcode.py should trigger invoking ud_opcode.py
3321         https://bugs.webkit.org/show_bug.cgi?id=194085
3322
3323         Reviewed by Yusuke Suzuki.
3324
3325         r240730 changed ud_itab.py and caused incremental build failures
3326         for Ninja builds.
3327
3328         * CMakeLists.txt: Added ud_itab.py and optable.xml to UDIS_GEN_DEP.
3329
3330 2019-01-30  Yusuke Suzuki  <ysuzuki@apple.com>
3331
3332         [JSC] Symbol should be in destructibleCellSpace
3333         https://bugs.webkit.org/show_bug.cgi?id=194082
3334
3335         Reviewed by Saam Barati.
3336
3337         Because Symbol's member was not poisoned, we changed the subspace for Symbol from destructibleCellSpace
3338         to cellJSValueOOBSpace. But the problem is cellJSValueOOBSpace is a space for cells which are not
3339         destructible. As a result, Symbol::destroy is never called, and SymbolImpl is leaked. This patch makes
3340         Symbol's space destructibleCellSpace to appropriately call the destructor.
3341
3342         * runtime/Symbol.h:
3343
3344 2019-01-30  Michael Catanzaro  <mcatanzaro@igalia.com>
3345
3346         Unreviewed, rolling out r240755.
3347
3348         This was not correct
3349
3350         Reverted changeset:
3351
3352         "Unreviewed, fix GCC build after r240730"
3353         https://bugs.webkit.org/show_bug.cgi?id=194041
3354         https://trac.webkit.org/changeset/240755
3355
3356 2019-01-30  Michael Catanzaro  <mcatanzaro@igalia.com>
3357
3358         Unreviewed, fix GCC build after r240730
3359         https://bugs.webkit.org/show_bug.cgi?id=194041
3360         <rdar://problem/47680981>
3361
3362         * disassembler/udis86/ud_itab.py:
3363         (UdItabGenerator.genOpcodeTablesLookupIndex):
3364
3365 2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>
3366
3367         testapi's `testBytecodeCache` does not need to run the code twice
3368         https://bugs.webkit.org/show_bug.cgi?id=194046
3369
3370         Reviewed by Mark Lam.
3371
3372         Since we populate the cache eagerly (unlike the stress tests) we don't
3373         need to run the code twice.
3374
3375         * API/tests/testapi.mm:
3376         (testBytecodeCache):
3377
3378 2019-01-30  Saam barati  <sbarati@apple.com>
3379
3380         [WebAssembly] Change BBQ to generate Air IR
3381         https://bugs.webkit.org/show_bug.cgi?id=191802
3382         <rdar://problem/47651718>
3383
3384         Reviewed by Keith Miller.
3385
3386         This patch adds a new Wasm compiler for the BBQ tier. Instead
3387         of compiling using  B3-01, we now generate Air code directly.
3388         The goal of doing this was to speed up compile times for Wasm
3389         programs.
3390         
3391         This patch provides us with a 20-30% compile time speedup. However, I
3392         have ideas on how to improve compile times even further. For example,
3393         we should probably implement a faster running register allocator:
3394         https://bugs.webkit.org/show_bug.cgi?id=194036
3395         
3396         We can also improve on the code we generate.
3397         We should emit better code for Switch: https://bugs.webkit.org/show_bug.cgi?id=194053
3398         And we should do better instruction selection in various
3399         areas: https://bugs.webkit.org/show_bug.cgi?id=193999
3400
3401         * JavaScriptCore.xcodeproj/project.pbxproj:
3402         * Sources.txt:
3403         * b3/B3LowerToAir.cpp:
3404         * b3/B3StackmapSpecial.h:
3405         * b3/air/AirCode.cpp:
3406         (JSC::B3::Air::Code::emitDefaultPrologue):
3407         * b3/air/AirCode.h:
3408         * b3/air/AirTmp.h:
3409         (JSC::B3::Air::Tmp::Tmp):
3410         * runtime/Options.h:
3411         * wasm/WasmAirIRGenerator.cpp: Added.
3412         (JSC::Wasm::ConstrainedTmp::ConstrainedTmp):
3413         (JSC::Wasm::TypedTmp::TypedTmp):
3414         (JSC::Wasm::TypedTmp::operator== const):
3415         (JSC::Wasm::TypedTmp::operator!= const):
3416         (JSC::Wasm::TypedTmp::operator bool const):
3417         (JSC::Wasm::TypedTmp::operator Tmp const):
3418         (JSC::Wasm::TypedTmp::operator Arg const):
3419         (JSC::Wasm::TypedTmp::tmp const):
3420         (JSC::Wasm::TypedTmp::type const):
3421         (JSC::Wasm::AirIRGenerator::ControlData::ControlData):
3422         (JSC::Wasm::AirIRGenerator::ControlData::dump const):
3423         (JSC::Wasm::AirIRGenerator::ControlData::type const):
3424         (JSC::Wasm::AirIRGenerator::ControlData::signature const):
3425         (JSC::Wasm::AirIRGenerator::ControlData::hasNonVoidSignature const):
3426         (JSC::Wasm::AirIRGenerator::ControlData::targetBlockForBranch):
3427         (JSC::Wasm::AirIRGenerator::ControlData::convertIfToBlock):
3428         (JSC::Wasm::AirIRGenerator::ControlData::resultForBranch const):
3429         (JSC::Wasm::AirIRGenerator::emptyExpression):
3430         (JSC::Wasm::AirIRGenerator::fail const):
3431         (JSC::Wasm::AirIRGenerator::setParser):
3432         (JSC::Wasm::AirIRGenerator::toTmpVector):
3433         (JSC::Wasm::AirIRGenerator::validateInst):
3434         (JSC::Wasm::AirIRGenerator::extractArg):
3435         (JSC::Wasm::AirIRGenerator::append):
3436         (JSC::Wasm::AirIRGenerator::appendEffectful):
3437         (JSC::Wasm::AirIRGenerator::newTmp):
3438         (JSC::Wasm::AirIRGenerator::g32):
3439         (JSC::Wasm::AirIRGenerator::g64):
3440         (JSC::Wasm::AirIRGenerator::f32):
3441         (JSC::Wasm::AirIRGenerator::f64):
3442         (JSC::Wasm::AirIRGenerator::tmpForType):
3443         (JSC::Wasm::AirIRGenerator::addPatchpoint):
3444         (JSC::Wasm::AirIRGenerator::emitPatchpoint):
3445         (JSC::Wasm::AirIRGenerator::emitCheck):
3446         (JSC::Wasm::AirIRGenerator::emitCCall):
3447         (JSC::Wasm::AirIRGenerator::moveOpForValueType):
3448         (JSC::Wasm::AirIRGenerator::instanceValue):
3449         (JSC::Wasm::AirIRGenerator::fixupPointerPlusOffset):
3450         (JSC::Wasm::AirIRGenerator::restoreWasmContextInstance):
3451         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
3452         (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
3453         (JSC::Wasm::AirIRGenerator::emitThrowException):
3454         (JSC::Wasm::AirIRGenerator::addLocal):
3455         (JSC::Wasm::AirIRGenerator::addConstant):
3456         (JSC::Wasm::AirIRGenerator::addArguments):
3457         (JSC::Wasm::AirIRGenerator::getLocal):
3458         (JSC::Wasm::AirIRGenerator::addUnreachable):
3459         (JSC::Wasm::AirIRGenerator::addGrowMemory):
3460         (JSC::Wasm::AirIRGenerator::addCurrentMemory):
3461         (JSC::Wasm::AirIRGenerator::setLocal):
3462         (JSC::Wasm::AirIRGenerator::getGlobal):
3463         (JSC::Wasm::AirIRGenerator::setGlobal):
3464         (JSC::Wasm::AirIRGenerator::emitCheckAndPreparePointer):
3465         (JSC::Wasm::sizeOfLoadOp):
3466         (JSC::Wasm::AirIRGenerator::emitLoadOp):
3467         (JSC::Wasm::AirIRGenerator::load):
3468         (JSC::Wasm::sizeOfStoreOp):
3469         (JSC::Wasm::AirIRGenerator::emitStoreOp):
3470         (JSC::Wasm::AirIRGenerator::store):
3471         (JSC::Wasm::AirIRGenerator::addSelect):
3472         (JSC::Wasm::AirIRGenerator::emitTierUpCheck):
3473         (JSC::Wasm::AirIRGenerator::addLoop):
3474         (JSC::Wasm::AirIRGenerator::addTopLevel):
3475         (JSC::Wasm::AirIRGenerator::addBlock):
3476         (JSC::Wasm::AirIRGenerator::addIf):
3477         (JSC::Wasm::AirIRGenerator::addElse):
3478         (JSC::Wasm::AirIRGenerator::addElseToUnreachable):
3479         (JSC::Wasm::AirIRGenerator::addReturn):
3480         (JSC::Wasm::AirIRGenerator::addBranch):
3481         (JSC::Wasm::AirIRGenerator::addSwitch):
3482         (JSC::Wasm::AirIRGenerator::endBlock):
3483         (JSC::Wasm::AirIRGenerator::addEndToUnreachable):
3484         (JSC::Wasm::AirIRGenerator::addCall):
3485         (JSC::Wasm::AirIRGenerator::addCallIndirect):
3486         (JSC::Wasm::AirIRGenerator::unify):
3487         (JSC::Wasm::AirIRGenerator::unifyValuesWithBlock):
3488         (JSC::Wasm::AirIRGenerator::dump):
3489         (JSC::Wasm::AirIRGenerator::origin):
3490         (JSC::Wasm::parseAndCompileAir):
3491         (JSC::Wasm::AirIRGenerator::emitChecksForModOrDiv):
3492         (JSC::Wasm::AirIRGenerator::emitModOrDiv):
3493         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32DivS>):
3494         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32RemS>):
3495         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32DivU>):
3496         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32RemU>):
3497         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64DivS>):
3498         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64RemS>):
3499         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64DivU>):
3500         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64RemU>):
3501         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Ctz>):
3502         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Ctz>):
3503         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Popcnt>):
3504         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Popcnt>):
3505         (JSC::Wasm::AirIRGenerator::addOp<F64ConvertUI64>):
3506         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertUI64>):
3507         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Nearest>):
3508         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Nearest>):
3509         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Trunc>):
3510         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Trunc>):
3511         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF64>):
3512         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF32>):
3513         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF64>):
3514         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF32>):
3515         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF64>):
3516         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
3517         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF32>):
3518         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
3519         (JSC::Wasm::AirIRGenerator::addShift):
3520         (JSC::Wasm::AirIRGenerator::addIntegerSub):
3521         (JSC::Wasm::AirIRGenerator::addFloatingPointAbs):
3522         (JSC::Wasm::AirIRGenerator::addFloatingPointBinOp):
3523         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ceil>):
3524         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Mul>):
3525         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Sub>):
3526         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Le>):
3527         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32DemoteF64>):
3528         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
3529         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ne>):
3530         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Lt>):
3531         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
3532         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Mul>):
3533         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Div>):
3534         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Clz>):
3535         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Copysign>):
3536         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertUI32>):
3537         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ReinterpretI32>):
3538         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64And>):
3539         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ne>):
3540         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Gt>):
3541         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Sqrt>):
3542         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ge>):
3543         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GtS>):
3544         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GtU>):
3545         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Eqz>):
3546         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Div>):
3547         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Add>):
3548         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Or>):
3549         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LeU>):
3550         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LeS>):
3551         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Ne>):
3552         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Clz>):
3553         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Neg>):
3554         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32And>):
3555         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LtU>):
3556         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotr>):
3557         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Abs>):
3558         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LtS>):
3559         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Eq>):
3560         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Copysign>):
3561         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertSI64>):
3562         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotl>):
3563         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Lt>):
3564         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertSI32>):
3565         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Eq>):
3566         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Le>):
3567         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ge>):
3568         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrU>):
3569         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertUI32>):
3570         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrS>):
3571         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GeU>):
3572         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ceil>):
3573         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GeS>):
3574         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Shl>):
3575         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Floor>):
3576         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Xor>):
3577         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Abs>):
3578         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
3579         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Mul>):
3580         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Sub>):
3581         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ReinterpretF32>):
3582         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Add>):
3583         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Sub>):
3584         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Or>):
3585         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LtU>):
3586         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LtS>):
3587         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertSI64>):
3588         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Xor>):
3589         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GeU>):
3590         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Mul>):
3591         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Sub>):
3592         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64PromoteF32>):
3593         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Add>):
3594         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GeS>):
3595         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ExtendUI32>):
3596         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Ne>):
3597         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ReinterpretI64>):
3598         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Eq>):
3599         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Eq>):
3600         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Floor>):
3601         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertSI32>):
3602         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Eqz>):
3603         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ReinterpretF64>):
3604         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrS>):
3605         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrU>):
3606         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Sqrt>):
3607         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Shl>):
3608         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Gt>):
3609         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32WrapI64>):
3610         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotl>):
3611         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotr>):
3612         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GtU>):
3613         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ExtendSI32>):
3614         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GtS>):
3615         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Neg>):
3616         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
3617         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LeU>):
3618         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LeS>):
3619         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Add>):
3620         * wasm/WasmAirIRGenerator.h: Added.
3621         * wasm/WasmB3IRGenerator.cpp:
3622         (JSC::Wasm::B3IRGenerator::emptyExpression):
3623         * wasm/WasmBBQPlan.cpp:
3624         (JSC::Wasm::BBQPlan::compileFunctions):
3625         * wasm/WasmCallingConvention.cpp:
3626         (JSC::Wasm::jscCallingConventionAir):
3627         (JSC::Wasm::wasmCallingConventionAir):
3628         * wasm/WasmCallingConvention.h:
3629         (JSC::Wasm::CallingConvention::CallingConvention):
3630         (JSC::Wasm::CallingConvention::marshallArgumentImpl const):
3631         (JSC::Wasm::CallingConvention::marshallArgument const):
3632         (JSC::Wasm::CallingConventionAir::CallingConventionAir):
3633         (JSC::Wasm::CallingConventionAir::prologueScratch const):
3634         (JSC::Wasm::CallingConventionAir::marshallArgumentImpl const):
3635         (JSC::Wasm::CallingConventionAir::marshallArgument const):
3636         (JSC::Wasm::CallingConventionAir::headerSizeInBytes):
3637         (JSC::Wasm::CallingConventionAir::loadArguments const):
3638         (JSC::Wasm::CallingConventionAir::setupCall const):
3639         (JSC::Wasm::nextJSCOffset):
3640         * wasm/WasmFunctionParser.h:
3641         (JSC::Wasm::FunctionParser<Context>::parseExpression):
3642         * wasm/WasmValidate.cpp:
3643         (JSC::Wasm::Validate::emptyExpression):
3644
3645 2019-01-30  Robin Morisset  <rmorisset@apple.com>
3646
3647         Object.keys can now lead to a PhantomNewArrayBuffer, OSR exit from the FTL should know how to materialize a NewArrayBuffer in that case
3648         https://bugs.webkit.org/show_bug.cgi?id=194050
3649         <rdar://problem/47595592>
3650
3651         Following https://bugs.webkit.org/show_bug.cgi?id=190047, PhantomNewArrayBuffer is no longer guaranteed to originate from a NewArrayBuffer in the baseline jit.
3652         It can now come from Object.keys, which is a function call. We must teach the FTL how to OSR exit in that case.
3653
3654         Reviewed by Yusuke Suzuki.
3655
3656         * ftl/FTLOperations.cpp:
3657         (JSC::FTL::operationMaterializeObjectInOSR):
3658
3659 2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>
3660
3661         Remove assertion that CachedSymbolTables should have no RareData
3662         https://bugs.webkit.org/show_bug.cgi?id=194037
3663
3664         Reviewed by Mark Lam.
3665
3666         It turns out that we don't need to cache the SymbolTableRareData and
3667         we should not assert that it's empty.
3668
3669         * runtime/CachedTypes.cpp:
3670         (JSC::CachedSymbolTable::encode):
3671
3672 2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>
3673
3674         CachedBytecode's move constructor should not call `freeDataIfOwned`
3675         https://bugs.webkit.org/show_bug.cgi?id=194045
3676
3677         Reviewed by Mark Lam.
3678
3679         That might result in freeing a garbage value
3680
3681         * parser/SourceProvider.h:
3682         (JSC::CachedBytecode::CachedBytecode):
3683
3684 2019-01-30  Keith Miller  <keith_miller@apple.com>
3685
3686         mul32 should convert powers of 2 to an lshift
3687         https://bugs.webkit.org/show_bug.cgi?id=193957
3688
3689         Reviewed by Yusuke Suzuki.
3690
3691         * assembler/MacroAssembler.h:
3692         (JSC::MacroAssembler::mul32):
3693         * assembler/testmasm.cpp:
3694         (JSC::int32Operands):
3695         (JSC::testMul32WithImmediates):
3696         (JSC::run):
3697
3698 2019-01-30  Yusuke Suzuki  <ysuzuki@apple.com>
3699
3700         [JSC] Make disassembler data structures constant read-only data
3701         https://bugs.webkit.org/show_bug.cgi?id=194041
3702
3703         Reviewed by Mark Lam.
3704
3705         Bunch of disassembler data structures are not marked "const", which prevents the loader to put them in read-only region.
3706         This patch makes them "const".
3707
3708         * disassembler/ARM64/A64DOpcode.cpp:
3709         * disassembler/udis86/ud_itab.py:
3710         (UdItabGenerator.genOpcodeTablesLookupIndex):
3711         (UdItabGenerator.genInsnTable):
3712         (UdItabGenerator.genMnemonicsList):
3713         (genItabH):
3714         * disassembler/udis86/udis86_decode.h:
3715         * disassembler/udis86/udis86_syn.c:
3716         * disassembler/udis86/udis86_syn.h:
3717         * disassembler/udis86/udis86_types.h:
3718
3719 2019-01-30  Yusuke Suzuki  <ysuzuki@apple.com>
3720
3721         Unreviewed, update the builtin test results
3722         https://bugs.webkit.org/show_bug.cgi?id=194015
3723
3724         * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
3725         * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
3726         * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
3727         * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
3728         * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
3729         * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
3730         * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
3731         * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
3732         * Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
3733         * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
3734         * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
3735         * Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
3736         * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
3737
3738 2019-01-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
3739
3740         [JSC] Make global static variables "const" as much as possible
3741         https://bugs.webkit.org/show_bug.cgi?id=194015
3742
3743         Reviewed by Mark Lam.
3744
3745         Some of global static variables are not "const". For example, `static const char* name = ...`
3746         is not constant variable. We should make it `static const char* const name = ...`.
3747
3748         * Scripts/wkbuiltins/builtins_generate_combined_header.py:
3749         (generate_externs_for_object):
3750         * Scripts/wkbuiltins/builtins_generate_separate_header.py:
3751         (generate_externs_for_object):
3752         * Scripts/wkbuiltins/builtins_generator.py:
3753         (BuiltinsGenerator.generate_embedded_code_string_section_for_data):
3754         * assembler/MacroAssembler.h:
3755         (JSC::MacroAssembler::additionBlindedConstant):
3756         * b3/air/AirFormTable.h:
3757         * b3/air/opcode_generator.rb:
3758         * runtime/JSObject.cpp:
3759         (JSC::JSObject::visitButterfly):
3760         * tools/CodeProfile.cpp:
3761         * tools/CodeProfile.h:
3762
3763 2019-01-29  Keith Miller  <keith_miller@apple.com>
3764
3765         Remove default constructor from LLIntPrototypeLoadAdaptiveStructureWatchpoint
3766         https://bugs.webkit.org/show_bug.cgi?id=194000
3767         <rdar://problem/47642894>
3768
3769         Reviewed by Mark Lam.
3770
3771         default constructor is unused and
3772         LLIntPrototypeLoadAdaptiveStructureWatchpoint has a reference
3773         data member which causes sadness.
3774
3775         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
3776
3777 2019-01-29  Ross Kirsling  <ross.kirsling@sony.com>
3778
3779         Remove FIXME for Annex B.3.5's "for-of var" subcase.
3780
3781         Rubber-stamped by Yusuke Suzuki.
3782
3783         This subcase is removed from the spec in https://github.com/tc39/ecma262/pull/1393.
3784
3785         * parser/Parser.h:
3786         (JSC::Parser::declareHoistedVariable):
3787
3788 2019-01-29  Mark Lam  <mark.lam@apple.com>
3789
3790         Remove unneeded CPU(BIG_ENDIAN) handling in LLInt after new bytecode format.
3791         https://bugs.webkit.org/show_bug.cgi?id=132333
3792
3793         Reviewed by Yusuke Suzuki.
3794
3795         * bytecode/InstructionStream.h:
3796         (JSC::InstructionStreamWriter::write):
3797         - The 32-bit write() function need not invert the order of the bytes written to
3798           the bytecode stream for CPU(BUG_ENDIAN) because the incoming uint32_t value to
3799           be written is already in big endian order for CPU(BUG_ENDIAN) platforms.
3800
3801         * llint/LLIntOfflineAsmConfig.h:
3802         - OFFLINE_ASM_BIG_ENDIAN is no longer needed nor used after the new bytecode format.
3803
3804 2019-01-29  Mark Lam  <mark.lam@apple.com>
3805
3806         ValueRecovery::recover() should purify NaN values it recovers.
3807         https://bugs.webkit.org/show_bug.cgi?id=193978
3808         <rdar://problem/47625488>
3809
3810         Reviewed by Saam Barati.
3811
3812         According to DFG::OSRExit::executeOSRExit() and DFG::OSRExit::compileExit(),
3813         recovered DoubleDisplacedInJSStack values need to be purified.
3814         ValueRecovery::recover() should do the same.
3815
3816         * bytecode/ValueRecovery.cpp:
3817         (JSC::ValueRecovery::recover const):
3818
3819 2019-01-29  Yusuke Suzuki  <ysuzuki@apple.com>
3820
3821         [JSC] FTL should handle LocalAllocator*
3822         https://bugs.webkit.org/show_bug.cgi?id=193980
3823
3824         Reviewed by Saam Barati.
3825
3826         At some point, Allocator holds LocalAllocator* instead of 32bit integer. In FTL allocation path, we fail to use this constant LocalAllocator*
3827         because the FTL still use the incoming value as 32bit integer there.
3828
3829         * ftl/FTLLowerDFGToB3.cpp:
3830         (JSC::FTL::DFG::LowerDFGToB3::allocateHeapCell):
3831
3832 2019-01-29  Keith Rollin  <krollin@apple.com>
3833
3834         Add .xcfilelists to Run Script build phases
3835         https://bugs.webkit.org/show_bug.cgi?id=193792
3836         <rdar://problem/47201785>
3837
3838         Reviewed by Alex Christensen.
3839
3840         As part of supporting XCBuild, update the necessary Run Script build
3841         phases in their Xcode projects to refer to their associated
3842         .xcfilelist files.
3843
3844         Note that the addition of these files bumps the Xcode project version
3845         number to something that's Xcode 10 compatible. This change means that
3846         older versions of the Xcode IDE can't read these projects. Nor can it
3847         fully load workspaces that refer to these projects (the updated
3848         projects are shown as non-expandable placeholders). `xcodebuild` can
3849         still build these projects; it's just that the IDE can't open them.
3850
3851         * JavaScriptCore.xcodeproj/project.pbxproj:
3852
3853 2019-01-29  Dominik Infuehr  <dinfuehr@igalia.com>
3854
3855         [ARM] Check for negative zero instead of just zero
3856         https://bugs.webkit.org/show_bug.cgi?id=193689
3857
3858         Reviewed by Mark Lam.
3859
3860         ARM now performs a negative zero check in branchConvertDoubleToInt32 instead
3861         of just bailing out for zero.
3862
3863         * assembler/MacroAssemblerARMv7.h:
3864         (JSC::MacroAssemblerARMv7::branchConvertDoubleToInt32):
3865
3866 2019-01-28  Devin Rousso  <drousso@apple.com>
3867
3868         Web Inspector: provide a way to edit page WebRTC settings on a remote target
3869         https://bugs.webkit.org/show_bug.cgi?id=193863
3870         <rdar://problem/47572764>
3871
3872         Reviewed by Joseph Pecoraro.
3873
3874         * inspector/protocol/Page.json:
3875         Add more values to the `Setting` enum type:
3876          - `ICECandidateFilteringEnabled`
3877          - `MediaCaptureRequiresSecureConnection`
3878          - `MockCaptureDevicesEnabled`
3879
3880 2019-01-28  Ross Kirsling  <ross.kirsling@sony.com>
3881
3882         Remove unnecessary `using namespace WTF`s (or at least restrict their scope).
3883         https://bugs.webkit.org/show_bug.cgi?id=193941
3884
3885         Reviewed by Alex Christensen.
3886
3887         * API/JSWeakObjectMapRefPrivate.cpp:
3888         * bytecompiler/NodesCodegen.cpp:
3889         * heap/MachineStackMarker.cpp:
3890         * jit/ExecutableAllocator.cpp:
3891         * jsc.cpp: