cd3138af66aa2cf4748a666c06f5ac5d11a3d2df
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2018-12-18  David Kilzer  <ddkilzer@apple.com>
2
3         clang-tidy: Use const reference for MediaTime parameter to prevent object copy
4         <https://webkit.org/b/192814>
5
6         Reviewed by Mark Lam.
7
8         * runtime/JSCJSValue.h:
9         (JSC::jsNumber):
10
11 2018-12-18  Saam Barati  <sbarati@apple.com>
12
13         Unreviewed. Appease a build error where we weren't using a variable defined in an "if"
14
15         * dfg/DFGAbstractInterpreterInlines.h:
16         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
17
18 2018-12-17  Mark Lam  <mark.lam@apple.com>
19
20         Array unshift/shift should not race against the AI in the compiler thread.
21         https://bugs.webkit.org/show_bug.cgi?id=192795
22         <rdar://problem/46724263>
23
24         Reviewed by Saam Barati.
25
26         The Array unshift and shift operations for ArrayStorage type arrays are protected
27         using the cellLock.  The AbstractInterpreter's foldGetByValOnConstantProperty()
28         function does grab the cellLock before reading a value from the array's ArrayStorage,
29         but does not get the array butterfly under the protection of the cellLock.
30
31         This is insufficient and racy.  For ArrayStorage type arrays, the fetching of the
32         butterfly also needs to be protected by the cellLock.  The unshift / shift
33         operations can move values around in the butterfly.  Hence, the fact that AI has
34         fetched a butterfly pointer (while ensuring no structure change) is insufficient
35         to guarantee that the values in the butterfly haven't shifted.
36
37         Having AI hold the cellLock the whole time (from before fetching the butterfly
38         till after reading the value from it) eliminates this race.  Note: we only need
39         to do this for ArrayStorage type arrays.
40
41         Note also that though AI is holding the cellLock in this case, we still need to
42         ensure that the array structure hasn't changed around the fetching of the butterfly.
43         This is because operations other than unshift and shift are guarded by this
44         protocol, and not the cellLock.
45
46         * dfg/DFGAbstractInterpreterInlines.h:
47         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
48         * runtime/JSArray.cpp:
49         (JSC::JSArray::unshiftCountSlowCase):
50
51 2018-12-16  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
52
53         [JSC] Optimize Object.keys by caching own keys results in StructureRareData
54         https://bugs.webkit.org/show_bug.cgi?id=190047
55
56         Reviewed by Saam Barati.
57
58         Object.keys is one of the most frequently used function in web-tooling-benchmarks (WTB).
59         Object.keys is dominant in lebab of WTB, and frequently called in babel and others.
60         Since our Structure knows the shape of JSObject, we can cache the result of Object.keys
61         in Structure (StructureRareData) as we cache JSPropertyNameEnumerator in StructureRareData.
62
63         This patch caches the result of Object.keys in StructureRareData. The cached array is created
64         as JSImmutableButterfly. And Object.keys creates CoW from this data. Currently, the lifetime
65         strategy of this JSImmutableButterfly is the same to cached JSPropertyNameEnumerator. It is
66         referenced from Structure, and collected when Structure is collected.
67
68         This improves several benchmarks in SixSpeed.
69
70                                         baseline                  patched
71
72             object-assign.es5      350.1710+-3.6303     ^    226.0368+-4.7558        ^ definitely 1.5492x faster
73             for-of-object.es6      269.1941+-3.3430     ^    127.9317+-2.3875        ^ definitely 2.1042x faster
74
75         And it improves WTB lebab by 11.8%.
76
77             Before: lebab:  6.10 runs/s
78             After:  lebab:  6.82 runs/s
79
80         * dfg/DFGAbstractInterpreterInlines.h:
81         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
82         * dfg/DFGByteCodeParser.cpp:
83         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
84         * dfg/DFGClobberize.h:
85         (JSC::DFG::clobberize):
86         * dfg/DFGConstantFoldingPhase.cpp:
87         (JSC::DFG::ConstantFoldingPhase::foldConstants):
88         * dfg/DFGDoesGC.cpp:
89         (JSC::DFG::doesGC):
90         * dfg/DFGFixupPhase.cpp:
91         (JSC::DFG::FixupPhase::fixupNode):
92         * dfg/DFGNode.cpp:
93         (JSC::DFG::Node::convertToNewArrayBuffer):
94         * dfg/DFGNode.h:
95         * dfg/DFGNodeType.h:
96         * dfg/DFGOperations.cpp:
97         * dfg/DFGOperations.h:
98         * dfg/DFGPredictionPropagationPhase.cpp:
99         * dfg/DFGSafeToExecute.h:
100         (JSC::DFG::safeToExecute):
101         * dfg/DFGSpeculativeJIT.cpp:
102         (JSC::DFG::SpeculativeJIT::compileObjectKeys):
103         * dfg/DFGSpeculativeJIT.h:
104         * dfg/DFGSpeculativeJIT32_64.cpp:
105         (JSC::DFG::SpeculativeJIT::compile):
106         * dfg/DFGSpeculativeJIT64.cpp:
107         (JSC::DFG::SpeculativeJIT::compile):
108         * ftl/FTLAbstractHeapRepository.h:
109         * ftl/FTLCapabilities.cpp:
110         (JSC::FTL::canCompile):
111         * ftl/FTLLowerDFGToB3.cpp:
112         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
113         (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys):
114         * runtime/Butterfly.h:
115         (JSC::ContiguousData::Data::setStartingValue):
116         * runtime/Intrinsic.cpp:
117         (JSC::intrinsicName):
118         * runtime/Intrinsic.h:
119         * runtime/JSImmutableButterfly.h:
120         (JSC::JSImmutableButterfly::JSImmutableButterfly):
121         We set JSEmpty to the underlying butterfly storage if indexing type is Contiguous.
122         Otherwise, JSImmutableButterfly is half-baked one until all the storage is filled with some meaningful values, it leads to crash
123         if half-baked JSImmutableButterfly is exposed to GC.
124         * runtime/ObjectConstructor.cpp:
125         (JSC::ownPropertyKeys):
126         * runtime/Structure.cpp:
127         (JSC::Structure::canCachePropertyNameEnumerator const):
128         * runtime/Structure.h:
129         * runtime/StructureInlines.h:
130         (JSC::Structure::setCachedOwnKeys):
131         (JSC::Structure::cachedOwnKeys const):
132         (JSC::Structure::cachedOwnKeysIgnoringSentinel const):
133         (JSC::Structure::canCacheOwnKeys const):
134         * runtime/StructureRareData.cpp:
135         (JSC::StructureRareData::visitChildren):
136         (JSC::StructureRareData::cachedPropertyNameEnumerator const): Deleted.
137         (JSC::StructureRareData::setCachedPropertyNameEnumerator): Deleted.
138         * runtime/StructureRareData.h:
139         * runtime/StructureRareDataInlines.h:
140         (JSC::StructureRareData::cachedPropertyNameEnumerator const):
141         (JSC::StructureRareData::setCachedPropertyNameEnumerator):
142         (JSC::StructureRareData::cachedOwnKeys const):
143         (JSC::StructureRareData::cachedOwnKeysIgnoringSentinel const):
144         (JSC::StructureRareData::cachedOwnKeysConcurrently const):
145         (JSC::StructureRareData::setCachedOwnKeys):
146         (JSC::StructureRareData::previousID const): Deleted.
147         * runtime/VM.cpp:
148         (JSC::VM::VM):
149
150 2018-12-17  Mark Lam  <mark.lam@apple.com>
151
152         SamplingProfiler's isValidFramePointer() should reject address at stack origin.
153         https://bugs.webkit.org/show_bug.cgi?id=192779
154         <rdar://problem/46775869>
155
156         Reviewed by Saam Barati.
157
158         isValidFramePointer() was previously treating the address at StackBounds::origin()
159         as valid stack memory.  This is not true.  StackBounds::origin() is actually the
160         first address beyond valid stack memory. This is now fixed.
161
162         * runtime/SamplingProfiler.cpp:
163         (JSC::FrameWalker::isValidFramePointer):
164
165 2018-12-17  Mark Lam  <mark.lam@apple.com>
166
167         Suppress ASAN on valid stack accesses in Probe-based OSRExit::executeOSRExit().
168         https://bugs.webkit.org/show_bug.cgi?id=192776
169         <rdar://problem/46772368>
170
171         Reviewed by Keith Miller.
172
173         1. Add some asanUnsafe methods to the Register class.
174         2. Update the probe-based OSRExit::executeOSRExit() to use these asanUnsafe methods.
175
176         * dfg/DFGOSRExit.cpp:
177         (JSC::DFG::OSRExit::executeOSRExit):
178         * interpreter/Register.h:
179         (JSC::Register::asanUnsafeUnboxedInt32 const):
180         (JSC::Register::asanUnsafeUnboxedInt52 const):
181         (JSC::Register::asanUnsafeUnboxedStrictInt52 const):
182         (JSC::Register::asanUnsafeUnboxedDouble const):
183         (JSC::Register::asanUnsafeUnboxedCell const):
184
185 2018-12-17  Mark Lam  <mark.lam@apple.com>
186
187         Fix stale assertion in attemptToForceStringArrayModeByToStringConversion().
188         https://bugs.webkit.org/show_bug.cgi?id=192770
189         <rdar://problem/46449037>
190
191         Reviewed by Keith Miller.
192
193         This assertion was added before Array::OriginalNonArray was introduced.  It just
194         needs to be updated to allow for Array::OriginalNonArray.
195
196         * dfg/DFGFixupPhase.cpp:
197         (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
198
199 2018-12-17  Matt Lewis  <jlewis3@apple.com>
200
201         Unreviewed, rolling out r239254.
202
203         This broke the Windows 10 Debug build
204
205         Reverted changeset:
206
207         "Replace many uses of String::format with more type-safe
208         alternatives"
209         https://bugs.webkit.org/show_bug.cgi?id=192742
210         https://trac.webkit.org/changeset/239254
211
212 2018-12-15  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
213
214         Unreviewed, suppress warnings in Linux
215
216         * jsc.cpp:
217         (jscmain):
218
219 2018-12-15  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
220
221         Null pointer dereference in JSC::WriteBarrierBase()
222         https://bugs.webkit.org/show_bug.cgi?id=191252
223
224         Reviewed by Keith Miller.
225
226         JSPromiseDeferred::create can return nullptr and an exception if stack overflow happens.
227         We would like to make it RELEASE_ASSERT since the current module mechanism is not immune
228         to stack overflow.
229
230         This patch renames JSPromiseDeferred::create to JSPromiseDeferred::tryCreate to tell that
231         it can return nullptr. And we insert error checks or assertions after this call.
232
233         * jsc.cpp:
234         (GlobalObject::moduleLoaderImportModule):
235         (GlobalObject::moduleLoaderFetch):
236         * runtime/Completion.cpp:
237         (JSC::rejectPromise):
238         * runtime/JSGlobalObjectFunctions.cpp:
239         (JSC::globalFuncImportModule):
240         * runtime/JSInternalPromiseDeferred.cpp:
241         (JSC::JSInternalPromiseDeferred::tryCreate):
242         (JSC::JSInternalPromiseDeferred::create): Deleted.
243         * runtime/JSInternalPromiseDeferred.h:
244         * runtime/JSModuleLoader.cpp:
245         (JSC::JSModuleLoader::importModule):
246         (JSC::JSModuleLoader::resolve):
247         (JSC::JSModuleLoader::fetch):
248         (JSC::moduleLoaderParseModule):
249         * runtime/JSPromise.h:
250         * runtime/JSPromiseDeferred.cpp:
251         (JSC::JSPromiseDeferred::tryCreate):
252         * runtime/JSPromiseDeferred.h:
253         * wasm/js/WebAssemblyPrototype.cpp:
254         (JSC::webAssemblyCompileFunc):
255         (JSC::webAssemblyInstantiateFunc):
256         (JSC::webAssemblyCompileStreamingInternal):
257         (JSC::webAssemblyInstantiateStreamingInternal):
258
259 2018-12-15  Darin Adler  <darin@apple.com>
260
261         Use warning-ignoring macros more consistently and simply
262         https://bugs.webkit.org/show_bug.cgi?id=192743
263
264         Reviewed by Mark Lam.
265
266         * dfg/DFGSpeculativeJIT64.cpp: Use IGNORE_WARNINGS_BEGIN/END instead of
267         IGNORE_CLANG_WARNINGS_BEGIN/END. Other callsites are using the non-clang-specific
268         one for this warning, "implicit-fallthrough", and it seems there is no special
269         need to use the clang-specific one here.
270         * llint/LLIntData.cpp: Ditto, but here it's "missing-noreturn"."
271         * tools/CodeProfiling.cpp: Ditto.
272
273 2018-12-15  Darin Adler  <darin@apple.com>
274
275         Replace many uses of String::format with more type-safe alternatives
276         https://bugs.webkit.org/show_bug.cgi?id=192742
277
278         Reviewed by Mark Lam.
279
280         * inspector/InjectedScriptBase.cpp:
281         (Inspector::InjectedScriptBase::makeCall): Use makeString.
282         (Inspector::InjectedScriptBase::makeAsyncCall): Ditto.
283         * inspector/InspectorBackendDispatcher.cpp:
284         (Inspector::BackendDispatcher::getPropertyValue): Ditto.
285         * inspector/agents/InspectorConsoleAgent.cpp:
286         (Inspector::InspectorConsoleAgent::enable): Ditto.
287         * jsc.cpp:
288         (FunctionJSCStackFunctor::operator() const): Ditto.
289
290         * runtime/IntlDateTimeFormat.cpp:
291         (JSC::IntlDateTimeFormat::initializeDateTimeFormat): Use string concatenation.
292         * runtime/IntlObject.cpp:
293         (JSC::canonicalizeLocaleList): Ditto.
294
295 2018-12-14  Darin Adler  <darin@apple.com>
296
297         LiteralParser has a bunch of uses of String::format with untrusted data
298         https://bugs.webkit.org/show_bug.cgi?id=108883
299         rdar://problem/13666409
300
301         Reviewed by Mark Lam.
302
303         * runtime/LiteralParser.cpp:
304         (JSC::LiteralParser<CharType>::Lexer::lex): Use makeString instead of String::format.
305         (JSC::LiteralParser<CharType>::Lexer::lexStringSlow): Ditto.
306         (JSC::LiteralParser<CharType>::parse): Ditto.
307
308         * runtime/LiteralParser.h:
309         (JSC::LiteralParser::getErrorMessage): Use string concatenation instead of
310         String::format.
311
312 2018-12-14  Mark Lam  <mark.lam@apple.com>
313
314         CallFrame::convertToStackOverflowFrame() needs to keep the top CodeBlock alive.
315         https://bugs.webkit.org/show_bug.cgi?id=192717
316         <rdar://problem/46660677>
317
318         Reviewed by Saam Barati.
319
320         When throwing a StackOverflowError, we convert the topCallFrame into a
321         StackOverflowFrame.  Previously, we would nullify the codeBlock field in the frame
322         because a StackOverflowFrame is only a sentinel and doesn't really correspond to
323         any CodeBlocks.  However, this is a problem because the topCallFrame may be the
324         only remaining place that references the CodeBlock that the stack overflow is
325         triggered in.  The way we handle exceptions in JIT code is to return (from the
326         runtime operation function throwing the exception) to the JIT code to check for
327         the exception and if needed, do some clean up before jumping to the exception
328         handling thunk.  As a result, we need to keep that JIT code alive, which means we
329         need to keep its CodeBlock alive.  We only need to keep this CodeBlock alive until
330         we've unwound (in terms of exception handling) out of it.
331
332         We fix this issue by storing the CodeBlock to keep alive in the StackOverflowFrame
333         for the GC to scan while the frame is still on the stack.
334
335         We removed the call to convertToStackOverflowFrame() in
336         lookupExceptionHandlerFromCallerFrame() because it is redundant.
337         lookupExceptionHandlerFromCallerFrame() will only every be called after
338         a StackOverFlowError has been thrown.  Hence, the top frame is already
339         guaranteed to be a StackOverflowFrame, and there should always be a
340         StackOverFlowError exception pending.  We added assertions for these
341         instead.
342
343         * interpreter/CallFrame.cpp:
344         (JSC::CallFrame::convertToStackOverflowFrame):
345         * interpreter/CallFrame.h:
346         * jit/JITOperations.cpp:
347         * llint/LLIntSlowPaths.cpp:
348         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
349         * runtime/CommonSlowPaths.cpp:
350         (JSC::SLOW_PATH_DECL):
351         * runtime/CommonSlowPaths.h:
352         (JSC::CommonSlowPaths::codeBlockFromCallFrameCallee):
353         (JSC::CommonSlowPaths::arityCheckFor):
354         * runtime/VM.h:
355         (JSC::VM::exceptionForInspection const):
356
357 2018-12-14  David Kilzer  <ddkilzer@apple.com>
358
359         clang-tidy: Fix unnecessary copy of objects for operator==() methods
360         <https://webkit.org/b/192712>
361         <rdar://problem/46739332>
362
363         Reviewed by Andy Estes.
364
365         * b3/air/AirAllocateRegistersByGraphColoring.cpp:
366         (JSC::B3::Air::(anonymous namespace)::AbstractColoringAllocator::InterferenceEdge::operator==):
367         - Change argument from const to const reference to avoid a copy.
368
369 2018-12-14  Commit Queue  <commit-queue@webkit.org>
370
371         Unreviewed, rolling out r239153, r239154, and r239155.
372         https://bugs.webkit.org/show_bug.cgi?id=192715
373
374         Caused flaky GC-related crashes seen with layout tests
375         (Requested by ryanhaddad on #webkit).
376
377         Reverted changesets:
378
379         "[JSC] Optimize Object.keys by caching own keys results in
380         StructureRareData"
381         https://bugs.webkit.org/show_bug.cgi?id=190047
382         https://trac.webkit.org/changeset/239153
383
384         "Unreviewed, build fix after r239153"
385         https://bugs.webkit.org/show_bug.cgi?id=190047
386         https://trac.webkit.org/changeset/239154
387
388         "Unreviewed, build fix after r239153, part 2"
389         https://bugs.webkit.org/show_bug.cgi?id=190047
390         https://trac.webkit.org/changeset/239155
391
392 2018-12-14  Keith Miller  <keith_miller@apple.com>
393
394         Callers of JSString::getIndex should check for OOM exceptions
395         https://bugs.webkit.org/show_bug.cgi?id=192709
396
397         Reviewed by Mark Lam.
398
399         This patch also allows Strings to OOM when the StringObject wrapper
400         attempts to look up an own property on the string.
401
402         Remove isExtensibleImpl because it's only used in one place and call
403         isStructureExtensible instead.
404
405         * runtime/JSObject.cpp:
406         (JSC::JSObject::isExtensible):
407         * runtime/JSObject.h:
408         (JSC::JSObject::isExtensibleImpl): Deleted.
409         * runtime/JSString.h:
410         (JSC::JSString::getStringPropertySlot):
411         * runtime/StringObject.cpp:
412         (JSC::StringObject::defineOwnProperty):
413
414 2018-12-13  Fujii Hironori  <Hironori.Fujii@sony.com>
415
416         [WinCairo][Clang] DLLLauncherMain.cpp: warning: unused function 'prependPath' and 'appleApplicationSupportDirectory'
417         https://bugs.webkit.org/show_bug.cgi?id=192688
418
419         Reviewed by Ross Kirsling.
420
421         These functions are used only in AppleWin port.
422
423         * shell/DLLLauncherMain.cpp:
424         (copyEnvironmentVariable): Moved.
425         (getStringValue): Enclosed with #if !defined(WIN_CAIRO).
426         (applePathFromRegistry): Ditto.
427         (appleApplicationSupportDirectory): Ditto.
428         (prependPath): Ditto.
429
430 2018-12-13  Dominik Infuehr  <dinfuehr@igalia.com>
431
432         Improve GDB output for LLInt on Linux
433         https://bugs.webkit.org/show_bug.cgi?id=192660
434
435         Reviewed by Yusuke Suzuki.
436
437         Annotate assembly code generated for LLInt with the bytecode operation. When debugging
438         LLInt assembly code GDB is then able to show which bytecode instruction is implemented by
439         the current assembly code. This also works for linux-perf.
440
441         * llint/LowLevelInterpreter.cpp:
442         * offlineasm/arm.rb:
443
444 2018-12-13  Mark Lam  <mark.lam@apple.com>
445
446         Add a missing exception check.
447         https://bugs.webkit.org/show_bug.cgi?id=192626
448         <rdar://problem/46662163>
449
450         Reviewed by Keith Miller.
451
452         * runtime/ScopedArguments.h:
453
454 2018-12-13  Saam Barati  <sbarati@apple.com>
455
456         The JSC shell should listen for memory pressure events and respond to them
457         https://bugs.webkit.org/show_bug.cgi?id=192647
458
459         Reviewed by Keith Miller.
460
461         We want the JSC shell to behave more like the WebContent process when
462         it comes to running performance tests. One way to make the shell
463         more like this is to have it respond to memory pressure events in
464         a similar way as the WebContent process. This makes it easier to run
465         benchmarks like JetStream2 on the CLI on iOS.
466
467         * jsc.cpp:
468         (jscmain):
469         * runtime/VM.cpp:
470         (JSC::VM::drainMicrotasks):
471         * runtime/VM.h:
472         (JSC::VM::setOnEachMicrotaskTick):
473
474 2018-12-13  Mark Lam  <mark.lam@apple.com>
475
476         Ensure that StructureFlags initialization always starts with Base::StructureFlags.
477         https://bugs.webkit.org/show_bug.cgi?id=192686
478
479         Reviewed by Keith Miller.
480
481         This is purely a refactoring effort to make the code consistently start all
482         StructureFlags initialization with Base::StructureFlags.  Previously, sometimes
483         Base::StructureFlags is appended at the end, and sometimes, it is expressed using
484         the name of the superclass.  This patch makes the code all consistent and easier
485         to do a quick eye scan audit on to verify that no StructureFlags are forgetting
486         to inherit Base::StructureFlags.
487
488         Also added a static_assert in JSCallbackObject.h and JSBoundFunction.h.  Both of
489         these implement a customHasInstance() method, and rely on ImplementsHasInstance
490         being included in the StructureFlags, and conversely, ImplementsDefaultHasInstance
491         has to be excluded.
492
493         JSBoundFunction.h is the only case where a bit (ImplementsDefaultHasInstance)
494         needs to be masked out of the inherited Base::StructureFlags.
495
496         * API/JSCallbackObject.h:
497         * runtime/ArrayConstructor.h:
498         * runtime/ArrayIteratorPrototype.h:
499         * runtime/Exception.h:
500         * runtime/FunctionRareData.h:
501         * runtime/InferredType.h:
502         * runtime/InferredTypeTable.h:
503         * runtime/InferredValue.h:
504         * runtime/JSBoundFunction.h:
505         * runtime/MapPrototype.h:
506         * runtime/SetPrototype.h:
507         * runtime/StringPrototype.h:
508         * runtime/SymbolConstructor.h:
509
510 2018-12-13  Mark Lam  <mark.lam@apple.com>
511
512         Add the JSC_traceBaselineJITExecution option for tracing baseline JIT execution.
513         https://bugs.webkit.org/show_bug.cgi?id=192684
514
515         Reviewed by Saam Barati.
516
517         This dataLogs the bytecode execution order of baseline JIT code when the
518         JSC_traceBaselineJITExecution option is true.
519
520         * jit/JIT.cpp:
521         (JSC::JIT::privateCompileMainPass):
522         (JSC::JIT::privateCompileSlowCases):
523         * runtime/Options.h:
524
525 2018-12-13  David Kilzer  <ddkilzer@apple.com>
526
527         clang-tidy: Fix unnecessary object copies in JavaScriptCore
528         <https://webkit.org/b/192680>
529         <rdar://problem/46708767>
530
531         Reviewed by Mark Lam.
532
533         * assembler/testmasm.cpp:
534         (JSC::invoke):
535         - Make MacroAssemblerCodeRef<JSEntryPtrTag> argument a const
536           reference.
537
538         * b3/testb3.cpp:
539         (JSC::B3::checkDisassembly):
540         - Make CString argument a const reference.
541
542         * dfg/DFGSpeculativeJIT.cpp:
543         (JSC::DFG::SpeculativeJIT::compileStringEquality):
544         * dfg/DFGSpeculativeJIT.h:
545         * dfg/DFGSpeculativeJIT32_64.cpp:
546         (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
547         * dfg/DFGSpeculativeJIT64.cpp:
548         (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
549         - Make JITCompiler::JumpList arguments a const reference.
550
551         * ftl/FTLLowerDFGToB3.cpp:
552         (JSC::FTL::DFG::LowerDFGToB3::checkStructure):
553         - Make RegisteredStructureSet argument a const reference.
554
555         * jsc.cpp:
556         (GlobalObject::moduleLoaderImportModule): Make local auto
557         variables const references.
558         (Workers::report): Make String argument a const reference.
559         (addOption): Make Identifier argument a const reference.
560         (runJSC): Make CString loop variable a const reference.
561
562 2018-12-13  Devin Rousso  <drousso@apple.com>
563
564         Web Inspector: remove DOM.BackendNodeId and associated commands/events
565         https://bugs.webkit.org/show_bug.cgi?id=192478
566
567         Reviewed by Matt Baker.
568
569         * inspector/protocol/DOM.json:
570
571 2018-12-13  Caio Lima  <ticaiolima@gmail.com>
572
573         [BigInt] Add ValueDiv into DFG
574         https://bugs.webkit.org/show_bug.cgi?id=186178
575
576         Reviewed by Yusuke Suzuki.
577
578         This patch is introducing a new node type called ValueDiv. This node
579         is responsible to handle Untyped and Bigint specialization of division
580         operator, while the ArithDiv variant handles Number/Boolean cases.
581
582         BigInt specialization generates following speedup into simple
583         benchmark:
584
585                                   noSpec                 changes
586
587         big-int-simple-div    10.6013+-0.4682    ^    8.4518+-0.0943   ^ definitely 1.2543x faster
588
589         * dfg/DFGAbstractInterpreterInlines.h:
590         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
591         * dfg/DFGBackwardsPropagationPhase.cpp:
592         (JSC::DFG::BackwardsPropagationPhase::propagate):
593         * dfg/DFGByteCodeParser.cpp:
594         (JSC::DFG::ByteCodeParser::makeDivSafe):
595         (JSC::DFG::ByteCodeParser::parseBlock):
596         * dfg/DFGClobberize.h:
597         (JSC::DFG::clobberize):
598         * dfg/DFGDoesGC.cpp:
599         (JSC::DFG::doesGC):
600         * dfg/DFGFixupPhase.cpp:
601         (JSC::DFG::FixupPhase::fixupArithDiv):
602         (JSC::DFG::FixupPhase::fixupNode):
603         * dfg/DFGNode.h:
604         (JSC::DFG::Node::arithNodeFlags):
605         * dfg/DFGNodeType.h:
606         * dfg/DFGOperations.cpp:
607         * dfg/DFGOperations.h:
608         * dfg/DFGPredictionPropagationPhase.cpp:
609         * dfg/DFGSafeToExecute.h:
610         (JSC::DFG::safeToExecute):
611         * dfg/DFGSpeculativeJIT.cpp:
612         (JSC::DFG::SpeculativeJIT::compileValueDiv):
613         (JSC::DFG::SpeculativeJIT::compileArithDiv):
614         * dfg/DFGSpeculativeJIT.h:
615         * dfg/DFGSpeculativeJIT32_64.cpp:
616         (JSC::DFG::SpeculativeJIT::compile):
617         * dfg/DFGSpeculativeJIT64.cpp:
618         (JSC::DFG::SpeculativeJIT::compile):
619         * dfg/DFGValidate.cpp:
620         * ftl/FTLCapabilities.cpp:
621         (JSC::FTL::canCompile):
622         * ftl/FTLLowerDFGToB3.cpp:
623         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
624         (JSC::FTL::DFG::LowerDFGToB3::compileValueDiv):
625         (JSC::FTL::DFG::LowerDFGToB3::compileArithDiv):
626         (JSC::FTL::DFG::LowerDFGToB3::compileArithBitNot):
627
628 2018-12-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
629
630         Unreviewed, build fix after r239153, part 2
631         https://bugs.webkit.org/show_bug.cgi?id=190047
632
633         * runtime/StructureRareDataInlines.h:
634         (JSC::StructureRareData::cachedOwnKeys const):
635
636 2018-12-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
637
638         Unreviewed, build fix after r239153
639         https://bugs.webkit.org/show_bug.cgi?id=190047
640
641         * runtime/StructureRareDataInlines.h:
642         (JSC::StructureRareData::cachedOwnKeys const):
643
644 2018-12-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
645
646         [JSC] Optimize Object.keys by caching own keys results in StructureRareData
647         https://bugs.webkit.org/show_bug.cgi?id=190047
648
649         Reviewed by Keith Miller.
650
651         Object.keys is one of the most frequently used function in web-tooling-benchmarks (WTB).
652         Object.keys is dominant in lebab of WTB, and frequently called in babel and others.
653         Since our Structure knows the shape of JSObject, we can cache the result of Object.keys
654         in Structure (StructureRareData) as we cache JSPropertyNameEnumerator in StructureRareData.
655
656         This patch caches the result of Object.keys in StructureRareData. The cached array is created
657         as JSImmutableButterfly. And Object.keys creates CoW from this data. Currently, the lifetime
658         strategy of this JSImmutableButterfly is the same to cached JSPropertyNameEnumerator. It is
659         referenced from Structure, and collected when Structure is collected.
660
661         This improves several benchmarks in SixSpeed.
662
663                                         baseline                  patched
664
665             object-assign.es5      350.1710+-3.6303     ^    226.0368+-4.7558        ^ definitely 1.5492x faster
666             for-of-object.es6      269.1941+-3.3430     ^    127.9317+-2.3875        ^ definitely 2.1042x faster
667
668         And it improves WTB lebab by 11.8%.
669
670             Before: lebab:  6.10 runs/s
671             After:  lebab:  6.82 runs/s
672
673         * dfg/DFGAbstractInterpreterInlines.h:
674         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
675         * dfg/DFGByteCodeParser.cpp:
676         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
677         * dfg/DFGClobberize.h:
678         (JSC::DFG::clobberize):
679         * dfg/DFGConstantFoldingPhase.cpp:
680         (JSC::DFG::ConstantFoldingPhase::foldConstants):
681         * dfg/DFGDoesGC.cpp:
682         (JSC::DFG::doesGC):
683         * dfg/DFGFixupPhase.cpp:
684         (JSC::DFG::FixupPhase::fixupNode):
685         * dfg/DFGNode.cpp:
686         (JSC::DFG::Node::convertToNewArrayBuffer):
687         * dfg/DFGNode.h:
688         * dfg/DFGNodeType.h:
689         * dfg/DFGOperations.cpp:
690         * dfg/DFGOperations.h:
691         * dfg/DFGPredictionPropagationPhase.cpp:
692         * dfg/DFGSafeToExecute.h:
693         (JSC::DFG::safeToExecute):
694         * dfg/DFGSpeculativeJIT.cpp:
695         (JSC::DFG::SpeculativeJIT::compileObjectKeys):
696         * dfg/DFGSpeculativeJIT.h:
697         * dfg/DFGSpeculativeJIT32_64.cpp:
698         (JSC::DFG::SpeculativeJIT::compile):
699         * dfg/DFGSpeculativeJIT64.cpp:
700         (JSC::DFG::SpeculativeJIT::compile):
701         * ftl/FTLAbstractHeapRepository.h:
702         * ftl/FTLCapabilities.cpp:
703         (JSC::FTL::canCompile):
704         * ftl/FTLLowerDFGToB3.cpp:
705         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
706         (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys):
707         * runtime/Intrinsic.cpp:
708         (JSC::intrinsicName):
709         * runtime/Intrinsic.h:
710         * runtime/JSImmutableButterfly.h:
711         (JSC::JSImmutableButterfly::createSentinel):
712         * runtime/ObjectConstructor.cpp:
713         (JSC::ownPropertyKeys):
714         * runtime/Structure.cpp:
715         (JSC::Structure::canCachePropertyNameEnumerator const):
716         * runtime/Structure.h:
717         * runtime/StructureInlines.h:
718         (JSC::Structure::setCachedOwnKeys):
719         (JSC::Structure::cachedOwnKeys const):
720         (JSC::Structure::canCacheOwnKeys const):
721         * runtime/StructureRareData.cpp:
722         (JSC::StructureRareData::visitChildren):
723         (JSC::StructureRareData::cachedPropertyNameEnumerator const): Deleted.
724         (JSC::StructureRareData::setCachedPropertyNameEnumerator): Deleted.
725         * runtime/StructureRareData.h:
726         * runtime/StructureRareDataInlines.h:
727         (JSC::StructureRareData::cachedPropertyNameEnumerator const):
728         (JSC::StructureRareData::setCachedPropertyNameEnumerator):
729         (JSC::StructureRareData::cachedOwnKeys const):
730         (JSC::StructureRareData::cachedOwnKeysConcurrently const):
731         (JSC::StructureRareData::setCachedOwnKeys):
732         (JSC::StructureRareData::previousID const): Deleted.
733         * runtime/VM.cpp:
734         (JSC::VM::VM):
735         * runtime/VM.h:
736
737 2018-12-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
738
739         [DFG][FTL] Add NewSymbol
740         https://bugs.webkit.org/show_bug.cgi?id=192620
741
742         Reviewed by Saam Barati.
743
744         This patch introduces NewSymbol DFG node into DFG and FTL tiers. The main goal of this patch is not optimize
745         NewSymbol code faster. Rather than that, this patch intends to offer SpecSymbol type information into DFG's
746         data flow to optimize generated code in FTL backend.
747
748         We add NewSymbol DFG node, which may take an argument. If an argument is not given, NewSymbol is for `Symbol()`.
749         If an argument is given, ToString is emitted to this argument before passing it to NewSymbol. So NewSymbol node
750         itself does not perform any type checks. ToString performs effects, but NewSymbol doesn't have any side observable
751         effects. So we can decouple Symbol(description) call into NewSymbol(ToString(description)).
752
753         * dfg/DFGAbstractInterpreterInlines.h:
754         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
755         * dfg/DFGByteCodeParser.cpp:
756         (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
757         * dfg/DFGClobberize.h:
758         (JSC::DFG::clobberize):
759         * dfg/DFGClobbersExitState.cpp:
760         (JSC::DFG::clobbersExitState):
761         * dfg/DFGDoesGC.cpp:
762         (JSC::DFG::doesGC):
763         * dfg/DFGFixupPhase.cpp:
764         (JSC::DFG::FixupPhase::fixupNode):
765         * dfg/DFGMayExit.cpp:
766         * dfg/DFGNodeType.h:
767         * dfg/DFGOperations.cpp:
768         * dfg/DFGOperations.h:
769         * dfg/DFGPredictionPropagationPhase.cpp:
770         * dfg/DFGSafeToExecute.h:
771         (JSC::DFG::safeToExecute):
772         * dfg/DFGSpeculativeJIT.cpp:
773         (JSC::DFG::SpeculativeJIT::compileNewSymbol):
774         * dfg/DFGSpeculativeJIT.h:
775         * dfg/DFGSpeculativeJIT32_64.cpp:
776         (JSC::DFG::SpeculativeJIT::compile):
777         * dfg/DFGSpeculativeJIT64.cpp:
778         (JSC::DFG::SpeculativeJIT::compile):
779         * dfg/DFGStoreBarrierInsertionPhase.cpp:
780         * ftl/FTLCapabilities.cpp:
781         (JSC::FTL::canCompile):
782         * ftl/FTLLowerDFGToB3.cpp:
783         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
784         (JSC::FTL::DFG::LowerDFGToB3::compileNewSymbol):
785
786 2018-12-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
787
788         [BigInt] Implement DFG/FTL typeof for BigInt
789         https://bugs.webkit.org/show_bug.cgi?id=192619
790
791         Reviewed by Keith Miller.
792
793         This patch implements typeof for BigInt in DFG and FTL. Our DFG and FTL tiers now correctly consider about BigInt
794         in the code generated for typeof.
795
796         * ftl/FTLLowerDFGToB3.cpp:
797         (JSC::FTL::DFG::LowerDFGToB3::boolify): We add (SpecCell - SpecString) type filter for proven type since isString
798         check is already performed here.
799         (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): We use (SpecCell - SpecObject - SpecString) type filter for proven type
800         since String and Object are already checked here. If we know the proven type does not include Symbol type here, we
801         can omit the code for Symbol type.
802         * jit/AssemblyHelpers.h:
803         (JSC::AssemblyHelpers::emitTypeOf):
804
805 2018-12-11  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
806
807         [BigInt] Simplify boolean context evaluation by leveraging JSString::offsetOfLength() == JSBigInt::offsetOfLength()
808         https://bugs.webkit.org/show_bug.cgi?id=192615
809
810         Reviewed by Saam Barati.
811
812         JSString and JSBigInt have similar concept in terms of the implementation.
813         Both are immutable, JSCells, and have length information. m_length is located
814         just after JSCell header part, we can ensure `JSString::offsetOfLength() == JSBigInt::offsetOfLength()`,
815         and it allows us to optimize the boolean context evaluation.
816
817         This patch leverages the above information to reduce the code size for the boolean context evaluation.
818
819         * ftl/FTLAbstractHeapRepository.cpp:
820         (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
821         * ftl/FTLAbstractHeapRepository.h:
822         * ftl/FTLLowerDFGToB3.cpp:
823         (JSC::FTL::DFG::LowerDFGToB3::boolify):
824         * jit/AssemblyHelpers.cpp:
825         (JSC::AssemblyHelpers::emitConvertValueToBoolean):
826         (JSC::AssemblyHelpers::branchIfValue):
827         * runtime/JSBigInt.cpp:
828         (JSC::JSBigInt::JSBigInt):
829         (JSC::JSBigInt::offsetOfLength): Deleted.
830         * runtime/JSBigInt.h:
831
832 2018-12-11  Justin Michaud  <justin_michaud@apple.com>
833
834         Implement feature flag for CSS Typed OM
835         https://bugs.webkit.org/show_bug.cgi?id=192610
836
837         Reviewed by Ryosuke Niwa.
838
839         * Configurations/FeatureDefines.xcconfig:
840
841 2018-12-10  Don Olmstead  <don.olmstead@sony.com>
842
843         Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig
844         https://bugs.webkit.org/show_bug.cgi?id=192573
845
846         Reviewed by Simon Fraser.
847
848         * Configurations/FeatureDefines.xcconfig:
849
850 2018-12-10  Mark Lam  <mark.lam@apple.com>
851
852         PropertyAttribute needs a CustomValue bit.
853         https://bugs.webkit.org/show_bug.cgi?id=191993
854         <rdar://problem/46264467>
855
856         Reviewed by Saam Barati.
857
858         This is because GetByIdStatus needs to distinguish CustomValue properties from
859         other types, and its only means of doing so is via the property's attributes.
860         Previously, there's nothing in the property's attributes that can indicate that
861         the property is a CustomValue.
862
863         We fix this by doing the following:
864
865         1. Added a PropertyAttribute::CustomValue bit.
866         2. Added a PropertyAttribute::CustomAccessorOrValue convenience bit mask that is
867            CustomAccessor | CustomValue.
868
869         3. Since CustomGetterSetter properties are only set via JSObject::putDirectCustomAccessor(),
870            we added a check in JSObject::putDirectCustomAccessor() to see if the attributes
871            bits include PropertyAttribute::CustomAccessor.  If not, then the property
872            must be a CustomValue, and we'll add the PropertyAttribute::CustomValue bit
873            to the attributes bits.
874
875            This ensures that the property attributes is sufficient to tell us if the
876            property contains a CustomGetterSetter.
877
878         4. Updated all checks for PropertyAttribute::CustomAccessor to check for
879            PropertyAttribute::CustomAccessorOrValue instead if their intent is to check
880            for the presence of a CustomGetterSetter as opposed to checking specifically
881            for one that is used as a CustomAccessor.
882
883            This includes all the Structure transition code that needs to capture the
884            attributes change when a CustomValue has been added.
885
886         5. Filtered out the PropertyAttribute::CustomValue bit in PropertyDescriptor.
887            The fact that we're using a CustomGetterSetter as a CustomValue should remain
888            invisible to the descriptor.  This is because the descriptor should describe
889            a CustomValue no differently from a plain value.
890
891         6. Added some asserts to ensure that property attributes are as expected, and to
892            document some invariants.
893
894         * bytecode/GetByIdStatus.cpp:
895         (JSC::GetByIdStatus::computeFromLLInt):
896         (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
897         (JSC::GetByIdStatus::computeFor):
898         * bytecode/InByIdStatus.cpp:
899         (JSC::InByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
900         * bytecode/PropertyCondition.cpp:
901         (JSC::PropertyCondition::isStillValidAssumingImpurePropertyWatchpoint const):
902         * bytecode/PutByIdStatus.cpp:
903         (JSC::PutByIdStatus::computeFor):
904         * runtime/JSFunction.cpp:
905         (JSC::getCalculatedDisplayName):
906         * runtime/JSObject.cpp:
907         (JSC::JSObject::putDirectCustomAccessor):
908         (JSC::JSObject::putDirectNonIndexAccessor):
909         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength):
910         * runtime/JSObject.h:
911         (JSC::JSObject::putDirectIndex):
912         (JSC::JSObject::fillCustomGetterPropertySlot):
913         (JSC::JSObject::putDirect):
914         * runtime/JSObjectInlines.h:
915         (JSC::JSObject::putDirectInternal):
916         * runtime/PropertyDescriptor.cpp:
917         (JSC::PropertyDescriptor::setDescriptor):
918         (JSC::PropertyDescriptor::setCustomDescriptor):
919         (JSC::PropertyDescriptor::setAccessorDescriptor):
920         * runtime/PropertySlot.h:
921         (JSC::PropertySlot::setCustomGetterSetter):
922
923 2018-12-10  Mark Lam  <mark.lam@apple.com>
924
925         LinkBuffer::copyCompactAndLinkCode() needs to be aware of ENABLE(SEPARATED_WX_HEAP).
926         https://bugs.webkit.org/show_bug.cgi?id=192569
927         <rdar://problem/45615617>
928
929         Reviewed by Saam Barati.
930
931         * assembler/LinkBuffer.cpp:
932         (JSC::LinkBuffer::copyCompactAndLinkCode):
933
934 2018-12-10  Caio Lima  <ticaiolima@gmail.com>
935
936         [BigInt] Add ValueMul into DFG
937         https://bugs.webkit.org/show_bug.cgi?id=186175
938
939         Reviewed by Yusuke Suzuki.
940
941         This patch is adding a new DFG node called ValueMul. This node is
942         responsible to handle multiplication operations that can result into
943         non-number values. We emit such node during DFGByteCodeParser when the
944         operands are not numbers. During FixupPhase, we change this
945         operation to ArithMul if we can speculate Number/Boolean operands.
946
947         The BigInt specialization shows a small progression:
948
949                                 noSpec                changes
950
951         big-int-simple-mul  18.8090+-1.0435  ^  17.4305+-0.2673  ^ definitely 1.0791x faster
952
953         * dfg/DFGAbstractInterpreterInlines.h:
954         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
955         * dfg/DFGBackwardsPropagationPhase.cpp:
956         (JSC::DFG::BackwardsPropagationPhase::propagate):
957         * dfg/DFGByteCodeParser.cpp:
958         (JSC::DFG::ByteCodeParser::makeSafe):
959         (JSC::DFG::ByteCodeParser::parseBlock):
960         * dfg/DFGClobberize.h:
961         (JSC::DFG::clobberize):
962         * dfg/DFGDoesGC.cpp:
963         (JSC::DFG::doesGC):
964         * dfg/DFGFixupPhase.cpp:
965         (JSC::DFG::FixupPhase::fixupMultiplication):
966         (JSC::DFG::FixupPhase::fixupNode):
967         * dfg/DFGNode.h:
968         (JSC::DFG::Node::arithNodeFlags):
969         * dfg/DFGNodeType.h:
970         * dfg/DFGOperations.cpp:
971         * dfg/DFGOperations.h:
972         * dfg/DFGPredictionPropagationPhase.cpp:
973         * dfg/DFGSafeToExecute.h:
974         (JSC::DFG::safeToExecute):
975         * dfg/DFGSpeculativeJIT.cpp:
976         (JSC::DFG::SpeculativeJIT::compileValueMul):
977         (JSC::DFG::SpeculativeJIT::compileArithMul):
978         * dfg/DFGSpeculativeJIT.h:
979         * dfg/DFGSpeculativeJIT64.cpp:
980         (JSC::DFG::SpeculativeJIT::compile):
981         * dfg/DFGValidate.cpp:
982         * ftl/FTLCapabilities.cpp:
983         (JSC::FTL::canCompile):
984         * ftl/FTLLowerDFGToB3.cpp:
985         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
986         (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
987         (JSC::FTL::DFG::LowerDFGToB3::compileArithMul):
988
989 2018-12-08  Mark Lam  <mark.lam@apple.com>
990
991         Reduce size of PropertySlot and PutPropertySlot.
992         https://bugs.webkit.org/show_bug.cgi?id=192526
993
994         Reviewed by Keith Miller.
995
996         With some minor adjustments, we can reduce the size of PropertySlot from 80 bytes
997         (19 padding bytes) to 64 bytes (3 padding bytes), and PutPropertySlot from 40
998         bytes (4 padding bytes) to 32 bytes (0 padding bytes but with 6 unused bits).
999         These measurements are for a 64-bit build.
1000
1001         * runtime/PropertySlot.h:
1002         * runtime/PutPropertySlot.h:
1003         (JSC::PutPropertySlot::PutPropertySlot):
1004
1005 2018-12-08  Dominik Infuehr  <dinfuehr@igalia.com>
1006
1007         Record right offset with aligned wide instructions
1008         https://bugs.webkit.org/show_bug.cgi?id=192006
1009
1010         Reviewed by Yusuke Suzuki.
1011
1012         Aligning bytecode instructions inserts nops into the instruction stream.
1013         Emitting an instruction did not record the actual start of the instruction with
1014         aligned instructions, but the nop just before the actual instruction. This was
1015         problematic with the StaticPropertyAnalyzer that used the wrong instruction offset.
1016
1017         * bytecode/InstructionStream.h:
1018         (JSC::InstructionStream::MutableRef::clone):
1019         * bytecompiler/BytecodeGenerator.cpp:
1020         (JSC::BytecodeGenerator::alignWideOpcode):
1021         (JSC::BytecodeGenerator::emitCreateThis):
1022         (JSC::BytecodeGenerator::emitNewObject):
1023         * generator/Opcode.rb:
1024
1025 2018-12-07  Tadeu Zagallo  <tzagallo@apple.com>
1026
1027         Align the metadata table on all platforms
1028         https://bugs.webkit.org/show_bug.cgi?id=192050
1029         <rdar://problem/46312674>
1030
1031         Reviewed by Mark Lam.
1032
1033         Although certain platforms don't require the metadata to be aligned,
1034         values were being concurrently read and written to ValueProfiles,
1035         which caused crashes since these operations are not atomic on unaligned
1036         addresses.
1037
1038         * bytecode/Opcode.cpp:
1039         (JSC::metadataAlignment):
1040         * bytecode/Opcode.h:
1041         * bytecode/UnlinkedMetadataTableInlines.h:
1042         (JSC::UnlinkedMetadataTable::finalize):
1043
1044 2018-12-05  Mark Lam  <mark.lam@apple.com>
1045
1046         speculationFromCell() should speculate non-Identifier strings as SpecString instead of SpecStringVar.
1047         https://bugs.webkit.org/show_bug.cgi?id=192441
1048         <rdar://problem/46480355>
1049
1050         Reviewed by Saam Barati.
1051
1052         This is because a regular String (non-Identifier) can be converted into an
1053         Identifier.  During DFG/FTL compilation, AbstractValue::checkConsistency() may
1054         expect a value to be of type SpecStringVar, but the mutator thread may have
1055         converted the string into an Identifier.  This creates a race where
1056         AbstractValue::checkConsistency() may fail because it sees a SpecStringIdent when
1057         it expects the a SpecStringVar.  
1058
1059         The fix is to speculate non-Identifier strings as type SpecString which allows it
1060         to be SpecStringVar or SpecStringIndent.
1061
1062         * bytecode/SpeculatedType.cpp:
1063         (JSC::speculationFromCell):
1064
1065 2018-12-04  Mark Lam  <mark.lam@apple.com>
1066
1067         DFG's StrengthReduction phase should not reduce Construct into DirectContruct when the executable does not have constructAbility.
1068         https://bugs.webkit.org/show_bug.cgi?id=192386
1069         <rdar://problem/46445516>
1070
1071         Reviewed by Saam Barati.
1072
1073         This violates an invariant documented by a RELEASE_ASSERT in operationLinkDirectCall().
1074
1075         * dfg/DFGStrengthReductionPhase.cpp:
1076         (JSC::DFG::StrengthReductionPhase::handleNode):
1077
1078 2018-12-04  Caio Lima  <ticaiolima@gmail.com>
1079
1080         [ESNext][BigInt] Support logic operations
1081         https://bugs.webkit.org/show_bug.cgi?id=179903
1082
1083         Reviewed by Yusuke Suzuki.
1084
1085         We are introducing in this patch the ToBoolean support for JSBigInt.
1086         With this change, we can implement the correct behavior of BigInt as
1087         operand of logical opertions. During JIT genertion into DFG and FTL,
1088         we are using JSBigInt::m_length to verify if the number is 0n or not,
1089         following the same approach used by JSString. This is also safe in the case
1090         of BigInt, because only 0n has m_length == 0.
1091
1092         We are not including BigInt speculation into Branch nodes in this
1093         patch, but the plan is to implement it in further patches.
1094
1095         * ftl/FTLAbstractHeapRepository.h:
1096         * ftl/FTLLowerDFGToB3.cpp:
1097         (JSC::FTL::DFG::LowerDFGToB3::boolify):
1098         (JSC::FTL::DFG::LowerDFGToB3::isBigInt):
1099         * jit/AssemblyHelpers.cpp:
1100         (JSC::AssemblyHelpers::emitConvertValueToBoolean):
1101         (JSC::AssemblyHelpers::branchIfValue):
1102         * runtime/JSBigInt.cpp:
1103         (JSC::JSBigInt::isZero const):
1104         (JSC::JSBigInt::offsetOfLength):
1105         (JSC::JSBigInt::toBoolean const):
1106         (JSC::JSBigInt::isZero): Deleted.
1107         * runtime/JSBigInt.h:
1108         * runtime/JSCellInlines.h:
1109         (JSC::JSCell::toBoolean const):
1110         (JSC::JSCell::pureToBoolean const):
1111
1112 2018-12-04  Devin Rousso  <drousso@apple.com>
1113
1114         Web Inspector: Audit: tests should support async operations
1115         https://bugs.webkit.org/show_bug.cgi?id=192171
1116         <rdar://problem/46423562>
1117
1118         Reviewed by Joseph Pecoraro.
1119
1120         Add `awaitPromise` command for executing a callback when a Promise gets settled.
1121
1122         Drive-by: allow `wasThrown` to be optional, instead of expecting it to always have a value.
1123
1124         * inspector/protocol/Runtime.json:
1125
1126         * inspector/InjectedScriptSource.js:
1127         (InjectedScript.prototype.awaitPromise): Added.
1128
1129         * inspector/InjectedScript.h:
1130         * inspector/InjectedScript.cpp:
1131         (Inspector::InjectedScript::evaluate):
1132         (Inspector::InjectedScript::awaitPromise): Added.
1133         (Inspector::InjectedScript::callFunctionOn):
1134         (Inspector::InjectedScript::evaluateOnCallFrame):
1135
1136         * inspector/InjectedScriptBase.h:
1137         * inspector/InjectedScriptBase.cpp:
1138         (Inspector::InjectedScriptBase::makeEvalCall):
1139         (Inspector::InjectedScriptBase::makeAsyncCall): Added.
1140         (Inspector::InjcetedScriptBase::checkCallResult): Added.
1141         (Inspector::InjcetedScriptBase::checkAsyncCallResult): Added.
1142
1143         * inspector/agents/InspectorRuntimeAgent.h:
1144         * inspector/agents/InspectorRuntimeAgent.cpp:
1145         (Inspector::InspectorRuntimeAgent::evaluate):
1146         (Inspector::InspectorRuntimeAgent::awaitPromise):
1147         (Inspector::InspectorRuntimeAgent::callFunctionOn):
1148
1149         * inspector/agents/InspectorDebuggerAgent.cpp:
1150         (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame):
1151
1152 2018-12-03  Ryan Haddad  <ryanhaddad@apple.com>
1153
1154         Unreviewed, rolling out r238833.
1155
1156         Breaks macOS and iOS debug builds.
1157
1158         Reverted changeset:
1159
1160         "[ESNext][BigInt] Support logic operations"
1161         https://bugs.webkit.org/show_bug.cgi?id=179903
1162         https://trac.webkit.org/changeset/238833
1163
1164 2018-12-03  Caio Lima  <ticaiolima@gmail.com>
1165
1166         [ESNext][BigInt] Support logic operations
1167         https://bugs.webkit.org/show_bug.cgi?id=179903
1168
1169         Reviewed by Yusuke Suzuki.
1170
1171         We are introducing in this patch the ToBoolean support for JSBigInt.
1172         With this change, we can implement the correct behavior of BigInt as
1173         operand of logical opertions. During JIT genertion into DFG and FTL,
1174         we are using JSBigInt::m_length to verify if the number is 0n or not,
1175         following the same approach used by JSString. This is also safe in the case
1176         of BigInt, because only 0n has m_length == 0.
1177
1178         We are not including BigInt speculation into Branch nodes in this
1179         patch, but the plan is to implement it in further patches.
1180
1181         * ftl/FTLAbstractHeapRepository.h:
1182         * ftl/FTLLowerDFGToB3.cpp:
1183         (JSC::FTL::DFG::LowerDFGToB3::boolify):
1184         (JSC::FTL::DFG::LowerDFGToB3::isBigInt):
1185         * jit/AssemblyHelpers.cpp:
1186         (JSC::AssemblyHelpers::emitConvertValueToBoolean):
1187         (JSC::AssemblyHelpers::branchIfValue):
1188         * runtime/JSBigInt.cpp:
1189         (JSC::JSBigInt::isZero const):
1190         (JSC::JSBigInt::offsetOfLength):
1191         (JSC::JSBigInt::toBoolean const):
1192         (JSC::JSBigInt::isZero): Deleted.
1193         * runtime/JSBigInt.h:
1194         * runtime/JSCellInlines.h:
1195         (JSC::JSCell::toBoolean const):
1196         (JSC::JSCell::pureToBoolean const):
1197
1198 2018-12-03  Keith Rollin  <krollin@apple.com>
1199
1200         Add .xcfilelist files
1201         https://bugs.webkit.org/show_bug.cgi?id=192082
1202         <rdar://problem/46312533>
1203
1204         Reviewed by Brent Fulgham.
1205
1206         Add .xcfilelist files for Generate Derived Sources and Generate
1207         Unified Sources build phases in Xcode. These are just being staged for
1208         now; they'll be added to the Xcode projects later.
1209
1210         * DerivedSources-input.xcfilelist: Added.
1211         * DerivedSources-output.xcfilelist: Added.
1212         * UnifiedSources-input.xcfilelist: Added.
1213         * UnifiedSources-output.xcfilelist: Added.
1214
1215 2018-12-03  Mark Lam  <mark.lam@apple.com>
1216
1217         Fix the bytecode code generator scripts to pretty print BytecodeStructs.h and BytecodeIndices.h.
1218         https://bugs.webkit.org/show_bug.cgi?id=192271
1219
1220         Reviewed by Keith Miller.
1221
1222         This makes the generated code style compliant and human readable.
1223
1224         * generator/Argument.rb:
1225         * generator/DSL.rb:
1226         * generator/Fits.rb:
1227         * generator/Metadata.rb:
1228         * generator/Opcode.rb:
1229
1230 2018-12-02  Zalan Bujtas  <zalan@apple.com>
1231
1232         Add a runtime feature flag for LayoutFormattingContext.
1233         https://bugs.webkit.org/show_bug.cgi?id=192280
1234
1235         Reviewed by Simon Fraser.
1236
1237         * Configurations/FeatureDefines.xcconfig:
1238
1239 2018-12-02  Caio Lima  <ticaiolima@gmail.com>
1240
1241         [ESNext][BigInt] Implement support for "<<" and ">>"
1242         https://bugs.webkit.org/show_bug.cgi?id=186233
1243
1244         Reviewed by Yusuke Suzuki.
1245
1246         This patch is introducing the support for BigInt into lshift and
1247         rshift into LLint and Baseline layers.
1248
1249         * runtime/CommonSlowPaths.cpp:
1250         (JSC::SLOW_PATH_DECL):
1251         * runtime/JSBigInt.cpp:
1252         (JSC::JSBigInt::createWithLength):
1253         (JSC::JSBigInt::leftShift):
1254         (JSC::JSBigInt::signedRightShift):
1255         (JSC::JSBigInt::leftShiftByAbsolute):
1256         (JSC::JSBigInt::rightShiftByAbsolute):
1257         (JSC::JSBigInt::rightShiftByMaximum):
1258         (JSC::JSBigInt::toShiftAmount):
1259         * runtime/JSBigInt.h:
1260
1261 2018-12-01  Simon Fraser  <simon.fraser@apple.com>
1262
1263         Heap.h refers to the non-existent HeapStatistics
1264         https://bugs.webkit.org/show_bug.cgi?id=187882
1265
1266         Reviewed by Keith Miller.
1267         
1268         Just remove the "friend class HeapStatistics".
1269
1270         * heap/Heap.h:
1271
1272 2018-11-29  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
1273
1274         [JSC] Keep TypeMaybeBigInt small
1275         https://bugs.webkit.org/show_bug.cgi?id=192203
1276
1277         Reviewed by Saam Barati.
1278
1279         As BigInt is being implemented, more and more bytecodes start returning BigInt.
1280         It means that ResultType of these bytecodes include TypeMaybeBigInt. However,
1281         TypeMaybeBigInt was large number 0x20, leading to wide instruction since ResultType
1282         easily becomes larger than 32 (e.g. TypeInt32 | TypeMaybeBigInt == 33).
1283
1284         This patch sorts the numbers of TypeMaybeXXX based on the frequency of appearance in
1285         the code.
1286
1287         * parser/ResultType.h:
1288
1289 2018-11-30  Dean Jackson  <dino@apple.com>
1290
1291         Try to fix Windows build by using strcmp instead of strcasecmp.
1292
1293         * jsc.cpp:
1294         (isMJSFile):
1295
1296 2018-11-30  Mark Lam  <mark.lam@apple.com>
1297
1298         Fix the bytecode code generator scripts to pretty print Bytecodes.h.
1299         https://bugs.webkit.org/show_bug.cgi?id=192258
1300
1301         Reviewed by Keith Miller.
1302
1303         This makes Bytecodes.h more human readable.
1304
1305         * generator/DSL.rb:
1306         * generator/Section.rb:
1307
1308 2018-11-30  Mark Lam  <mark.lam@apple.com>
1309
1310         Add the generator directory to the Xcode project.
1311         https://bugs.webkit.org/show_bug.cgi?id=192252
1312
1313         Reviewed by Michael Saboff.
1314
1315         This is so that we can work with these bytecode class generator files easily in Xcode.
1316
1317         * JavaScriptCore.xcodeproj/project.pbxproj:
1318
1319 2018-11-30  Don Olmstead  <don.olmstead@sony.com>
1320
1321         Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO
1322         https://bugs.webkit.org/show_bug.cgi?id=192197
1323
1324         Reviewed by Jiewen Tan.
1325
1326         * Configurations/FeatureDefines.xcconfig:
1327
1328 2018-11-30  Dean Jackson  <dino@apple.com>
1329
1330         Add first-class support for .mjs files in jsc binary
1331         https://bugs.webkit.org/show_bug.cgi?id=192190
1332         <rdar://problem/46375715>
1333
1334         Reviewed by Keith Miller.
1335
1336         Treat files with a .mjs extension as a module, regardless
1337         of whether or not the --module-file argument was given.
1338
1339         * jsc.cpp:
1340         (printUsageStatement): Update usage.
1341         (isMJSFile): Helper to look for .mjs extensions.
1342         (CommandLine::parseArguments): Pick the appropriate script type.
1343
1344 2018-11-30  Caio Lima  <ticaiolima@gmail.com>
1345
1346         [BigInt] Implement ValueBitXor into DFG
1347         https://bugs.webkit.org/show_bug.cgi?id=190264
1348
1349         Reviewed by Yusuke Suzuki.
1350
1351         This patch is splitting the BitXor node into ArithBitXor and
1352         ValueBitXor. This is necessary due the introduction of
1353         BigInt, since BitXor operations now can result into Int32 or BigInt.
1354         In such case, we use ArithBitXor when operands are Int and fallback to
1355         ValueBitXor when operands are anything else. In the case of
1356         ValueBitXor, we speculate BigInt when op1 and op2 are predicted as
1357         BigInt as well. BigInt specialization consist into call
1358         `operationBigIntBitXor` function, that calls JSBigInt::bitXor.
1359
1360         * bytecode/BytecodeList.rb:
1361         * bytecode/CodeBlock.cpp:
1362         (JSC::CodeBlock::finishCreation):
1363         (JSC::CodeBlock::arithProfileForPC):
1364         * bytecode/Opcode.h:
1365         (JSC::padOpcodeName):
1366         * bytecompiler/BytecodeGenerator.h:
1367         * dfg/DFGAbstractInterpreterInlines.h:
1368         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1369         * dfg/DFGBackwardsPropagationPhase.cpp:
1370         (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
1371         (JSC::DFG::BackwardsPropagationPhase::propagate):
1372         * dfg/DFGByteCodeParser.cpp:
1373         (JSC::DFG::ByteCodeParser::parseBlock):
1374         * dfg/DFGClobberize.h:
1375         (JSC::DFG::clobberize):
1376         * dfg/DFGDoesGC.cpp:
1377         (JSC::DFG::doesGC):
1378         * dfg/DFGFixupPhase.cpp:
1379         (JSC::DFG::FixupPhase::fixupNode):
1380         * dfg/DFGNodeType.h:
1381         * dfg/DFGOperations.cpp:
1382         * dfg/DFGOperations.h:
1383         * dfg/DFGPredictionPropagationPhase.cpp:
1384         * dfg/DFGSafeToExecute.h:
1385         (JSC::DFG::safeToExecute):
1386         * dfg/DFGSpeculativeJIT.cpp:
1387         (JSC::DFG::SpeculativeJIT::compileValueBitwiseOp):
1388         (JSC::DFG::SpeculativeJIT::compileBitwiseOp):
1389         * dfg/DFGSpeculativeJIT.h:
1390         (JSC::DFG::SpeculativeJIT::bitOp):
1391         * dfg/DFGSpeculativeJIT32_64.cpp:
1392         (JSC::DFG::SpeculativeJIT::compile):
1393         * dfg/DFGSpeculativeJIT64.cpp:
1394         (JSC::DFG::SpeculativeJIT::compile):
1395         * dfg/DFGStrengthReductionPhase.cpp:
1396         (JSC::DFG::StrengthReductionPhase::handleNode):
1397         * ftl/FTLCapabilities.cpp:
1398         (JSC::FTL::canCompile):
1399         * ftl/FTLLowerDFGToB3.cpp:
1400         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1401         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitXor):
1402         (JSC::FTL::DFG::LowerDFGToB3::compileArithBitXor):
1403         (JSC::FTL::DFG::LowerDFGToB3::compileBitXor): Deleted.
1404         * jit/JITArithmetic.cpp:
1405         (JSC::JIT::emit_op_bitxor):
1406         * llint/LowLevelInterpreter32_64.asm:
1407         * llint/LowLevelInterpreter64.asm:
1408         * runtime/CommonSlowPaths.cpp:
1409         (JSC::SLOW_PATH_DECL):
1410
1411 2018-11-29  Justin Michaud  <justin_michaud@apple.com>
1412
1413         CSS Painting API should pass 'this' correctly to paint callback, and repaint when properties change.
1414         https://bugs.webkit.org/show_bug.cgi?id=191443
1415
1416         Reviewed by Dean Jackson.
1417
1418         Export the simpler construct() method for use in WebCore.
1419
1420         * runtime/ConstructData.h:
1421
1422 2018-11-28  Mark Lam  <mark.lam@apple.com>
1423
1424         ENABLE_SEPARATED_WX_HEAP needs to be defined in Platform.h.
1425         https://bugs.webkit.org/show_bug.cgi?id=192110
1426         <rdar://problem/46317746>
1427
1428         Reviewed by Saam Barati.
1429
1430         * config.h:
1431
1432 2018-11-28  Keith Rollin  <krollin@apple.com>
1433
1434         Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files
1435         https://bugs.webkit.org/show_bug.cgi?id=192031
1436         <rdar://problem/46286816>
1437
1438         Reviewed by Alex Christensen.
1439
1440         The Generate Derived Sources and Generate Unified Sources build phases
1441         in Xcode need to have their inputs and outputs specified. This
1442         specification will come in the form of .xcfilelist files that will be
1443         attached to these build phases. There is one .xcfilelist file that
1444         lists the input file and one that lists the output files. As part of
1445         this work, the various generate-{derived,unified}-sources scripts that
1446         are executed in these Generate build phases are modified to help in
1447         the creation of these .xcfilelist files. In particular, they can now
1448         be invoked with command-line parameters. These parameters are then
1449         used to alter the normal execution of these scripts, causing them to
1450         produce the .xcfilelist files as opposed to actually generating the
1451         files that are listed in those files.
1452
1453         * Scripts/generate-derived-sources.sh:
1454         * Scripts/generate-unified-sources.sh:
1455
1456 2018-11-28  Keith Rollin  <krollin@apple.com>
1457
1458         Revert print_all_generated_files work in r238008; tighten up target specifications
1459         https://bugs.webkit.org/show_bug.cgi?id=192025
1460         <rdar://problem/46284301>
1461
1462         Reviewed by Alex Christensen.
1463
1464         In r238008, I added a facility for DerivedSources.make makefiles to
1465         print out the list of files that they generate. This output was used
1466         in the generation of .xcfilelist files used to specify the output of
1467         the associated Generate Derived Sources build phases in Xcode. This
1468         approach worked, but it meant that people would need to follow a
1469         specific convention to keep this mechanism working.
1470
1471         Instead of continuing this approach, I'm going to implement a new
1472         facility based on the output of `make` when passed the -d flag (which
1473         prints dependency information). This new mechanism is completely
1474         automatic and doesn't need maintainers to follow a convention. To that
1475         end, remove most of the work performed in r238008 that supports the
1476         print_all_generated_files target.
1477
1478         At the same time, it's important for the sets of targets and their
1479         dependencies to be complete and correct. Therefore, also include
1480         changes to bring those up-to-date. As part of that, you'll see
1481         prevalent use of a particular technique. Here's an example:
1482
1483             BYTECODE_FILES = \
1484                 Bytecodes.h \
1485                 BytecodeIndices.h \
1486                 BytecodeStructs.h \
1487                 InitBytecodes.asm \
1488             #
1489             BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES))
1490
1491             all : $(BYTECODE_FILES)
1492
1493             $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb
1494                 ...
1495
1496         These lines indicate a set of generated files (those specified in
1497         BYTECODE_FILES). These files are generated by the BytecodeList.rb
1498         tool. But, as opposed to the normal rule where a single foo.output is
1499         generated by foo.input plus some additional dependencies, this rule
1500         produces multiple output files from a tool whose connection to the
1501         output files is not immediately clear. A special approach is needed
1502         where a single rule produces multiple output files. The normal way to
1503         implement this is to use an .INTERMEDIATE target. However, we used
1504         this approach in the past and ran into a problem with it, addressing
1505         it with an alternate approach in r210507. The above example shows this
1506         approach. The .'s in the list of target files are replaced with %'s,
1507         and the result is used as the left side of the dependency rule.
1508
1509         * DerivedSources.make:
1510
1511 2018-11-28  Keith Rollin  <krollin@apple.com>
1512
1513         Remove Postprocess Headers dependencies
1514         https://bugs.webkit.org/show_bug.cgi?id=192023
1515         <rdar://problem/46283377>
1516
1517         Reviewed by Mark Lam.
1518
1519         JavaScriptCore's Xcode Postprocess Headers build phase used to have a
1520         dependency on a specific handful of files. In r234227, the script used
1521         in this phase (postprocess-headers.sh) was completely rewritten to
1522         operate on *all* files in JSC's Public and Private headers directories
1523         instead of just this handful. This rewrite makes the previous
1524         dependency specification insufficient, leading to incorrect
1525         incremental builds if the right files weren't touched. Address this by
1526         removing the dependencies completely. This will cause
1527         postprocess-headers.sh to always be executed, even when none of its
1528         files are touch. Running this script all the time is OK, since it has
1529         built-in protections against unnecessarily touching files that haven't
1530         changed.
1531
1532         * JavaScriptCore.xcodeproj/project.pbxproj:
1533
1534 2018-11-27  Mark Lam  <mark.lam@apple.com>
1535
1536         ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac.
1537         https://bugs.webkit.org/show_bug.cgi?id=192055
1538         <rdar://problem/46288783>
1539
1540         Reviewed by Saam Barati.
1541
1542         * Configurations/FeatureDefines.xcconfig:
1543
1544 2018-11-27  Saam barati  <sbarati@apple.com>
1545
1546         r238510 broke scopes of size zero
1547         https://bugs.webkit.org/show_bug.cgi?id=192033
1548         <rdar://problem/46281734>
1549
1550         Reviewed by Keith Miller.
1551
1552         In r238510, I wrote the loop like this: 
1553         `for (ScopeOffset offset { 0 }; offset <= symbolTable->maxScopeOffset(); offset += 1)`
1554         
1555         This breaks for scopes of size zero because maxScopeOffset() will be UINT_MAX.
1556         
1557         This patch fixes this by writing the loop as:
1558         `for (unsigned offset = 0; offset < symbolTable->scopeSize(); ++offset)`
1559
1560         * dfg/DFGObjectAllocationSinkingPhase.cpp:
1561
1562 2018-11-27  Mark Lam  <mark.lam@apple.com>
1563
1564         ASSERTION FAILED: capacity && isPageAligned(capacity) in JSC::CLoopStack::CLoopStack(JSC::VM&).
1565         https://bugs.webkit.org/show_bug.cgi?id=192018
1566
1567         Reviewed by Saam Barati.
1568
1569         This assertion failed because the regress-191579.js test was specifying
1570         --maxPerThreadStackUsage=400000 i.e. it was running with a stack size that is not
1571         page aligned.  Given that the user can specify any arbitrary stack size, and the
1572         CLoop stack expects to be page aligned, we'll just round up the requested capacity
1573         to the next page alignment.
1574
1575         * interpreter/CLoopStack.cpp:
1576         (JSC::CLoopStack::CLoopStack):
1577
1578 2018-11-27  Mark Lam  <mark.lam@apple.com>
1579
1580         [Re-landing] NaNs read from Wasm code needs to be be purified.
1581         https://bugs.webkit.org/show_bug.cgi?id=191056
1582         <rdar://problem/45660341>
1583
1584         Reviewed by Filip Pizlo.
1585
1586         * wasm/js/WebAssemblyModuleRecord.cpp:
1587         (JSC::WebAssemblyModuleRecord::link):
1588
1589 2018-11-27  Timothy Hatcher  <timothy@apple.com>
1590
1591         Web Inspector: Add support for forcing color scheme appearance in DOM tree.
1592         https://bugs.webkit.org/show_bug.cgi?id=191820
1593         rdar://problem/46153172
1594
1595         Reviewed by Devin Rousso.
1596
1597         * inspector/protocol/Page.json: Added setForcedAppearance.
1598         Also added the defaultAppearanceDidChange event and Appearance enum.
1599
1600 2018-11-27  Ryan Haddad  <ryanhaddad@apple.com>
1601
1602         Unreviewed, rolling out r238509.
1603
1604         Causes JSC tests to fail on iOS.
1605
1606         Reverted changeset:
1607
1608         "NaNs read from Wasm code needs to be be purified."
1609         https://bugs.webkit.org/show_bug.cgi?id=191056
1610         https://trac.webkit.org/changeset/238509
1611
1612 2018-11-27  Mark Lam  <mark.lam@apple.com>
1613
1614         Introducing a ENABLE_SEPARATED_WX_HEAP macro.
1615         https://bugs.webkit.org/show_bug.cgi?id=192013
1616         <rdar://problem/45494310>
1617
1618         Reviewed by Keith Miller.
1619
1620         This makes the code a little more readable.
1621
1622         I put the definition of ENABLE_SEPARATED_WX_HEAP in JSC's config.h instead of
1623         Platform.h because ENABLE_SEPARATED_WX_HEAP is only needed inside JSC.  Also,
1624         ENABLE_SEPARATED_WX_HEAP depends on ENABLE(FAST_JIT_PERMISSIONS), which is only
1625         defined for JSC.
1626
1627         * config.h:
1628         * jit/ExecutableAllocator.cpp:
1629         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
1630         (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps):
1631         * jit/ExecutableAllocator.h:
1632         (JSC::performJITMemcpy):
1633         * runtime/Options.cpp:
1634         (JSC::recomputeDependentOptions):
1635
1636 2018-11-26  Caio Lima  <ticaiolima@gmail.com>
1637
1638         Re-introduce op_bitnot
1639         https://bugs.webkit.org/show_bug.cgi?id=190923
1640
1641         Reviewed by Yusuke Suzuki.
1642
1643         With the introduction of BigInt as a new type, we can't emit bitwise
1644         not as `x ^ -1` anymore, because this is incompatible with the new type.
1645         Based on that, this Patch is adding `op_bitnot` as a new operation
1646         into LLInt, as well as introducing ArithBitNot node into DFG to support
1647         JIT compilation of such opcode. We will use the ValueProfile of this
1648         intruction in the future to generate better code when its operand
1649         is not Int32.
1650
1651         * assembler/MacroAssemblerARM64.h:
1652         (JSC::MacroAssemblerARM64::not32):
1653         * assembler/MacroAssemblerARMv7.h:
1654         (JSC::MacroAssemblerARMv7::not32):
1655         * assembler/MacroAssemblerMIPS.h:
1656         (JSC::MacroAssemblerMIPS::not32):
1657         * bytecode/BytecodeList.rb:
1658         * bytecode/BytecodeUseDef.h:
1659         (JSC::computeUsesForBytecodeOffset):
1660         (JSC::computeDefsForBytecodeOffset):
1661         * bytecode/CodeBlock.cpp:
1662         (JSC::CodeBlock::finishCreation):
1663         * bytecode/Opcode.h:
1664         (JSC::padOpcodeName):
1665         * bytecompiler/BytecodeGenerator.cpp:
1666         (JSC::BytecodeGenerator::emitUnaryOp):
1667         * bytecompiler/NodesCodegen.cpp:
1668         (JSC::UnaryPlusNode::emitBytecode):
1669         (JSC::BitwiseNotNode::emitBytecode): Deleted.
1670         * dfg/DFGAbstractInterpreterInlines.h:
1671         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1672         * dfg/DFGBackwardsPropagationPhase.cpp:
1673         (JSC::DFG::BackwardsPropagationPhase::propagate):
1674         * dfg/DFGByteCodeParser.cpp:
1675         (JSC::DFG::ByteCodeParser::parseBlock):
1676         * dfg/DFGCapabilities.cpp:
1677         (JSC::DFG::capabilityLevel):
1678         * dfg/DFGClobberize.h:
1679         (JSC::DFG::clobberize):
1680         * dfg/DFGDoesGC.cpp:
1681         (JSC::DFG::doesGC):
1682         * dfg/DFGFixupPhase.cpp:
1683         (JSC::DFG::FixupPhase::fixupNode):
1684         * dfg/DFGNodeType.h:
1685         * dfg/DFGOperations.cpp:
1686         * dfg/DFGOperations.h:
1687         * dfg/DFGPredictionPropagationPhase.cpp:
1688         * dfg/DFGSafeToExecute.h:
1689         (JSC::DFG::safeToExecute):
1690         * dfg/DFGSpeculativeJIT.cpp:
1691         (JSC::DFG::SpeculativeJIT::compileBitwiseNot):
1692         * dfg/DFGSpeculativeJIT.h:
1693         * dfg/DFGSpeculativeJIT32_64.cpp:
1694         (JSC::DFG::SpeculativeJIT::compile):
1695         * dfg/DFGSpeculativeJIT64.cpp:
1696         (JSC::DFG::SpeculativeJIT::compile):
1697         * ftl/FTLCapabilities.cpp:
1698         (JSC::FTL::canCompile):
1699         * ftl/FTLLowerDFGToB3.cpp:
1700         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1701         (JSC::FTL::DFG::LowerDFGToB3::compileArithBitNot):
1702         * jit/JIT.cpp:
1703         (JSC::JIT::privateCompileMainPass):
1704         (JSC::JIT::privateCompileSlowCases):
1705         * jit/JIT.h:
1706         * jit/JITArithmetic.cpp:
1707         (JSC::JIT::emit_op_bitnot):
1708         * llint/LowLevelInterpreter32_64.asm:
1709         * llint/LowLevelInterpreter64.asm:
1710         * offlineasm/cloop.rb:
1711         * parser/NodeConstructors.h:
1712         (JSC::BitwiseNotNode::BitwiseNotNode):
1713         * parser/Nodes.h:
1714         * parser/ResultType.h:
1715         (JSC::ResultType::bigIntOrInt32Type):
1716         (JSC::ResultType::forBitOp):
1717         * runtime/CommonSlowPaths.cpp:
1718         (JSC::SLOW_PATH_DECL):
1719         * runtime/CommonSlowPaths.h:
1720
1721 2018-11-26  Saam barati  <sbarati@apple.com>
1722
1723         InPlaceAbstractState::endBasicBlock rule for SetLocal should filter the value based on the flush format
1724         https://bugs.webkit.org/show_bug.cgi?id=191956
1725         <rdar://problem/45665806>
1726
1727         Reviewed by Yusuke Suzuki.
1728
1729         This is a similar bug to what Keith fixed in r232134. The issue is if we have
1730         a program like this:
1731         
1732         a: JSConstant(jsNumber(0))
1733         b: SetLocal(Int32:@a, loc1, FlushedInt32)
1734         c: ArrayifyToStructure(Cell:@a)
1735         d: Jump(...)
1736         
1737         At the point in the program right after the Jump, a GetLocal for loc1
1738         would return whatever the ArrayifyToStructure resulting type is. This breaks
1739         the invariant that a GetLocal must return a value that is a subtype of its
1740         FlushFormat. InPlaceAbstractState::endBasicBlock will know if a SetLocal is
1741         the final node touching a local slot. If so, it'll see if any nodes later
1742         in the block may have refined the type of the value stored in that slot. If
1743         so, endBasicBlock() further refines the type to ensure that any GetLocals
1744         loading from the same slot will result in having this more refined type.
1745         However, we must ensure that this logic only considers types within the
1746         hierarchy of the variable access data's FlushFormat, otherwise, we may
1747         break the invariant that a GetLocal's type is a subtype of its FlushFormat.
1748
1749         * dfg/DFGInPlaceAbstractState.cpp:
1750         (JSC::DFG::InPlaceAbstractState::endBasicBlock):
1751
1752 2018-11-26  Saam barati  <sbarati@apple.com>
1753
1754         Object allocation sinking phase needs to iterate each scope offset instead of just iterating the symbol table's hashmap when handling an activation
1755         https://bugs.webkit.org/show_bug.cgi?id=191958
1756         <rdar://problem/46221877>
1757
1758         Reviewed by Yusuke Suzuki.
1759
1760         There may be more entries in an activation than unique variables
1761         in a symbol table's hashmap. For example, if you have two parameters
1762         to a function, and they both are the same name, and the function
1763         uses eval, we'll end up with two scope slots, but only a single
1764         entry in the hashmap in the symbol table. Object allocation sinking
1765         phase was previously iterating over the hashmap, assuming these
1766         values were equivalent. This is wrong in the above case. Instead,
1767         we need to iterate over each scope offset.
1768
1769         * dfg/DFGObjectAllocationSinkingPhase.cpp:
1770         * runtime/GenericOffset.h:
1771         (JSC::GenericOffset::operator+=):
1772         (JSC::GenericOffset::operator-=):
1773
1774 2018-11-26  Mark Lam  <mark.lam@apple.com>
1775
1776         NaNs read from Wasm code needs to be be purified.
1777         https://bugs.webkit.org/show_bug.cgi?id=191056
1778         <rdar://problem/45660341>
1779
1780         Reviewed by Filip Pizlo.
1781
1782         * wasm/js/WebAssemblyModuleRecord.cpp:
1783         (JSC::WebAssemblyModuleRecord::link):
1784
1785 2018-11-26  Tadeu Zagallo  <tzagallo@apple.com>
1786
1787         ASSERTION FAILED: m_outOfLineJumpTargets.contains(bytecodeOffset)
1788         https://bugs.webkit.org/show_bug.cgi?id=191716
1789         <rdar://problem/45723878>
1790
1791         Reviewed by Saam Barati.
1792
1793         After https://bugs.webkit.org/show_bug.cgi?id=187373, when updating
1794         jump targets during generatorification, we only stored the new jump
1795         target when it changed. However, the out-of-line jump targets are
1796         cleared at the beginning of the pass, so we need to store it
1797         unconditionally.
1798
1799         * bytecode/PreciseJumpTargetsInlines.h:
1800         (JSC::extractStoredJumpTargetsForInstruction):
1801         (JSC::updateStoredJumpTargetsForInstruction):
1802
1803 2018-11-23  Wenson Hsieh  <wenson_hsieh@apple.com>
1804
1805         Enable drag and drop support for iOSMac
1806         https://bugs.webkit.org/show_bug.cgi?id=191818
1807         <rdar://problem/43907454>
1808
1809         Reviewed by Dean Jackson.
1810
1811         * Configurations/FeatureDefines.xcconfig:
1812
1813 2018-11-22  Mark Lam  <mark.lam@apple.com>
1814
1815         Make the jsc shell's dumpException() more robust against long exception strings.
1816         https://bugs.webkit.org/show_bug.cgi?id=191910
1817         <rdar://problem/46212980>
1818
1819         Reviewed by Michael Saboff.
1820
1821         This only affects the dumping of the exception string in the jsc shell due to
1822         unhandled exceptions or exceptions at shell boot time before any JS code is
1823         running.
1824
1825         * jsc.cpp:
1826         (dumpException):
1827
1828 2018-11-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
1829
1830         [JSC] Drop ARM_TRADITIONAL support in LLInt, baseline JIT, and DFG
1831         https://bugs.webkit.org/show_bug.cgi?id=191675
1832
1833         Reviewed by Mark Lam.
1834
1835         We no longer maintain ARM_TRADITIONAL LLInt and JIT in JSC. This architecture will use
1836         CLoop instead. This patch removes ARM_TRADITIONAL support in LLInt and JIT.
1837
1838         Discussed in https://lists.webkit.org/pipermail/webkit-dev/2018-October/030220.html.
1839
1840         * CMakeLists.txt:
1841         * JavaScriptCore.xcodeproj/project.pbxproj:
1842         * Sources.txt:
1843         * assembler/ARMAssembler.cpp: Removed.
1844         * assembler/ARMAssembler.h: Removed.
1845         * assembler/LinkBuffer.cpp:
1846         (JSC::LinkBuffer::linkCode):
1847         (JSC::LinkBuffer::dumpCode):
1848         * assembler/MacroAssembler.h:
1849         (JSC::MacroAssembler::patchableBranch32):
1850         * assembler/MacroAssemblerARM.cpp: Removed.
1851         * assembler/MacroAssemblerARM.h: Removed.
1852         * assembler/PerfLog.cpp:
1853         * assembler/PerfLog.h:
1854         * assembler/ProbeContext.h:
1855         (JSC::Probe::CPUState::pc):
1856         (JSC::Probe::CPUState::fp):
1857         (JSC::Probe::CPUState::sp):
1858         * assembler/testmasm.cpp:
1859         (JSC::isPC):
1860         (JSC::testProbeModifiesStackPointer):
1861         (JSC::testProbeModifiesStackValues):
1862         * bytecode/InlineAccess.h:
1863         (JSC::InlineAccess::sizeForPropertyAccess):
1864         (JSC::InlineAccess::sizeForPropertyReplace):
1865         (JSC::InlineAccess::sizeForLengthAccess):
1866         * dfg/DFGSpeculativeJIT.h:
1867         * disassembler/CapstoneDisassembler.cpp:
1868         (JSC::tryToDisassemble):
1869         * jit/AssemblyHelpers.cpp:
1870         (JSC::AssemblyHelpers::debugCall):
1871         * jit/AssemblyHelpers.h:
1872         * jit/CCallHelpers.h:
1873         (JSC::CCallHelpers::setupArgumentsImpl):
1874         (JSC::CCallHelpers::prepareForTailCallSlow):
1875         * jit/CallFrameShuffler.cpp:
1876         (JSC::CallFrameShuffler::prepareForTailCall):
1877         * jit/HostCallReturnValue.cpp:
1878         * jit/JITMathIC.h:
1879         (JSC::isProfileEmpty):
1880         * jit/RegisterSet.cpp:
1881         (JSC::RegisterSet::reservedHardwareRegisters):
1882         (JSC::RegisterSet::calleeSaveRegisters):
1883         (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
1884         (JSC::RegisterSet::dfgCalleeSaveRegisters):
1885         * jit/Repatch.cpp:
1886         (JSC::forceICFailure):
1887         * jit/ThunkGenerators.cpp:
1888         (JSC::nativeForGenerator):
1889         * llint/LLIntOfflineAsmConfig.h:
1890         * llint/LowLevelInterpreter.asm:
1891         * llint/LowLevelInterpreter32_64.asm:
1892         * offlineasm/arm.rb:
1893         * offlineasm/backends.rb:
1894         * yarr/YarrJIT.cpp:
1895         (JSC::Yarr::YarrGenerator::generateEnter):
1896         (JSC::Yarr::YarrGenerator::generateReturn):
1897
1898 2018-11-21  Saam barati  <sbarati@apple.com>
1899
1900         DFGSpeculativeJIT should not &= exitOK with mayExit(node)
1901         https://bugs.webkit.org/show_bug.cgi?id=191897
1902         <rdar://problem/45871998>
1903
1904         Reviewed by Mark Lam.
1905
1906         exitOK is a statement about it being legal to exit. mayExit() is about being
1907         conservative and returning false only if an OSR exit *could never* happen.
1908         mayExit() tries to be as smart as possible to see if it can return false.
1909         It can't return false if a runtime exit *could* happen. However, there is
1910         code in the compiler where mayExit() returns false (because it uses data
1911         generated from AI about type checks being proved), but the code we emit in the
1912         compiler backend unconditionally generates an OSR exit, even if that exit may
1913         never execute. For example, let's say we have this IR:
1914         
1915         SomeNode(Boolean:@input)
1916         
1917         And we always emit code like this as a way of emitting a boolean type check:
1918         
1919         jump L1 if input == true
1920         jump L1 if input == false
1921         emit an OSR exit
1922         
1923         In such a program, when we generate the above OSR exit, in a validationEnabled()
1924         build, and if @input is proved to be a boolean, we'll end up crashing because we
1925         have the bogus assertion saying !exitOK. This is one reason why things are cleaner
1926         if we don't conflate mayExit() with exitOK.
1927
1928         * dfg/DFGSpeculativeJIT.cpp:
1929         (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
1930
1931 2018-11-21  Saam barati  <sbarati@apple.com>
1932
1933         Fix assertion in KnownCellUse inside SpeculativeJIT::speculate
1934         https://bugs.webkit.org/show_bug.cgi?id=191895
1935         <rdar://problem/46167406>
1936
1937         Reviewed by Mark Lam.
1938
1939         We were asserting that the input edge should have type SpecCell but it should
1940         really be SpecCellCheck since the type filter for KnownCellUse is SpecCellCheck.
1941         
1942         This patch cleans up that assertion code by joining a bunch of cases into a
1943         single function call which grabs the type filter for the edge UseKind and
1944         asserts that the incoming edge meets the type filter criteria.
1945
1946         * dfg/DFGSpeculativeJIT.cpp:
1947         (JSC::DFG::SpeculativeJIT::speculate):
1948         * ftl/FTLLowerDFGToB3.cpp:
1949         (JSC::FTL::DFG::LowerDFGToB3::speculate):
1950
1951 2018-11-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
1952
1953         [JSC] Use ProtoCallFrame::numberOfRegisters instead of raw number `4`
1954         https://bugs.webkit.org/show_bug.cgi?id=191877
1955
1956         Reviewed by Sam Weinig.
1957
1958         Instead of hard-coding `4` into LowLevelInterpreter, use ProtoCallFrame::numberOfRegisters.
1959
1960         * interpreter/ProtoCallFrame.h:
1961         * llint/LowLevelInterpreter32_64.asm:
1962         * llint/LowLevelInterpreter64.asm:
1963
1964 2018-11-21  Mark Lam  <mark.lam@apple.com>
1965
1966         Creating a wasm memory that is bigger than the ArrayBuffer limit but smaller than the spec limit should throw OOME not RangeError.
1967         https://bugs.webkit.org/show_bug.cgi?id=191776
1968         <rdar://problem/46152851>
1969
1970         Reviewed by Saam Barati.
1971
1972         * wasm/WasmMemory.cpp:
1973         (JSC::Wasm::Memory::tryCreate):
1974         - return nullptr if the requested bytes exceed MAX_ARRAY_BUFFER_SIZE.
1975           The clients will already do a null check and throw an OutOfMemoryError if needed.
1976         (JSC::Wasm::Memory::grow):
1977         - throw OOME if newPageCount.bytes() > MAX_ARRAY_BUFFER_SIZE.
1978         * wasm/js/WebAssemblyMemoryConstructor.cpp:
1979         (JSC::constructJSWebAssemblyMemory):
1980         - throw OOME if newPageCount.bytes() > MAX_ARRAY_BUFFER_SIZE.
1981
1982 2018-11-21  Caio Lima  <ticaiolima@gmail.com>
1983
1984         [BigInt] JSBigInt::createWithLength should throw when length is greater than JSBigInt::maxLength
1985         https://bugs.webkit.org/show_bug.cgi?id=190836
1986
1987         Reviewed by Saam Barati and Yusuke Suzuki.
1988
1989         In this patch we are creating a new method called `JSBigInt::createWithLengthUnchecked`
1990         where we allocate a BigInt trusting the length received as argument.
1991         With this additional method, we now check if length passed to
1992         `JSBigInt::tryCreateWithLength` is not greater than JSBigInt::maxLength.
1993         When the length is greater than JSBigInt::maxLength, we then throw OOM
1994         exception.
1995         This required us to change the interface of some JSBigInt operations to
1996         receive `ExecState*` instead of `VM&`. We changed only operations that
1997         can throw because of OOM.
1998         We beleive that this approach of throwing instead of finishing the
1999         execution abruptly is better because JS programs can catch such
2000         exception and handle this issue properly.
2001
2002         * dfg/DFGOperations.cpp:
2003         * jit/JITOperations.cpp:
2004         * runtime/CommonSlowPaths.cpp:
2005         (JSC::SLOW_PATH_DECL):
2006         * runtime/JSBigInt.cpp:
2007         (JSC::JSBigInt::createZero):
2008         (JSC::JSBigInt::tryCreateWithLength):
2009         (JSC::JSBigInt::createWithLengthUnchecked):
2010         (JSC::JSBigInt::createFrom):
2011         (JSC::JSBigInt::multiply):
2012         (JSC::JSBigInt::divide):
2013         (JSC::JSBigInt::copy):
2014         (JSC::JSBigInt::unaryMinus):
2015         (JSC::JSBigInt::remainder):
2016         (JSC::JSBigInt::add):
2017         (JSC::JSBigInt::sub):
2018         (JSC::JSBigInt::bitwiseAnd):
2019         (JSC::JSBigInt::bitwiseOr):
2020         (JSC::JSBigInt::bitwiseXor):
2021         (JSC::JSBigInt::absoluteAdd):
2022         (JSC::JSBigInt::absoluteSub):
2023         (JSC::JSBigInt::absoluteDivWithDigitDivisor):
2024         (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
2025         (JSC::JSBigInt::absoluteLeftShiftAlwaysCopy):
2026         (JSC::JSBigInt::absoluteBitwiseOp):
2027         (JSC::JSBigInt::absoluteAddOne):
2028         (JSC::JSBigInt::absoluteSubOne):
2029         (JSC::JSBigInt::toStringGeneric):
2030         (JSC::JSBigInt::rightTrim):
2031         (JSC::JSBigInt::allocateFor):
2032         (JSC::JSBigInt::createWithLength): Deleted.
2033         * runtime/JSBigInt.h:
2034         * runtime/Operations.cpp:
2035         (JSC::jsAddSlowCase):
2036         * runtime/Operations.h:
2037         (JSC::jsSub):
2038         (JSC::jsMul):
2039
2040 2018-11-20  Mark Lam  <mark.lam@apple.com>
2041
2042         Remove invalid assertion in VMTraps::SignalSender's SignalAction.
2043         https://bugs.webkit.org/show_bug.cgi?id=191856
2044         <rdar://problem/46089992>
2045
2046         Reviewed by Yusuke Suzuki.
2047
2048         The ASSERT(vm.traps().needTrapHandling()) assertion in SignalSender's SigAction
2049         function is invalid because we can't be sure that the trap has been handled yet
2050         by the time the trap fires.  This is because the main thread may also check traps
2051         (in LLInt, baseline JIT and VM runtime code).  There's a race to handle the trap.
2052         Hence, the SigAction cannot assume that the trap still needs handling by the time
2053         it is executed.  This patch removed the invalid assertion.
2054
2055         Also renamed m_trapSet to m_condition because it is a AutomaticThreadCondition,
2056         and all the ways it is used is as a condvar.  The m_trapSet name doesn't seem
2057         appropriate nor meaningful.
2058
2059         * runtime/VMTraps.cpp:
2060         (JSC::VMTraps::tryInstallTrapBreakpoints):
2061         - Added a !needTrapHandling() check as an optimization: there's no need to install
2062           VMTrap breakpoints if someone already beat us to handling the trap (remember,
2063           the main thread is racing against the VMTraps signalling thread to handle the
2064           trap too).  We only need to install the VMTraps breakpoints if we need DFG/FTL
2065           compiled code to deopt so that they can check and handle pending traps.  If the
2066           trap has already been handled, it's better to not deopt any DFG/FTL functions.
2067
2068         (JSC::VMTraps::willDestroyVM):
2069         (JSC::VMTraps::fireTrap):
2070         (JSC::VMTraps::VMTraps):
2071         * runtime/VMTraps.h:
2072
2073 2018-11-21  Dominik Infuehr  <dinfuehr@igalia.com>
2074
2075         Enable JIT on ARM/Linux
2076         https://bugs.webkit.org/show_bug.cgi?id=191548
2077
2078         Reviewed by Yusuke Suzuki.
2079
2080         Enable JIT by default on ARMv7/Linux after it was disabled with
2081         recent bytcode format change.
2082
2083         * bytecode/CodeBlock.cpp:
2084         (JSC::CodeBlock::getICStatusMap):
2085         * bytecode/CodeBlock.h:
2086         (JSC::CodeBlock::metadata):
2087         * bytecode/InByIdStatus.cpp:
2088         (JSC::InByIdStatus::computeFor):
2089         * bytecode/Instruction.h:
2090         (JSC::Instruction::cast):
2091         * bytecode/MetadataTable.h:
2092         (JSC::MetadataTable::forEach):
2093         * bytecode/PutByIdStatus.cpp:
2094         (JSC::PutByIdStatus::computeFor):
2095         (JSC::PutByIdStatus::hasExitSite): Deleted.
2096         * bytecode/PutByIdStatus.h:
2097         * dfg/DFGOSRExit.cpp:
2098         (JSC::DFG::reifyInlinedCallFrames):
2099         * dfg/DFGOSRExitCompilerCommon.cpp:
2100         (JSC::DFG::reifyInlinedCallFrames):
2101         * generator/Argument.rb:
2102         * generator/Opcode.rb:
2103         * jit/GPRInfo.h:
2104         * jit/JIT.h:
2105         * jit/JITArithmetic32_64.cpp:
2106         (JSC::JIT::emit_compareAndJump):
2107         (JSC::JIT::emit_compareUnsignedAndJump):
2108         (JSC::JIT::emit_compareUnsigned):
2109         (JSC::JIT::emit_compareAndJumpSlow):
2110         (JSC::JIT::emit_op_unsigned):
2111         (JSC::JIT::emit_op_inc):
2112         (JSC::JIT::emit_op_dec):
2113         (JSC::JIT::emitBinaryDoubleOp):
2114         (JSC::JIT::emit_op_mod):
2115         (JSC::JIT::emitSlow_op_mod):
2116         * jit/JITCall32_64.cpp:
2117         (JSC::JIT::emitPutCallResult):
2118         (JSC::JIT::emit_op_ret):
2119         (JSC::JIT::emitSlow_op_call):
2120         (JSC::JIT::emitSlow_op_tail_call):
2121         (JSC::JIT::emitSlow_op_call_eval):
2122         (JSC::JIT::emitSlow_op_call_varargs):
2123         (JSC::JIT::emitSlow_op_tail_call_varargs):
2124         (JSC::JIT::emitSlow_op_tail_call_forward_arguments):
2125         (JSC::JIT::emitSlow_op_construct_varargs):
2126         (JSC::JIT::emitSlow_op_construct):
2127         (JSC::JIT::emit_op_call):
2128         (JSC::JIT::emit_op_tail_call):
2129         (JSC::JIT::emit_op_call_eval):
2130         (JSC::JIT::emit_op_call_varargs):
2131         (JSC::JIT::emit_op_tail_call_varargs):
2132         (JSC::JIT::emit_op_tail_call_forward_arguments):
2133         (JSC::JIT::emit_op_construct_varargs):
2134         (JSC::JIT::emit_op_construct):
2135         (JSC::JIT::compileSetupFrame):
2136         (JSC::JIT::compileCallEval):
2137         (JSC::JIT::compileCallEvalSlowCase):
2138         (JSC::JIT::compileOpCall):
2139         (JSC::JIT::compileOpCallSlowCase):
2140         (JSC::JIT::compileSetupVarargsFrame): Deleted.
2141         * jit/JITInlines.h:
2142         (JSC::JIT::updateTopCallFrame):
2143         * jit/JITOpcodes.cpp:
2144         (JSC::JIT::emit_op_catch):
2145         (JSC::JIT::emitSlow_op_loop_hint):
2146         * jit/JITOpcodes32_64.cpp:
2147         (JSC::JIT::emit_op_mov):
2148         (JSC::JIT::emit_op_end):
2149         (JSC::JIT::emit_op_jmp):
2150         (JSC::JIT::emit_op_new_object):
2151         (JSC::JIT::emitSlow_op_new_object):
2152         (JSC::JIT::emit_op_overrides_has_instance):
2153         (JSC::JIT::emit_op_instanceof):
2154         (JSC::JIT::emit_op_instanceof_custom):
2155         (JSC::JIT::emitSlow_op_instanceof):
2156         (JSC::JIT::emitSlow_op_instanceof_custom):
2157         (JSC::JIT::emit_op_is_empty):
2158         (JSC::JIT::emit_op_is_undefined):
2159         (JSC::JIT::emit_op_is_boolean):
2160         (JSC::JIT::emit_op_is_number):
2161         (JSC::JIT::emit_op_is_cell_with_type):
2162         (JSC::JIT::emit_op_is_object):
2163         (JSC::JIT::emit_op_to_primitive):
2164         (JSC::JIT::emit_op_set_function_name):
2165         (JSC::JIT::emit_op_not):
2166         (JSC::JIT::emit_op_jfalse):
2167         (JSC::JIT::emit_op_jtrue):
2168         (JSC::JIT::emit_op_jeq_null):
2169         (JSC::JIT::emit_op_jneq_null):
2170         (JSC::JIT::emit_op_jneq_ptr):
2171         (JSC::JIT::emit_op_eq):
2172         (JSC::JIT::emitSlow_op_eq):
2173         (JSC::JIT::emit_op_jeq):
2174         (JSC::JIT::emitSlow_op_jeq):
2175         (JSC::JIT::emit_op_neq):
2176         (JSC::JIT::emitSlow_op_neq):
2177         (JSC::JIT::emit_op_jneq):
2178         (JSC::JIT::emitSlow_op_jneq):
2179         (JSC::JIT::compileOpStrictEq):
2180         (JSC::JIT::emit_op_stricteq):
2181         (JSC::JIT::emit_op_nstricteq):
2182         (JSC::JIT::compileOpStrictEqJump):
2183         (JSC::JIT::emit_op_jstricteq):
2184         (JSC::JIT::emit_op_jnstricteq):
2185         (JSC::JIT::emitSlow_op_jstricteq):
2186         (JSC::JIT::emitSlow_op_jnstricteq):
2187         (JSC::JIT::emit_op_eq_null):
2188         (JSC::JIT::emit_op_neq_null):
2189         (JSC::JIT::emit_op_throw):
2190         (JSC::JIT::emit_op_to_number):
2191         (JSC::JIT::emit_op_to_string):
2192         (JSC::JIT::emit_op_to_object):
2193         (JSC::JIT::emit_op_catch):
2194         (JSC::JIT::emit_op_identity_with_profile):
2195         (JSC::JIT::emit_op_get_parent_scope):
2196         (JSC::JIT::emit_op_switch_imm):
2197         (JSC::JIT::emit_op_switch_char):
2198         (JSC::JIT::emit_op_switch_string):
2199         (JSC::JIT::emit_op_debug):
2200         (JSC::JIT::emit_op_enter):
2201         (JSC::JIT::emit_op_get_scope):
2202         (JSC::JIT::emit_op_create_this):
2203         (JSC::JIT::emit_op_to_this):
2204         (JSC::JIT::emit_op_check_tdz):
2205         (JSC::JIT::emit_op_has_structure_property):
2206         (JSC::JIT::privateCompileHasIndexedProperty):
2207         (JSC::JIT::emit_op_has_indexed_property):
2208         (JSC::JIT::emitSlow_op_has_indexed_property):
2209         (JSC::JIT::emit_op_get_direct_pname):
2210         (JSC::JIT::emit_op_enumerator_structure_pname):
2211         (JSC::JIT::emit_op_enumerator_generic_pname):
2212         (JSC::JIT::emit_op_profile_type):
2213         (JSC::JIT::emit_op_log_shadow_chicken_prologue):
2214         (JSC::JIT::emit_op_log_shadow_chicken_tail):
2215         * jit/JITPropertyAccess32_64.cpp:
2216         (JSC::JIT::emit_op_put_getter_by_id):
2217         (JSC::JIT::emit_op_put_setter_by_id):
2218         (JSC::JIT::emit_op_put_getter_setter_by_id):
2219         (JSC::JIT::emit_op_put_getter_by_val):
2220         (JSC::JIT::emit_op_put_setter_by_val):
2221         (JSC::JIT::emit_op_del_by_id):
2222         (JSC::JIT::emit_op_del_by_val):
2223         (JSC::JIT::emit_op_get_by_val):
2224         (JSC::JIT::emitGetByValWithCachedId):
2225         (JSC::JIT::emitSlow_op_get_by_val):
2226         (JSC::JIT::emit_op_put_by_val_direct):
2227         (JSC::JIT::emit_op_put_by_val):
2228         (JSC::JIT::emitGenericContiguousPutByVal):
2229         (JSC::JIT::emitArrayStoragePutByVal):
2230         (JSC::JIT::emitPutByValWithCachedId):
2231         (JSC::JIT::emitSlow_op_put_by_val):
2232         (JSC::JIT::emit_op_try_get_by_id):
2233         (JSC::JIT::emitSlow_op_try_get_by_id):
2234         (JSC::JIT::emit_op_get_by_id_direct):
2235         (JSC::JIT::emitSlow_op_get_by_id_direct):
2236         (JSC::JIT::emit_op_get_by_id):
2237         (JSC::JIT::emitSlow_op_get_by_id):
2238         (JSC::JIT::emit_op_get_by_id_with_this):
2239         (JSC::JIT::emitSlow_op_get_by_id_with_this):
2240         (JSC::JIT::emit_op_put_by_id):
2241         (JSC::JIT::emitSlow_op_put_by_id):
2242         (JSC::JIT::emit_op_in_by_id):
2243         (JSC::JIT::emitSlow_op_in_by_id):
2244         (JSC::JIT::emit_op_resolve_scope):
2245         (JSC::JIT::emit_op_get_from_scope):
2246         (JSC::JIT::emitSlow_op_get_from_scope):
2247         (JSC::JIT::emit_op_put_to_scope):
2248         (JSC::JIT::emitSlow_op_put_to_scope):
2249         (JSC::JIT::emit_op_get_from_arguments):
2250         (JSC::JIT::emit_op_put_to_arguments):
2251         * jit/RegisterSet.cpp:
2252         (JSC::RegisterSet::vmCalleeSaveRegisters):
2253         * llint/LLIntData.cpp:
2254         (JSC::LLInt::Data::performAssertions):
2255         * llint/LowLevelInterpreter.asm:
2256         * runtime/SamplingProfiler.cpp:
2257         (JSC::tryGetBytecodeIndex):
2258
2259 2018-11-20  Saam barati  <sbarati@apple.com>
2260
2261         Merging an IC variant may lead to the IC status containing overlapping structure sets
2262         https://bugs.webkit.org/show_bug.cgi?id=191869
2263         <rdar://problem/45403453>
2264
2265         Reviewed by Mark Lam.
2266
2267         When merging two IC variant lists, we may end up in a world where we have
2268         overlapping structure sets. We defend against this when we append a new
2269         variant, but we should also defend against it once we merge in a new variant.
2270         
2271         Consider this case with MultiPutByOffset, where we merge two PutByIdStatuses
2272         together, P1 and P2.
2273         
2274         Let's consider these structures:
2275         s1 = {}
2276         s2 = {p: 0}
2277         s3 = {p: 0, p2: 1}
2278         
2279         P1 contains these variants:
2280         Transition: [s1 => s2]
2281         Replace: [s2, s3]
2282         
2283         P2 contains:
2284         Replace: [s2]
2285         
2286         Because of the ordering of the variants, we may end up combining
2287         P2's replace into P1's transition, forming this new list:
2288         Transition: [(s1, s2) => s2]
2289         Replace: [s2, s3]
2290         
2291         Obviously the ideal thing here is to have some ordering when we merge
2292         in variants to choose the most ideal option. It'd be ideal for P2's
2293         Replace to be merged into P1's replace.
2294         
2295         If we notice that this is super important, we can implement some kind
2296         of ordering. None of our tests (until this patch) stress this. This patch
2297         just makes it so we defend against this crazy scenario by falling back
2298         to the slow path gracefully. This prevents us from emitting invalid
2299         IR in FTL->B3 lowering by creating a switch with two case labels being
2300         identical values.
2301
2302         * bytecode/ICStatusUtils.h:
2303         (JSC::appendICStatusVariant):
2304
2305 2018-11-20  Fujii Hironori  <Hironori.Fujii@sony.com>
2306
2307         REGRESSION(r238039) WebCore::JSDOMGlobalObject::createStructure is using JSC::Structure::create without including StructureInlines.h
2308         https://bugs.webkit.org/show_bug.cgi?id=191626
2309         <rdar://problem/46161064>
2310
2311         Unreviewed adding comment for my change r238366.
2312
2313         * runtime/Structure.h: Added a comment for Structure::create.
2314
2315 2018-11-19  Mark Lam  <mark.lam@apple.com>
2316
2317         globalFuncImportModule() should return a promise when it clears exceptions.
2318         https://bugs.webkit.org/show_bug.cgi?id=191792
2319         <rdar://problem/46090763>
2320
2321         Reviewed by Michael Saboff.
2322
2323         If we're clearing the exceptions in a CatchScope, then it means that we've handled
2324         the exception, and is able to proceed in a normal manner.  Hence, we should not
2325         return the empty JSValue in this case: instead, we should return a Promise as
2326         expected by import's API.
2327
2328         The only time when we can't return a promise is when we fail to create a Promise.
2329         In that case, we should be propagating the exception.
2330
2331         Hence, globalFuncImportModule() contains a ThrowScope (for propagating the
2332         exception that arises from failure to create the Promise) wrapping a CatchScope
2333         (for catching any exception that arises from failure to execute the import).
2334
2335         Also fixed similar issues, and some exception check issues in JSModuleLoader and
2336         the jsc shell.
2337
2338         * jsc.cpp:
2339         (GlobalObject::moduleLoaderImportModule):
2340         (GlobalObject::moduleLoaderFetch):
2341         * runtime/JSGlobalObjectFunctions.cpp:
2342         (JSC::globalFuncImportModule):
2343         * runtime/JSModuleLoader.cpp:
2344         (JSC::JSModuleLoader::loadAndEvaluateModule):
2345         (JSC::JSModuleLoader::loadModule):
2346         (JSC::JSModuleLoader::requestImportModule):
2347         (JSC::JSModuleLoader::importModule):
2348         (JSC::JSModuleLoader::resolve):
2349         (JSC::JSModuleLoader::fetch):
2350         (JSC::moduleLoaderParseModule):
2351         (JSC::moduleLoaderResolveSync):
2352
2353 2018-11-19  Alex Christensen  <achristensen@webkit.org>
2354
2355         Add SPI to disable JIT in a WKWebView
2356         https://bugs.webkit.org/show_bug.cgi?id=191822
2357         <rdar://problem/28119360>
2358
2359         Reviewed by Geoffrey Garen.
2360
2361         * jit/ExecutableAllocator.cpp:
2362         (JSC::jitDisabled):
2363         (JSC::allowJIT):
2364         (JSC::ExecutableAllocator::setJITEnabled):
2365         * jit/ExecutableAllocator.h:
2366         (JSC::ExecutableAllocator::setJITEnabled):
2367
2368 2018-11-19  Fujii Hironori  <Hironori.Fujii@sony.com>
2369
2370         [MSVC] X86Assembler.h(108): error C2666: 'WebCore::operator -': 7 overloads have similar conversions
2371         https://bugs.webkit.org/show_bug.cgi?id=189467
2372         <rdar://problem/44290945>
2373
2374         Reviewed by Mark Lam.
2375
2376         This issue has happened several times. And, it seems that it will
2377         take more time for Microsoft to fix the MSVC bug. We need a
2378         effective workaround not to repeat this issue until they fix MSVC.
2379
2380         Remove ": int8_t" of RegisterID only for COMPILER(MSVC).
2381
2382         * assembler/X86Assembler.h: Added JSC_X86_ASM_REGISTER_ID_ENUM_BASE_TYPE macro.
2383
2384 2018-11-19  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
2385
2386         [WebAssembly] I64 arguments / return value check should be moved from callWebAssemblyFunction to JSToWasm wrapper
2387         https://bugs.webkit.org/show_bug.cgi?id=190512
2388
2389         Reviewed by Keith Miller.
2390
2391         This patch moves I64 arguments / return value check from callWebAssemblyFunction to JSToWasm wrapper. Since this
2392         check can be done when compiling the function, we should encode the result into the generated wrapper instead of
2393         checking every time we call callWebAssemblyFunction. This change is also one of the steps removing callWebAssemblyFunction
2394         entirely.
2395
2396         * wasm/WasmExceptionType.h:
2397         * wasm/js/JSToWasm.cpp:
2398         (JSC::Wasm::createJSToWasmWrapper):
2399         * wasm/js/WebAssemblyFunction.cpp:
2400         (JSC::callWebAssemblyFunction):
2401         * wasm/js/WebAssemblyWrapperFunction.cpp:
2402         (JSC::callWebAssemblyWrapperFunction):
2403
2404 2018-11-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
2405
2406         Consider removing double load for accessing the instructions from LLInt
2407         https://bugs.webkit.org/show_bug.cgi?id=190932
2408
2409         Reviewed by Mark Lam.
2410
2411         Changing InstructionStream to RefCountedArray like structure involves so much changes
2412         including BytecodeGraph, PreciseJumpTargets etc. Instead, CodeBlock simply hold a raw
2413         pointer to the InstructionStream's data. Since InstructionStream is not changed
2414         anymore, this pointer is valid while CodeBlock is live.
2415
2416         * bytecode/CodeBlock.cpp:
2417         (JSC::CodeBlock::CodeBlock):
2418         * bytecode/CodeBlock.h:
2419         * bytecode/InstructionStream.h:
2420         (JSC::InstructionStream::rawPointer const):
2421         * llint/LowLevelInterpreter.asm:
2422         * llint/LowLevelInterpreter32_64.asm:
2423         * llint/LowLevelInterpreter64.asm:
2424
2425 2018-11-18  Fujii Hironori  <Hironori.Fujii@sony.com>
2426
2427         REGRESSION(r238039) WebCore::JSDOMGlobalObject::createStructure is using JSC::Structure::create without including StructureInlines.h
2428         https://bugs.webkit.org/show_bug.cgi?id=191626
2429
2430         Reviewed by Yusuke Suzuki.
2431
2432         JSC::Structure::create is used everywhere. It should be defined in
2433         Structure.h, not in StructureInlines.h.
2434
2435         * runtime/Structure.h:
2436         (JSC::Structure::create): Moved.
2437         * runtime/StructureInlines.h: Moved JSC::Structure::create.
2438
2439 2018-11-18  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
2440
2441         Unreviewed, rolling in the rest of r237254
2442         https://bugs.webkit.org/show_bug.cgi?id=190340
2443
2444         * parser/ParserModes.h:
2445         * parser/ParserTokens.h:
2446         (JSC::JSTextPosition::JSTextPosition):
2447         (JSC::JSTokenLocation::JSTokenLocation): Deleted.
2448         * runtime/CodeCache.cpp:
2449         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
2450         * runtime/FunctionConstructor.cpp:
2451         (JSC::constructFunctionSkippingEvalEnabledCheck):
2452
2453 2018-11-17  Devin Rousso  <drousso@apple.com>
2454
2455         Web Inspector: Network: add button to show system certificate dialog
2456         https://bugs.webkit.org/show_bug.cgi?id=191458
2457         <rdar://problem/45977019>
2458
2459         Reviewed by Joseph Pecoraro.
2460
2461         * inspector/protocol/Network.json:
2462         Add `getSerializedCertificate` command.
2463
2464 2018-11-17  Dominik Infuehr  <dinfuehr@igalia.com>
2465
2466         Fix build with disabled DFG/FTL
2467         https://bugs.webkit.org/show_bug.cgi?id=191256
2468
2469         Reviewed by Yusuke Suzuki.
2470
2471         Fix compilation errors and warnings with both DFG and FTL
2472         disabled at compile-time.
2473
2474         * bytecode/CodeBlock.cpp:
2475         (JSC::CodeBlock::getICStatusMap):
2476         * bytecode/InByIdStatus.cpp:
2477         (JSC::InByIdStatus::computeFor):
2478         * bytecode/PutByIdStatus.cpp:
2479         (JSC::PutByIdStatus::computeFor):
2480         (JSC::PutByIdStatus::hasExitSite): Deleted.
2481         * bytecode/PutByIdStatus.h:
2482         * jit/JITOpcodes.cpp:
2483         (JSC::JIT::emit_op_catch):
2484
2485 2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>
2486
2487         Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Local Inspector)
2488         https://bugs.webkit.org/show_bug.cgi?id=191740
2489         <rdar://problem/45470897>
2490
2491         Reviewed by Timothy Hatcher.
2492
2493         * inspector/InspectorFrontendChannel.h:
2494         Expose EnumTraits for ConnectionType for WebKit IPC messages.
2495
2496 2018-11-16  Filip Pizlo  <fpizlo@apple.com>
2497
2498         All users of ArrayBuffer should agree on the same max size
2499         https://bugs.webkit.org/show_bug.cgi?id=191771
2500
2501         Reviewed by Mark Lam.
2502
2503         Array buffers cannot be larger than 0x7fffffff, because otherwise loading typedArray.length in the DFG/FTL would produce
2504         a uint32 or would require a signedness check, neither of which sounds reasonable. It's better to just bound their max size
2505         instead.
2506
2507         * runtime/ArrayBuffer.cpp:
2508         (JSC::ArrayBufferContents::ArrayBufferContents):
2509         (JSC::ArrayBufferContents::tryAllocate):
2510         (JSC::ArrayBufferContents::transferTo):
2511         (JSC::ArrayBufferContents::copyTo):
2512         (JSC::ArrayBufferContents::shareWith):
2513         * runtime/ArrayBuffer.h:
2514         * wasm/WasmMemory.cpp:
2515         (JSC::Wasm::Memory::tryCreate):
2516         (JSC::Wasm::Memory::grow):
2517         * wasm/WasmPageCount.h:
2518
2519 2018-11-16  Saam Barati  <sbarati@apple.com>
2520
2521         KnownCellUse should also have SpecCellCheck as its type filter
2522         https://bugs.webkit.org/show_bug.cgi?id=191729
2523         <rdar://problem/45872852>
2524
2525         Reviewed by Filip Pizlo.
2526
2527         We write transformations in the compiler like this where we emit edges with
2528         KnownCellUse if we know we're inserting code at a point where we're dominated
2529         by a Cell check:
2530         
2531         a: SomeValue
2532         b: Something(Cell:@a)
2533         c: SomethingElse(@b)
2534         d: CheckNotEmpty(@a)
2535         
2536         =>
2537         
2538         a: SomeValue
2539         b: Something(Cell:@a)
2540         e: RandomOtherThing(KnownCellUse:@a)
2541         c: SomethingElse(@b)
2542         d: CheckNotEmpty(@a)
2543         
2544         However, doing this used to lead to subtly incorrect programs since KnownCellUse
2545         did not allow the empty value to flow through it. We used to end up incorrectly
2546         deleting @d in the above program. We fix this, we make KnownCellUse allow the empty
2547         value to flow through.
2548
2549         * dfg/DFGUseKind.h:
2550         (JSC::DFG::typeFilterFor):
2551
2552 2018-11-16  Tadeu Zagallo  <tzagallo@apple.com>
2553
2554         Fix assertion failure on BytecodeGenerator::recordOpcode
2555         https://bugs.webkit.org/show_bug.cgi?id=191724
2556         <rdar://problem/45724395>
2557
2558         Reviewed by Saam Barati.
2559
2560         Since https://bugs.webkit.org/show_bug.cgi?id=187373, we were not
2561         restoring m_lastInstruction after patching the bytecode when
2562         finalizing StructureForInContexts, only m_lastOpcodeID, which led to
2563         the assertion failure.
2564
2565         * bytecompiler/BytecodeGenerator.cpp:
2566         (JSC::StructureForInContext::finalize):
2567
2568 2018-11-15  Mark Lam  <mark.lam@apple.com>
2569
2570         RegExpObject's collectMatches should not be using JSArray::push to fill in its match results.
2571         https://bugs.webkit.org/show_bug.cgi?id=191730
2572         <rdar://problem/46048517>
2573
2574         Reviewed by Saam Barati.
2575
2576         According to the spec https://www.ecma-international.org/ecma-262/9.0/index.html#sec-regexp.prototype-@@match,
2577         the RegExp match results are filled in using the spec's CreateDataProperty()
2578         function which does not consult the prototype for setters.  JSArray:push()
2579         consults the prototype for setters.  We should be using putDirectIndex() instead.
2580
2581         * runtime/RegExpObjectInlines.h:
2582         (JSC::collectMatches):
2583
2584 2018-11-15  Mark Lam  <mark.lam@apple.com>
2585
2586         RegExp operations should not take fast patch if lastIndex is not numeric.
2587         https://bugs.webkit.org/show_bug.cgi?id=191731
2588         <rdar://problem/46017305>
2589
2590         Reviewed by Saam Barati.
2591
2592         This is because if lastIndex is an object with a valueOf() method, it can execute
2593         arbitrary code which may have side effects, and side effects are not permitted by
2594         the RegExp fast paths.
2595
2596         * builtins/RegExpPrototype.js:
2597         (globalPrivate.hasObservableSideEffectsForRegExpMatch):
2598         (overriddenName.string_appeared_here.search):
2599         (globalPrivate.hasObservableSideEffectsForRegExpSplit):
2600         (intrinsic.RegExpTestIntrinsic.test):
2601         * builtins/StringPrototype.js:
2602         (globalPrivate.hasObservableSideEffectsForStringReplace):
2603
2604 2018-11-15  Keith Rollin  <krollin@apple.com>
2605
2606         Delete old .xcfilelist files
2607         https://bugs.webkit.org/show_bug.cgi?id=191669
2608         <rdar://problem/46081994>
2609
2610         Reviewed by Chris Dumez.
2611
2612         .xcfilelist files were created and added to the Xcode project files in
2613         https://trac.webkit.org/changeset/238008/webkit. However, they caused
2614         build issues and they were removed from the Xcode projects in
2615         https://trac.webkit.org/changeset/238055/webkit. This check-in removes
2616         the files from the repository altogether. They'll ultimately be
2617         replaced with new files with names that indicate whether the
2618         associated files are inputs to the Run Script phase or are files
2619         created by the Run Script phase.
2620
2621         * DerivedSources.xcfilelist: Removed.
2622         * UnifiedSources.xcfilelist: Removed.
2623
2624 2018-11-14  Keith Rollin  <krollin@apple.com>
2625
2626         Move scripts for Derived and Unified Sources to external files
2627         https://bugs.webkit.org/show_bug.cgi?id=191670
2628         <rdar://problem/46082278>
2629
2630         Reviewed by Keith Miller.
2631
2632         Move the scripts in the Generate Derived Sources and Generate Unified
2633         Sources Run Script phases from the Xcode projects to external shell
2634         script files. Then invoke those scripts from the Run Script phases.
2635         This refactoring is being performed to support later work that will
2636         invoke these scripts in other contexts.
2637
2638         The scripts were maintained as-is when making the move. I did a little
2639         reformatting and added 'set -e' to the top of each file, but that's
2640         it.
2641
2642         * JavaScriptCore.xcodeproj/project.pbxproj:
2643         * Scripts/generate-derived-sources.sh: Added.
2644         * Scripts/generate-unified-sources.sh: Added.
2645
2646 2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>
2647
2648         Web Inspector: Pass Inspector::FrontendChannel as a reference connect/disconnect methods
2649         https://bugs.webkit.org/show_bug.cgi?id=191612
2650
2651         Reviewed by Matt Baker.
2652
2653         * inspector/InspectorFrontendRouter.cpp:
2654         (Inspector::FrontendRouter::connectFrontend):
2655         (Inspector::FrontendRouter::disconnectFrontend):
2656         * inspector/InspectorFrontendRouter.h:
2657         * inspector/JSGlobalObjectInspectorController.cpp:
2658         (Inspector::JSGlobalObjectInspectorController::connectFrontend):
2659         (Inspector::JSGlobalObjectInspectorController::disconnectFrontend):
2660         * inspector/JSGlobalObjectInspectorController.h:
2661         * inspector/remote/RemoteControllableTarget.h:
2662         * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
2663         (Inspector::RemoteConnectionToTarget::setup):
2664         (Inspector::RemoteConnectionToTarget::close):
2665         * inspector/remote/glib/RemoteConnectionToTargetGlib.cpp:
2666         (Inspector::RemoteConnectionToTarget::setup):
2667         (Inspector::RemoteConnectionToTarget::close):
2668         * runtime/JSGlobalObjectDebuggable.cpp:
2669         (JSC::JSGlobalObjectDebuggable::connect):
2670         (JSC::JSGlobalObjectDebuggable::disconnect):
2671         * runtime/JSGlobalObjectDebuggable.h:
2672
2673 2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>
2674
2675         Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Remote Inspector)
2676         https://bugs.webkit.org/show_bug.cgi?id=191494
2677         <rdar://problem/45469854>
2678
2679         Reviewed by Devin Rousso.
2680
2681         * CMakeLists.txt:
2682         * DerivedSources.make:
2683         * JavaScriptCore.xcodeproj/project.pbxproj:
2684         * Sources.txt:
2685         New domain and resources.
2686
2687         * inspector/protocol/Target.json: Added.
2688         New protocol domain, modeled after Worker.json, to allow for
2689         multiplexing between different targets.
2690
2691         * inspector/InspectorTarget.h:
2692         Each target will instantiate an InspectorTarget and must
2693         provide an identifier, type, and means of connecting/disconnecting
2694         to a frontend channel.
2695
2696         * inspector/agents/InspectorTargetAgent.cpp: Added.
2697         (Inspector::InspectorTargetAgent::InspectorTargetAgent):
2698         (Inspector::InspectorTargetAgent::didCreateFrontendAndBackend):
2699         (Inspector::InspectorTargetAgent::willDestroyFrontendAndBackend):
2700         (Inspector::InspectorTargetAgent::exists):
2701         (Inspector::InspectorTargetAgent::initialized):
2702         (Inspector::InspectorTargetAgent::sendMessageToTarget):
2703         (Inspector::InspectorTargetAgent::sendMessageFromTargetToFrontend):
2704         (Inspector::targetTypeToProtocolType):
2705         (Inspector::buildTargetInfoObject):
2706         (Inspector::InspectorTargetAgent::targetCreated):
2707         (Inspector::InspectorTargetAgent::targetTerminated):
2708         (Inspector::InspectorTargetAgent::connectToTargets):
2709         (Inspector::InspectorTargetAgent::disconnectFromTargets):
2710         * inspector/agents/InspectorTargetAgent.h: Added.
2711         TargetAgent holds a list of targets, and connects/disconnects to each
2712         of the targets when a frontend connects/disconnects.
2713
2714         * inspector/scripts/codegen/generator.py:
2715         Better enum casing of ServiceWorker.
2716
2717 2018-11-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
2718
2719         Unreviewed, rolling in CodeCache in r237254
2720         https://bugs.webkit.org/show_bug.cgi?id=190340
2721
2722         Land the CodeCache part without adding an additional hash value.
2723
2724         * bytecode/UnlinkedFunctionExecutable.cpp:
2725         (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
2726         * bytecode/UnlinkedFunctionExecutable.h:
2727         * parser/SourceCodeKey.h:
2728         (JSC::SourceCodeKey::SourceCodeKey):
2729         (JSC::SourceCodeKey::operator== const):
2730         * runtime/CodeCache.cpp:
2731         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
2732         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
2733         * runtime/CodeCache.h:
2734         * runtime/FunctionConstructor.cpp:
2735         (JSC::constructFunctionSkippingEvalEnabledCheck):
2736         * runtime/FunctionExecutable.cpp:
2737         (JSC::FunctionExecutable::fromGlobalCode):
2738         * runtime/FunctionExecutable.h:
2739
2740 2018-11-13  Saam Barati  <sbarati@apple.com>
2741
2742         ProxyObject should check for VMInquiry and return early before throwing a stack overflow exception
2743         https://bugs.webkit.org/show_bug.cgi?id=191601
2744
2745         Reviewed by Mark Lam.
2746
2747         This doesn't fix any bugs today, but it may reduce future bugs. It was
2748         always weird that ProxyObject::getOwnPropertySlot with VMInquiry might
2749         throw a stack overflow error instead of just returning false like it
2750         normally does when VMInquiry is passed in.
2751
2752         * runtime/ProxyObject.cpp:
2753         (JSC::ProxyObject::getOwnPropertySlotCommon):
2754
2755 2018-11-13  Saam Barati  <sbarati@apple.com>
2756
2757         TypeProfileLog::processLogEntries should stash away any pending exceptions and re-apply them to the VM
2758         https://bugs.webkit.org/show_bug.cgi?id=191600
2759
2760         Reviewed by Mark Lam.
2761
2762         processLogEntries will call into calculatedClassName, which will clear
2763         any exceptions it encounters (it assumes that they're stack overflow exceptions).
2764         However, this code may be called when an exception is already pending on the 
2765         VM (e.g, when we throw an exception in the DFG, we compile an OSR exit
2766         offramp, which may compile a baseline codeblock, which will process
2767         the type profiler log). To get around this, processLogEntires should stash
2768         away and re-apply any pending exceptions.
2769
2770         * dfg/DFGDriver.cpp:
2771         (JSC::DFG::compileImpl):
2772         * dfg/DFGOperations.cpp:
2773         * inspector/agents/InspectorRuntimeAgent.cpp:
2774         (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets):
2775         * jit/JIT.cpp:
2776         (JSC::JIT::doMainThreadPreparationBeforeCompile):
2777         * jit/JITOperations.cpp:
2778         * runtime/CommonSlowPaths.cpp:
2779         (JSC::SLOW_PATH_DECL):
2780         * runtime/TypeProfilerLog.cpp:
2781         (JSC::TypeProfilerLog::processLogEntries):
2782         * runtime/TypeProfilerLog.h:
2783         * runtime/VM.cpp:
2784         (JSC::VM::dumpTypeProfilerData):
2785         * runtime/VM.h:
2786         (JSC::VM::DeferExceptionScope::DeferExceptionScope):
2787         * tools/JSDollarVM.cpp:
2788         (JSC::functionFindTypeForExpression):
2789         (JSC::functionReturnTypeFor):
2790
2791 2018-11-13  Ryan Haddad  <ryanhaddad@apple.com>
2792
2793         Unreviewed, rolling out r238132.
2794
2795         The test added with this change is timing out on Debug JSC
2796         bots.
2797
2798         Reverted changeset:
2799
2800         "[BigInt] JSBigInt::createWithLength should throw when length
2801         is greater than JSBigInt::maxLength"
2802         https://bugs.webkit.org/show_bug.cgi?id=190836
2803         https://trac.webkit.org/changeset/238132
2804
2805 2018-11-12  Mark Lam  <mark.lam@apple.com>
2806
2807         Add OOM detection to StringPrototype's substituteBackreferences().
2808         https://bugs.webkit.org/show_bug.cgi?id=191563
2809         <rdar://problem/45720428>
2810
2811         Reviewed by Saam Barati.
2812
2813         * dfg/DFGStrengthReductionPhase.cpp:
2814         (JSC::DFG::StrengthReductionPhase::handleNode):
2815         * runtime/StringPrototype.cpp:
2816         (JSC::substituteBackreferencesSlow):
2817         (JSC::substituteBackreferencesInline):
2818         (JSC::substituteBackreferences):
2819         (JSC::replaceUsingRegExpSearch):
2820         (JSC::replaceUsingStringSearch):
2821         * runtime/StringPrototype.h:
2822
2823 2018-11-13  Mark Lam  <mark.lam@apple.com>
2824
2825         LLIntSlowPath's llint_loop_osr and llint_replace should set the topCallFrame.
2826         https://bugs.webkit.org/show_bug.cgi?id=191579
2827         <rdar://problem/45942472>
2828
2829         Reviewed by Saam Barati.
2830
2831         Both of these functions do a lot of work.  It would be good for the topCallFrame
2832         to be correct should we need to throw an exception.
2833
2834         For example, we've observed the following crash trace:
2835
2836           * frame #0: WTFCrash() at Assertions.cpp:253
2837             frame #1: ...
2838             frame #2: JSC::StructureIDTable::get(this=0x00006040000162f0, structureID=1874583248) at StructureIDTable.h:129
2839             frame #3: JSC::VM::getStructure(this=0x0000604000016210, id=4022066896) at VM.h:705
2840             frame #4: JSC::JSCell::structure(this=0x00007ffeefbbde30, vm=0x0000604000016210) const at JSCellInlines.h:125
2841             frame #5: JSC::JSCell::classInfo(this=0x00007ffeefbbde30, vm=0x0000604000016210) const at JSCellInlines.h:335
2842             frame #6: JSC::JSCell::inherits(this=0x00007ffeefbbde30, vm=0x0000604000016210, info=0x0000000105eaf020) const at JSCellInlines.h:302
2843             frame #7: JSC::JSObject* JSC::jsCast<JSC::JSObject*, JSC::JSCell>(from=0x00007ffeefbbde30) at JSCast.h:36
2844             frame #8: JSC::asObject(cell=0x00007ffeefbbde30) at JSObject.h:1299
2845             frame #9: JSC::asObject(value=JSValue @ 0x00007ffeefbba380) at JSObject.h:1304
2846             frame #10: JSC::Register::object(this=0x00007ffeefbbdd58) const at JSObject.h:1514
2847             frame #11: JSC::ExecState::jsCallee(this=0x00007ffeefbbdd40) const at CallFrame.h:107
2848             frame #12: JSC::ExecState::isStackOverflowFrame(this=0x00007ffeefbbdd40) const at CallFrameInlines.h:36
2849             frame #13: JSC::StackVisitor::StackVisitor(this=0x00007ffeefbba860, startFrame=0x00007ffeefbbdd40, vm=0x0000631000000800) at StackVisitor.cpp:52
2850             frame #14: JSC::StackVisitor::StackVisitor(this=0x00007ffeefbba860, startFrame=0x00007ffeefbbdd40, vm=0x0000631000000800) at StackVisitor.cpp:41
2851             frame #15: void JSC::StackVisitor::visit<(JSC::StackVisitor::EmptyEntryFrameAction)0, JSC::Interpreter::getStackTrace(JSC::JSCell*, WTF::Vector<JSC::StackFrame, 0ul, WTF::CrashOnOverflow, 16ul>&, unsigned long, unsigned long)::$_3>(startFrame=0x00007ffeefbbdd40, vm=0x0000631000000800, functor=0x00007ffeefbbaa60)::$_3 const&) at StackVisitor.h:147
2852             frame #16: JSC::Interpreter::getStackTrace(this=0x0000602000005db0, owner=0x000062d00020cbe0, results=0x00006020000249d0, framesToSkip=0, maxStackSize=1) at Interpreter.cpp:437
2853             frame #17: JSC::getStackTrace(exec=0x000062d00002c048, vm=0x0000631000000800, obj=0x000062d00020cbe0, useCurrentFrame=true) at Error.cpp:170
2854             frame #18: JSC::ErrorInstance::finishCreation(this=0x000062d00020cbe0, exec=0x000062d00002c048, vm=0x0000631000000800, message=0x00007ffeefbbb800, useCurrentFrame=true) at ErrorInstance.cpp:119
2855             frame #19: JSC::ErrorInstance::create(exec=0x000062d00002c048, vm=0x0000631000000800, structure=0x000062d0000f5730, message=0x00007ffeefbbb800, appender=0x0000000000000000, type=TypeNothing, useCurrentFrame=true)(WTF::String const&, WTF::String const&, JSC::RuntimeType, JSC::ErrorInstance::SourceTextWhereErrorOccurred), JSC::RuntimeType, bool) at ErrorInstance.h:49
2856             frame #20: JSC::createRangeError(exec=0x000062d00002c048, globalObject=0x000062d00002c000, message=0x00007ffeefbbb800, appender=0x0000000000000000)(WTF::String const&, WTF::String const&, JSC::RuntimeType, JSC::ErrorInstance::SourceTextWhereErrorOccurred)) at Error.cpp:68
2857             frame #21: JSC::createRangeError(exec=0x000062d00002c048, globalObject=0x000062d00002c000, message=0x00007ffeefbbb800) at Error.cpp:316
2858             frame #22: JSC::createStackOverflowError(exec=0x000062d00002c048, globalObject=0x000062d00002c000) at ExceptionHelpers.cpp:77
2859             frame #23: JSC::createStackOverflowError(exec=0x000062d00002c048) at ExceptionHelpers.cpp:72
2860             frame #24: JSC::throwStackOverflowError(exec=0x000062d00002c048, scope=0x00007ffeefbbbaa0) at ExceptionHelpers.cpp:335
2861             frame #25: JSC::ProxyObject::getOwnPropertySlotCommon(this=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbba80, slot=0x00007ffeefbbc720) at ProxyObject.cpp:372
2862             frame #26: JSC::ProxyObject::getOwnPropertySlot(object=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbbd40, slot=0x00007ffeefbbc720) at ProxyObject.cpp:395
2863             frame #27: JSC::JSObject::getNonIndexPropertySlot(this=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbbea0, slot=0x00007ffeefbbc720) at JSObjectInlines.h:150
2864             frame #28: bool JSC::JSObject::getPropertySlot<false>(this=0x000062d000200e40, exec=0x000062d00002c048, propertyName=PropertyName @ 0x00007ffeefbbc320, slot=0x00007ffeefbbc720) at JSObject.h:1424
2865             frame #29: JSC::JSObject::calculatedClassName(object=0x000062d000200e40) at JSObject.cpp:535
2866             frame #30: JSC::Structure::toStructureShape(this=0x000062d000007410, value=JSValue @ 0x00007ffeefbbcae0, sawPolyProtoStructure=0x00007ffeefbbcf60) at Structure.cpp:1142
2867             frame #31: JSC::TypeProfilerLog::processLogEntries(this=0x000060400000a950, reason=0x00007ffeefbbd5c0) at TypeProfilerLog.cpp:89
2868             frame #32: JSC::JIT::doMainThreadPreparationBeforeCompile(this=0x0000619000034da0) at JIT.cpp:951
2869             frame #33: JSC::JITWorklist::Plan::Plan(this=0x0000619000034d80, codeBlock=0x000062d0001d88c0, loopOSREntryBytecodeOffset=0) at JITWorklist.cpp:43
2870             frame #34: JSC::JITWorklist::Plan::Plan(this=0x0000619000034d80, codeBlock=0x000062d0001d88c0, loopOSREntryBytecodeOffset=0) at JITWorklist.cpp:42
2871             frame #35: JSC::JITWorklist::compileLater(this=0x0000616000001b80, codeBlock=0x000062d0001d88c0, loopOSREntryBytecodeOffset=0) at JITWorklist.cpp:256
2872             frame #36: JSC::LLInt::jitCompileAndSetHeuristics(codeBlock=0x000062d0001d88c0, exec=0x00007ffeefbbde30, loopOSREntryBytecodeOffset=0) at LLIntSlowPaths.cpp:391
2873             frame #37: llint_replace(exec=0x00007ffeefbbde30, pc=0x00006040000161ba) at LLIntSlowPaths.cpp:516
2874             frame #38: llint_entry at LowLevelInterpreter64.asm:98
2875             frame #39: vmEntryToJavaScript at LowLevelInterpreter64.asm:296
2876             ...
2877
2878         This crash occurred because StackVisitor was seeing an invalid topCallFrame while
2879         trying to capture the Error stack while throwing a StackOverflowError below
2880         llint_replace.  While in this specific example, it is questionable whether we
2881         should be executing JS code below TypeProfilerLog::processLogEntries(), it is
2882         correct to have set the topCallFrame in llint_replace.  We do this by calling
2883         LLINT_BEGIN_NO_SET_PC() at the top of llint_replace.
2884
2885         We also do the same for llint_osr.
2886         
2887         Note: both of these LLInt slow path functions are called with a fully initialized
2888         CallFrame.  Hence, there's no issue with setting topCallFrame to their CallFrames
2889         for these functions.
2890
2891         * llint/LLIntSlowPaths.cpp:
2892         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2893
2894 2018-11-13  Caio Lima  <ticaiolima@gmail.com>
2895
2896         [BigInt] JSBigInt::createWithLength should throw when length is greater than JSBigInt::maxLength
2897         https://bugs.webkit.org/show_bug.cgi?id=190836
2898
2899         Reviewed by Saam Barati.
2900
2901         In this patch we are creating a new method called `JSBigInt::createWithLengthUnchecked`
2902         where we allocate a BigInt trusting the length received as argument.
2903         With this additional method, we now check if length passed to
2904         `JSBigInt::createWithLength` is not greater than JSBigInt::maxLength.
2905         When the length is greater than maxLength, we then throw OOM
2906         exception.
2907         This required change the interface of some JSBigInt operations to
2908         receive `ExecState*` instead of `VM&`. We changed only operations that
2909         can throw because of OOM.
2910         We beleive that this approach of throwing instead of finishing the
2911         execution abruptly is better because JS programs can catch such
2912         exception and handle this issue properly.
2913
2914         * dfg/DFGOperations.cpp:
2915         * jit/JITOperations.cpp:
2916         * runtime/CommonSlowPaths.cpp:
2917         (JSC::SLOW_PATH_DECL):
2918         * runtime/JSBigInt.cpp:
2919         (JSC::JSBigInt::createZero):
2920         (JSC::JSBigInt::tryCreateWithLength):
2921         (JSC::JSBigInt::createWithLengthUnchecked):
2922         (JSC::JSBigInt::createFrom):
2923         (JSC::JSBigInt::multiply):
2924         (JSC::JSBigInt::divide):
2925         (JSC::JSBigInt::copy):
2926         (JSC::JSBigInt::unaryMinus):
2927         (JSC::JSBigInt::remainder):
2928         (JSC::JSBigInt::add):
2929         (JSC::JSBigInt::sub):
2930         (JSC::JSBigInt::bitwiseAnd):
2931         (JSC::JSBigInt::bitwiseOr):
2932         (JSC::JSBigInt::bitwiseXor):
2933         (JSC::JSBigInt::absoluteAdd):
2934         (JSC::JSBigInt::absoluteSub):
2935         (JSC::JSBigInt::absoluteDivWithDigitDivisor):
2936         (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
2937         (JSC::JSBigInt::absoluteLeftShiftAlwaysCopy):
2938         (JSC::JSBigInt::absoluteBitwiseOp):
2939         (JSC::JSBigInt::absoluteAddOne):
2940         (JSC::JSBigInt::absoluteSubOne):
2941         (JSC::JSBigInt::toStringGeneric):
2942         (JSC::JSBigInt::rightTrim):
2943         (JSC::JSBigInt::allocateFor):
2944         (JSC::JSBigInt::createWithLength): Deleted.
2945         * runtime/JSBigInt.h:
2946         * runtime/Operations.cpp:
2947         (JSC::jsAddSlowCase):
2948         * runtime/Operations.h:
2949         (JSC::jsSub):
2950         (JSC::jsMul):
2951
2952 2018-11-12  Devin Rousso  <drousso@apple.com>
2953
2954         Web Inspector: Network: show secure certificate details per-request
2955         https://bugs.webkit.org/show_bug.cgi?id=191447
2956         <rdar://problem/30019476>
2957
2958         Reviewed by Joseph Pecoraro.
2959
2960         Add Security domain to hold security related protocol types.
2961
2962         * CMakeLists.txt:
2963         * DerivedSources.make:
2964         * inspector/protocol/Network.json:
2965         * inspector/protocol/Security.json: Added.
2966         * inspector/scripts/codegen/objc_generator.py:
2967         (ObjCGenerator):
2968
2969 2018-11-12  Saam barati  <sbarati@apple.com>
2970
2971         Unreviewed. Rollout 238026: It caused ~8% JetStream 2 regressions on some iOS devices
2972         https://bugs.webkit.org/show_bug.cgi?id=191555
2973
2974         * bytecode/UnlinkedFunctionExecutable.cpp:
2975         (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
2976         * bytecode/UnlinkedFunctionExecutable.h:
2977         * parser/SourceCodeKey.h:
2978         (JSC::SourceCodeKey::SourceCodeKey):
2979         (JSC::SourceCodeKey::operator== const):
2980         * runtime/CodeCache.cpp:
2981         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
2982         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
2983         * runtime/CodeCache.h:
2984         * runtime/FunctionConstructor.cpp:
2985         (JSC::constructFunctionSkippingEvalEnabledCheck):
2986         * runtime/FunctionExecutable.cpp:
2987         (JSC::FunctionExecutable::fromGlobalCode):
2988         * runtime/FunctionExecutable.h:
2989
2990 2018-11-11  Benjamin Poulain  <benjamin@webkit.org>
2991
2992         Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
2993         https://bugs.webkit.org/show_bug.cgi?id=191492
2994
2995         Reviewed by Alex Christensen.
2996
2997         Rename file.
2998
2999         * API/JSValue.mm:
3000
3001 2018-11-10  Benjamin Poulain  <benjamin@webkit.org>
3002
3003         Fix a fixme: rename wtfObjcMsgSend to wtfObjCMsgSend
3004         https://bugs.webkit.org/show_bug.cgi?id=191492
3005
3006         Reviewed by Alex Christensen.
3007
3008         * API/JSValue.mm:
3009
3010 2018-11-10  Michael Catanzaro  <mcatanzaro@igalia.com>
3011
3012         Unreviewed, silence -Wunused-variable warning
3013
3014         * bytecode/Opcode.h:
3015         (JSC::padOpcodeName):
3016
3017 2018-11-09  Keith Rollin  <krollin@apple.com>
3018
3019         Unreviewed build fix after https://bugs.webkit.org/show_bug.cgi?id=191324
3020
3021         Remove the use of .xcfilelists until their side-effects are better
3022         understood.
3023
3024         * JavaScriptCore.xcodeproj/project.pbxproj:
3025
3026 2018-11-09  Keith Miller  <keith_miller@apple.com>
3027
3028         LLInt VectorSizeOffset should be based on offset extraction
3029         https://bugs.webkit.org/show_bug.cgi?id=191468
3030
3031         Reviewed by Yusuke Suzuki.
3032
3033         This patch also adds some usings to LLIntOffsetsExtractor that
3034         make it possible to use the bare names of Vector/RefCountedArray
3035         in offsets extraction.
3036
3037         * llint/LLIntOffsetsExtractor.cpp:
3038         * llint/LowLevelInterpreter.asm:
3039
3040 2018-11-09  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
3041
3042         Unreviewed, rolling in CodeCache in r237254
3043         https://bugs.webkit.org/show_bug.cgi?id=190340
3044
3045         Land the CodeCache part, which uses DefaultHash<>::Hash instead of computeHash.
3046
3047         * bytecode/UnlinkedFunctionExecutable.cpp:
3048         (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
3049         * bytecode/UnlinkedFunctionExecutable.h:
3050         * parser/SourceCodeKey.h:
3051         (JSC::SourceCodeKey::SourceCodeKey):
3052         (JSC::SourceCodeKey::operator== const):
3053         * runtime/CodeCache.cpp:
3054         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
3055         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
3056         * runtime/CodeCache.h:
3057         * runtime/FunctionConstructor.cpp:
3058         (JSC::constructFunctionSkippingEvalEnabledCheck):
3059         * runtime/FunctionExecutable.cpp:
3060         (JSC::FunctionExecutable::fromGlobalCode):
3061         * runtime/FunctionExecutable.h:
3062
3063 2018-11-08  Keith Miller  <keith_miller@apple.com>
3064
3065         put_by_val opcodes need to add the number tag as a 64-bit register
3066         https://bugs.webkit.org/show_bug.cgi?id=191456
3067
3068         Reviewed by Saam Barati.
3069
3070         Previously the LLInt would add it as a pointer sized value. That is
3071         wrong if pointer size is less 64-bits.
3072
3073         * llint/LowLevelInterpreter64.asm:
3074
3075 2018-11-08  Ross Kirsling  <ross.kirsling@sony.com>
3076
3077         [JSC] isStrWhiteSpace seems redundant with Lexer<UChar>::isWhiteSpace
3078         https://bugs.webkit.org/show_bug.cgi?id=191439
3079
3080         Reviewed by Saam Barati.
3081
3082         * CMakeLists.txt:
3083         * runtime/ParseInt.h:
3084         (JSC::isStrWhiteSpace):
3085         Define isStrWhiteSpace in terms of isWhiteSpace and isLineTerminator.
3086
3087 2018-11-08  Michael Saboff  <msaboff@apple.com>
3088
3089         Options::useRegExpJIT() should use jitEnabledByDefault() just like useJIT()
3090         https://bugs.webkit.org/show_bug.cgi?id=191444
3091
3092         Reviewed by Saam Barati.
3093
3094         * runtime/Options.h:
3095
3096 2018-11-08  Fujii Hironori  <Hironori.Fujii@sony.com>
3097
3098         [Win] UDis86Disassembler.cpp: warning: format specifies type 'unsigned long' but the argument has type 'uintptr_t' (aka 'unsigned long long')
3099         https://bugs.webkit.org/show_bug.cgi?id=191416
3100
3101         Reviewed by Saam Barati.
3102
3103         * disassembler/UDis86Disassembler.cpp:
3104         (JSC::tryToDisassembleWithUDis86): Use PRIxPTR for uintptr_t.
3105
3106 2018-11-08  Keith Rollin  <krollin@apple.com>
3107
3108         Create .xcfilelist files
3109         https://bugs.webkit.org/show_bug.cgi?id=191324
3110         <rdar://problem/45852819>
3111
3112         Reviewed by Alex Christensen.
3113
3114         As part of preparing for enabling XCBuild, create and use .xcfilelist
3115         files. These files are using during Run Script build phases in an
3116         Xcode project. If a Run Script build phase produces new files that are
3117         used later as inputs to subsequent build phases, XCBuild needs to know
3118         about these files. These files can be either specified in an "output
3119         files" section of the Run Script phase editor, or in .xcfilelist files
3120         that are associated with the Run Script build phase.
3121
3122         This patch takes the second approach. It consists of three sets of changes:
3123
3124         - Modify the DerivedSources.make files to have a
3125           'print_all_generated_files" target that produces a list of the files
3126           they create.
3127
3128         - Create a shell script that produces .xcfilelist files from the
3129           output of the previous step, as well as for the files created in the
3130           Generate Unified Sources build steps.
3131
3132         - Add the new .xcfilelist files to the associated projects.
3133
3134         Note that, with these changes, the Xcode workspace and projects can no
3135         longer be fully loaded into Xcode 9. Xcode will attempt to load the
3136         projects that have .xcfilelist files associated with them, but will
3137         fail and display a placeholder for those projects instead. It's
3138         expected that all developers are using Xcode 10 by now and that not
3139         being able to load into Xcode 9 is not a practical issue. Keep in mind
3140         that this is strictly an IDE issue, and that the projects can still be
3141         built with `xcodebuild`.
3142
3143         Also note that the shell script that creates the .xcfilelist files can
3144         also be used to verify that the set of files that's currently checked
3145         in is up-to-date. This checking can be used as part of a check-in hook
3146         or part of check-webkit-style to sooner catch cases where the
3147         .xcfilelist files need to be regenerated.
3148
3149         * DerivedSources.make:
3150         * DerivedSources.xcfilelist: Added.
3151         * JavaScriptCore.xcodeproj/project.pbxproj:
3152         * UnifiedSources.xcfilelist: Added.
3153
3154 2018-11-08  Ross Kirsling  <ross.kirsling@sony.com>
3155
3156         U+180E is no longer a whitespace character
3157         https://bugs.webkit.org/show_bug.cgi?id=191415
3158
3159         Reviewed by Saam Barati.
3160
3161         Mongolian Vowel Separator stopped being a valid whitespace character as of ES2016.
3162         (https://github.com/tc39/ecma262/pull/300)
3163
3164         * parser/Lexer.h:
3165         (JSC::Lexer<UChar>::isWhiteSpace):
3166         * runtime/ParseInt.h:
3167         (JSC::isStrWhiteSpace):
3168         * yarr/create_regex_tables:
3169
3170 2018-11-08  Keith Miller  <keith_miller@apple.com>
3171
3172         jitEnabledByDefault() should be on useJIT not useBaselineJIT
3173         https://bugs.webkit.org/show_bug.cgi?id=191434
3174
3175         Reviewed by Saam Barati.
3176
3177         * runtime/Options.h:
3178
3179 2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>
3180
3181         Web Inspector: Restrict domains at the target level instead of only at the window level
3182         https://bugs.webkit.org/show_bug.cgi?id=191344
3183
3184         Reviewed by Devin Rousso.
3185
3186         * inspector/protocol/Console.json:
3187         * inspector/protocol/Debugger.json:
3188         * inspector/protocol/Heap.json:
3189         * inspector/protocol/Runtime.json:
3190         Remove workerSupported as it is now no longer necessary. It is implied
3191         by availability being empty (meaning it is supported everywhere).
3192
3193         * inspector/protocol/Inspector.json:
3194         * inspector/protocol/ScriptProfiler.json:
3195         Restrict to "javascript" and "web" debuggables, not available in workers.
3196
3197         * inspector/protocol/Worker.json:
3198         Cleanup, remove empty types list.
3199         
3200         * inspector/protocol/Recording.json:
3201         Cleanup, only expose this in the "web" domain for now.
3202
3203         * inspector/scripts/codegen/generate_js_backend_commands.py:
3204         (JSBackendCommandsGenerator.generate_domain):
3205         * inspector/scripts/codegen/models.py:
3206         (Protocol.parse_domain):
3207         Allow a list of debuggable types. Add "worker" even though it is unused
3208         since that is a type we would want to allow or consider.
3209
3210         (Domain.__init__):
3211         (Domains):
3212         Remove now unnecessary workerSupported code.
3213         Allow availability on a domain with only types.
3214
3215         * inspector/scripts/tests/generic/expected/worker-supported-domains.json-result: Removed.
3216         * inspector/scripts/tests/generic/worker-supported-domains.json: Removed.
3217
3218 2018-11-07  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
3219
3220         Consider removing double load for accessing the MetadataTable from LLInt
3221         https://bugs.webkit.org/show_bug.cgi?id=190933
3222
3223         Reviewed by Keith Miller.
3224
3225         This patch removes double load for accesses to MetadataTable from LLInt.
3226         MetadataTable is now specially RefCounted class, which has interesting memory layout.
3227         When refcount becomes 0, MetadataTable asks UnlinkedMetadataTable to destroy itself.
3228
3229         * bytecode/CodeBlock.cpp:
3230         (JSC::CodeBlock::finishCreation):
3231         (JSC::CodeBlock::estimatedSize):
3232         (JSC::CodeBlock::visitChildren):
3233         * bytecode/CodeBlock.h:
3234         (JSC::CodeBlock::metadata):
3235         * bytecode/CodeBlockInlines.h:
3236         (JSC::CodeBlock::forEachValueProfile):
3237         (JSC::CodeBlock::forEachArrayProfile):
3238         (JSC::CodeBlock::forEachArrayAllocationProfile):
3239         (JSC::CodeBlock::forEachObjectAllocationProfile):
3240         (JSC::CodeBlock::forEachLLIntCallLinkInfo):
3241         * bytecode/MetadataTable.cpp:
3242         (JSC::MetadataTable::MetadataTable):
3243         (JSC::MetadataTable::~MetadataTable):
3244         (JSC::MetadataTable::sizeInBytes):
3245         * bytecode/MetadataTable.h:
3246         (JSC::MetadataTable::get):
3247         (JSC::MetadataTable::forEach):
3248         (JSC::MetadataTable::ref const):
3249         (JSC::MetadataTable::deref const):
3250         (JSC::MetadataTable::refCount const):
3251         (JSC::MetadataTable::hasOneRef const):
3252         (JSC::MetadataTable::buffer):
3253         (JSC::MetadataTable::linkingData const):
3254         (JSC::MetadataTable::getImpl):
3255         * bytecode/UnlinkedMetadataTable.h:
3256         (JSC::UnlinkedMetadataTable::buffer const):
3257         * bytecode/UnlinkedMetadataTableInlines.h:
3258         (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
3259         (JSC::UnlinkedMetadataTable::~UnlinkedMetadataTable):
3260         (JSC::UnlinkedMetadataTable::addEntry):
3261         (JSC::UnlinkedMetadataTable::sizeInBytes):
3262         (JSC::UnlinkedMetadataTable::finalize):
3263         (JSC::UnlinkedMetadataTable::link):
3264         (JSC::UnlinkedMetadataTable::unlink):
3265         * llint/LowLevelInterpreter.asm:
3266         * llint/LowLevelInterpreter32_64.asm:
3267
3268 2018-11-07  Caio Lima  <ticaiolima@gmail.com>
3269
3270         [BigInt] Add support to BigInt into ValueAdd
3271         https://bugs.webkit.org/show_bug.cgi?id=186177
3272
3273         Reviewed by Keith Miller.
3274
3275         We are adding a very primitive specialization case of BigInts into ValueAdd.
3276         When compiling a speculated version of this node to BigInt, we are currently
3277         calling 'operationAddBigInt', a function that expects only BigInts as
3278         parameter and effectly add numbers using JSBigInt::add. To properly
3279         speculate BigInt operands, we changed ArithProfile to observe when
3280         its result is a BigInt. With this new observation, we are able to identify
3281         when ValueAdd results into a String or BigInt.
3282
3283         Here are some numbers for this specialization running
3284         microbenchmarks:
3285
3286         big-int-simple-add                   21.5411+-1.1096  ^  15.3502+-0.7027  ^ definitely 1.4033x faster
3287         big-int-add-prediction-propagation   13.7762+-0.5578  ^  10.8117+-0.5330  ^ definitely 1.2742x faster
3288
3289         * bytecode/ArithProfile.cpp:
3290         (JSC::ArithProfile::emitObserveResult):
3291         (JSC::ArithProfile::shouldEmitSetNonNumeric const):
3292         (JSC::ArithProfile::shouldEmitSetBigInt const):
3293         (JSC::ArithProfile::emitSetNonNumeric const):
3294         (JSC::ArithProfile::emitSetBigInt const):
3295         (WTF::printInternal):
3296         (JSC::ArithProfile::shouldEmitSetNonNumber const): Deleted.
3297         (JSC::ArithProfile::emitSetNonNumber const): Deleted.
3298         * bytecode/ArithProfile.h:
3299         (JSC::ArithProfile::observedUnaryInt):
3300         (JSC::ArithProfile::observedUnaryNumber):
3301         (JSC::ArithProfile::observedBinaryIntInt):
3302         (JSC::ArithProfile::observedBinaryNumberInt):
3303         (JSC::ArithProfile::observedBinaryIntNumber):
3304         (JSC::ArithProfile::observedBinaryNumberNumber):
3305         (JSC::ArithProfile::didObserveNonInt32 const):
3306         (JSC::ArithProfile::didObserveNonNumeric const):
3307         (JSC::ArithProfile::didObserveBigInt const):
3308         (JSC::ArithProfile::setObservedNonNumeric):
3309         (JSC::ArithProfile::setObservedBigInt):
3310         (JSC::ArithProfile::observeResult):
3311         (JSC::ArithProfile::didObserveNonNumber const): Deleted.
3312         (JSC::ArithProfile::setObservedNonNumber): Deleted.
3313         * dfg/DFGByteCodeParser.cpp:
3314         (JSC::DFG::ByteCodeParser::makeSafe):
3315         * dfg/DFGFixupPhase.cpp:
3316         (JSC::DFG::FixupPhase::fixupNode):
3317         * dfg/DFGNode.h:
3318         (JSC::DFG::Node::mayHaveNonNumericResult):
3319         (JSC::DFG::Node::mayHaveBigIntResult):
3320         (JSC::DFG::Node::mayHaveNonNumberResult): Deleted.
3321         * dfg/DFGNodeFlags.cpp:
3322         (JSC::DFG::dumpNodeFlags):
3323         * dfg/DFGNodeFlags.h:
3324         * dfg/DFGOperations.cpp:
3325         * dfg/DFGOperations.h:
3326         * dfg/DFGPredictionPropagationPhase.cpp:
3327         * dfg/DFGSpeculativeJIT.cpp:
3328         (JSC::DFG::SpeculativeJIT::compileValueAdd):
3329         * ftl/FTLLowerDFGToB3.cpp:
3330         (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
3331         * runtime/CommonSlowPaths.cpp:
3332         (JSC::updateArithProfileForUnaryArithOp):
3333         (JSC::updateArithProfileForBinaryArithOp):
3334
3335 2018-11-07  Joseph Pecoraro  <pecoraro@apple.com>
3336
3337         Web Inspector: Fix "Javascript" => "JavaScript" enum in protocol generated objects
3338         https://bugs.webkit.org/show_bug.cgi?id=191340
3339
3340         Reviewed by Devin Rousso.
3341
3342         * inspector/ConsoleMessage.cpp:
3343         (Inspector::messageSourceValue):
3344         Use new enum name.
3345
3346         * inspector/scripts/codegen/generator.py:
3347         Correct the casing of "JavaScript".
3348
3349 2018-11-07  Tadeu Zagallo  <tzagallo@apple.com>
3350
3351         Align wide opcodes in the instruction stream
3352         https://bugs.webkit.org/show_bug.cgi?id=191254
3353
3354         Reviewed by Keith Miller.
3355
3356         Pad the bytecode with nops to ensure that wide opcodes are 4-byte
3357         aligned on platforms that don't like unaligned memory access.
3358
3359         For that, add a new type to represent jump targets, BoundLabel, which
3360         delays computing the offset in case we need to emit nops for padding.
3361         Extra padding is also emitted before op_yield and at the of each
3362         BytecodeWriter fragment, to ensure that the bytecode remains aligned
3363         after the rewriting.
3364
3365         As a side effect, we can longer guarantee that the point immediately
3366         before emitting an opcode is the start of that opcode, since nops
3367         might be emitted in between if the opcode needs to be wide. To fix
3368         that, we only take the offset of opcodes after they have been emitted,
3369         using `m_lastInstruction.offset()`.
3370
3371         * bytecode/BytecodeDumper.h:
3372         (JSC::BytecodeDumper::dumpValue):
3373         * bytecode/BytecodeGeneratorification.cpp:
3374         (JSC::BytecodeGeneratorification::run):
3375         * bytecode/BytecodeList.rb:
3376         * bytecode/BytecodeRewriter.h:
3377         (JSC::BytecodeRewriter::Fragment::align):
3378         (JSC::BytecodeRewriter::insertFragmentBefore):
3379         (JSC::BytecodeRewriter::insertFragmentAfter):
3380         * bytecode/Fits.h:
3381         * bytecode/InstructionStream.h:
3382         (JSC::InstructionStreamWriter::ref):
3383         * bytecode/PreciseJumpTargetsInlines.h:
3384         (JSC::updateStoredJumpTargetsForInstruction):
3385         * bytecompiler/BytecodeGenerator.cpp:
3386         (JSC::Label::setLocation):
3387         (JSC::BoundLabel::target):
3388         (JSC::BoundLabel::saveTarget):
3389         (JSC::BoundLabel::commitTarget):
3390         (JSC::BytecodeGenerator::generate):
3391         (JSC::BytecodeGenerator::recordOpcode):
3392         (JSC::BytecodeGenerator::alignWideOpcode):
3393         (JSC::BytecodeGenerator::emitProfileControlFlow):
3394         (JSC::BytecodeGenerator::emitResolveScope):
3395         (JSC::BytecodeGenerator::emitGetFromScope):
3396         (JSC::BytecodeGenerator::emitPutToScope):
3397         (JSC::BytecodeGenerator::emitGetById):
3398         (JSC::BytecodeGenerator::emitDirectGetById):
3399         (JSC::BytecodeGenerator::emitPutById):
3400         (JSC::BytecodeGenerator::emitDirectPutById):
3401         (JSC::BytecodeGenerator::emitGetByVal):
3402         (JSC::BytecodeGenerator::emitCreateThis):
3403         (JSC::BytecodeGenerator::beginSwitch):
3404         (JSC::BytecodeGenerator::endSwitch):
3405         (JSC::BytecodeGenerator::emitRequireObjectCoercible):
3406         (JSC::BytecodeGenerator::emitYieldPoint):
3407         (JSC::BytecodeGenerator::emitToThis):
3408         (JSC::Label::bind): Deleted.
3409         * bytecompiler/BytecodeGenerator.h:
3410         (JSC::BytecodeGenerator::recordOpcode): Deleted.
3411         * bytecompiler/Label.h:
3412         (JSC::BoundLabel::BoundLabel):
3413         (JSC::BoundLabel::operator int):
3414         (JSC::Label::bind):
3415         * generator/Opcode.rb:
3416
3417 2018-11-07  Tadeu Zagallo  <tzagallo@apple.com>
3418
3419         REGRESSION(r237547): Test failures on 32-bit JSC since the JIT was disabled
3420         https://bugs.webkit.org/show_bug.cgi?id=191184
3421
3422         Reviewed by Saam Barati.
3423
3424         Fix API test on CLoop: we can only disable the LLInt when the JIT is enabled.
3425
3426         * API/tests/PingPongStackOverflowTest.cpp:
3427         (testPingPongStackOverflow):
3428
3429 2018-11-06  Justin Fan  <justin_fan@apple.com>
3430
3431         [WebGPU] Experimental prototype for WebGPURenderPipeline and WebGPUSwapChain
3432         https://bugs.webkit.org/show_bug.cgi?id=191291
3433
3434         Reviewed by Myles Maxfield.
3435
3436         Properly disable WEBGPU on all non-Metal platforms for now.
3437
3438         * Configurations/FeatureDefines.xcconfig:
3439
3440 2018-11-06  Keith Rollin  <krollin@apple.com>
3441
3442         Adjust handling of Include paths that need quoting
3443         https://bugs.webkit.org/show_bug.cgi?id=191314
3444         <rdar://problem/45849143>
3445
3446         Reviewed by Dan Bernstein.
3447
3448         There are several places in the JavaScriptCore Xcode project where the
3449         paths defined in HEADER_SEARCH_PATHS are quoted. That is, the
3450         definitions look like:
3451
3452             HEADER_SEARCH_PATHS = (
3453                 "\"${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\"",
3454                 "\"${BUILT_PRODUCTS_DIR}/LLIntOffsets/${ARCHS}\"",
3455                 "\"$(JAVASCRIPTCORE_FRAMEWORKS_DIR)/JavaScriptCore.framework/PrivateHeaders\"",
3456                 "$(inherited)",
3457             );
3458
3459         The idea here is presumably to have the resulting $(CPP) command have
3460         -I options where the associated paths are themselves quoted,
3461         protecting against space characters in the paths.
3462
3463         This approach to quote management can break under Xcode 9. If
3464         .xcfilelist files are added to the project, the 'objectVersion' value
3465         in the Xcode project file is changed from 46 to 51. If a project with
3466         objectVersion=51 is presented to Xcode 9 (as can happen when we build
3467         for older OS's), it produces build lines where the quotes are escaped,
3468         thereby becoming part of the path. The build then fails because a
3469         search for a file normally found in a directory called "Foo" will be
3470         looked for in "\"Foo\"", which doesn't exist.
3471
3472         Simply removing the escaped quotes from the HEADER_SEARCH_PATHS
3473         definition doesn't work, leading to paths that need quoting due to
3474         space characters but that don't get this quoting (the part of the path
3475         after the space appears to simply go missing).
3476
3477         Removing the escaped quotes from the HEADER_SEARCH_PATHS and moving
3478         the definitions to the .xcconfig fixes this problem.
3479
3480         * Configurations/ToolExecutable.xcconfig:
3481         * JavaScriptCore.xcodeproj/project.pbxproj:
3482
3483 2018-11-06  Michael Saboff  <msaboff@apple.com>
3484
3485         Multiple stress/regexp-compile-oom.js tests are failing on High Sierra Debug and Release JSC testers.
3486         https://bugs.webkit.org/show_bug.cgi?id=191271
3487
3488         Reviewed by Saam Barati.
3489
3490         Fixed use of ThrowScope my adding release() calls.  Found a few places where we needed
3491         RETURN_IF_EXCEPTION().  After some code inspections determined that we need to cover the
3492         exception bubbling for String.match() with a global RegExp as well as String.replace()
3493         and String.search().
3494
3495         * runtime/RegExpObjectInlines.h:
3496         (JSC::RegExpObject::matchInline):
3497         (JSC::collectMatches):
3498         * runtime/RegExpPrototype.cpp:
3499         (JSC::regExpProtoFuncSearchFast):
3500         * runtime/StringPrototype.cpp:
3501         (JSC::removeUsingRegExpSearch):
3502         (JSC::replaceUsingRegExpSearch):
3503
3504 2018-11-05  Don Olmstead  <don.olmstead@sony.com>
3505
3506         Fix typos in closing ENABLE guards
3507         https://bugs.webkit.org/show_bug.cgi?id=191273
3508
3509         Reviewed by Keith Miller.
3510
3511         * ftl/FTLForOSREntryJITCode.h:
3512         * ftl/FTLJITCode.h:
3513         * jsc.cpp:
3514         * wasm/WasmMemoryInformation.h:
3515         * wasm/WasmPageCount.h:
3516
3517 2018-11-05  Keith Miller  <keith_miller@apple.com>
3518
3519         Make static_asserts in APICast into bitwise_cast
3520         https://bugs.webkit.org/show_bug.cgi?id=191272
3521
3522         Reviewed by Filip Pizlo.
3523
3524         * API/APICast.h:
3525         (toJS):
3526         (toJSForGC):
3527         (toRef):
3528
3529 2018-11-05  Dominik Infuehr  <dinfuehr@igalia.com>
3530
3531         Enable LLInt on ARMv7/Linux
3532         https://bugs.webkit.org/show_bug.cgi?id=191190
3533
3534         Reviewed by Yusuke Suzuki.
3535
3536         After enabling the new bytecode format in r237547, C_LOOP was
3537         forced on all 32-bit platforms. Now enable LLInt again on
3538         ARMv7-Thumb2/Linux.
3539
3540         This adds a callee-saved register in ARMv7/Linux for the metadataTable and
3541         stores/restores it on LLInt function calls. It also introduces the globaladdr-
3542         instruction for the ARM-offlineasm to access the opcode-table.
3543
3544         * jit/GPRInfo.h:
3545         * jit/RegisterSet.cpp:
3546         (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
3547         * llint/LowLevelInterpreter.asm:
3548         * llint/LowLevelInterpreter32_64.asm:
3549         * offlineasm/arm.rb:
3550         * offlineasm/asm.rb:
3551         * offlineasm/instructions.rb:
3552
3553 2018-11-05  Fujii Hironori  <Hironori.Fujii@sony.com>
3554
3555         [Win][Clang][JSC] JIT::is64BitType reports "warning: explicit specialization cannot have a storage class"
3556         https://bugs.webkit.org/show_bug.cgi?id=191146
3557
3558         Reviewed by Yusuke Suzuki.
3559
3560         * jit/JIT.h: Changed is64BitType from a template class method to a
3561         template inner class.
3562
3563 2018-11-02  Keith Miller  <keith_miller@apple.com>
3564
3565         Assert JSValues can fit into a pointer when API casting
3566         https://bugs.webkit.org/show_bug.cgi?id=191220
3567
3568         Reviewed by Michael Saboff.
3569
3570         * API/APICast.h:
3571         (toJS):
3572         (toJSForGC):
3573         (toRef):
3574
3575 2018-11-02  Michael Saboff  <msaboff@apple.com>
3576
3577         Rolling in r237753 with unreviewed build fix.
3578
3579         Fixed issues with DECLARE_THROW_SCOPE placement.
3580
3581 2018-11-02  Ryan Haddad  <ryanhaddad@apple.com>
3582
3583         Unreviewed, rolling out r237753.
3584
3585         Introduced JSC test failures
3586
3587         Reverted changeset:
3588
3589         "Running out of stack space not properly handled in
3590         RegExp::compile() and its callers"
3591         https://bugs.webkit.org/show_bug.cgi?id=191206
3592         https://trac.webkit.org/changeset/237753
3593
3594 2018-11-02  Michael Saboff  <msaboff@apple.com>
3595
3596         Running out of stack space not properly handled in RegExp::compile() and its callers
3597         https://bugs.webkit.org/show_bug.cgi?id=191206
3598
3599         Reviewed by Filip Pizlo.
3600
3601         Eliminated two RELEASE_ASSERT_NOT_REACHED() for errors returned by Yarr parsing code.  Bubbled those errors
3602         up to where they are turned into the appropriate exceptions in matchInline().  If the errors are not due
3603         to syntax, we reset the RegExp state in case the parsing is tried with a smaller stack.
3604
3605         * runtime/RegExp.cpp:
3606         (JSC::RegExp::compile):
3607         (JSC::RegExp::compileMatchOnly):
3608         * runtime/RegExp.h:
3609         * runtime/RegExpInlines.h:
3610         (JSC::RegExp::compileIfNecessary):
3611         (JSC::RegExp::matchInline):
3612         (JSC::RegExp::compileIfNecessaryMatchOnly):
3613         * runtime/RegExpObjectInlines.h:
3614         (JSC::RegExpObject::execInline):
3615         * yarr/YarrErrorCode.h:
3616         (JSC::Yarr::hasHardError):
3617
3618 2018-11-02  Keith Miller  <keith_miller@apple.com>
3619
3620         API should use wrapper object if address is 32-bit
3621         https://bugs.webkit.org/show_bug.cgi?id=191203
3622
3623         Reviewed by Filip Pizlo.
3624
3625         * API/APICast.h:
3626         (toJS):
3627         (toJSForGC):
3628         (toRef):
3629
3630 2018-11-02  Tadeu Zagallo  <tzagallo@apple.com>
3631
3632         Metadata should not be copyable
3633         https://bugs.webkit.org/show_bug.cgi?id=191193
3634
3635         Reviewed by Keith Miller.
3636
3637         We should only ever hold references to the entry in the metadata table.
3638
3639         * bytecode/CodeBlock.cpp:
3640         (JSC::CodeBlock::finalizeLLIntInlineCaches):
3641         * dfg/DFGByteCodeParser.cpp:
3642         (JSC::DFG::ByteCodeParser::parseBlock):
3643         * generator/Metadata.rb:
3644
3645 2018-11-02  Tadeu Zagallo  <tzagallo@apple.com>
3646
3647         REGRESSION(r237547): Exception handlers should be aware of wide opcodes when JIT is disabled
3648         https://bugs.webkit.org/show_bug.cgi?id=191175
3649
3650         Reviewed by Keith Miller.
3651
3652         https://bugs.webkit.org/show_bug.cgi?id=191108 did not handle the case where JIT is not enabled
3653
3654         * jit/JITExceptions.cpp:
3655         (JSC::genericUnwind):
3656         * llint/LLIntData.h:
3657         (JSC::LLInt::getWideCodePtr):
3658
3659 2018-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>
3660
3661         Rename <wtf/unicode/UTF8.h> to <wtf/unicode/UTF8Conversion.h> in order to avoid conflicting with ICU's unicode/utf8.h
3662         https://bugs.webkit.org/show_bug.cgi?id=189693
3663
3664         Reviewed by Yusuke Suzuki.
3665
3666         * API/JSClassRef.cpp: Replaced <wtf/unicode/UTF8.h> with <wtf/unicode/UTF8Conversion.h>.
3667         * API/JSStringRef.cpp: Ditto.
3668         * runtime/JSGlobalObjectFunctions.cpp: Ditto.
3669         * wasm/WasmParser.h: Ditto.
3670
3671 2018-11-01  Keith Miller  <keith_miller@apple.com>
3672
3673         Unreviewed, JavaScriptCore should only guarantee to produce a
3674         modulemap if we are building for iOSMac.
3675
3676         * Configurations/JavaScriptCore.xcconfig:
3677
3678 2018-10-31  Devin Rousso  <drousso@apple.com>
3679
3680         Web Inspector: Canvas: create a setting for auto-recording newly created contexts
3681         https://bugs.webkit.org/show_bug.cgi?id=190856
3682
3683         Reviewed by Brian Burg.
3684
3685         * inspector/protocol/Canvas.json:
3686         Add `setRecordingAutoCaptureFrameCount` command for setting the number of frames to record
3687         immediately after a context is created.
3688
3689         * inspector/protocol/Recording.json:
3690         Add `creation` value for `Initiator` enum.
3691
3692 2018-10-31  Devin Rousso  <drousso@apple.com>
3693
3694         Web Inspector: display low-power enter/exit events in Timelines and Network node waterfalls
3695         https://bugs.webkit.org/show_bug.cgi?id=190641
3696         <rdar://problem/45319049>
3697
3698         Reviewed by Joseph Pecoraro.
3699
3700         * inspector/protocol/DOM.json:
3701         Add `videoLowPowerChanged` event that is fired when `InspectorDOMAgent` is able to determine
3702         whether a video element's low power state has changed.
3703
3704 2018-10-31  Tadeu Zagallo  <tzagallo@apple.com>
3705
3706         Adjust inlining threshold for new bytecode format
3707         https://bugs.webkit.org/show_bug.cgi?id=191115
3708
3709         Reviewed by Saam Barati.
3710
3711         The new format reduced the number of operands for many opcodes, which
3712         changed inlining decisions and impacted performance negatively.
3713
3714         * runtime/Options.h:
3715
3716 2018-10-31  Tadeu Zagallo  <tzagallo@apple.com>
3717
3718         REGRESSION(r237547): Exception handlers should be aware of wide opcodes
3719         https://bugs.webkit.org/show_bug.cgi?id=191108
3720         <rdar://problem/45690700>
3721
3722         Reviewed by Saam Barati.
3723
3724         When linking the handler, we need to check whether the target op_catch is
3725         wide or narrow in order to chose the right code pointer for the handler.
3726
3727         * bytecode/CodeBlock.cpp:
3728         (JSC::CodeBlock::finishCreation):
3729
3730 2018-10-31  Dominik Infuehr  <dinfuehr@igalia.com>
3731
3732         Align entries in metadata table
3733         https://bugs.webkit.org/show_bug.cgi?id=191062
3734
3735         Reviewed by Filip Pizlo.
3736
3737         Entries in the metadata table need to be aligned on some 32-bit
3738         architectures.
3739
3740         * bytecode/MetadataTable.h:
3741         (JSC::MetadataTable::forEach):
3742         * bytecode/Opcode.cpp:
3743         (JSC::metadataAlignment):
3744         * bytecode/Opcode.h:
3745         * bytecode/UnlinkedMetadataTableInlines.h:
3746         (JSC::UnlinkedMetadataTable::finalize):
3747         * generator/Section.rb:
3748
3749 2018-10-31  Jim Mason  <jmason@ibinx.com>
3750
3751         Static global 'fastHandlerInstalled' conditionally declared in WasmFaultSignalHandler.cpp
3752         https://bugs.webkit.org/show_bug.cgi?id=191063
3753
3754         Reviewed by Yusuke Suzuki.
3755
3756         * wasm/WasmFaultSignalHandler.cpp:
3757
3758 2018-10-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
3759
3760         [JSC][LLInt] Compact LLInt ASM code by removing unnecessary instructions
3761         https://bugs.webkit.org/show_bug.cgi?id=191092
3762
3763         Reviewed by Saam Barati.
3764
3765         Looking through LLIntAssembly.h, we can find several inefficiencies. This patch fixes the
3766         following things to tighten LLInt ASM code.
3767
3768         1. Remove unnecessary load instructions. Use jmp with BaseIndex directly.
3769         2. Introduce strength reduction for mul instructions in offlineasm layer. This is now critical
3770         since mul instruction is executed in `metadata` operation in LLInt. If the given immediate is
3771         a power of two, we convert it to lshift instruction.
3772
3773         * llint/LowLevelInterpreter32_64.asm:
3774         * llint/LowLevelInterpreter64.asm:
3775         * offlineasm/arm64.rb:
3776         * offlineasm/instructions.rb:
3777         * offlineasm/x86.rb:
3778
3779 2018-10-30  Don Olmstead  <don.olmstead@sony.com>
3780
3781         [PlayStation] Enable JavaScriptCore
3782         https://bugs.webkit.org/show_bug.cgi?id=191072
3783
3784         Reviewed by Brent Fulgham.
3785
3786         Add platform files for the PlayStation port.
3787
3788         * PlatformPlayStation.cmake: Added.
3789
3790 2018-10-30  Alexey Proskuryakov  <ap@apple.com>
3791
3792         Clean up some obsolete MAX_ALLOWED macros
3793         https://bugs.webkit.org/show_bug.cgi?id=190916
3794
3795         Reviewed by Tim Horton.
3796
3797         * API/JSManagedValue.mm:
3798         * API/JSVirtualMachine.mm:
3799         * API/JSWrapperMap.mm:
3800
3801 2018-10-30  Ross Kirsling  <ross.kirsling@sony.com>
3802
3803         useProbeOSRExit causes failures for Win64 DFG JIT
3804         https://bugs.webkit.org/show_bug.cgi?id=190656
3805
3806         Reviewed by Keith Miller.
3807
3808         * assembler/ProbeContext.cpp:
3809         (JSC::Probe::executeProbe):
3810         If lowWatermark is expected to equal lowWatermarkFromVisitingDirtyPages *regardless* of the input param,
3811         then let's just call lowWatermarkFromVisitingDirtyPages instead.
3812
3813         * dfg/DFGOSRExit.cpp:
3814         (JSC::DFG::OSRExit::executeOSRExit):
3815         The result of VariableEventStream::reconstruct appears to be inappropriate for direct use as a stack pointer offset;
3816         mimic the non-probe case and use requiredRegisterCountForExit from DFGCommonData instead.
3817         (Also, stop redundantly setting the stack pointer twice in a row.)
3818
3819 2018-10-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
3820
3821         "Unreviewed, partial rolling in r237254"
3822         https://bugs.webkit.org/show_bug.cgi?id=190340
3823
3824         This only adds Parser.{cpp,h}. And it is not used in this patch.
3825         It examines that the regression is related to exact Parser changes.
3826
3827         * parser/Parser.cpp:
3828         (JSC::Parser<LexerType>::parseInner):
3829         (JSC::Parser<LexerType>::parseSingleFunction):
3830         (JSC::Parser<LexerType>::parseFunctionInfo):
3831         (JSC::Parser<LexerType>::parseFunctionDeclaration):
3832         (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
3833         * parser/Parser.h:
3834         (JSC::Parser<LexerType>::parse):
3835         (JSC::parse):
3836         (JSC::parseFunctionForFunctionConstructor):
3837
3838 2018-10-29  Mark Lam  <mark.lam@apple.com>
3839
3840         Correctly detect string overflow when using the 'Function' constructor.
3841         https://bugs.webkit.org/show_bug.cgi?id=184883
3842         <rdar://problem/36320331>
3843
3844         Reviewed by Saam Barati.
3845
3846         Added StringBuilder::hasOverflowed() checks, and throwing OutOfMemoryErrors if
3847         we detect an overflow.
3848
3849         * runtime/FunctionConstructor.cpp:
3850         (JSC::constructFunctionSkippingEvalEnabledCheck):
3851         * runtime/JSGlobalObjectFunctions.cpp:
3852         (JSC::encode):
3853         (JSC::decode):
3854         * runtime/JSONObject.cpp:
3855         (JSC::Stringifier::stringify):
3856         (JSC::Stringifier::appendStringifiedValue):
3857
3858 2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>
3859
3860         Unreviewed, fix JSC on arm64e after r237547
3861         https://bugs.webkit.org/show_bug.cgi?id=187373
3862
3863         Unreviewed.
3864
3865         Remove unused move guarded by POINTER_PROFILING that was trashing the
3866         metadata on arm64e.
3867
3868         * llint/LowLevelInterpreter64.asm:
3869
3870 2018-10-29  Keith Miller  <keith_miller@apple.com>
3871
3872         JSC should explicitly list its modulemap file
3873         https://bugs.webkit.org/show_bug.cgi?id=191032
3874
3875         Reviewed by Saam Barati.
3876
3877         The automagically generated module map file for JSC will
3878         include headers where they may not work out of the box.
3879         This patch makes it so we now export the same modulemap
3880         that used to be provided via the legacy system.
3881
3882         * Configurations/JavaScriptCore.xcconfig:
3883         * JavaScriptCore.modulemap: Added.
3884         * JavaScriptCore.xcodeproj/project.pbxproj:
3885
3886 2018-10-29  Tim Horton  <timothy_horton@apple.com>
3887
3888         Modernize WebKit nibs and lprojs for localization's sake
3889         https://bugs.webkit.org/show_bug.cgi?id=190911
3890         <rdar://problem/45349466>
3891
3892         Reviewed by Dan Bernstein.
3893
3894         * JavaScriptCore.xcodeproj/project.pbxproj:
3895         English->en
3896
3897 2018-10-29  Commit Queue  <commit-queue@webkit.org>
3898
3899         Unreviewed, rolling out r237492.
3900         https://bugs.webkit.org/show_bug.cgi?id=191035
3901
3902         "It regresses JetStream 2 by 5% on some iOS devices"
3903         (Requested by saamyjoon on #webkit).
3904
3905         Reverted changeset:
3906
3907         "Unreviewed, partial rolling in r237254"
3908         https://bugs.webkit.org/show_bug.cgi?id=190340
3909         https://trac.webkit.org/changeset/237492
3910
3911 2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>
3912
3913         Add support for GetStack FlushedDouble
3914         https://bugs.webkit.org/show_bug.cgi?id=191012
3915         <rdar://problem/45265141>
3916
3917         Reviewed by Saam Barati.
3918
3919         LowerDFGToB3::compileGetStack assumed that we would not emit GetStack
3920         for doubles, but it turns out it may arise from the PutStack sinking
3921         phase: if we sink a PutStack into a successor block, other predecessors
3922         will emit a GetStack followed by a Upsilon.
3923
3924         * ftl/FTLLowerDFGToB3.cpp:
3925         (JSC::FTL::DFG::LowerDFGToB3::compileGetStack):
3926
3927 2018-10-29  Tadeu Zagallo  <tzagallo@apple.com>
3928
3929         New bytecode format for JSC
3930         https://bugs.webkit.org/show_bug.cgi?id=187373
3931         <rdar://problem/44186758>
3932
3933         Reviewed by Filip Pizlo.
3934
3935         Replace unlinked and linked bytecode with a new immutable bytecode that does not embed
3936         any addresses. Instructions can be encoded as narrow (1-byte operands) or wide (4-byte
3937         operands) and might contain an extra operand, the metadataID. The metadataID is used to
3938         access the instruction's mutable data in a side table in the CodeBlock (the MetadataTable).
3939
3940         Bytecodes now must be structs declared in the new BytecodeList.rb. All bytecodes give names
3941         and types to all its operands. Additionally, reading a bytecode from the instruction stream
3942         requires decoding the whole bytecode, i.e. it's no longer possible to access arbitrary
3943         operands directly from the stream.
3944
3945
3946         * CMakeLists.txt:
3947         * DerivedSources.make:
3948         * JavaScriptCore.xcodeproj/project.pbxproj:
3949         * Sources.txt:
3950         * assembler/MacroAssemblerCodeRef.h:
3951         (JSC::ReturnAddressPtr::ReturnAddressPtr):
3952         (JSC::ReturnAddressPtr::value const):
3953         (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
3954         (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
3955         * bytecode/ArithProfile.h:
3956         (JSC::ArithProfile::ArithProfile):
3957         * bytecode/ArrayAllocationProfile.h:
3958         (JSC::ArrayAllocationProfile::ArrayAllocationProfile):
3959         * bytecode/ArrayProfile.h:
3960         * bytecode/BytecodeBasicBlock.cpp:
3961         (JSC::isJumpTarget):
3962         (JSC::BytecodeBasicBlock::computeImpl):
3963         (JSC::BytecodeBasicBlock::compute):
3964         * bytecode/BytecodeBasicBlock.h:
3965         (JSC::BytecodeBasicBlock::leaderOffset const):
3966         (JSC::BytecodeBasicBlock::totalLength const):