Web Inspector: fake value descriptors for promises add a catch handler, preventing...
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2019-04-15  Devin Rousso  <drousso@apple.com>
2
3         Web Inspector: fake value descriptors for promises add a catch handler, preventing "rejectionhandled" events from being fired
4         https://bugs.webkit.org/show_bug.cgi?id=196484
5         <rdar://problem/49114725>
6
7         Reviewed by Joseph Pecoraro.
8
9         Only add a catch handler when the promise is reachable via a native getter and is known to
10         have rejected. A non-rejected promise doesn't need a catch handler, and any promise that
11         isn't reachable via a getter won't actually be reached, as `InjectedScript` doesn't call any
12         functions, instead only getting the function object itself.
13
14         * inspector/InjectedScriptSource.js:
15         (InjectedScript.prototype._propertyDescriptors.createFakeValueDescriptor):
16
17         * inspector/JSInjectedScriptHost.h:
18         * inspector/JSInjectedScriptHost.cpp:
19         (Inspector::JSInjectedScriptHost::isPromiseRejectedWithNativeGetterTypeError): Added.
20         * inspector/JSInjectedScriptHostPrototype.cpp:
21         (Inspector::JSInjectedScriptHostPrototype::finishCreation):
22         (Inspector::jsInjectedScriptHostPrototypeFunctionIsPromiseRejectedWithNativeGetterTypeError): Added.
23
24         * runtime/ErrorInstance.h:
25         (JSC::ErrorInstance::setNativeGetterTypeError): Added.
26         (JSC::ErrorInstance::isNativeGetterTypeError const): Added.
27
28         * runtime/Error.h:
29         (JSC::throwVMGetterTypeError): Added.
30         * runtime/Error.cpp:
31         (JSC::createGetterTypeError): Added.
32         (JSC::throwGetterTypeError): Added.
33         (JSC::throwDOMAttributeGetterTypeError):
34
35 2019-04-15  Robin Morisset  <rmorisset@apple.com>
36
37         B3::Value should have different kinds of adjacency lists
38         https://bugs.webkit.org/show_bug.cgi?id=196091
39
40         Reviewed by Filip Pizlo.
41
42         The key idea of this optimization is to replace the Vector<Value*, 3> m_children in B3::Value (40 bytes on 64-bits platform) by one of the following:
43         - Nothing (0 bytes)
44         - 1 Value* (8 bytes)
45         - 2 Value* (16 bytes)
46         - 3 Value* (24 bytes)
47         - A Vector<Value*, 3>
48         after the end of the Value object, depending on the kind of the Value.
49         So for example, when allocating an Add, we would allocate an extra 16 bytes into which to store 2 Values.
50         This would halve the memory consumption of Const64/Const32/Nop/Identity and a bunch more kinds of values, and reduce by a more moderate amount the memory consumption of the rest of non-varargs values (e.g. Add would go from 72 to 48 bytes).
51
52         A few implementation points:
53         - Even if there is no children, we must remember to allocate at least enough space for replaceWithIdentity to work later. It needs sizeof(Value) (for the object itself) + sizeof(Value*) (for the pointer to its child)
54         - We must make sure to destroy the vector whenever we destroy a Value which is VarArgs
55         - We must remember how many elements there are in the case where we did not allocate a Vector. We cannot do it purely by relying on the kind, both for speed reasons and because Return can have either 0 or 1 argument in B3
56           Thankfully, we have an extra byte of padding to use in the middle of B3::Value
57         - In order to support clone(), we must have a separate version of allocate, which extracts the opcode from the to-be-cloned object instead of from the call to the constructor
58         - Speaking of which, we need a special templated function opcodeFromConstructor, because some of the constructors of subclasses of Value don't take an explicit Opcode as argument, typically because they match a single one.
59         - To maximize performance, we provide specialized versions of child/lastChild/numChildren/children in the subclasses of Value, skipping checks when the actual type of the Value is already known.
60           This is done through the B3_SPECIALIZE_VALUE_FOR_... defined at the bottom of B3Value.h
61         - In the constructors of Value, we convert all extra children arguments to Value* eagerly. It is not required for correctness (they will be converted when put into a Vector<Value*> or a Value* in the end), but it helps limit an explosion in the number of template instantiations.
62         - I moved DeepValueDump::dump from the .h to the .cpp, as there is no good reason to inline it, and recompiling JSC is already slow enough
63
64         * JavaScriptCore.xcodeproj/project.pbxproj:
65         * b3/B3ArgumentRegValue.cpp:
66         (JSC::B3::ArgumentRegValue::cloneImpl const): Deleted.
67         * b3/B3ArgumentRegValue.h:
68         * b3/B3AtomicValue.cpp:
69         (JSC::B3::AtomicValue::AtomicValue):
70         (JSC::B3::AtomicValue::cloneImpl const): Deleted.
71         * b3/B3AtomicValue.h:
72         * b3/B3BasicBlock.h:
73         * b3/B3BasicBlockInlines.h:
74         (JSC::B3::BasicBlock::appendNewNonTerminal): Deleted.
75         * b3/B3CCallValue.cpp:
76         (JSC::B3::CCallValue::appendArgs):
77         (JSC::B3::CCallValue::cloneImpl const): Deleted.
78         * b3/B3CCallValue.h:
79         * b3/B3CheckValue.cpp:
80         (JSC::B3::CheckValue::cloneImpl const): Deleted.
81         * b3/B3CheckValue.h:
82         * b3/B3Const32Value.cpp:
83         (JSC::B3::Const32Value::cloneImpl const): Deleted.
84         * b3/B3Const32Value.h:
85         * b3/B3Const64Value.cpp:
86         (JSC::B3::Const64Value::cloneImpl const): Deleted.
87         * b3/B3Const64Value.h:
88         * b3/B3ConstDoubleValue.cpp:
89         (JSC::B3::ConstDoubleValue::cloneImpl const): Deleted.
90         * b3/B3ConstDoubleValue.h:
91         * b3/B3ConstFloatValue.cpp:
92         (JSC::B3::ConstFloatValue::cloneImpl const): Deleted.
93         * b3/B3ConstFloatValue.h:
94         * b3/B3ConstPtrValue.h:
95         (JSC::B3::ConstPtrValue::opcodeFromConstructor):
96         * b3/B3FenceValue.cpp:
97         (JSC::B3::FenceValue::FenceValue):
98         (JSC::B3::FenceValue::cloneImpl const): Deleted.
99         * b3/B3FenceValue.h:
100         * b3/B3MemoryValue.cpp:
101         (JSC::B3::MemoryValue::MemoryValue):
102         (JSC::B3::MemoryValue::cloneImpl const): Deleted.
103         * b3/B3MemoryValue.h:
104         * b3/B3MoveConstants.cpp:
105         * b3/B3PatchpointValue.cpp:
106         (JSC::B3::PatchpointValue::cloneImpl const): Deleted.
107         * b3/B3PatchpointValue.h:
108         (JSC::B3::PatchpointValue::opcodeFromConstructor):
109         * b3/B3Procedure.cpp:
110         * b3/B3Procedure.h:
111         * b3/B3ProcedureInlines.h:
112         (JSC::B3::Procedure::add):
113         * b3/B3SlotBaseValue.cpp:
114         (JSC::B3::SlotBaseValue::cloneImpl const): Deleted.
115         * b3/B3SlotBaseValue.h:
116         * b3/B3StackmapSpecial.cpp:
117         (JSC::B3::StackmapSpecial::forEachArgImpl):
118         (JSC::B3::StackmapSpecial::isValidImpl):
119         * b3/B3StackmapValue.cpp:
120         (JSC::B3::StackmapValue::append):
121         (JSC::B3::StackmapValue::StackmapValue):
122         * b3/B3StackmapValue.h:
123         * b3/B3SwitchValue.cpp:
124         (JSC::B3::SwitchValue::SwitchValue):
125         (JSC::B3::SwitchValue::cloneImpl const): Deleted.
126         * b3/B3SwitchValue.h:
127         (JSC::B3::SwitchValue::opcodeFromConstructor):
128         * b3/B3UpsilonValue.cpp:
129         (JSC::B3::UpsilonValue::cloneImpl const): Deleted.
130         * b3/B3UpsilonValue.h:
131         * b3/B3Value.cpp:
132         (JSC::B3::DeepValueDump::dump const):
133         (JSC::B3::Value::~Value):
134         (JSC::B3::Value::replaceWithIdentity):
135         (JSC::B3::Value::replaceWithNopIgnoringType):
136         (JSC::B3::Value::replaceWithPhi):
137         (JSC::B3::Value::replaceWithJump):
138         (JSC::B3::Value::replaceWithOops):
139         (JSC::B3::Value::replaceWith):
140         (JSC::B3::Value::invertedCompare const):
141         (JSC::B3::Value::returnsBool const):
142         (JSC::B3::Value::cloneImpl const): Deleted.
143         * b3/B3Value.h:
144         (JSC::B3::DeepValueDump::dump const): Deleted.
145         * b3/B3ValueInlines.h:
146         (JSC::B3::Value::adjacencyListOffset const):
147         (JSC::B3::Value::cloneImpl const):
148         * b3/B3VariableValue.cpp:
149         (JSC::B3::VariableValue::VariableValue):
150         (JSC::B3::VariableValue::cloneImpl const): Deleted.
151         * b3/B3VariableValue.h:
152         * b3/B3WasmAddressValue.cpp:
153         (JSC::B3::WasmAddressValue::WasmAddressValue):
154         (JSC::B3::WasmAddressValue::cloneImpl const): Deleted.
155         * b3/B3WasmAddressValue.h:
156         * b3/B3WasmBoundsCheckValue.cpp:
157         (JSC::B3::WasmBoundsCheckValue::WasmBoundsCheckValue):
158         (JSC::B3::WasmBoundsCheckValue::cloneImpl const): Deleted.
159         * b3/B3WasmBoundsCheckValue.h:
160         (JSC::B3::WasmBoundsCheckValue::accepts):
161         (JSC::B3::WasmBoundsCheckValue::opcodeFromConstructor):
162         * b3/testb3.cpp:
163         (JSC::B3::testCallFunctionWithHellaArguments):
164         (JSC::B3::testCallFunctionWithHellaArguments2):
165         (JSC::B3::testCallFunctionWithHellaArguments3):
166         (JSC::B3::testCallFunctionWithHellaDoubleArguments):
167         (JSC::B3::testCallFunctionWithHellaFloatArguments):
168         * ftl/FTLOutput.h:
169         (JSC::FTL::Output::call):
170
171 2019-04-15  Tadeu Zagallo  <tzagallo@apple.com>
172
173         Bytecode cache should not encode the SourceProvider for UnlinkedFunctionExecutable's classSource
174         https://bugs.webkit.org/show_bug.cgi?id=196878
175
176         Reviewed by Saam Barati.
177
178         Every time we encode an (Unlinked)SourceCode, we encode its SourceProvider,
179         including the full source if it's a StringSourceProvider. This wasn't an issue,
180         since the SourceCode contains a RefPtr to the SourceProvider, and the Encoder
181         would avoid encoding the provider multiple times. With the addition of the
182         incremental cache, each UnlinkedFunctionCodeBlock is encoded in isolation, which
183         means we can no longer deduplicate it and the full program text was being encoded
184         multiple times in the cache.
185         As a work around, this patch adds a custom cached type for encoding the SourceCode
186         without its provider, and later injects the SourceProvider through the Decoder.
187
188         * parser/SourceCode.h:
189         * parser/UnlinkedSourceCode.h:
190         (JSC::UnlinkedSourceCode::provider const):
191         * runtime/CachedTypes.cpp:
192         (JSC::Decoder::Decoder):
193         (JSC::Decoder::create):
194         (JSC::Decoder::provider const):
195         (JSC::CachedSourceCodeWithoutProvider::encode):
196         (JSC::CachedSourceCodeWithoutProvider::decode const):
197         (JSC::decodeCodeBlockImpl):
198         * runtime/CachedTypes.h:
199
200 2019-04-15  Robin Morisset  <rmorisset@apple.com>
201
202         MarkedSpace.cpp is not in the Xcode workspace
203         https://bugs.webkit.org/show_bug.cgi?id=196928
204
205         Reviewed by Saam Barati.
206
207         * JavaScriptCore.xcodeproj/project.pbxproj:
208
209 2019-04-15  Tadeu Zagallo  <tzagallo@apple.com>
210
211         Incremental bytecode cache should not append function updates when loaded from memory
212         https://bugs.webkit.org/show_bug.cgi?id=196865
213
214         Reviewed by Filip Pizlo.
215
216         Function updates hold the assumption that a function can only be executed/cached
217         after its containing code block has already been cached. This assumptions does
218         not hold if the UnlinkedCodeBlock is loaded from memory by the CodeCache, since
219         we might have two independent SourceProviders executing different paths of the
220         code and causing the same UnlinkedCodeBlock to be modified in memory.
221         Use a RefPtr instead of Ref for m_cachedBytecode in ShellSourceProvider to distinguish
222         between a new, empty cache and a cache that was not loaded and therefore cannot be updated.
223
224         * jsc.cpp:
225         (ShellSourceProvider::ShellSourceProvider):
226
227 2019-04-15  Saam barati  <sbarati@apple.com>
228
229         mergeOSREntryValue is wrong when the incoming value does not match up with the flush format
230         https://bugs.webkit.org/show_bug.cgi?id=196918
231
232         Reviewed by Yusuke Suzuki.
233
234         r244238 lead to some debug failures because we were calling checkConsistency()
235         before doing fixTypeForRepresentation when merging in must handle values in
236         CFA. This patch fixes that.
237         
238         However, as I was reading over mergeOSREntryValue, I realized it was wrong. It
239         was possible it could merge in a value/type outside of the variable's flushed type.
240         Once the flush format types are locked in, we can't introduce a type out of
241         that range. This probably never lead to any crashes as our profiling injection
242         and speculation decision code is solid. However, what we were doing is clearly
243         wrong, and something a fuzzer could have found if we fuzzed the must handle
244         values inside prediction injection. We should do that fuzzing:
245         https://bugs.webkit.org/show_bug.cgi?id=196924
246
247         * dfg/DFGAbstractValue.cpp:
248         (JSC::DFG::AbstractValue::mergeOSREntryValue):
249         * dfg/DFGAbstractValue.h:
250         * dfg/DFGCFAPhase.cpp:
251         (JSC::DFG::CFAPhase::injectOSR):
252
253 2019-04-15  Robin Morisset  <rmorisset@apple.com>
254
255         Several structures and enums in the Yarr interpreter can be shrunk
256         https://bugs.webkit.org/show_bug.cgi?id=196923
257
258         Reviewed by Saam Barati.
259
260         YarrOp: 88 -> 80
261         RegularExpression: 40 -> 32
262         ByteTerm: 56 -> 48
263         PatternTerm: 56 -> 48
264
265         * yarr/RegularExpression.cpp:
266         * yarr/YarrInterpreter.h:
267         * yarr/YarrJIT.cpp:
268         (JSC::Yarr::YarrGenerator::YarrOp::YarrOp):
269         * yarr/YarrParser.h:
270         * yarr/YarrPattern.h:
271
272 2019-04-15  Devin Rousso  <drousso@apple.com>
273
274         Web Inspector: REGRESSION(r244172): crash when trying to add extra domain while inspecting JSContext
275         https://bugs.webkit.org/show_bug.cgi?id=196925
276         <rdar://problem/49873994>
277
278         Reviewed by Joseph Pecoraro.
279
280         Move the logic for creating the `InspectorAgent` and `InspectorDebuggerAgent` into separate
281         functions so that callers can be guaranteed to have a valid instance of the agent.
282
283         * inspector/JSGlobalObjectInspectorController.h:
284         * inspector/JSGlobalObjectInspectorController.cpp:
285         (Inspector::JSGlobalObjectInspectorController::connectFrontend):
286         (Inspector::JSGlobalObjectInspectorController::frontendInitialized):
287         (Inspector::JSGlobalObjectInspectorController::appendExtraAgent):
288         (Inspector::JSGlobalObjectInspectorController::ensureInspectorAgent): Added.
289         (Inspector::JSGlobalObjectInspectorController::ensureDebuggerAgent): Added.
290         (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
291
292 2019-04-14  Don Olmstead  <don.olmstead@sony.com>
293
294         [CMake] JavaScriptCore derived sources should only be referenced inside JavaScriptCore
295         https://bugs.webkit.org/show_bug.cgi?id=196742
296
297         Reviewed by Konstantin Tokarev.
298
299         Migrate to using JavaScriptCore_DERIVED_SOURCES_DIR instead of DERIVED_SOURCES_JAVASCRIPTCORE_DIR
300         to support moving the JavaScriptCore derived sources outside of a shared directory.
301
302         Also use JavaScriptCore_DERIVED_SOURCES_DIR instead of DERIVED_SOUCES_DIR.
303
304         * CMakeLists.txt:
305
306 2019-04-13  Tadeu Zagallo  <tzagallo@apple.com>
307
308         CodeCache should check that the UnlinkedCodeBlock was successfully created before caching it
309         https://bugs.webkit.org/show_bug.cgi?id=196880
310
311         Reviewed by Yusuke Suzuki.
312
313         CodeCache should not tell the SourceProvider to cache the bytecode if it failed
314         to create the UnlinkedCodeBlock.
315
316         * runtime/CodeCache.cpp:
317         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
318
319 2019-04-12  Saam barati  <sbarati@apple.com>
320
321         r244079 logically broke shouldSpeculateInt52
322         https://bugs.webkit.org/show_bug.cgi?id=196884
323
324         Reviewed by Yusuke Suzuki.
325
326         In r244079, I changed shouldSpeculateInt52 to only return true
327         when the prediction is isAnyInt52Speculation(). However, it was
328         wrong to not to include SpecInt32 in this for two reasons:
329
330         1. We diligently write code that first checks if we should speculate Int32.
331         For example:
332         if (shouldSpeculateInt32()) ... 
333         else if (shouldSpeculateInt52()) ...
334
335         It would be wrong not to fall back to Int52 if we're dealing with the union of
336         Int32 and Int52.
337
338         It would be a performance mistake to not include Int32 here because
339         data flow can easily tell us that we have variables that are the union
340         of Int32 and Int52 values. It's better to speculate Int52 than Double
341         in that situation.
342
343         2. We also write code where we ask if the inputs can be Int52, e.g, if
344         we know via profiling that an Add overflows, we may not emit an Int32 add.
345         However, we only emit such an add if both inputs can be Int52, and Int32
346         can trivially become Int52.
347
348        This patch recovers the 0.5-1% regression r244079 caused on JetStream 2.
349
350         * bytecode/SpeculatedType.h:
351         (JSC::isInt32SpeculationForArithmetic):
352         (JSC::isInt32OrBooleanSpeculationForArithmetic):
353         (JSC::isInt32OrInt52Speculation):
354         * dfg/DFGFixupPhase.cpp:
355         (JSC::DFG::FixupPhase::observeUseKindOnNode):
356         * dfg/DFGNode.h:
357         (JSC::DFG::Node::shouldSpeculateInt52):
358         * dfg/DFGPredictionPropagationPhase.cpp:
359         * dfg/DFGVariableAccessData.cpp:
360         (JSC::DFG::VariableAccessData::couldRepresentInt52Impl):
361
362 2019-04-12  Saam barati  <sbarati@apple.com>
363
364         Unreviewed. Build fix after r244233.
365
366         * assembler/CPU.cpp:
367
368 2019-04-12  Saam barati  <sbarati@apple.com>
369
370         Sometimes we need to user fewer CPUs in our threading calculations
371         https://bugs.webkit.org/show_bug.cgi?id=196794
372         <rdar://problem/49389497>
373
374         Reviewed by Yusuke Suzuki.
375
376         * JavaScriptCore.xcodeproj/project.pbxproj:
377         * Sources.txt:
378         * assembler/CPU.cpp: Added.
379         (JSC::isKernTCSMAvailable):
380         (JSC::enableKernTCSM):
381         (JSC::kernTCSMAwareNumberOfProcessorCores):
382         * assembler/CPU.h:
383         (JSC::isKernTCSMAvailable):
384         (JSC::enableKernTCSM):
385         (JSC::kernTCSMAwareNumberOfProcessorCores):
386         * heap/MachineStackMarker.h:
387         (JSC::MachineThreads::addCurrentThread):
388         * runtime/JSLock.cpp:
389         (JSC::JSLock::didAcquireLock):
390         * runtime/Options.cpp:
391         (JSC::computeNumberOfWorkerThreads):
392         (JSC::computePriorityDeltaOfWorkerThreads):
393         * wasm/WasmWorklist.cpp:
394         (JSC::Wasm::Worklist::Worklist):
395
396 2019-04-12  Robin Morisset  <rmorisset@apple.com>
397
398         Use padding at end of ArrayBuffer
399         https://bugs.webkit.org/show_bug.cgi?id=196823
400
401         Reviewed by Filip Pizlo.
402
403         * runtime/ArrayBuffer.h:
404
405 2019-04-11  Yusuke Suzuki  <ysuzuki@apple.com>
406
407         [JSC] op_has_indexed_property should not assume subscript part is Uint32
408         https://bugs.webkit.org/show_bug.cgi?id=196850
409
410         Reviewed by Saam Barati.
411
412         op_has_indexed_property assumed that subscript part is always Uint32. However, this is just a load from non-constant RegisterID,
413         DFG can store it in double format and can perform OSR exit. op_has_indexed_property should not assume that.
414         In this patch, instead, we check it with isAnyInt and get uint32_t from AnyInt.
415
416         * jit/JITOpcodes.cpp:
417         (JSC::JIT::emit_op_has_indexed_property):
418         * jit/JITOpcodes32_64.cpp:
419         (JSC::JIT::emit_op_has_indexed_property):
420         * jit/JITOperations.cpp:
421         * runtime/CommonSlowPaths.cpp:
422         (JSC::SLOW_PATH_DECL):
423
424 2019-04-11  Saam barati  <sbarati@apple.com>
425
426         Remove invalid assertion in operationInstanceOfCustom
427         https://bugs.webkit.org/show_bug.cgi?id=196842
428         <rdar://problem/49725493>
429
430         Reviewed by Michael Saboff.
431
432         In the generated JIT code, we go to the slow path when the incoming function
433         isn't the Node's CodeOrigin's functionProtoHasInstanceSymbolFunction. However,
434         in the JIT operation, we were asserting against exec->lexicalGlobalObject()'s
435         functionProtoHasInstanceSymbolFunction. That assertion might be wrong when
436         inlining across global objects as exec->lexicalGlobalObject() uses the machine
437         frame for procuring the global object. There is no harm when this assertion fails
438         as we just execute the slow path. This patch removes the assertion. (However, this
439         does shed light on the deficiency in our exec->lexicalGlobalObject() function with
440         respect to inlining. However, this isn't new -- we've known about this for a while.)
441
442         * jit/JITOperations.cpp:
443
444 2019-04-11  Michael Saboff  <msaboff@apple.com>
445
446         Improve the Inline Cache Stats code
447         https://bugs.webkit.org/show_bug.cgi?id=196836
448
449         Reviewed by Saam Barati.
450
451         Needed to handle the case where the Identifier could be null, for example with InstanceOfAddAccessCase
452         and InstanceOfReplaceWithJump.
453
454         Added the ability to log the location of a GetBy and PutBy property as either on self or up the
455         protocol chain.
456
457         * jit/ICStats.cpp:
458         (JSC::ICEvent::operator< const):
459         (JSC::ICEvent::dump const):
460         * jit/ICStats.h:
461         (JSC::ICEvent::ICEvent):
462         (JSC::ICEvent::hash const):
463         * jit/JITOperations.cpp:
464         * jit/Repatch.cpp:
465         (JSC::tryCacheGetByID):
466         (JSC::tryCachePutByID):
467         (JSC::tryCacheInByID):
468
469 2019-04-11  Devin Rousso  <drousso@apple.com>
470
471         Web Inspector: Timelines: can't reliably stop/start a recording
472         https://bugs.webkit.org/show_bug.cgi?id=196778
473         <rdar://problem/47606798>
474
475         Reviewed by Timothy Hatcher.
476
477         * inspector/protocol/ScriptProfiler.json:
478         * inspector/protocol/Timeline.json:
479         It is possible to determine when programmatic capturing starts/stops in the frontend based
480         on the state when the backend causes the state to change, such as if the state is "inactive"
481         when the frontend is told that the backend has started capturing.
482
483         * inspector/protocol/CPUProfiler.json:
484         * inspector/protocol/Memory.json:
485         Send an end timestamp to match other instruments.
486
487         * inspector/JSGlobalObjectConsoleClient.cpp:
488         (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
489         (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):
490
491         * inspector/agents/InspectorScriptProfilerAgent.h:
492         * inspector/agents/InspectorScriptProfilerAgent.cpp:
493         (Inspector::InspectorScriptProfilerAgent::trackingComplete):
494         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStarted): Deleted.
495         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStopped): Deleted.
496
497 2019-04-11  Saam barati  <sbarati@apple.com>
498
499         Rename SetArgument to SetArgumentDefinitely
500         https://bugs.webkit.org/show_bug.cgi?id=196828
501
502         Reviewed by Yusuke Suzuki.
503
504         This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=196712
505         where we will introduce a node named SetArgumentMaybe. Doing this refactoring
506         first will make reviewing that other patch easier.
507
508         * dfg/DFGAbstractInterpreterInlines.h:
509         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
510         * dfg/DFGByteCodeParser.cpp:
511         (JSC::DFG::ByteCodeParser::handleVarargsInlining):
512         (JSC::DFG::ByteCodeParser::parseBlock):
513         * dfg/DFGCPSRethreadingPhase.cpp:
514         (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
515         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
516         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
517         (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
518         (JSC::DFG::CPSRethreadingPhase::specialCaseArguments):
519         (JSC::DFG::CPSRethreadingPhase::propagatePhis):
520         (JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
521         * dfg/DFGClobberize.h:
522         (JSC::DFG::clobberize):
523         * dfg/DFGCommon.h:
524         * dfg/DFGDoesGC.cpp:
525         (JSC::DFG::doesGC):
526         * dfg/DFGFixupPhase.cpp:
527         (JSC::DFG::FixupPhase::fixupNode):
528         * dfg/DFGGraph.cpp:
529         (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
530         * dfg/DFGGraph.h:
531         * dfg/DFGInPlaceAbstractState.cpp:
532         (JSC::DFG::InPlaceAbstractState::initialize):
533         (JSC::DFG::InPlaceAbstractState::endBasicBlock):
534         * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
535         (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):
536         * dfg/DFGMaximalFlushInsertionPhase.cpp:
537         (JSC::DFG::MaximalFlushInsertionPhase::treatRegularBlock):
538         (JSC::DFG::MaximalFlushInsertionPhase::treatRootBlock):
539         * dfg/DFGMayExit.cpp:
540         * dfg/DFGNode.cpp:
541         (JSC::DFG::Node::hasVariableAccessData):
542         * dfg/DFGNode.h:
543         (JSC::DFG::Node::convertPhantomToPhantomLocal):
544         * dfg/DFGNodeType.h:
545         * dfg/DFGOSREntrypointCreationPhase.cpp:
546         (JSC::DFG::OSREntrypointCreationPhase::run):
547         * dfg/DFGPhantomInsertionPhase.cpp:
548         * dfg/DFGPredictionPropagationPhase.cpp:
549         * dfg/DFGSSAConversionPhase.cpp:
550         (JSC::DFG::SSAConversionPhase::run):
551         * dfg/DFGSafeToExecute.h:
552         (JSC::DFG::safeToExecute):
553         * dfg/DFGSpeculativeJIT.cpp:
554         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
555         * dfg/DFGSpeculativeJIT32_64.cpp:
556         (JSC::DFG::SpeculativeJIT::compile):
557         * dfg/DFGSpeculativeJIT64.cpp:
558         (JSC::DFG::SpeculativeJIT::compile):
559         * dfg/DFGTypeCheckHoistingPhase.cpp:
560         (JSC::DFG::TypeCheckHoistingPhase::run):
561         * dfg/DFGValidate.cpp:
562         * ftl/FTLCapabilities.cpp:
563         (JSC::FTL::canCompile):
564
565 2019-04-11  Truitt Savell  <tsavell@apple.com>
566
567         Unreviewed, rolling out r244158.
568
569         Casued 8 inspector/timeline/ test failures.
570
571         Reverted changeset:
572
573         "Web Inspector: Timelines: can't reliably stop/start a
574         recording"
575         https://bugs.webkit.org/show_bug.cgi?id=196778
576         https://trac.webkit.org/changeset/244158
577
578 2019-04-10  Saam Barati  <sbarati@apple.com>
579
580         AbstractValue::validateOSREntryValue is wrong for Int52 constants
581         https://bugs.webkit.org/show_bug.cgi?id=196801
582         <rdar://problem/49771122>
583
584         Reviewed by Yusuke Suzuki.
585
586         validateOSREntryValue should not care about the format of the incoming
587         value for Int52s. This patch normalizes the format of m_value and
588         the incoming value when comparing them.
589
590         * dfg/DFGAbstractValue.h:
591         (JSC::DFG::AbstractValue::validateOSREntryValue const):
592
593 2019-04-10  Saam Barati  <sbarati@apple.com>
594
595         ArithSub over Int52 has shouldCheckOverflow as always true
596         https://bugs.webkit.org/show_bug.cgi?id=196796
597
598         Reviewed by Yusuke Suzuki.
599
600         AI was checking for ArithSub over Int52 if !shouldCheckOverflow. However,
601         shouldCheckOverflow is always true, so !shouldCheckOverflow is always
602         false. We shouldn't check something we assert against.
603
604         * dfg/DFGAbstractInterpreterInlines.h:
605         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
606
607 2019-04-10  Basuke Suzuki  <basuke.suzuki@sony.com>
608
609         [PlayStation] Specify byte order clearly on Remote Inspector Protocol
610         https://bugs.webkit.org/show_bug.cgi?id=196790
611
612         Reviewed by Ross Kirsling.
613
614         Original implementation lacks byte order specification. Network byte order is the
615         good candidate if there's no strong reason to choose other.
616         Currently no client exists for PlayStation remote inspector protocol, so we can
617         change the byte order without care.
618
619         * inspector/remote/playstation/RemoteInspectorMessageParserPlayStation.cpp:
620         (Inspector::MessageParser::createMessage):
621         (Inspector::MessageParser::parse):
622
623 2019-04-10  Devin Rousso  <drousso@apple.com>
624
625        Web Inspector: Inspector: lazily create the agent
626        https://bugs.webkit.org/show_bug.cgi?id=195971
627        <rdar://problem/49039645>
628
629        Reviewed by Joseph Pecoraro.
630
631        * inspector/JSGlobalObjectInspectorController.cpp:
632        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
633        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
634        (Inspector::JSGlobalObjectInspectorController::appendExtraAgent):
635        (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
636
637        * inspector/agents/InspectorAgent.h:
638        * inspector/agents/InspectorAgent.cpp:
639
640 2019-04-10  Saam Barati  <sbarati@apple.com>
641
642         Work around an arm64_32 LLVM miscompile bug
643         https://bugs.webkit.org/show_bug.cgi?id=196788
644
645         Reviewed by Yusuke Suzuki.
646
647         * runtime/CachedTypes.cpp:
648
649 2019-04-10  Devin Rousso  <drousso@apple.com>
650
651         Web Inspector: Timelines: can't reliably stop/start a recording
652         https://bugs.webkit.org/show_bug.cgi?id=196778
653         <rdar://problem/47606798>
654
655         Reviewed by Timothy Hatcher.
656
657         * inspector/protocol/ScriptProfiler.json:
658         * inspector/protocol/Timeline.json:
659         It is possible to determine when programmatic capturing starts/stops in the frontend based
660         on the state when the backend causes the state to change, such as if the state is "inactive"
661         when the frontend is told that the backend has started capturing.
662
663         * inspector/protocol/CPUProfiler.json:
664         * inspector/protocol/Memory.json:
665         Send an end timestamp to match other instruments.
666
667         * inspector/JSGlobalObjectConsoleClient.cpp:
668         (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
669         (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):
670
671         * inspector/agents/InspectorScriptProfilerAgent.h:
672         * inspector/agents/InspectorScriptProfilerAgent.cpp:
673         (Inspector::InspectorScriptProfilerAgent::trackingComplete):
674         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStarted): Deleted.
675         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStopped): Deleted.
676
677 2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>
678
679         Unreviewed, fix watch build after r244143
680         https://bugs.webkit.org/show_bug.cgi?id=195000
681
682         The result of `lseek` should be `off_t` rather than `int`.
683
684         * jsc.cpp:
685
686 2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>
687
688         Add support for incremental bytecode cache updates
689         https://bugs.webkit.org/show_bug.cgi?id=195000
690
691         Reviewed by Filip Pizlo.
692
693         Add support for incremental updates to the bytecode cache. The cache
694         is constructed as follows:
695         - When the cache is empty, the initial payload can be added to the BytecodeCache
696         by calling BytecodeCache::addGlobalUpdate. This represents the encoded
697         top-level UnlinkedCodeBlock.
698         - Afterwards, updates can be added by calling BytecodeCache::addFunctionUpdate.
699         The update is applied by appending the encoded UnlinkedFunctionCodeBlock
700         to the existing cache and updating the CachedFunctionExecutableMetadata
701         and the offset of the new CachedFunctionCodeBlock in the owner CachedFunctionExecutable.
702
703         * API/JSScript.mm:
704         (-[JSScript readCache]):
705         (-[JSScript isUsingBytecodeCache]):
706         (-[JSScript init]):
707         (-[JSScript cachedBytecode]):
708         (-[JSScript writeCache:]):
709         * API/JSScriptInternal.h:
710         * API/JSScriptSourceProvider.h:
711         * API/JSScriptSourceProvider.mm:
712         (JSScriptSourceProvider::cachedBytecode const):
713         * CMakeLists.txt:
714         * JavaScriptCore.xcodeproj/project.pbxproj:
715         * Sources.txt:
716         * bytecode/UnlinkedFunctionExecutable.cpp:
717         (JSC::generateUnlinkedFunctionCodeBlock):
718         * jsc.cpp:
719         (ShellSourceProvider::~ShellSourceProvider):
720         (ShellSourceProvider::cachePath const):
721         (ShellSourceProvider::loadBytecode const):
722         (ShellSourceProvider::ShellSourceProvider):
723         (ShellSourceProvider::cacheEnabled):
724         * parser/SourceProvider.h:
725         (JSC::SourceProvider::cachedBytecode const):
726         (JSC::SourceProvider::updateCache const):
727         (JSC::SourceProvider::commitCachedBytecode const):
728         * runtime/CachePayload.cpp: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
729         (JSC::CachePayload::makeMappedPayload):
730         (JSC::CachePayload::makeMallocPayload):
731         (JSC::CachePayload::makeEmptyPayload):
732         (JSC::CachePayload::CachePayload):
733         (JSC::CachePayload::~CachePayload):
734         (JSC::CachePayload::operator=):
735         (JSC::CachePayload::freeData):
736         * runtime/CachePayload.h: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
737         (JSC::CachePayload::data const):
738         (JSC::CachePayload::size const):
739         (JSC::CachePayload::CachePayload):
740         * runtime/CacheUpdate.cpp: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
741         (JSC::CacheUpdate::CacheUpdate):
742         (JSC::CacheUpdate::operator=):
743         (JSC::CacheUpdate::isGlobal const):
744         (JSC::CacheUpdate::asGlobal const):
745         (JSC::CacheUpdate::asFunction const):
746         * runtime/CacheUpdate.h: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
747         * runtime/CachedBytecode.cpp: Added.
748         (JSC::CachedBytecode::addGlobalUpdate):
749         (JSC::CachedBytecode::addFunctionUpdate):
750         (JSC::CachedBytecode::copyLeafExecutables):
751         (JSC::CachedBytecode::commitUpdates const):
752         * runtime/CachedBytecode.h: Added.
753         (JSC::CachedBytecode::create):
754         (JSC::CachedBytecode::leafExecutables):
755         (JSC::CachedBytecode::data const):
756         (JSC::CachedBytecode::size const):
757         (JSC::CachedBytecode::hasUpdates const):
758         (JSC::CachedBytecode::sizeForUpdate const):
759         (JSC::CachedBytecode::CachedBytecode):
760         * runtime/CachedTypes.cpp:
761         (JSC::Encoder::addLeafExecutable):
762         (JSC::Encoder::release):
763         (JSC::Decoder::Decoder):
764         (JSC::Decoder::create):
765         (JSC::Decoder::size const):
766         (JSC::Decoder::offsetOf):
767         (JSC::Decoder::ptrForOffsetFromBase):
768         (JSC::Decoder::addLeafExecutable):
769         (JSC::VariableLengthObject::VariableLengthObject):
770         (JSC::VariableLengthObject::buffer const):
771         (JSC::CachedPtrOffsets::offsetOffset):
772         (JSC::CachedWriteBarrierOffsets::ptrOffset):
773         (JSC::CachedFunctionExecutable::features const):
774         (JSC::CachedFunctionExecutable::hasCapturedVariables const):
775         (JSC::CachedFunctionExecutableOffsets::codeBlockForCallOffset):
776         (JSC::CachedFunctionExecutableOffsets::codeBlockForConstructOffset):
777         (JSC::CachedFunctionExecutableOffsets::metadataOffset):
778         (JSC::CachedFunctionExecutable::encode):
779         (JSC::CachedFunctionExecutable::decode const):
780         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
781         (JSC::encodeCodeBlock):
782         (JSC::encodeFunctionCodeBlock):
783         (JSC::decodeCodeBlockImpl):
784         (JSC::isCachedBytecodeStillValid):
785         * runtime/CachedTypes.h:
786         (JSC::VariableLengthObjectBase::VariableLengthObjectBase):
787         (JSC::decodeCodeBlock):
788         * runtime/CodeCache.cpp:
789         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
790         (JSC::CodeCache::updateCache):
791         (JSC::CodeCache::write):
792         (JSC::writeCodeBlock):
793         (JSC::serializeBytecode):
794         * runtime/CodeCache.h:
795         (JSC::SourceCodeValue::SourceCodeValue):
796         (JSC::CodeCacheMap::findCacheAndUpdateAge):
797         (JSC::CodeCacheMap::fetchFromDiskImpl):
798         * runtime/Completion.cpp:
799         (JSC::generateProgramBytecode):
800         (JSC::generateModuleBytecode):
801         * runtime/Completion.h:
802         * runtime/LeafExecutable.cpp: Copied from Source/JavaScriptCore/API/JSScriptSourceProvider.mm.
803         (JSC::LeafExecutable::operator+ const):
804         * runtime/LeafExecutable.h: Copied from Source/JavaScriptCore/API/JSScriptSourceProvider.mm.
805         (JSC::LeafExecutable::LeafExecutable):
806         (JSC::LeafExecutable::base const):
807
808 2019-04-10  Michael Catanzaro  <mcatanzaro@igalia.com>
809
810         Unreviewed, rolling out r243989.
811
812         Broke i686 builds
813
814         Reverted changeset:
815
816         "[CMake] Detect SSE2 at compile time"
817         https://bugs.webkit.org/show_bug.cgi?id=196488
818         https://trac.webkit.org/changeset/243989
819
820 2019-04-10  Robin Morisset  <rmorisset@apple.com>
821
822         We should clear m_needsOverflowCheck when hitting an exception in defineProperties in ObjectConstructor.cpp
823         https://bugs.webkit.org/show_bug.cgi?id=196746
824
825         Reviewed by Yusuke Suzuki..
826
827         It should be safe as in that case we are not completing the operation, and so not going to have any buffer overflow.
828
829         * runtime/ObjectConstructor.cpp:
830         (JSC::defineProperties):
831
832 2019-04-10  Antoine Quint  <graouts@apple.com>
833
834         Enable Pointer Events on watchOS
835         https://bugs.webkit.org/show_bug.cgi?id=196771
836         <rdar://problem/49040909>
837
838         Reviewed by Dean Jackson.
839
840         * Configurations/FeatureDefines.xcconfig:
841
842 2019-04-09  Keith Rollin  <krollin@apple.com>
843
844         Unreviewed build maintenance -- update .xcfilelists.
845
846         * DerivedSources-input.xcfilelist:
847
848 2019-04-09  Ross Kirsling  <ross.kirsling@sony.com>
849
850         JSC should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF
851         https://bugs.webkit.org/show_bug.cgi?id=193073
852
853         Reviewed by Keith Miller.
854
855         * bytecompiler/BytecodeGenerator.cpp:
856         (JSC::BytecodeGenerator::emitEqualityOpImpl):
857         (JSC::BytecodeGenerator::emitEqualityOp): Deleted.
858         * bytecompiler/BytecodeGenerator.h:
859         (JSC::BytecodeGenerator::emitEqualityOp):
860         Factor out the logic that uses the template parameter and keep it in the header.
861
862         * jit/JITPropertyAccess.cpp:
863         List off the template specializations needed by JITOperations.cpp.
864         This is unfortunate but at least there are only two (x2) by definition?
865         Trying to do away with this incurs a severe domino effect...
866
867         * API/JSValueRef.cpp:
868         * b3/B3OptimizeAssociativeExpressionTrees.cpp:
869         * b3/air/AirHandleCalleeSaves.cpp:
870         * builtins/BuiltinNames.cpp:
871         * bytecode/AccessCase.cpp:
872         * bytecode/BytecodeIntrinsicRegistry.cpp:
873         * bytecode/BytecodeIntrinsicRegistry.h:
874         * bytecode/BytecodeRewriter.cpp:
875         * bytecode/BytecodeUseDef.h:
876         * bytecode/CodeBlock.cpp:
877         * bytecode/InstanceOfAccessCase.cpp:
878         * bytecode/MetadataTable.cpp:
879         * bytecode/PolyProtoAccessChain.cpp:
880         * bytecode/StructureSet.cpp:
881         * bytecompiler/NodesCodegen.cpp:
882         * dfg/DFGCFAPhase.cpp:
883         * dfg/DFGPureValue.cpp:
884         * heap/GCSegmentedArray.h:
885         * heap/HeapInlines.h:
886         * heap/IsoSubspace.cpp:
887         * heap/LocalAllocator.cpp:
888         * heap/LocalAllocator.h:
889         * heap/LocalAllocatorInlines.h:
890         * heap/MarkingConstraintSolver.cpp:
891         * inspector/ScriptArguments.cpp:
892         (Inspector::ScriptArguments::isEqual const):
893         * inspector/ScriptCallStackFactory.cpp:
894         * interpreter/CallFrame.h:
895         * interpreter/Interpreter.cpp:
896         * interpreter/StackVisitor.cpp:
897         * llint/LLIntEntrypoint.cpp:
898         * runtime/ArrayIteratorPrototype.cpp:
899         * runtime/BigIntPrototype.cpp:
900         * runtime/CachedTypes.cpp:
901         * runtime/ErrorType.cpp:
902         * runtime/IndexingType.cpp:
903         * runtime/JSCellInlines.h:
904         * runtime/JSImmutableButterfly.h:
905         * runtime/Operations.h:
906         * runtime/RegExpCachedResult.cpp:
907         * runtime/RegExpConstructor.cpp:
908         * runtime/RegExpGlobalData.cpp:
909         * runtime/StackFrame.h:
910         * wasm/WasmSignature.cpp:
911         * wasm/js/JSToWasm.cpp:
912         * wasm/js/JSToWasmICCallee.cpp:
913         * wasm/js/WebAssemblyFunction.h:
914         Fix includes / forward declarations (and a couple of nearby clang warnings).
915
916 2019-04-09  Don Olmstead  <don.olmstead@sony.com>
917
918         [CMake] Apple builds should use ICU_INCLUDE_DIRS
919         https://bugs.webkit.org/show_bug.cgi?id=196720
920
921         Reviewed by Konstantin Tokarev.
922
923         * PlatformMac.cmake:
924
925 2019-04-09  Saam barati  <sbarati@apple.com>
926
927         Clean up Int52 code and some bugs in it
928         https://bugs.webkit.org/show_bug.cgi?id=196639
929         <rdar://problem/49515757>
930
931         Reviewed by Yusuke Suzuki.
932
933         This patch fixes bugs in our Int52 code. The primary change in this patch is
934         adopting a segregated type lattice for Int52. Previously, for Int52 values,
935         we represented them with SpecInt32Only and SpecInt52Only. For an Int52,
936         SpecInt32Only meant that the value is in int32 range. And SpecInt52Only meant
937         that the is outside of the int32 range.
938         
939         However, this got confusing because we reused SpecInt32Only both for JSValue
940         representations and Int52 representations. This actually lead to some bugs.
941         
942         1. It's possible that roundtripping through Int52 representation would say
943         it produces the wrong type. For example, consider this program and how we
944         used to annotate types in AI:
945         a: JSConstant(10.0) => m_type is SpecAnyIntAsDouble
946         b: Int52Rep(@a) => m_type is SpecInt52Only
947         c: ValueRep(@b) => m_type is SpecAnyIntAsDouble
948         
949         In AI, for the above program, we'd say that @c produces SpecAnyIntAsDouble.
950         However, the execution semantics are such that it'd actually produce a boxed
951         Int32. This patch fixes the bug where we'd say that Int52Rep over SpecAnyIntAsDouble
952         would produce SpecInt52Only. This is clearly wrong, as SpecAnyIntAsDouble can
953         mean an int value in either int32 or int52 range.
954         
955         2. AsbstractValue::validateTypeAcceptingBoxedInt52 was wrong in how it
956         accepted Int52 values. It was wrong in two different ways:
957         a: If the AbstractValue's type was SpecInt52Only, and the incoming value
958         was a boxed double, but represented a value in int32 range, the incoming
959         value would incorrectly validate as being acceptable. However, we should
960         have rejected this value.
961         b: If the AbstractValue's type was SpecInt32Only, and the incoming value
962         was an Int32 boxed in a double, this would not validate, even though
963         it should have validated.
964         
965         Solving 2 was easiest if we segregated out the Int52 type into its own
966         lattice. This patch makes a new Int52 lattice, which is composed of
967         SpecInt32AsInt52 and SpecNonInt32AsInt52.
968         
969         The conversion rules are now really simple.
970         
971         Int52 rep => JSValue rep
972         SpecInt32AsInt52 => SpecInt32Only
973         SpecNonInt32AsInt52 => SpecAnyIntAsDouble
974         
975         JSValue rep => Int52 rep
976         SpecInt32Only => SpecInt32AsInt52
977         SpecAnyIntAsDouble => SpecInt52Any
978         
979         With these rules, the program in (1) will now correctly report that @c
980         returns SpecInt32Only | SpecAnyIntAsDouble.
981
982         * bytecode/SpeculatedType.cpp:
983         (JSC::dumpSpeculation):
984         (JSC::speculationToAbbreviatedString):
985         (JSC::int52AwareSpeculationFromValue):
986         (JSC::leastUpperBoundOfStrictlyEquivalentSpeculations):
987         (JSC::speculationFromString):
988         * bytecode/SpeculatedType.h:
989         (JSC::isInt32SpeculationForArithmetic):
990         (JSC::isInt32OrBooleanSpeculationForArithmetic):
991         (JSC::isAnyInt52Speculation):
992         (JSC::isIntAnyFormat):
993         (JSC::isInt52Speculation): Deleted.
994         (JSC::isAnyIntSpeculation): Deleted.
995         * dfg/DFGAbstractInterpreterInlines.h:
996         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
997         * dfg/DFGAbstractValue.cpp:
998         (JSC::DFG::AbstractValue::fixTypeForRepresentation):
999         (JSC::DFG::AbstractValue::checkConsistency const):
1000         * dfg/DFGAbstractValue.h:
1001         (JSC::DFG::AbstractValue::isInt52Any const):
1002         (JSC::DFG::AbstractValue::validateTypeAcceptingBoxedInt52 const):
1003         * dfg/DFGFixupPhase.cpp:
1004         (JSC::DFG::FixupPhase::fixupArithMul):
1005         (JSC::DFG::FixupPhase::fixupNode):
1006         (JSC::DFG::FixupPhase::fixupGetPrototypeOf):
1007         (JSC::DFG::FixupPhase::fixupToThis):
1008         (JSC::DFG::FixupPhase::fixupToStringOrCallStringConstructor):
1009         (JSC::DFG::FixupPhase::observeUseKindOnNode):
1010         (JSC::DFG::FixupPhase::fixIntConvertingEdge):
1011         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
1012         (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):
1013         (JSC::DFG::FixupPhase::fixupChecksInBlock):
1014         * dfg/DFGGraph.h:
1015         (JSC::DFG::Graph::addShouldSpeculateInt52):
1016         (JSC::DFG::Graph::binaryArithShouldSpeculateInt52):
1017         (JSC::DFG::Graph::unaryArithShouldSpeculateInt52):
1018         (JSC::DFG::Graph::addShouldSpeculateAnyInt): Deleted.
1019         (JSC::DFG::Graph::binaryArithShouldSpeculateAnyInt): Deleted.
1020         (JSC::DFG::Graph::unaryArithShouldSpeculateAnyInt): Deleted.
1021         * dfg/DFGNode.h:
1022         (JSC::DFG::Node::shouldSpeculateInt52):
1023         (JSC::DFG::Node::shouldSpeculateAnyInt): Deleted.
1024         * dfg/DFGPredictionPropagationPhase.cpp:
1025         * dfg/DFGSpeculativeJIT.cpp:
1026         (JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
1027         (JSC::DFG::SpeculativeJIT::compileArithAdd):
1028         (JSC::DFG::SpeculativeJIT::compileArithSub):
1029         (JSC::DFG::SpeculativeJIT::compileArithNegate):
1030         * dfg/DFGSpeculativeJIT64.cpp:
1031         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
1032         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52):
1033         * dfg/DFGUseKind.h:
1034         (JSC::DFG::typeFilterFor):
1035         * dfg/DFGVariableAccessData.cpp:
1036         (JSC::DFG::VariableAccessData::makePredictionForDoubleFormat):
1037         (JSC::DFG::VariableAccessData::couldRepresentInt52Impl):
1038         * ftl/FTLLowerDFGToB3.cpp:
1039         (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
1040         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate):
1041         (JSC::FTL::DFG::LowerDFGToB3::setIntTypedArrayLoadResult):
1042
1043 2019-04-09  Tadeu Zagallo  <tzagallo@apple.com>
1044
1045         ASSERTION FAILED: !scope.exception() || !hasProperty in JSObject::get
1046         https://bugs.webkit.org/show_bug.cgi?id=196708
1047         <rdar://problem/49556803>
1048
1049         Reviewed by Yusuke Suzuki.
1050
1051         `operationPutToScope` needs to return early if an exception is thrown while
1052         checking if `hasProperty`.
1053
1054         * jit/JITOperations.cpp:
1055
1056 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1057
1058         [JSC] DFG should respect node's strict flag
1059         https://bugs.webkit.org/show_bug.cgi?id=196617
1060
1061         Reviewed by Saam Barati.
1062
1063         We accidentally use codeBlock->isStrictMode() directly in DFG and FTL. But this is wrong since this CodeBlock is the top level DFG/FTL CodeBlock,
1064         and this code does not respect the isStrictMode flag for the inlined CodeBlocks. In this patch, we start using isStrictModeFor(CodeOrigin) consistently
1065         in DFG and FTL to get the right isStrictMode flag for the DFG node.
1066         And we also split compilePutDynamicVar into compilePutDynamicVarStrict and compilePutDynamicVarNonStrict since (1) it is cleaner than accessing inlined
1067         callframe in the operation function, and (2) it is aligned to the other functions like operationPutByValDirectNonStrict etc.
1068         This bug is discovered by RandomizingFuzzerAgent by expanding the DFG coverage.
1069
1070         * dfg/DFGAbstractInterpreterInlines.h:
1071         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1072         * dfg/DFGConstantFoldingPhase.cpp:
1073         (JSC::DFG::ConstantFoldingPhase::foldConstants):
1074         * dfg/DFGFixupPhase.cpp:
1075         (JSC::DFG::FixupPhase::fixupToThis):
1076         * dfg/DFGOperations.cpp:
1077         * dfg/DFGOperations.h:
1078         * dfg/DFGPredictionPropagationPhase.cpp:
1079         * dfg/DFGSpeculativeJIT.cpp:
1080         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
1081         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1082         (JSC::DFG::SpeculativeJIT::compilePutDynamicVar):
1083         (JSC::DFG::SpeculativeJIT::compileToThis):
1084         * dfg/DFGSpeculativeJIT32_64.cpp:
1085         (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
1086         (JSC::DFG::SpeculativeJIT::compile):
1087         * dfg/DFGSpeculativeJIT64.cpp:
1088         (JSC::DFG::SpeculativeJIT::compile):
1089         * ftl/FTLLowerDFGToB3.cpp:
1090         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
1091         (JSC::FTL::DFG::LowerDFGToB3::compilePutDynamicVar):
1092
1093 2019-04-08  Don Olmstead  <don.olmstead@sony.com>
1094
1095         [CMake][WinCairo] Separate copied headers into different directories
1096         https://bugs.webkit.org/show_bug.cgi?id=196655
1097
1098         Reviewed by Michael Catanzaro.
1099
1100         * CMakeLists.txt:
1101         * shell/PlatformWin.cmake:
1102
1103 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1104
1105         [JSC] isRope jump in StringSlice should not jump over register allocations
1106         https://bugs.webkit.org/show_bug.cgi?id=196716
1107
1108         Reviewed by Saam Barati.
1109
1110         Jumping over the register allocation code in DFG (like the following) is wrong.
1111
1112             auto jump = m_jit.branchXXX();
1113             {
1114                 GPRTemporary reg(this);
1115                 GPRReg regGPR = reg.gpr();
1116                 ...
1117             }
1118             jump.link(&m_jit);
1119
1120         When GPRTemporary::gpr allocates a new register, it can flush the previous register value into the stack and make the register usable.
1121         Jumping over this register allocation code skips the flushing code, and makes the DFG's stack and register content tracking inconsistent:
1122         DFG thinks that the content is flushed and stored in particular stack slot even while this flushing code is skipped.
1123         In this patch, we perform register allocations before jumping to the slow path based on `isRope` condition in StringSlice.
1124
1125         * dfg/DFGSpeculativeJIT.cpp:
1126         (JSC::DFG::SpeculativeJIT::compileStringSlice):
1127
1128 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1129
1130         [JSC] to_index_string should not assume incoming value is Uint32
1131         https://bugs.webkit.org/show_bug.cgi?id=196713
1132
1133         Reviewed by Saam Barati.
1134
1135         The slow path of to_index_string assumes that incoming value is Uint32. But we should not have
1136         this assumption since DFG may decide we should have it double format. This patch removes this
1137         assumption, and instead, we should assume that incoming value is AnyInt and the range of this
1138         is within Uint32.
1139
1140         * runtime/CommonSlowPaths.cpp:
1141         (JSC::SLOW_PATH_DECL):
1142
1143 2019-04-08  Justin Fan  <justin_fan@apple.com>
1144
1145         [Web GPU] Fix Web GPU experimental feature on iOS
1146         https://bugs.webkit.org/show_bug.cgi?id=196632
1147
1148         Reviewed by Myles C. Maxfield.
1149
1150         Properly make Web GPU available on iOS 11+.
1151
1152         * Configurations/FeatureDefines.xcconfig:
1153         * Configurations/WebKitTargetConditionals.xcconfig:
1154
1155 2019-04-08  Ross Kirsling  <ross.kirsling@sony.com>
1156
1157         -f[no-]var-tracking-assignments is GCC-only
1158         https://bugs.webkit.org/show_bug.cgi?id=196699
1159
1160         Reviewed by Don Olmstead.
1161
1162         * CMakeLists.txt:
1163         Just remove the build flag altogether -- it supposedly doesn't solve the problem it was meant to
1164         and said problem evidently no longer occurs as of GCC 9.
1165
1166 2019-04-08  Saam Barati  <sbarati@apple.com>
1167
1168         WebAssembly.RuntimeError missing exception check
1169         https://bugs.webkit.org/show_bug.cgi?id=196700
1170         <rdar://problem/49693932>
1171
1172         Reviewed by Yusuke Suzuki.
1173
1174         * wasm/js/JSWebAssemblyRuntimeError.h:
1175         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
1176         (JSC::constructJSWebAssemblyRuntimeError):
1177
1178 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1179
1180         Unreviewed, rolling in r243948 with test fix
1181         https://bugs.webkit.org/show_bug.cgi?id=196486
1182
1183         * parser/ASTBuilder.h:
1184         (JSC::ASTBuilder::createString):
1185         * parser/Lexer.cpp:
1186         (JSC::Lexer<T>::parseMultilineComment):
1187         (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
1188         (JSC::Lexer<T>::lex): Deleted.
1189         * parser/Lexer.h:
1190         (JSC::Lexer::hasLineTerminatorBeforeToken const):
1191         (JSC::Lexer::setHasLineTerminatorBeforeToken):
1192         (JSC::Lexer<T>::lex):
1193         (JSC::Lexer::prevTerminator const): Deleted.
1194         (JSC::Lexer::setTerminator): Deleted.
1195         * parser/Parser.cpp:
1196         (JSC::Parser<LexerType>::allowAutomaticSemicolon):
1197         (JSC::Parser<LexerType>::parseSingleFunction):
1198         (JSC::Parser<LexerType>::parseStatementListItem):
1199         (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
1200         (JSC::Parser<LexerType>::parseFunctionInfo):
1201         (JSC::Parser<LexerType>::parseClass):
1202         (JSC::Parser<LexerType>::parseExportDeclaration):
1203         (JSC::Parser<LexerType>::parseAssignmentExpression):
1204         (JSC::Parser<LexerType>::parseYieldExpression):
1205         (JSC::Parser<LexerType>::parseProperty):
1206         (JSC::Parser<LexerType>::parsePrimaryExpression):
1207         (JSC::Parser<LexerType>::parseMemberExpression):
1208         * parser/Parser.h:
1209         (JSC::Parser::nextWithoutClearingLineTerminator):
1210         (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
1211         (JSC::Parser::internalSaveLexerState):
1212         (JSC::Parser::restoreLexerState):
1213
1214 2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>
1215
1216         Unreviewed, rolling out r243948.
1217
1218         Caused inspector/runtime/parse.html to fail
1219
1220         Reverted changeset:
1221
1222         "SIGSEGV in JSC::BytecodeGenerator::addStringConstant"
1223         https://bugs.webkit.org/show_bug.cgi?id=196486
1224         https://trac.webkit.org/changeset/243948
1225
1226 2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>
1227
1228         Unreviewed, rolling out r243943.
1229
1230         Caused test262 failures.
1231
1232         Reverted changeset:
1233
1234         "[JSC] Filter DontEnum properties in
1235         ProxyObject::getOwnPropertyNames()"
1236         https://bugs.webkit.org/show_bug.cgi?id=176810
1237         https://trac.webkit.org/changeset/243943
1238
1239 2019-04-08  Claudio Saavedra  <csaavedra@igalia.com>
1240
1241         [JSC] Partially fix the build with unified builds disabled
1242         https://bugs.webkit.org/show_bug.cgi?id=196647
1243
1244         Reviewed by Konstantin Tokarev.
1245
1246         If you disable unified builds you find all kind of build
1247         errors. This partially tries to fix them but there's a lot
1248         more.
1249
1250         * API/JSBaseInternal.h:
1251         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
1252         * b3/air/AirHandleCalleeSaves.h:
1253         * bytecode/ExecutableToCodeBlockEdge.cpp:
1254         * bytecode/ExitFlag.h:
1255         * bytecode/ICStatusUtils.h:
1256         * bytecode/UnlinkedMetadataTable.h:
1257         * dfg/DFGPureValue.h:
1258         * heap/IsoAlignedMemoryAllocator.cpp:
1259         * heap/IsoAlignedMemoryAllocator.h:
1260
1261 2019-04-08  Guillaume Emont  <guijemont@igalia.com>
1262
1263         Enable DFG on MIPS
1264         https://bugs.webkit.org/show_bug.cgi?id=196689
1265
1266         Reviewed by Žan Doberšek.
1267
1268         Since the bytecode change, we enabled the baseline JIT on mips in
1269         r240432, but DFG is still missing. With this change, all tests are
1270         passing on a ci20 board.
1271
1272         * jit/RegisterSet.cpp:
1273         (JSC::RegisterSet::calleeSaveRegisters):
1274         Added s0, which is used in llint.
1275
1276 2019-04-08  Xan Lopez  <xan@igalia.com>
1277
1278         [CMake] Detect SSE2 at compile time
1279         https://bugs.webkit.org/show_bug.cgi?id=196488
1280
1281         Reviewed by Carlos Garcia Campos.
1282
1283         * assembler/MacroAssemblerX86Common.cpp: Remove unnecessary (and
1284         incorrect) static_assert.
1285
1286 2019-04-07  Michael Saboff  <msaboff@apple.com>
1287
1288         REGRESSION (r243642): Crash in reddit.com page
1289         https://bugs.webkit.org/show_bug.cgi?id=196684
1290
1291         Reviewed by Geoffrey Garen.
1292
1293         In r243642, the code that saves and restores the count for non-greedy character classes
1294         was inadvertently put inside an if statement.  This code should be generated for all
1295         non-greedy character classes.
1296
1297         * yarr/YarrJIT.cpp:
1298         (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
1299         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
1300
1301 2019-04-07  Yusuke Suzuki  <ysuzuki@apple.com>
1302
1303         [JSC] CallLinkInfo should clear Callee or CodeBlock even if it is unlinked by jettison
1304         https://bugs.webkit.org/show_bug.cgi?id=196683
1305
1306         Reviewed by Saam Barati.
1307
1308         In r243626, we stop repatching CallLinkInfo when the CallLinkInfo is held by jettisoned CodeBlock.
1309         But we still need to clear the Callee or CodeBlock since they are now dead. Otherwise, CodeBlock's
1310         visitWeak eventually accesses this dead cells and crashes because the owner CodeBlock of CallLinkInfo
1311         can be still live.
1312
1313         We also move all repatching operations from CallLinkInfo.cpp to Repatch.cpp for consistency because the
1314         other repatching operations in CallLinkInfo are implemented in Repatch.cpp side.
1315
1316         * bytecode/CallLinkInfo.cpp:
1317         (JSC::CallLinkInfo::setCallee):
1318         (JSC::CallLinkInfo::clearCallee):
1319         * jit/Repatch.cpp:
1320         (JSC::linkFor):
1321         (JSC::revertCall):
1322
1323 2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>
1324
1325         [JSC] OSRExit recovery for SpeculativeAdd does not consier "A = A + A" pattern
1326         https://bugs.webkit.org/show_bug.cgi?id=196582
1327
1328         Reviewed by Saam Barati.
1329
1330         In DFG, our ArithAdd with overflow is executed speculatively, and we recover the value when overflow flag is set.
1331         The recovery is subtracting the operand from the destination to get the original two operands. Our recovery code
1332         handles A + B = A, A + B = B cases. But it misses A + A = A case (here, A and B are GPRReg). Our recovery code
1333         attempts to produce the original operand by performing A - A, and it always produces zero accidentally.
1334
1335         This patch adds the recovery code for A + A = A case. Because we know that this ArithAdd overflows, and operands were
1336         same values, we can calculate the original operand from the destination value by `((int32_t)value >> 1) ^ 0x80000000`.
1337
1338         We also found that FTL recovery code is dead. We remove them in this patch.
1339
1340         * dfg/DFGOSRExit.cpp:
1341         (JSC::DFG::OSRExit::executeOSRExit):
1342         (JSC::DFG::OSRExit::compileExit):
1343         * dfg/DFGOSRExit.h:
1344         (JSC::DFG::SpeculationRecovery::SpeculationRecovery):
1345         * dfg/DFGSpeculativeJIT.cpp:
1346         (JSC::DFG::SpeculativeJIT::compileArithAdd):
1347         * ftl/FTLExitValue.cpp:
1348         (JSC::FTL::ExitValue::dataFormat const):
1349         (JSC::FTL::ExitValue::dumpInContext const):
1350         * ftl/FTLExitValue.h:
1351         (JSC::FTL::ExitValue::isArgument const):
1352         (JSC::FTL::ExitValue::hasIndexInStackmapLocations const):
1353         (JSC::FTL::ExitValue::adjustStackmapLocationsIndexByOffset):
1354         (JSC::FTL::ExitValue::recovery): Deleted.
1355         (JSC::FTL::ExitValue::isRecovery const): Deleted.
1356         (JSC::FTL::ExitValue::leftRecoveryArgument const): Deleted.
1357         (JSC::FTL::ExitValue::rightRecoveryArgument const): Deleted.
1358         (JSC::FTL::ExitValue::recoveryFormat const): Deleted.
1359         (JSC::FTL::ExitValue::recoveryOpcode const): Deleted.
1360         * ftl/FTLLowerDFGToB3.cpp:
1361         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1362         (JSC::FTL::DFG::LowerDFGToB3::preparePatchpointForExceptions):
1363         (JSC::FTL::DFG::LowerDFGToB3::appendOSRExit):
1364         (JSC::FTL::DFG::LowerDFGToB3::exitValueForNode):
1365         (JSC::FTL::DFG::LowerDFGToB3::addAvailableRecovery): Deleted.
1366         * ftl/FTLOSRExitCompiler.cpp:
1367         (JSC::FTL::compileRecovery):
1368
1369 2019-04-05  Ryan Haddad  <ryanhaddad@apple.com>
1370
1371         Unreviewed, rolling out r243665.
1372
1373         Caused iOS JSC tests to exit with an exception.
1374
1375         Reverted changeset:
1376
1377         "Assertion failed in JSC::createError"
1378         https://bugs.webkit.org/show_bug.cgi?id=196305
1379         https://trac.webkit.org/changeset/243665
1380
1381 2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>
1382
1383         SIGSEGV in JSC::BytecodeGenerator::addStringConstant
1384         https://bugs.webkit.org/show_bug.cgi?id=196486
1385
1386         Reviewed by Saam Barati.
1387
1388         When parsing a FunctionExpression / FunctionDeclaration etc., we use SyntaxChecker for the body of the function because we do not have any interest on the nodes of the body at that time.
1389         The nodes will be parsed with the ASTBuilder when the function itself is parsed for code generation. This works well previously because all the function ends with "}" previously.
1390         SyntaxChecker lexes this "}" token, and parser restores the context back to ASTBuilder and continues parsing.
1391
1392         But now, we have ArrowFunctionExpression without braces `arrow => expr`. Let's consider the following code.
1393
1394                 arrow => expr
1395                 "string!"
1396
1397         We parse arrow function's body with SyntaxChecker. At that time, we lex "string!" token under the SyntaxChecker context. But this means that we may not build string content for this token
1398         since SyntaxChecker may not have interest on string content itself in certain case. After the parser is back to ASTBuilder, we parse "string!" as ExpressionStatement with string constant,
1399         generate StringNode with non-built identifier (nullptr), and we accidentally create StringNode with nullptr.
1400
1401         This patch fixes this problem. The root cause of this problem is that the last token lexed in the previous context is used. We add lexCurrentTokenAgainUnderCurrentContext which will re-lex
1402         the current token under the current context (may be ASTBuilder). This should be done only when the caller's context is different from SyntaxChecker, which avoids unnecessary lexing.
1403         We leverage existing SavePoint mechanism to implement lexCurrentTokenAgainUnderCurrentContext cleanly.
1404
1405         And we also fix the bug in the existing SavePoint mechanism, which is shown in the attached test script. When we save LexerState, we do not save line terminator status. This patch also introduces
1406         lexWithoutClearingLineTerminator, which lex the token without clearing line terminator status.
1407
1408         * parser/ASTBuilder.h:
1409         (JSC::ASTBuilder::createString):
1410         * parser/Lexer.cpp:
1411         (JSC::Lexer<T>::parseMultilineComment):
1412         (JSC::Lexer<T>::lexWithoutClearingLineTerminator): EOF token also should record offset information. This offset information is correctly handled in Lexer::setOffset too.
1413         (JSC::Lexer<T>::lex): Deleted.
1414         * parser/Lexer.h:
1415         (JSC::Lexer::hasLineTerminatorBeforeToken const):
1416         (JSC::Lexer::setHasLineTerminatorBeforeToken):
1417         (JSC::Lexer<T>::lex):
1418         (JSC::Lexer::prevTerminator const): Deleted.
1419         (JSC::Lexer::setTerminator): Deleted.
1420         * parser/Parser.cpp:
1421         (JSC::Parser<LexerType>::allowAutomaticSemicolon):
1422         (JSC::Parser<LexerType>::parseSingleFunction):
1423         (JSC::Parser<LexerType>::parseStatementListItem):
1424         (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
1425         (JSC::Parser<LexerType>::parseFunctionInfo):
1426         (JSC::Parser<LexerType>::parseClass):
1427         (JSC::Parser<LexerType>::parseExportDeclaration):
1428         (JSC::Parser<LexerType>::parseAssignmentExpression):
1429         (JSC::Parser<LexerType>::parseYieldExpression):
1430         (JSC::Parser<LexerType>::parseProperty):
1431         (JSC::Parser<LexerType>::parsePrimaryExpression):
1432         (JSC::Parser<LexerType>::parseMemberExpression):
1433         * parser/Parser.h:
1434         (JSC::Parser::nextWithoutClearingLineTerminator):
1435         (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
1436         (JSC::Parser::internalSaveLexerState):
1437         (JSC::Parser::restoreLexerState):
1438
1439 2019-04-05  Caitlin Potter  <caitp@igalia.com>
1440
1441         [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
1442         https://bugs.webkit.org/show_bug.cgi?id=176810
1443
1444         Reviewed by Saam Barati.
1445
1446         This adds conditional logic following the invariant checks, to perform
1447         filtering in common uses of getOwnPropertyNames.
1448
1449         While this would ideally only be done in JSPropertyNameEnumerator, adding
1450         the filtering to ProxyObject::performGetOwnPropertyNames maintains the
1451         invariant that the EnumerationMode is properly followed.
1452
1453         * runtime/PropertyNameArray.h:
1454         (JSC::PropertyNameArray::reset):
1455         * runtime/ProxyObject.cpp:
1456         (JSC::ProxyObject::performGetOwnPropertyNames):
1457
1458 2019-04-05  Commit Queue  <commit-queue@webkit.org>
1459
1460         Unreviewed, rolling out r243833.
1461         https://bugs.webkit.org/show_bug.cgi?id=196645
1462
1463         This change breaks build of WPE and GTK ports (Requested by
1464         annulen on #webkit).
1465
1466         Reverted changeset:
1467
1468         "[CMake][WTF] Mirror XCode header directories"
1469         https://bugs.webkit.org/show_bug.cgi?id=191662
1470         https://trac.webkit.org/changeset/243833
1471
1472 2019-04-05  Caitlin Potter  <caitp@igalia.com>
1473
1474         [JSC] throw if ownKeys Proxy trap result contains duplicate keys
1475         https://bugs.webkit.org/show_bug.cgi?id=185211
1476
1477         Reviewed by Saam Barati.
1478
1479         Implements the normative spec change in https://github.com/tc39/ecma262/pull/833
1480
1481         This involves tracking duplicate keys returned from the ownKeys trap in yet
1482         another HashTable, and may incur a minor performance penalty in some cases. This
1483         is not expected to significantly affect web performance.
1484
1485         * runtime/ProxyObject.cpp:
1486         (JSC::ProxyObject::performGetOwnPropertyNames):
1487
1488 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
1489
1490         [JSC] makeBoundFunction should not assume incoming "length" value is Int32 because it performs some calculation in bytecode
1491         https://bugs.webkit.org/show_bug.cgi?id=196631
1492
1493         Reviewed by Saam Barati.
1494
1495         makeBoundFunction assumes that "length" argument is always Int32. But this should not be done since this "length" value is calculated in builtin JS code.
1496         DFG may store this value in Double format so that we should not rely on that this value is Int32. This patch fixes makeBoundFunction function to perform
1497         toInt32 operation. We also insert a missing exception check for `JSString::value(ExecState*)` in makeBoundFunction.
1498
1499         * JavaScriptCore.xcodeproj/project.pbxproj:
1500         * Sources.txt:
1501         * interpreter/CallFrameInlines.h:
1502         * runtime/DoublePredictionFuzzerAgent.cpp: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
1503         (JSC::DoublePredictionFuzzerAgent::DoublePredictionFuzzerAgent):
1504         (JSC::DoublePredictionFuzzerAgent::getPrediction):
1505         * runtime/DoublePredictionFuzzerAgent.h: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
1506         * runtime/JSGlobalObject.cpp:
1507         (JSC::makeBoundFunction):
1508         * runtime/Options.h:
1509         * runtime/VM.cpp:
1510         (JSC::VM::VM):
1511
1512 2019-04-04  Robin Morisset  <rmorisset@apple.com>
1513
1514         B3ReduceStrength should know that Mul distributes over Add and Sub
1515         https://bugs.webkit.org/show_bug.cgi?id=196325
1516         <rdar://problem/49441650>
1517
1518         Reviewed by Saam Barati.
1519
1520         Fix some obviously wrong code that was due to an accidental copy-paste.
1521         It made the entire optimization dead code that never ran.
1522
1523         * b3/B3ReduceStrength.cpp:
1524
1525 2019-04-04  Saam Barati  <sbarati@apple.com>
1526
1527         Unreviewed, build fix for CLoop after r243886
1528
1529         * interpreter/Interpreter.cpp:
1530         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
1531         * interpreter/StackVisitor.cpp:
1532         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
1533         * interpreter/StackVisitor.h:
1534
1535 2019-04-04  Commit Queue  <commit-queue@webkit.org>
1536
1537         Unreviewed, rolling out r243898.
1538         https://bugs.webkit.org/show_bug.cgi?id=196624
1539
1540         `#if !ENABLE(C_LOOP) && NUMBER_OF_CALLEE_SAVES_REGISTERS > 0`
1541         does not work well (Requested by yusukesuzuki on #webkit).
1542
1543         Reverted changeset:
1544
1545         "Unreviewed, build fix for CLoop and Windows after r243886"
1546         https://bugs.webkit.org/show_bug.cgi?id=196387
1547         https://trac.webkit.org/changeset/243898
1548
1549 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
1550
1551         Unreviewed, build fix for CLoop and Windows after r243886
1552         https://bugs.webkit.org/show_bug.cgi?id=196387
1553
1554         RegisterAtOffsetList does not exist if ENABLE(ASSEMBLER) is false.
1555
1556         * interpreter/StackVisitor.cpp:
1557         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
1558         * interpreter/StackVisitor.h:
1559
1560 2019-04-04  Saam barati  <sbarati@apple.com>
1561
1562         Teach Call ICs how to call Wasm
1563         https://bugs.webkit.org/show_bug.cgi?id=196387
1564
1565         Reviewed by Filip Pizlo.
1566
1567         This patch teaches JS to call Wasm without going through the native thunk.
1568         Currently, we emit a JIT "JS" callee stub which marshals arguments from
1569         JS to Wasm. Like the native version of this, this thunk is responsible
1570         for saving and restoring the VM's current Wasm context. Instead of emitting
1571         an exception handler, we also teach the unwinder how to read the previous
1572         wasm context to restore it as it unwindws past this frame.
1573         
1574         This patch is straight forward, and leaves some areas for perf improvement:
1575         - We can teach the DFG/FTL to directly use the Wasm calling convention when
1576           it knows it's calling a single Wasm function. This way we don't shuffle
1577           registers to the stack and then back into registers.
1578         - We bail out to the slow path for mismatched arity. I opened a bug to fix
1579           optimize arity check failures: https://bugs.webkit.org/show_bug.cgi?id=196564
1580         - We bail out to the slow path Double JSValues flowing into i32 arguments.
1581           We should teach this thunk how to do that conversion directly.
1582         
1583         This patch also refactors the code to explicitly have a single pinned size register.
1584         We used pretend in some places that we could have more than one pinned size register.
1585         However, there was other code that just asserted the size was one. This patch just rips
1586         out this code since we never moved to having more than one pinned size register. Doing
1587         this refactoring cleans up the various places where we set up the size register.
1588         
1589         This patch is a 50-60% progression on JetStream 2's richards-wasm.
1590
1591         * JavaScriptCore.xcodeproj/project.pbxproj:
1592         * Sources.txt:
1593         * assembler/MacroAssemblerCodeRef.h:
1594         (JSC::MacroAssemblerCodeRef::operator=):
1595         (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
1596         * interpreter/Interpreter.cpp:
1597         (JSC::UnwindFunctor::operator() const):
1598         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
1599         * interpreter/StackVisitor.cpp:
1600         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
1601         (JSC::StackVisitor::Frame::calleeSaveRegisters): Deleted.
1602         * interpreter/StackVisitor.h:
1603         * jit/JITOperations.cpp:
1604         * jit/RegisterSet.cpp:
1605         (JSC::RegisterSet::runtimeTagRegisters):
1606         (JSC::RegisterSet::specialRegisters):
1607         (JSC::RegisterSet::runtimeRegisters): Deleted.
1608         * jit/RegisterSet.h:
1609         * jit/Repatch.cpp:
1610         (JSC::linkPolymorphicCall):
1611         * runtime/JSFunction.cpp:
1612         (JSC::getCalculatedDisplayName):
1613         * runtime/JSGlobalObject.cpp:
1614         (JSC::JSGlobalObject::init):
1615         (JSC::JSGlobalObject::visitChildren):
1616         * runtime/JSGlobalObject.h:
1617         (JSC::JSGlobalObject::jsToWasmICCalleeStructure const):
1618         * runtime/VM.cpp:
1619         (JSC::VM::VM):
1620         * runtime/VM.h:
1621         * wasm/WasmAirIRGenerator.cpp:
1622         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
1623         (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
1624         (JSC::Wasm::AirIRGenerator::addCallIndirect):
1625         * wasm/WasmB3IRGenerator.cpp:
1626         (JSC::Wasm::B3IRGenerator::B3IRGenerator):
1627         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
1628         (JSC::Wasm::B3IRGenerator::addCallIndirect):
1629         * wasm/WasmBinding.cpp:
1630         (JSC::Wasm::wasmToWasm):
1631         * wasm/WasmContext.h:
1632         (JSC::Wasm::Context::pointerToInstance):
1633         * wasm/WasmContextInlines.h:
1634         (JSC::Wasm::Context::store):
1635         * wasm/WasmMemoryInformation.cpp:
1636         (JSC::Wasm::getPinnedRegisters):
1637         (JSC::Wasm::PinnedRegisterInfo::get):
1638         (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo):
1639         * wasm/WasmMemoryInformation.h:
1640         (JSC::Wasm::PinnedRegisterInfo::toSave const):
1641         * wasm/WasmOMGPlan.cpp:
1642         (JSC::Wasm::OMGPlan::work):
1643         * wasm/js/JSToWasm.cpp:
1644         (JSC::Wasm::createJSToWasmWrapper):
1645         * wasm/js/JSToWasmICCallee.cpp: Added.
1646         (JSC::JSToWasmICCallee::create):
1647         (JSC::JSToWasmICCallee::createStructure):
1648         (JSC::JSToWasmICCallee::visitChildren):
1649         * wasm/js/JSToWasmICCallee.h: Added.
1650         (JSC::JSToWasmICCallee::function):
1651         (JSC::JSToWasmICCallee::JSToWasmICCallee):
1652         * wasm/js/WebAssemblyFunction.cpp:
1653         (JSC::WebAssemblyFunction::useTagRegisters const):
1654         (JSC::WebAssemblyFunction::calleeSaves const):
1655         (JSC::WebAssemblyFunction::usedCalleeSaveRegisters const):
1656         (JSC::WebAssemblyFunction::previousInstanceOffset const):
1657         (JSC::WebAssemblyFunction::previousInstance):
1658         (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
1659         (JSC::WebAssemblyFunction::visitChildren):
1660         (JSC::WebAssemblyFunction::destroy):
1661         * wasm/js/WebAssemblyFunction.h:
1662         * wasm/js/WebAssemblyFunctionHeapCellType.cpp: Added.
1663         (JSC::WebAssemblyFunctionDestroyFunc::operator() const):
1664         (JSC::WebAssemblyFunctionHeapCellType::WebAssemblyFunctionHeapCellType):
1665         (JSC::WebAssemblyFunctionHeapCellType::~WebAssemblyFunctionHeapCellType):
1666         (JSC::WebAssemblyFunctionHeapCellType::finishSweep):
1667         (JSC::WebAssemblyFunctionHeapCellType::destroy):
1668         * wasm/js/WebAssemblyFunctionHeapCellType.h: Added.
1669         * wasm/js/WebAssemblyPrototype.h:
1670
1671 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
1672
1673         [JSC] Pass CodeOrigin to FuzzerAgent
1674         https://bugs.webkit.org/show_bug.cgi?id=196590
1675
1676         Reviewed by Saam Barati.
1677
1678         Pass CodeOrigin instead of bytecodeIndex. CodeOrigin includes richer information (InlineCallFrame*).
1679         We also mask prediction with SpecBytecodeTop in DFGByteCodeParser. The fuzzer can produce any SpeculatedTypes,
1680         but DFGByteCodeParser should only see predictions that can be actually produced from the bytecode execution.
1681
1682         * dfg/DFGByteCodeParser.cpp:
1683         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
1684         * runtime/FuzzerAgent.cpp:
1685         (JSC::FuzzerAgent::getPrediction):
1686         * runtime/FuzzerAgent.h:
1687         * runtime/RandomizingFuzzerAgent.cpp:
1688         (JSC::RandomizingFuzzerAgent::getPrediction):
1689         * runtime/RandomizingFuzzerAgent.h:
1690
1691 2019-04-04  Caio Lima  <ticaiolima@gmail.com>
1692
1693         [JSC] We should consider moving UnlinkedFunctionExecutable::m_parentScopeTDZVariables to RareData
1694         https://bugs.webkit.org/show_bug.cgi?id=194944
1695
1696         Reviewed by Keith Miller.
1697
1698         Based on profile data collected on JetStream2, Speedometer 2 and
1699         other benchmarks, it is very rare having non-empty
1700         UnlinkedFunctionExecutable::m_parentScopeTDZVariables.
1701
1702         - Data collected from Speedometer2
1703             Total number of UnlinkedFunctionExecutable: 39463
1704             Total number of non-empty parentScopeTDZVars: 428 (~1%)
1705
1706         - Data collected from JetStream2
1707             Total number of UnlinkedFunctionExecutable: 83715
1708             Total number of non-empty parentScopeTDZVars: 5285 (~6%)
1709
1710         We also collected numbers on 6 of top 10 Alexia sites.
1711
1712         - Data collected from youtube.com
1713             Total number of UnlinkedFunctionExecutable: 29599
1714             Total number of non-empty parentScopeTDZVars: 97 (~0.3%)
1715
1716         - Data collected from twitter.com
1717             Total number of UnlinkedFunctionExecutable: 23774
1718             Total number of non-empty parentScopeTDZVars: 172 (~0.7%)
1719
1720         - Data collected from google.com
1721             Total number of UnlinkedFunctionExecutable: 33209
1722             Total number of non-empty parentScopeTDZVars: 174 (~0.5%)
1723
1724         - Data collected from amazon.com:
1725             Total number of UnlinkedFunctionExecutable: 15182
1726             Total number of non-empty parentScopeTDZVars: 166 (~1%)
1727
1728         - Data collected from facebook.com:
1729             Total number of UnlinkedFunctionExecutable: 54443
1730             Total number of non-empty parentScopeTDZVars: 269 (~0.4%)
1731
1732         - Data collected from netflix.com:
1733             Total number of UnlinkedFunctionExecutable: 39266
1734             Total number of non-empty parentScopeTDZVars: 97 (~0.2%)
1735
1736         Considering such numbers, this patch is moving `m_parentScopeTDZVariables`
1737         to RareData. This decreases sizeof(UnlinkedFunctionExecutable) by
1738         16 bytes. With this change, now UnlinkedFunctionExecutable constructors
1739         receives an `Optional<VariableEnvironmentMap::Handle>` and only stores
1740         it when `value != WTF::nullopt`. We also changed
1741         UnlinkedFunctionExecutable::parentScopeTDZVariables() and it returns
1742         `VariableEnvironment()` whenever the Executable doesn't have RareData,
1743         or VariableEnvironmentMap::Handle is unitialized. This is required
1744         because RareData is instantiated when any of its field is stored and
1745         we can have an unitialized `Handle` even on cases when parentScopeTDZVariables
1746         is `WTF::nullopt`.
1747
1748         Results on memory usage on JetStrem2 is neutral.
1749
1750             Mean of memory peak on ToT: 4258633728 bytes (confidence interval: 249720072.95)
1751             Mean of memory peak on Changes: 4367325184 bytes (confidence interval: 321285583.61)
1752
1753         * builtins/BuiltinExecutables.cpp:
1754         (JSC::BuiltinExecutables::createExecutable):
1755         * bytecode/UnlinkedFunctionExecutable.cpp:
1756         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
1757         * bytecode/UnlinkedFunctionExecutable.h:
1758         * bytecompiler/BytecodeGenerator.cpp:
1759         (JSC::BytecodeGenerator::getVariablesUnderTDZ):
1760
1761         BytecodeGenerator::getVariablesUnderTDZ now also caches if m_cachedVariablesUnderTDZ
1762         is empty, so we can properly return `WTF::nullopt` without the
1763         reconstruction of a VariableEnvironment to check if it is empty.
1764
1765         * bytecompiler/BytecodeGenerator.h:
1766         (JSC::BytecodeGenerator::makeFunction):
1767         * parser/VariableEnvironment.h:
1768         (JSC::VariableEnvironment::isEmpty const):
1769         * runtime/CachedTypes.cpp:
1770         (JSC::CachedCompactVariableMapHandle::decode const):
1771
1772         It returns an unitialized Handle when there is no
1773         CompactVariableEnvironment. This can happen when RareData is ensured
1774         because of another field.
1775
1776         (JSC::CachedFunctionExecutableRareData::encode):
1777         (JSC::CachedFunctionExecutableRareData::decode const):
1778         (JSC::CachedFunctionExecutable::encode):
1779         (JSC::CachedFunctionExecutable::decode const):
1780         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
1781         * runtime/CodeCache.cpp:
1782
1783         Instead of creating a dummyVariablesUnderTDZ, we simply pass
1784         WTF::nullopt.
1785
1786         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
1787
1788 2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>
1789
1790         Cache bytecode for jsc.cpp helpers and fix CachedStringImpl
1791         https://bugs.webkit.org/show_bug.cgi?id=196409
1792
1793         Reviewed by Saam Barati.
1794
1795         Some of the helpers in jsc.cpp, such as `functionRunString`, were stll using
1796         using `makeSource` instead of `jscSource`, which does not use the ShellSourceProvider
1797         and therefore does not write the bytecode cache to disk.
1798
1799         Changing that revealed a bug in bytecode cache. The Encoder keeps a mapping
1800         of pointers to offsets of already cached objects, in order to avoid caching
1801         the same object twice. Similarly, the Decoder keeps a mapping from offsets
1802         to pointers, in order to avoid creating multiple objects in memory for the
1803         same cached object. The following was happening:
1804         1) A StringImpl* S was cached as CachedPtr<CachedStringImpl> at offset O. We add
1805         an entry in the Encoder mapping that S has already been encoded at O.
1806         2) We cache StringImpl* S again, but now as CachedPtr<CachedUniquedStringImpl>.
1807         We find an entry in the Encoder mapping for S, and return the offset O. However,
1808         the object cached at O is a CachedPtr<CachedStringImpl> (i.e. not Uniqued).
1809
1810         3) When decoding, there are 2 possibilities:
1811         3.1) We find S for the first time through a CachedPtr<CachedStringImpl>. In
1812         this case, everything works as expected since we add an entry in the decoder
1813         mapping from the offset O to the decoded StringImpl* S. The next time we find
1814         S through the uniqued version, we'll return the already decoded S.
1815         3.2) We find S through a CachedPtr<CachedUniquedStringImpl>. Now we have a
1816         problem, since the CachedPtr has the offset of a CachedStringImpl (not uniqued),
1817         which has a different shape and we crash.
1818
1819         We fix this by making CachedStringImpl and CachedUniquedStringImpl share the
1820         same implementation. Since it doesn't matter whether a string is uniqued for
1821         encoding, and we always decode strings as uniqued either way, they can be used
1822         interchangeably.
1823
1824         * jsc.cpp:
1825         (functionRunString):
1826         (functionLoadString):
1827         (functionDollarAgentStart):
1828         (functionCheckModuleSyntax):
1829         (runInteractive):
1830         * runtime/CachedTypes.cpp:
1831         (JSC::CachedUniquedStringImplBase::decode const):
1832         (JSC::CachedFunctionExecutable::rareData const):
1833         (JSC::CachedCodeBlock::rareData const):
1834         (JSC::CachedFunctionExecutable::encode):
1835         (JSC::CachedCodeBlock<CodeBlockType>::encode):
1836         (JSC::CachedUniquedStringImpl::encode): Deleted.
1837         (JSC::CachedUniquedStringImpl::decode const): Deleted.
1838         (JSC::CachedStringImpl::encode): Deleted.
1839         (JSC::CachedStringImpl::decode const): Deleted.
1840
1841 2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>
1842
1843         UnlinkedCodeBlock constructor from cache should initialize m_didOptimize
1844         https://bugs.webkit.org/show_bug.cgi?id=196396
1845
1846         Reviewed by Saam Barati.
1847
1848         The UnlinkedCodeBlock constructor in CachedTypes was missing the initialization
1849         for m_didOptimize, which leads to crashes in CodeBlock::thresholdForJIT.
1850
1851         * runtime/CachedTypes.cpp:
1852         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
1853
1854 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
1855
1856         Unreviewed, rolling in r243843 with the build fix
1857         https://bugs.webkit.org/show_bug.cgi?id=196586
1858
1859         * runtime/Options.cpp:
1860         (JSC::recomputeDependentOptions):
1861         * runtime/Options.h:
1862         * runtime/RandomizingFuzzerAgent.cpp:
1863         (JSC::RandomizingFuzzerAgent::getPrediction):
1864
1865 2019-04-03  Ryan Haddad  <ryanhaddad@apple.com>
1866
1867         Unreviewed, rolling out r243843.
1868
1869         Broke CLoop and Windows builds.
1870
1871         Reverted changeset:
1872
1873         "[JSC] Add dump feature for RandomizingFuzzerAgent"
1874         https://bugs.webkit.org/show_bug.cgi?id=196586
1875         https://trac.webkit.org/changeset/243843
1876
1877 2019-04-03  Robin Morisset  <rmorisset@apple.com>
1878
1879         B3 should use associativity to optimize expression trees
1880         https://bugs.webkit.org/show_bug.cgi?id=194081
1881
1882         Reviewed by Filip Pizlo.
1883
1884         This patch adds a new B3 pass, that tries to find and optimize expression trees made purely of any one associative and commutative operator (Add/Mul/BitOr/BitAnd/BitXor).
1885         The pass only runs in O2, and runs once, after lowerMacros and just before a run of B3ReduceStrength (which helps clean up the dead code it tends to leave behind).
1886         I had to separate killDeadCode out of B3ReduceStrength (as a new B3EliminateDeadCode pass) to run it before B3OptimizeAssociativeExpressionTrees, as otherwise it is stopped by high use counts
1887         inherited from CSE.
1888         This extra run of DCE is by itself a win, most notably on microbenchmarks/instanceof-always-hit-two (1.5x faster), and on microbenchmarks/licm-dragons(-out-of-bounds) (both get 1.16x speedup).
1889         I suspect it is because it runs between CSE and tail-dedup, and as a result allows a lot more tail-dedup to occur.
1890
1891         The pass is currently extremely conservative, not trying anything if it would cause _any_ code duplication.
1892         For this purpose, it starts by computing use counts for the potentially interesting nodes (those with the right opcodes), and segregate them into expression trees.
1893         The root of an expression tree is a node that is either used in multiple places, or is used by a value with a different opcode.
1894         The leaves of an expression tree are nodes that are either used in multiple places, or have a different opcode.
1895         All constant leaves of a tree are combined, as well as all leaves that are identical. What remains is then laid out into a balanced binary tree, hopefully maximizing ILP.
1896
1897         This optimization was implemented as a stand-alone pass and not as part of B3ReduceStrength mostly because it needs use counts to avoid code duplication.
1898         It also benefits from finding all tree roots first, and not trying to repeatedly optimize subtrees.
1899
1900         I added several tests to testB3 with varying patterns of trees. It is also tested in a less focused way by lots of older tests.
1901
1902         In the future this pass could be expanded to allow some bounded amount of code duplication, and merging more leaves (e.g. Mul(a, 3) and a in an Add tree, into Mul(a, 4))
1903         The latter will need exposing the peephole optimizations out of B3ReduceStrength to avoid duplicating code.
1904
1905         * JavaScriptCore.xcodeproj/project.pbxproj:
1906         * Sources.txt:
1907         * b3/B3Common.cpp:
1908         (JSC::B3::shouldDumpIR):
1909         (JSC::B3::shouldDumpIRAtEachPhase):
1910         * b3/B3Common.h:
1911         * b3/B3EliminateDeadCode.cpp: Added.
1912         (JSC::B3::EliminateDeadCode::run):
1913         (JSC::B3::eliminateDeadCode):
1914         * b3/B3EliminateDeadCode.h: Added.
1915         (JSC::B3::EliminateDeadCode::EliminateDeadCode):
1916         * b3/B3Generate.cpp:
1917         (JSC::B3::generateToAir):
1918         * b3/B3OptimizeAssociativeExpressionTrees.cpp: Added.
1919         (JSC::B3::OptimizeAssociativeExpressionTrees::OptimizeAssociativeExpressionTrees):
1920         (JSC::B3::OptimizeAssociativeExpressionTrees::neutralElement):
1921         (JSC::B3::OptimizeAssociativeExpressionTrees::isAbsorbingElement):
1922         (JSC::B3::OptimizeAssociativeExpressionTrees::combineConstants):
1923         (JSC::B3::OptimizeAssociativeExpressionTrees::emitValue):
1924         (JSC::B3::OptimizeAssociativeExpressionTrees::optimizeRootedTree):
1925         (JSC::B3::OptimizeAssociativeExpressionTrees::run):
1926         (JSC::B3::optimizeAssociativeExpressionTrees):
1927         * b3/B3OptimizeAssociativeExpressionTrees.h: Added.
1928         * b3/B3ReduceStrength.cpp:
1929         * b3/B3Value.cpp:
1930         (JSC::B3::Value::replaceWithIdentity):
1931         * b3/testb3.cpp:
1932         (JSC::B3::testBitXorTreeArgs):
1933         (JSC::B3::testBitXorTreeArgsEven):
1934         (JSC::B3::testBitXorTreeArgImm):
1935         (JSC::B3::testAddTreeArg32):
1936         (JSC::B3::testMulTreeArg32):
1937         (JSC::B3::testBitAndTreeArg32):
1938         (JSC::B3::testBitOrTreeArg32):
1939         (JSC::B3::run):
1940
1941 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
1942
1943         [JSC] Add dump feature for RandomizingFuzzerAgent
1944         https://bugs.webkit.org/show_bug.cgi?id=196586
1945
1946         Reviewed by Saam Barati.
1947
1948         Towards deterministic tests for the results from randomizing fuzzer agent, this patch adds Options::dumpRandomizingFuzzerAgentPredictions, which dumps the generated types.
1949         The results is like this.
1950
1951             getPrediction name:(#C2q9xD),bytecodeIndex:(22),original:(Array),generated:(OtherObj|Array|Float64Array|BigInt|NonIntAsDouble)
1952             getPrediction name:(makeUnwriteableUnconfigurableObject#AiEJv1),bytecodeIndex:(14),original:(OtherObj),generated:(Final|Uint8Array|Float64Array|SetObject|WeakSetObject|BigInt|NonIntAsDouble)
1953
1954         * runtime/Options.cpp:
1955         (JSC::recomputeDependentOptions):
1956         * runtime/Options.h:
1957         * runtime/RandomizingFuzzerAgent.cpp:
1958         (JSC::RandomizingFuzzerAgent::getPrediction):
1959
1960 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
1961
1962         -apple-trailing-word is needed for browser detection
1963         https://bugs.webkit.org/show_bug.cgi?id=196575
1964
1965         Unreviewed.
1966
1967         * Configurations/FeatureDefines.xcconfig:
1968
1969 2019-04-03  Michael Saboff  <msaboff@apple.com>
1970
1971         REGRESSION (r243642): com.apple.JavaScriptCore crash in JSC::RegExpObject::execInline
1972         https://bugs.webkit.org/show_bug.cgi?id=196477
1973
1974         Reviewed by Keith Miller.
1975
1976         The problem here is that when we advance the index by 2 for a character class that only
1977         has non-BMP characters, we might go past the end of the string.  This can happen for
1978         greedy counted character classes that are part of a alternative where there is one
1979         character to match after the greedy non-BMP character class.
1980
1981         The "do we have string left to match" check at the top of the JIT loop for the counted
1982         character class checks to see if index is not equal to the string length.  For non-BMP
1983         character classes, we need to check to see if there are at least 2 characters left.
1984         Therefore we now temporarily add 1 to the current index before comparing.  This checks
1985         to see if there are iat least 2 characters left to match, instead of 1.
1986
1987         * yarr/YarrJIT.cpp:
1988         (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
1989         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
1990
1991 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
1992
1993         [JSC] Exception verification crash on operationArrayIndexOfValueInt32OrContiguous
1994         https://bugs.webkit.org/show_bug.cgi?id=196574
1995
1996         Reviewed by Saam Barati.
1997
1998         This patch adds missing exception check in operationArrayIndexOfValueInt32OrContiguous.
1999
2000         * dfg/DFGOperations.cpp:
2001
2002 2019-04-03  Don Olmstead  <don.olmstead@sony.com>
2003
2004         [CMake][WTF] Mirror XCode header directories
2005         https://bugs.webkit.org/show_bug.cgi?id=191662
2006
2007         Reviewed by Konstantin Tokarev.
2008
2009         Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
2010         builds.
2011
2012         * CMakeLists.txt:
2013         * shell/CMakeLists.txt:
2014
2015 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
2016
2017         [JSC] Add FuzzerAgent, which has a hooks to get feedback & inject fuzz data into JSC
2018         https://bugs.webkit.org/show_bug.cgi?id=196530
2019
2020         Reviewed by Saam Barati.
2021
2022         This patch adds FuzzerAgent interface and simple RandomizingFuzzerAgent to JSC.
2023         This RandomizingFuzzerAgent returns random SpeculatedType for value profiling to find
2024         the issues in JSC. The seed for randomization can be specified by seedOfRandomizingFuzzerAgent.
2025
2026         I ran this with seedOfRandomizingFuzzerAgent=1 last night and it finds 3 failures in the current JSC tests,
2027         they should be fixed in subsequent patches.
2028
2029         * CMakeLists.txt:
2030         * JavaScriptCore.xcodeproj/project.pbxproj:
2031         * Sources.txt:
2032         * dfg/DFGByteCodeParser.cpp:
2033         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
2034         * runtime/FuzzerAgent.cpp: Added.
2035         (JSC::FuzzerAgent::~FuzzerAgent):
2036         (JSC::FuzzerAgent::getPrediction):
2037         * runtime/FuzzerAgent.h: Added.
2038         * runtime/JSGlobalObjectFunctions.cpp:
2039         * runtime/Options.h:
2040         * runtime/RandomizingFuzzerAgent.cpp: Added.
2041         (JSC::RandomizingFuzzerAgent::RandomizingFuzzerAgent):
2042         (JSC::RandomizingFuzzerAgent::getPrediction):
2043         * runtime/RandomizingFuzzerAgent.h: Added.
2044         * runtime/RegExpCachedResult.h:
2045         * runtime/RegExpGlobalData.cpp:
2046         * runtime/VM.cpp:
2047         (JSC::VM::VM):
2048         * runtime/VM.h:
2049         (JSC::VM::fuzzerAgent const):
2050         (JSC::VM::setFuzzerAgent):
2051
2052 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
2053
2054         Remove support for -apple-trailing-word
2055         https://bugs.webkit.org/show_bug.cgi?id=196525
2056
2057         Reviewed by Zalan Bujtas.
2058
2059         This CSS property is nonstandard and not used.
2060
2061         * Configurations/FeatureDefines.xcconfig:
2062
2063 2019-04-03  Joseph Pecoraro  <pecoraro@apple.com>
2064
2065         Web Inspector: Remote Inspector indicate callback should always happen on the main thread
2066         https://bugs.webkit.org/show_bug.cgi?id=196513
2067         <rdar://problem/49498284>
2068
2069         Reviewed by Devin Rousso.
2070
2071         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
2072         (Inspector::RemoteInspector::receivedIndicateMessage):
2073         When we have a WebThread, don't just run on the WebThread,
2074         run on the MainThread with the WebThreadLock.
2075
2076 2019-04-02  Michael Saboff  <msaboff@apple.com>
2077
2078         Crash in Options::setOptions() using --configFile option and libgmalloc
2079         https://bugs.webkit.org/show_bug.cgi?id=196506
2080
2081         Reviewed by Keith Miller.
2082
2083         Changed to call CString::data() while making the call to Options::setOptions().  This keeps
2084         the implicit CString temporary alive until after setOptions() returns.
2085
2086         * runtime/ConfigFile.cpp:
2087         (JSC::ConfigFile::parse):
2088
2089 2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>
2090
2091         [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
2092         https://bugs.webkit.org/show_bug.cgi?id=182757
2093
2094         Reviewed by Don Olmstead.
2095
2096         * CMakeLists.txt: Do not use DERIVED_SOURCE_DIRECTORIES parameter
2097         of WEBKIT_MAKE_FORWARDING_HEADERS. Added generated headers to
2098         JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS.
2099
2100 2019-04-02  Saam barati  <sbarati@apple.com>
2101
2102         Add a ValueRepReduction phase
2103         https://bugs.webkit.org/show_bug.cgi?id=196234
2104
2105         Reviewed by Filip Pizlo.
2106
2107         This patch adds a ValueRepReduction phase. The main idea here is
2108         to try to reduce DoubleRep(RealNumberUse:ValueRep(DoubleRepUse:@x))
2109         to just be @x. This patch handles such above strengh reduction rules
2110         as long as we prove that all users of the ValueRep can be converted
2111         to using the incoming double value. That way we prevent introducing
2112         a parallel live range for the double value.
2113         
2114         This patch tracks the uses of the ValueRep through Phi variables,
2115         so we can convert entire Phi variables to being Double instead
2116         of JSValue if the Phi also has only double uses.
2117         
2118         This is implemented through a simple escape analysis. DoubleRep(RealNumberUse:)
2119         and OSR exit hints are not counted as escapes. All other uses are counted
2120         as escapes. Connected Phi graphs are converted to being Double only if the
2121         entire graph is ok with the result being Double.
2122         
2123         Some ways we could extend this phase in the future:
2124         - There are a lot of DoubleRep(NumberUse:@ValueRep(@x)) uses. This ensures
2125           that the result of the DoubleRep of @x is not impure NaN. We could
2126           handle this case if we introduced a PurifyNaN node and replace the DoubleRep
2127           with PurifyNaN(@x). Alternatively, we could see if certain users of this
2128           DoubleRep are okay with impure NaN flowing into them and we'd need to ensure
2129           their output type is always treated as if the input is impure NaN.
2130         - We could do sinking of ValueRep where we think it's profitable. So instead
2131           of an escape making it so we never represent the variable as a Double, we
2132           could make the escape reconstruct the JSValueRep where profitable.
2133         - We can extend this phase to handle Int52Rep if it's profitable.
2134         - We can opt other nodes into accepting incoming Doubles so we no longer
2135           treat them as escapes.
2136         
2137         This patch is somewhere between neutral and a 1% progression on JetStream 2.
2138
2139         * JavaScriptCore.xcodeproj/project.pbxproj:
2140         * Sources.txt:
2141         * dfg/DFGPlan.cpp:
2142         (JSC::DFG::Plan::compileInThreadImpl):
2143         * dfg/DFGValueRepReductionPhase.cpp: Added.
2144         (JSC::DFG::ValueRepReductionPhase::ValueRepReductionPhase):
2145         (JSC::DFG::ValueRepReductionPhase::run):
2146         (JSC::DFG::ValueRepReductionPhase::convertValueRepsToDouble):
2147         (JSC::DFG::performValueRepReduction):
2148         * dfg/DFGValueRepReductionPhase.h: Added.
2149         * runtime/Options.h:
2150
2151 2019-04-01  Yusuke Suzuki  <ysuzuki@apple.com>
2152
2153         [JSC] JSRunLoopTimer::Manager should be small
2154         https://bugs.webkit.org/show_bug.cgi?id=196425
2155
2156         Reviewed by Darin Adler.
2157
2158         Using very large Key or Value in HashMap potentially bloats memory since HashMap pre-allocates large size of
2159         memory ((sizeof(Key) + sizeof(Value)) * N) for its backing storage's array. Using std::unique_ptr<> for JSRunLoopTimer's
2160         PerVMData to keep HashMap's backing store size small.
2161
2162         * runtime/JSRunLoopTimer.cpp:
2163         (JSC::JSRunLoopTimer::Manager::timerDidFire):
2164         (JSC::JSRunLoopTimer::Manager::registerVM):
2165         (JSC::JSRunLoopTimer::Manager::scheduleTimer):
2166         (JSC::JSRunLoopTimer::Manager::cancelTimer):
2167         (JSC::JSRunLoopTimer::Manager::timeUntilFire):
2168         (JSC::JSRunLoopTimer::Manager::didChangeRunLoop):
2169         * runtime/JSRunLoopTimer.h:
2170
2171 2019-04-01  Stephan Szabo  <stephan.szabo@sony.com>
2172
2173         [PlayStation] Add initialization for JSC shell for PlayStation port
2174         https://bugs.webkit.org/show_bug.cgi?id=195411
2175
2176         Reviewed by Ross Kirsling.
2177
2178         Add ps options
2179
2180         * shell/PlatformPlayStation.cmake: Added.
2181         * shell/playstation/Initializer.cpp: Added.
2182         (initializer):
2183
2184 2019-04-01  Michael Catanzaro  <mcatanzaro@igalia.com>
2185
2186         Stop trying to support building JSC with clang 3.8
2187         https://bugs.webkit.org/show_bug.cgi?id=195947
2188         <rdar://problem/49069219>
2189
2190         Reviewed by Darin Adler.
2191
2192         It seems WebKit hasn't built with clang 3.8 in a while, no devs are using this compiler, we
2193         don't know how much effort it would be to make JSC work again, and it's making the code
2194         worse. Remove my hacks to support clang 3.8 from JSC.
2195
2196         * bindings/ScriptValue.cpp:
2197         (Inspector::jsToInspectorValue):
2198         * bytecode/GetterSetterAccessCase.cpp:
2199         (JSC::GetterSetterAccessCase::create):
2200         (JSC::GetterSetterAccessCase::clone const):
2201         * bytecode/InstanceOfAccessCase.cpp:
2202         (JSC::InstanceOfAccessCase::clone const):
2203         * bytecode/IntrinsicGetterAccessCase.cpp:
2204         (JSC::IntrinsicGetterAccessCase::clone const):
2205         * bytecode/ModuleNamespaceAccessCase.cpp:
2206         (JSC::ModuleNamespaceAccessCase::clone const):
2207         * bytecode/ProxyableAccessCase.cpp:
2208         (JSC::ProxyableAccessCase::clone const):
2209
2210 2019-03-31  Yusuke Suzuki  <ysuzuki@apple.com>
2211
2212         [JSC] Butterfly allocation from LargeAllocation should try "realloc" behavior if collector thread is not active
2213         https://bugs.webkit.org/show_bug.cgi?id=196160
2214
2215         Reviewed by Saam Barati.
2216
2217         "realloc" can be effective in terms of peak/current memory footprint when realloc succeeds because,
2218
2219         1. It does not allocate additional memory while expanding a vector
2220         2. It does not deallocate an old memory, just reusing the current memory by expanding, so that memory footprint is tight even before scavenging
2221
2222         We found that we can "realloc" large butterflies in certain conditions are met because,
2223
2224         1. If it goes to LargeAllocation, this memory region is never reused until GC sweeps it.
2225         2. Butterflies are owned by owner JSObjects, so we know the lifetime of Butterflies.
2226
2227         This patch attempts to use "realloc" onto butterflies if,
2228
2229         1. Butterflies are allocated in LargeAllocation kind
2230         2. Concurrent collector is not active
2231         3. Butterflies do not have property storage
2232
2233         The condition (2) is required to avoid deallocating butterflies while the concurrent collector looks into it. The condition (3) is
2234         also required to avoid deallocating butterflies while the concurrent compiler looks into it.
2235
2236         We also change LargeAllocation mechanism to using "malloc" and "free" instead of "posix_memalign". This allows us to use "realloc"
2237         safely in all the platforms. Since LargeAllocation uses alignment to distinguish LargeAllocation and MarkedBlock, we manually adjust
2238         16B alignment by allocating 8B more memory in "malloc".
2239
2240         Speedometer2 and JetStream2 are neutral. RAMification shows about 1% progression (even in some of JIT tests).
2241
2242         * heap/AlignedMemoryAllocator.h:
2243         * heap/CompleteSubspace.cpp:
2244         (JSC::CompleteSubspace::tryAllocateSlow):
2245         (JSC::CompleteSubspace::reallocateLargeAllocationNonVirtual):
2246         * heap/CompleteSubspace.h:
2247         * heap/FastMallocAlignedMemoryAllocator.cpp:
2248         (JSC::FastMallocAlignedMemoryAllocator::tryAllocateMemory):
2249         (JSC::FastMallocAlignedMemoryAllocator::freeMemory):
2250         (JSC::FastMallocAlignedMemoryAllocator::tryReallocateMemory):
2251         * heap/FastMallocAlignedMemoryAllocator.h:
2252         * heap/GigacageAlignedMemoryAllocator.cpp:
2253         (JSC::GigacageAlignedMemoryAllocator::tryAllocateMemory):
2254         (JSC::GigacageAlignedMemoryAllocator::freeMemory):
2255         (JSC::GigacageAlignedMemoryAllocator::tryReallocateMemory):
2256         * heap/GigacageAlignedMemoryAllocator.h:
2257         * heap/IsoAlignedMemoryAllocator.cpp:
2258         (JSC::IsoAlignedMemoryAllocator::tryAllocateMemory):
2259         (JSC::IsoAlignedMemoryAllocator::freeMemory):
2260         (JSC::IsoAlignedMemoryAllocator::tryReallocateMemory):
2261         * heap/IsoAlignedMemoryAllocator.h:
2262         * heap/LargeAllocation.cpp:
2263         (JSC::isAlignedForLargeAllocation):
2264         (JSC::LargeAllocation::tryCreate):
2265         (JSC::LargeAllocation::tryReallocate):
2266         (JSC::LargeAllocation::LargeAllocation):
2267         (JSC::LargeAllocation::destroy):
2268         * heap/LargeAllocation.h:
2269         (JSC::LargeAllocation::indexInSpace):
2270         (JSC::LargeAllocation::setIndexInSpace):
2271         (JSC::LargeAllocation::basePointer const):
2272         * heap/MarkedSpace.cpp:
2273         (JSC::MarkedSpace::sweepLargeAllocations):
2274         (JSC::MarkedSpace::prepareForConservativeScan):
2275         * heap/WeakSet.h:
2276         (JSC::WeakSet::isTriviallyDestructible const):
2277         * runtime/Butterfly.h:
2278         * runtime/ButterflyInlines.h:
2279         (JSC::Butterfly::reallocArrayRightIfPossible):
2280         * runtime/JSObject.cpp:
2281         (JSC::JSObject::ensureLengthSlow):
2282
2283 2019-03-31  Sam Weinig  <weinig@apple.com>
2284
2285         Remove more i386 specific configurations
2286         https://bugs.webkit.org/show_bug.cgi?id=196430
2287
2288         Reviewed by Alexey Proskuryakov.
2289
2290         * Configurations/FeatureDefines.xcconfig:
2291         ENABLE_WEB_AUTHN_macosx can now be enabled unconditionally on macOS.
2292
2293         * Configurations/ToolExecutable.xcconfig:
2294         ARC can be enabled unconditionally now.
2295
2296 2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>
2297
2298         [JSC] JSWrapperMap should not use Objective-C Weak map (NSMapTable with NSPointerFunctionsWeakMemory) for m_cachedObjCWrappers
2299         https://bugs.webkit.org/show_bug.cgi?id=196392
2300
2301         Reviewed by Saam Barati.
2302
2303         Weak representation in Objective-C is surprisingly costly in terms of memory. We can see that very easy program shows 10KB memory consumption due to
2304         this weak wrapper map in JavaScriptCore.framework. But we do not need this weak map since Objective-C JSValue has a dealloc. We can unregister itself
2305         from the map when it is deallocated without using Objective-C weak mechanism. And since Objective-C JSValue is tightly coupled to a specific JSContext,
2306         and wrapper map is created per JSContext, JSValue wrapper and actual JavaScriptCore value is one-on-one, and [JSValue dealloc] knows which JSContext's
2307         wrapper map holds itself.
2308
2309         1. We do not use Objective-C weak mechanism. We use WTF::HashSet instead. When JSValue is allocated, we register it to JSWrapperMap's HashSet. And unregister
2310            JSValue from this map when JSValue is deallocated.
2311         2. We use HashSet<JSValue> (logically) instead of HashMap<JSValueRef, JSValue> to keep JSValueRef and JSValue relationship. We can achieve it because JSValue
2312            holds JSValueRef inside it.
2313
2314         * API/JSContext.mm:
2315         (-[JSContext removeWrapper:]):
2316         * API/JSContextInternal.h:
2317         * API/JSValue.mm:
2318         (-[JSValue dealloc]):
2319         (-[JSValue initWithValue:inContext:]):
2320         * API/JSWrapperMap.h:
2321         * API/JSWrapperMap.mm:
2322         (WrapperKey::hashTableDeletedValue):
2323         (WrapperKey::WrapperKey):
2324         (WrapperKey::isHashTableDeletedValue const):
2325         (WrapperKey::Hash::hash):
2326         (WrapperKey::Hash::equal):
2327         (WrapperKey::Traits::isEmptyValue):
2328         (WrapperKey::Translator::hash):
2329         (WrapperKey::Translator::equal):
2330         (WrapperKey::Translator::translate):
2331         (-[JSWrapperMap initWithGlobalContextRef:]):
2332         (-[JSWrapperMap dealloc]):
2333         (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]):
2334         (-[JSWrapperMap removeWrapper:]):
2335         * API/tests/testapi.mm:
2336         (testObjectiveCAPIMain):
2337
2338 2019-03-29  Robin Morisset  <rmorisset@apple.com>
2339
2340         B3ReduceStrength should know that Mul distributes over Add and Sub
2341         https://bugs.webkit.org/show_bug.cgi?id=196325
2342
2343         Reviewed by Michael Saboff.
2344
2345         In this patch I add the following patterns to B3ReduceStrength:
2346         - Turn this: Integer Neg(Mul(value, c))
2347           Into this: Mul(value, -c), as long as -c does not overflow
2348         - Turn these: Integer Mul(value, Neg(otherValue)) and Integer Mul(Neg(value), otherValue)
2349           Into this: Neg(Mul(value, otherValue))
2350         - For Op==Add or Sub, turn any of these:
2351              Op(Mul(x1, x2), Mul(x1, x3))
2352              Op(Mul(x2, x1), Mul(x1, x3))
2353              Op(Mul(x1, x2), Mul(x3, x1))
2354              Op(Mul(x2, x1), Mul(x3, x1))
2355           Into this: Mul(x1, Op(x2, x3))
2356
2357         Also includes a trivial change: a similar reduction for the distributivity of BitAnd over BitOr/BitXor now
2358         emits the arguments to BitAnd in the other order, to minimize the probability that we'll spend a full fixpoint step just to flip them.
2359
2360         * b3/B3ReduceStrength.cpp:
2361         * b3/testb3.cpp:
2362         (JSC::B3::testAddMulMulArgs):
2363         (JSC::B3::testMulArgNegArg):
2364         (JSC::B3::testMulNegArgArg):
2365         (JSC::B3::testNegMulArgImm):
2366         (JSC::B3::testSubMulMulArgs):
2367         (JSC::B3::run):
2368
2369 2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>
2370
2371         [JSC] Remove distancing for LargeAllocation
2372         https://bugs.webkit.org/show_bug.cgi?id=196335
2373
2374         Reviewed by Saam Barati.
2375
2376         In r230226, we removed distancing feature from our GC. This patch removes remaining distancing thing in LargeAllocation.
2377
2378         * heap/HeapCell.h:
2379         * heap/LargeAllocation.cpp:
2380         (JSC::LargeAllocation::tryCreate):
2381         * heap/MarkedBlock.h:
2382
2383 2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>
2384
2385         Delete WebMetal implementation in favor of WebGPU
2386         https://bugs.webkit.org/show_bug.cgi?id=195418
2387
2388         Reviewed by Dean Jackson.
2389
2390         * Configurations/FeatureDefines.xcconfig:
2391         * inspector/protocol/Canvas.json:
2392         * inspector/scripts/codegen/generator.py:
2393
2394 2019-03-29  Tadeu Zagallo  <tzagallo@apple.com>
2395
2396         Assertion failed in JSC::createError
2397         https://bugs.webkit.org/show_bug.cgi?id=196305
2398         <rdar://problem/49387382>
2399
2400         Reviewed by Saam Barati.
2401
2402         JSC::createError assumes that `errorDescriptionForValue` will either
2403         throw an exception or return a valid description string. However, that
2404         is not true if the value is a rope string and we successfully resolve it,
2405         but later fail to wrap the string in quotes with `tryMakeString`.
2406
2407         * runtime/ExceptionHelpers.cpp:
2408         (JSC::createError):
2409
2410 2019-03-29  Devin Rousso  <drousso@apple.com>
2411
2412         Web Inspector: add fast returns for instrumentation hooks that have no affect before a frontend is connected
2413         https://bugs.webkit.org/show_bug.cgi?id=196382
2414         <rdar://problem/49403417>
2415
2416         Reviewed by Joseph Pecoraro.
2417
2418         Ensure that all instrumentation hooks use `FAST_RETURN_IF_NO_FRONTENDS` or check that
2419         `developerExtrasEnabled`. There should be no activity to/from any inspector objects until
2420         developer extras are enabled.
2421
2422         * inspector/agents/InspectorConsoleAgent.cpp:
2423         (Inspector::InspectorConsoleAgent::startTiming):
2424         (Inspector::InspectorConsoleAgent::stopTiming):
2425         (Inspector::InspectorConsoleAgent::count):
2426         (Inspector::InspectorConsoleAgent::addConsoleMessage):
2427
2428 2019-03-29  Cathie Chen  <cathiechen@igalia.com>
2429
2430         Implement ResizeObserver.
2431         https://bugs.webkit.org/show_bug.cgi?id=157743
2432
2433         Reviewed by Simon Fraser.
2434
2435         Add ENABLE_RESIZE_OBSERVER.
2436
2437         * Configurations/FeatureDefines.xcconfig:
2438
2439 2019-03-28  Michael Saboff  <msaboff@apple.com>
2440
2441         [YARR] Precompute BMP / non-BMP status when constructing character classes
2442         https://bugs.webkit.org/show_bug.cgi?id=196296
2443
2444         Reviewed by Keith Miller.
2445
2446         Changed CharacterClass::m_hasNonBMPCharacters into a character width bit field which
2447         indicateis if the class includes characters from either BMP, non-BMP or both ranges.
2448         This allows the recognizing code to eliminate checks for the width of a matched
2449         characters when the class has only one width.  The character width is needed to
2450         determine if we advance 1 or 2 character.  Also, the pre-computed width of character
2451         classes that contains either all BMP or all non-BMP characters allows the parser to
2452         use fixed widths for terms using those character classes.  Changed both the code gen
2453         scripts and Yarr compiler to compute this bit field during the construction of
2454         character classes.
2455
2456         For JIT'ed code of character classes that contain either all BMP or all non-BMP
2457         characters, we can eliminate the generic check we were doing do compute how much
2458         to advance after sucessfully matching a character in the class.
2459
2460                 Generic isBMP check      BMP only            non-BMP only
2461                 --------------           --------------      --------------
2462                 inc %r9d                 inc %r9d            add $0x2, %r9d
2463                 cmp $0x10000, %eax
2464                 jl isBMP
2465                 cmp %edx, %esi
2466                 jz atEndOfString
2467                 inc %r9d
2468                 inc %esi
2469          isBMP:
2470
2471         For character classes that contained non-BMP characters, we were always generating
2472         the code in the left column.  The middle column is the code we generate for character
2473         classes that contain only BMP characters.  The right column is the code we now
2474         generate if the character class has only non-BMP characters.  In the fix width cases,
2475         we can eliminate both the isBMP check as well as the atEndOfString check.  The
2476         atEndOfstring check is eliminated since we know how many characters this character
2477         class requires and that check can be factored out to the beginning of the current
2478         alternative.  For character classes that contain both BMP and non-BMP characters,
2479         we still generate the generic left column.
2480
2481         This change is a ~8% perf progression on UniPoker and a ~2% improvement on RexBench
2482         as a whole.
2483
2484         * runtime/RegExp.cpp:
2485         (JSC::RegExp::matchCompareWithInterpreter):
2486         * runtime/RegExpInlines.h:
2487         (JSC::RegExp::matchInline):
2488         * yarr/YarrInterpreter.cpp:
2489         (JSC::Yarr::Interpreter::checkCharacterClassDontAdvanceInputForNonBMP):
2490         (JSC::Yarr::Interpreter::matchCharacterClass):
2491         * yarr/YarrJIT.cpp:
2492         (JSC::Yarr::YarrGenerator::optimizeAlternative):
2493         (JSC::Yarr::YarrGenerator::matchCharacterClass):
2494         (JSC::Yarr::YarrGenerator::advanceIndexAfterCharacterClassTermMatch):
2495         (JSC::Yarr::YarrGenerator::tryReadUnicodeCharImpl):
2496         (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
2497         (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
2498         (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
2499         (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy):
2500         (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
2501         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
2502         (JSC::Yarr::YarrGenerator::generateEnter):
2503         (JSC::Yarr::YarrGenerator::YarrGenerator):
2504         (JSC::Yarr::YarrGenerator::compile):
2505         * yarr/YarrPattern.cpp:
2506         (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor):
2507         (JSC::Yarr::CharacterClassConstructor::reset):
2508         (JSC::Yarr::CharacterClassConstructor::charClass):
2509         (JSC::Yarr::CharacterClassConstructor::addSorted):
2510         (JSC::Yarr::CharacterClassConstructor::addSortedRange):
2511         (JSC::Yarr::CharacterClassConstructor::hasNonBMPCharacters):
2512         (JSC::Yarr::CharacterClassConstructor::characterWidths):
2513         (JSC::Yarr::PatternTerm::dump):
2514         (JSC::Yarr::anycharCreate):
2515         * yarr/YarrPattern.h:
2516         (JSC::Yarr::operator|):
2517         (JSC::Yarr::operator&):
2518         (JSC::Yarr::operator|=):
2519         (JSC::Yarr::CharacterClass::CharacterClass):
2520         (JSC::Yarr::CharacterClass::hasNonBMPCharacters):
2521         (JSC::Yarr::CharacterClass::hasOneCharacterSize):
2522         (JSC::Yarr::CharacterClass::hasOnlyNonBMPCharacters):
2523         (JSC::Yarr::PatternTerm::invert const):
2524         (JSC::Yarr::PatternTerm::invert): Deleted.
2525         * yarr/create_regex_tables:
2526         * yarr/generateYarrUnicodePropertyTables.py:
2527
2528 2019-03-28  Saam Barati  <sbarati@apple.com>
2529
2530         BackwardsGraph needs to consider back edges as the backward's root successor
2531         https://bugs.webkit.org/show_bug.cgi?id=195991
2532
2533         Reviewed by Filip Pizlo.
2534
2535         * b3/testb3.cpp:
2536         (JSC::B3::testInfiniteLoopDoesntCauseBadHoisting):
2537         (JSC::B3::run):
2538
2539 2019-03-28  Fujii Hironori  <Hironori.Fujii@sony.com>
2540
2541         Opcode.h(159,27): warning: adding 'unsigned int' to a string does not append to the string [-Wstring-plus-int]
2542         https://bugs.webkit.org/show_bug.cgi?id=196343
2543
2544         Reviewed by Saam Barati.
2545
2546         Clang reports a compilation warning and recommend '&PADDING_STRING[PADDING_STRING_LENGTH]'
2547         instead of 'PADDING_STRING + PADDING_STRING_LENGTH'.
2548
2549         * bytecode/Opcode.cpp:
2550         (JSC::padOpcodeName): Moved padOpcodeName from Opcode.h because
2551         this function is used only in Opcode.cpp. Changed macros
2552         PADDING_STRING and PADDING_STRING_LENGTH to simple variables.
2553         (JSC::compareOpcodePairIndices): Replaced pair with std::pair.
2554         * bytecode/Opcode.h:
2555         (JSC::padOpcodeName): Moved.
2556
2557 2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>
2558
2559         CodeBlock::jettison() should disallow repatching its own calls
2560         https://bugs.webkit.org/show_bug.cgi?id=196359
2561         <rdar://problem/48973663>
2562
2563         Reviewed by Saam Barati.
2564
2565         CodeBlock::jettison() calls CommonData::invalidate, which replaces the `hlt`
2566         instruction with the jump to OSR exit. However, if the `hlt` was immediately
2567         followed by a call to the CodeBlock being jettisoned, we would write over the
2568         OSR exit address while unlinking all the incoming CallLinkInfos later in
2569         CodeBlock::jettison().
2570
2571         Change it so that we set a flag, `clearedByJettison`, in all the CallLinkInfos
2572         owned by the CodeBlock being jettisoned. If the flag is set, we will avoid
2573         repatching the call during unlinking. This is safe because this call will never
2574         be reachable again after the CodeBlock is jettisoned.
2575
2576         * bytecode/CallLinkInfo.cpp:
2577         (JSC::CallLinkInfo::CallLinkInfo):
2578         (JSC::CallLinkInfo::setCallee):
2579         (JSC::CallLinkInfo::clearCallee):
2580         (JSC::CallLinkInfo::setCodeBlock):
2581         (JSC::CallLinkInfo::clearCodeBlock):
2582         * bytecode/CallLinkInfo.h:
2583         (JSC::CallLinkInfo::clearedByJettison):
2584         (JSC::CallLinkInfo::setClearedByJettison):
2585         * bytecode/CodeBlock.cpp:
2586         (JSC::CodeBlock::jettison):
2587         * jit/Repatch.cpp:
2588         (JSC::revertCall):
2589
2590 2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>
2591
2592         [JSC] Drop VM and Context cache map in JavaScriptCore.framework
2593         https://bugs.webkit.org/show_bug.cgi?id=196341
2594
2595         Reviewed by Saam Barati.
2596
2597         Previously, we created Objective-C weak map to maintain JSVirtualMachine and JSContext wrappers corresponding to VM and JSGlobalObject.
2598         But Objective-C weak map is really memory costly. Even if the entry is only one, it consumes 2.5KB per weak map. Since we can modify
2599         JSC intrusively for JavaScriptCore.framework (and we already did it, like, holding JSWrapperMap in JSGlobalObject), we can just hold
2600         a pointer to a wrapper in VM and JSGlobalObject.
2601
2602         This patch adds void* members to VM and JSGlobalObject, which holds a non-strong reference to a wrapper. When a wrapper is gone, we
2603         clear this pointer too. This removes unnecessary two Objective-C weak maps, and save 5KB.
2604
2605         * API/JSContext.mm:
2606         (-[JSContext initWithVirtualMachine:]):
2607         (-[JSContext dealloc]):
2608         (-[JSContext initWithGlobalContextRef:]):
2609         (-[JSContext wrapperMap]):
2610         (+[JSContext contextWithJSGlobalContextRef:]):
2611         * API/JSVirtualMachine.mm:
2612         (-[JSVirtualMachine initWithContextGroupRef:]):
2613         (-[JSVirtualMachine dealloc]):
2614         (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
2615         (scanExternalObjectGraph):
2616         (scanExternalRememberedSet):
2617         (initWrapperCache): Deleted.
2618         (wrapperCache): Deleted.
2619         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]): Deleted.
2620         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]): Deleted.
2621         (-[JSVirtualMachine contextForGlobalContextRef:]): Deleted.
2622         (-[JSVirtualMachine addContext:forGlobalContextRef:]): Deleted.
2623         * API/JSVirtualMachineInternal.h:
2624         * runtime/JSGlobalObject.h:
2625         (JSC::JSGlobalObject::setAPIWrapper):
2626         (JSC::JSGlobalObject::apiWrapper const):
2627         * runtime/VM.h:
2628
2629 2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>
2630
2631         In-memory code cache should not share bytecode across domains
2632         https://bugs.webkit.org/show_bug.cgi?id=196321
2633
2634         Reviewed by Geoffrey Garen.
2635
2636         Use the SourceProvider's URL to make sure that the hosts match for the
2637         two SourceCodeKeys in operator==.
2638
2639         * parser/SourceCodeKey.h:
2640         (JSC::SourceCodeKey::host const):
2641         (JSC::SourceCodeKey::operator== const):
2642
2643 2019-03-28  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>
2644
2645         Silence lot of warnings when compiling with clang
2646         https://bugs.webkit.org/show_bug.cgi?id=196310
2647
2648         Reviewed by Michael Catanzaro.
2649
2650         Initialize variable with default constructor.
2651
2652         * API/glib/JSCOptions.cpp:
2653         (jsc_options_foreach):
2654
2655 2019-03-27  Saam Barati  <sbarati@apple.com>
2656
2657         validateOSREntryValue with Int52 should box the value being checked into double format
2658         https://bugs.webkit.org/show_bug.cgi?id=196313
2659         <rdar://problem/49306703>
2660
2661         Reviewed by Yusuke Suzuki.
2662
2663         * dfg/DFGOSREntry.cpp:
2664         (JSC::DFG::prepareOSREntry):
2665         * ftl/FTLLowerDFGToB3.cpp:
2666         (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
2667
2668 2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>
2669
2670         [JSC] Owner of watchpoints should validate at GC finalizing phase
2671         https://bugs.webkit.org/show_bug.cgi?id=195827
2672
2673         Reviewed by Filip Pizlo.
2674
2675         This patch fixes JSC's watchpoint liveness issue by the following two policies.
2676
2677         1. Watchpoint should have owner cell, and "fire" operation should be gaurded with owner cell's isLive check.
2678
2679         Watchpoints should hold its owner cell, and fire procedure should be guarded by `owner->isLive()`.
2680         When the owner cell is destroyed, these watchpoints are destroyed too. But this destruction can
2681         be delayed due to incremental sweeper. So the following condition can happen.
2682
2683         When we have a watchpoint like the following.
2684
2685             class XXXWatchpoint {
2686                 ObjectPropertyCondition m_key;
2687                 JSCell* m_owner;
2688             };
2689
2690         Both m_key's cell and m_owner is now unreachable from the root. So eventually, m_owner cell's destructor
2691         is called and this watchpoint will be destroyed. But before that, m_key's cell can be destroyed. And this
2692         watchpoint's fire procedure can be called since m_owner's destructor is not called yet. In this situation,
2693         we encounter the destroyed cell held in m_key. This problem can be avoided if we guard fire procedure with
2694         `m_owner->isLive()`. Until the owner cell is destroyed, this guard avoids "fire" procedure execution. And
2695         once the destructor of m_owner is called, this watchpoint will be destroyed too.
2696
2697         2. Watchpoint liveness should be maintained by owner cell's unconditional finalizer
2698
2699         Watchpoints often hold weak references to the other cell (like, m_key in the above example). If we do not
2700         delete watchpoints with dead cells when these weak cells become dead, these watchpoints continue holding dead cells,
2701         and watchpoint's fire operation can use these dead cells accidentally. isLive / isStillLive check for these weak cells
2702         in fire operation is not useful. Because these dead cells can be reused to the other live cells eventually, and this
2703         isLive / isStillLive checks fail to see these cells are live if they are reused. Appropriate way is deleting watchpoints
2704         with dead cells when finalizing GC. In this patch, we do this in unconditional finalizers in owner cells of watchpoints.
2705         We already did this in CodeBlock etc. We add the same thing to StructureRareData which owns watchpoints for toString operations.
2706
2707         * JavaScriptCore.xcodeproj/project.pbxproj:
2708         * Sources.txt:
2709         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h:
2710         (JSC::AdaptiveInferredPropertyValueWatchpointBase::StructureWatchpoint::StructureWatchpoint): Deleted.
2711         (JSC::AdaptiveInferredPropertyValueWatchpointBase::PropertyWatchpoint::PropertyWatchpoint): Deleted.
2712         * bytecode/CodeBlockJettisoningWatchpoint.h:
2713         (JSC::CodeBlockJettisoningWatchpoint::CodeBlockJettisoningWatchpoint): Deleted.
2714         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
2715         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
2716         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
2717         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
2718         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::key const): Deleted.
2719         * bytecode/StructureStubClearingWatchpoint.cpp:
2720         (JSC::StructureStubClearingWatchpoint::fireInternal):
2721         (JSC::WatchpointsOnStructureStubInfo::isValid const):
2722         * bytecode/StructureStubClearingWatchpoint.h:
2723         (JSC::StructureStubClearingWatchpoint::StructureStubClearingWatchpoint): Deleted.
2724         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:
2725         (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::isValid const):
2726         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
2727         * dfg/DFGAdaptiveStructureWatchpoint.cpp:
2728         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
2729         * dfg/DFGAdaptiveStructureWatchpoint.h:
2730         (JSC::DFG::AdaptiveStructureWatchpoint::key const): Deleted.
2731         * dfg/DFGDesiredWatchpoints.cpp:
2732         (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
2733         * heap/Heap.cpp:
2734         (JSC::Heap::finalizeUnconditionalFinalizers):
2735         * llint/LLIntSlowPaths.cpp:
2736         (JSC::LLInt::setupGetByIdPrototypeCache):
2737         * runtime/ArrayBuffer.cpp:
2738         (JSC::ArrayBuffer::notifyIncommingReferencesOfTransfer):
2739         * runtime/ArrayBufferNeuteringWatchpointSet.cpp: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.cpp.
2740         (JSC::ArrayBufferNeuteringWatchpointSet::ArrayBufferNeuteringWatchpointSet):
2741         (JSC::ArrayBufferNeuteringWatchpointSet::destroy):
2742         (JSC::ArrayBufferNeuteringWatchpointSet::create):
2743         (JSC::ArrayBufferNeuteringWatchpointSet::createStructure):
2744         (JSC::ArrayBufferNeuteringWatchpointSet::fireAll):
2745         * runtime/ArrayBufferNeuteringWatchpointSet.h: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.h.
2746         * runtime/FunctionRareData.h:
2747         * runtime/JSGlobalObject.cpp:
2748         (JSC::JSGlobalObject::init):
2749         (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint):
2750         * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
2751         (JSC::ObjectPropertyChangeAdaptiveWatchpoint::ObjectPropertyChangeAdaptiveWatchpoint): Deleted.
2752         * runtime/StructureRareData.cpp:
2753         (JSC::StructureRareData::finalizeUnconditionally):
2754         * runtime/StructureRareData.h:
2755         * runtime/VM.cpp:
2756         (JSC::VM::VM):
2757
2758 2019-03-26  Saam Barati  <sbarati@apple.com>
2759
2760         FTL: Emit code to validate AI's state when running the compiled code
2761         https://bugs.webkit.org/show_bug.cgi?id=195924
2762         <rdar://problem/49003422>
2763
2764         Reviewed by Filip Pizlo.
2765
2766         This patch adds code that between the execution of each node that validates
2767         the types that AI proves. This option is too expensive to turn on for our
2768         regression testing, but we think it will be valuable in other types of running
2769         modes, such as when running with a fuzzer.
2770         
2771         This patch also adds options to only probabilistically run this validation
2772         after the execution of each node. As the probability is lowered, there is
2773         less of a perf hit.
2774         
2775         This patch just adds this validation in the FTL. A follow-up patch will land
2776         it in the DFG too: https://bugs.webkit.org/show_bug.cgi?id=196219
2777
2778         * ftl/FTLLowerDFGToB3.cpp:
2779         (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3):
2780         (JSC::FTL::DFG::LowerDFGToB3::compileBlock):
2781         (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
2782         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
2783         (JSC::FTL::DFG::LowerDFGToB3::lowJSValue):
2784         * runtime/Options.h:
2785
2786 2019-03-26  Tadeu Zagallo  <tzagallo@apple.com>
2787
2788         WebAssembly: Fix f32.min, f64.min and f64.max operations on NaN
2789         https://bugs.webkit.org/show_bug.cgi?id=196217
2790
2791         Reviewed by Saam Barati.
2792
2793         Generalize the fix for f32.max to properly handle NaN by doing an extra GreatherThan
2794         comparison in r243446 to all min and max float operations.
2795
2796         * wasm/WasmAirIRGenerator.cpp:
2797         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
2798         (JSC::Wasm::AirIRGenerator::addFloatingPointMinOrMax):
2799         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
2800         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
2801         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
2802         * wasm/wasm.json:
2803
2804 2019-03-26  Andy VanWagoner  <andy@vanwagoner.family>
2805
2806         Intl.DateTimeFormat should obey 2-digit hour
2807         https://bugs.webkit.org/show_bug.cgi?id=195974
2808
2809         Reviewed by Keith Miller.
2810
2811         * runtime/IntlDateTimeFormat.cpp:
2812         (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
2813
2814 2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>
2815
2816         Heap::isMarked and friends should be instance methods
2817         https://bugs.webkit.org/show_bug.cgi?id=179988
2818
2819         Reviewed by Saam Barati.
2820
2821         Almost all the callers of Heap::isMarked have VM& reference. We should make Heap::isMarked instance function instead of static function
2822         so that we do not need to look up Heap from the cell.
2823
2824         * API/JSAPIWrapperObject.mm:
2825         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
2826         * API/JSMarkingConstraintPrivate.cpp:
2827         (JSC::isMarked):
2828         * API/glib/JSAPIWrapperObjectGLib.cpp:
2829         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
2830         * builtins/BuiltinExecutables.cpp:
2831         (JSC::BuiltinExecutables::finalizeUnconditionally):
2832         * bytecode/AccessCase.cpp:
2833         (JSC::AccessCase::visitWeak const):
2834         (JSC::AccessCase::propagateTransitions const):
2835         * bytecode/CallLinkInfo.cpp:
2836         (JSC::CallLinkInfo::visitWeak):
2837         * bytecode/CallLinkStatus.cpp:
2838         (JSC::CallLinkStatus::finalize):
2839         * bytecode/CallLinkStatus.h:
2840         * bytecode/CallVariant.cpp:
2841         (JSC::CallVariant::finalize):
2842         * bytecode/CallVariant.h:
2843         * bytecode/CodeBlock.cpp:
2844         (JSC::CodeBlock::shouldJettisonDueToWeakReference):
2845         (JSC::CodeBlock::shouldJettisonDueToOldAge):
2846         (JSC::shouldMarkTransition):
2847         (JSC::CodeBlock::propagateTransitions):
2848         (JSC::CodeBlock::determineLiveness):
2849         (JSC::CodeBlock::finalizeLLIntInlineCaches):
2850         (JSC::CodeBlock::finalizeUnconditionally):
2851         (JSC::CodeBlock::jettison):
2852         * bytecode/CodeBlock.h:
2853         * bytecode/ExecutableToCodeBlockEdge.cpp:
2854         (JSC::ExecutableToCodeBlockEdge::visitChildren):
2855         (JSC::ExecutableToCodeBlockEdge::finalizeUnconditionally):
2856         (JSC::ExecutableToCodeBlockEdge::runConstraint):
2857         * bytecode/GetByIdStatus.cpp:
2858         (JSC::GetByIdStatus::finalize):
2859         * bytecode/GetByIdStatus.h:
2860         * bytecode/GetByIdVariant.cpp:
2861         (JSC::GetByIdVariant::finalize):
2862         * bytecode/GetByIdVariant.h:
2863         * bytecode/InByIdStatus.cpp:
2864         (JSC::InByIdStatus::finalize):
2865         * bytecode/InByIdStatus.h:
2866         * bytecode/InByIdVariant.cpp:
2867         (JSC::InByIdVariant::finalize):
2868         * bytecode/InByIdVariant.h:
2869         * bytecode/ObjectPropertyCondition.cpp:
2870         (JSC::ObjectPropertyCondition::isStillLive const):
2871         * bytecode/ObjectPropertyCondition.h:
2872         * bytecode/ObjectPropertyConditionSet.cpp:
2873         (JSC::ObjectPropertyConditionSet::areStillLive const):
2874         * bytecode/ObjectPropertyConditionSet.h:
2875         * bytecode/PolymorphicAccess.cpp:
2876         (JSC::PolymorphicAccess::visitWeak const):
2877         * bytecode/PropertyCondition.cpp:
2878         (JSC::PropertyCondition::isStillLive const):
2879         * bytecode/PropertyCondition.h:
2880         * bytecode/PutByIdStatus.cpp:
2881         (JSC::PutByIdStatus::finalize):
2882         * bytecode/PutByIdStatus.h:
2883         * bytecode/PutByIdVariant.cpp:
2884         (JSC::PutByIdVariant::finalize):
2885         * bytecode/PutByIdVariant.h:
2886         * bytecode/RecordedStatuses.cpp:
2887         (JSC::RecordedStatuses::finalizeWithoutDeleting):
2888         (JSC::RecordedStatuses::finalize):
2889         * bytecode/RecordedStatuses.h:
2890         * bytecode/StructureSet.cpp:
2891         (JSC::StructureSet::isStillAlive const):
2892         * bytecode/StructureSet.h:
2893         * bytecode/StructureStubInfo.cpp:
2894         (JSC::StructureStubInfo::visitWeakReferences):
2895         * dfg/DFGPlan.cpp:
2896         (JSC::DFG::Plan::finalizeInGC):
2897         (JSC::DFG::Plan::isKnownToBeLiveDuringGC):
2898         * heap/GCIncomingRefCounted.h:
2899         * heap/GCIncomingRefCountedInlines.h:
2900         (JSC::GCIncomingRefCounted<T>::filterIncomingReferences):
2901         * heap/GCIncomingRefCountedSet.h:
2902         * heap/GCIncomingRefCountedSetInlines.h:
2903         (JSC::GCIncomingRefCountedSet<T>::lastChanceToFinalize):
2904         (JSC::GCIncomingRefCountedSet<T>::sweep):
2905         (JSC::GCIncomingRefCountedSet<T>::removeAll): Deleted.
2906         (JSC::GCIncomingRefCountedSet<T>::removeDead): Deleted.
2907         * heap/Heap.cpp:
2908         (JSC::Heap::addToRememberedSet):
2909         (JSC::Heap::runEndPhase):
2910         (JSC::Heap::sweepArrayBuffers):
2911         (JSC::Heap::addCoreConstraints):
2912         * heap/Heap.h:
2913         * heap/HeapInlines.h:
2914         (JSC::Heap::isMarked):
2915         * heap/HeapSnapshotBuilder.cpp:
2916         (JSC::HeapSnapshotBuilder::appendNode):
2917         * heap/SlotVisitor.cpp:
2918         (JSC::SlotVisitor::appendToMarkStack):
2919         (JSC::SlotVisitor::visitChildren):
2920         * jit/PolymorphicCallStubRoutine.cpp:
2921         (JSC::PolymorphicCallStubRoutine::visitWeak):
2922         * runtime/ErrorInstance.cpp:
2923         (JSC::ErrorInstance::finalizeUnconditionally):
2924         * runtime/InferredValueInlines.h:
2925         (JSC::InferredValue::finalizeUnconditionally):
2926         * runtime/StackFrame.h:
2927         (JSC::StackFrame::isMarked const):
2928         * runtime/Structure.cpp:
2929         (JSC::Structure::isCheapDuringGC):
2930         (JSC::Structure::markIfCheap):
2931         * runtime/Structure.h:
2932         * runtime/TypeProfiler.cpp:
2933         (JSC::TypeProfiler::invalidateTypeSetCache):
2934         * runtime/TypeProfiler.h:
2935         * runtime/TypeSet.cpp:
2936         (JSC::TypeSet::invalidateCache):
2937         * runtime/TypeSet.h:
2938         * runtime/WeakMapImpl.cpp:
2939         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitOutputConstraints):
2940         * runtime/WeakMapImplInlines.h:
2941         (JSC::WeakMapImpl<WeakMapBucket>::finalizeUnconditionally):
2942
2943 2019-03-25  Keith Miller  <keith_miller@apple.com>
2944
2945         ASSERTION FAILED: m_op == CompareStrictEq in JSC::DFG::Node::convertToCompareEqPtr(JSC::DFG::FrozenValue *, JSC::DFG::Edge)
2946         https://bugs.webkit.org/show_bug.cgi?id=196176
2947
2948         Reviewed by Saam Barati.
2949
2950         convertToCompareEqPtr should allow for either CompareStrictEq or
2951         the SameValue DFG node. This fixes the old assertion that only
2952         allowed CompareStrictEq.
2953
2954         * dfg/DFGNode.h:
2955         (JSC::DFG::Node::convertToCompareEqPtr):
2956
2957 2019-03-25  Tadeu Zagallo  <tzagallo@apple.com>
2958
2959         WebAssembly: f32.max with NaN generates incorrect result
2960         https://bugs.webkit.org/show_bug.cgi?id=175691
2961         <rdar://problem/33952228>
2962
2963         Reviewed by Saam Barati.
2964
2965         Fix the B3 and Air compilation for f32.max. In order to handle the NaN
2966         case, we need an extra GreaterThan comparison on top of the existing
2967         Equal and LessThan ones.
2968
2969         * wasm/WasmAirIRGenerator.cpp:
2970         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
2971         * wasm/wasm.json:
2972
2973 2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>
2974
2975         Unreviewed, speculative fix for CLoop build on CPU(UNKNOWN)
2976         https://bugs.webkit.org/show_bug.cgi?id=195982
2977
2978         * jit/ExecutableAllocator.h:
2979         (JSC::ExecutableAllocator::initializeUnderlyingAllocator):
2980
2981 2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>
2982
2983         Remove NavigatorContentUtils in WebCore/Modules
2984         https://bugs.webkit.org/show_bug.cgi?id=196070
2985
2986         Reviewed by Alex Christensen.
2987
2988         NavigatorContentUtils was to support the custom scheme spec [1].
2989         However, in WebKit side, no port has supported the feature in
2990         WebKit layer after EFL port was removed. So there has been the
2991         only IDL implementation of the NavigatorContentUtils in WebCore.
2992         So we don't need to keep the implementation in WebCore anymore.
2993
2994         [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers
2995
2996         * Configurations/FeatureDefines.xcconfig:
2997
2998 2019-03-23  Mark Lam  <mark.lam@apple.com>
2999
3000         Rolling out r243032 and r243071 because the fix is incorrect.
3001         https://bugs.webkit.org/show_bug.cgi?id=195892
3002         <rdar://problem/48981239>
3003
3004         Not reviewed.
3005
3006         The fix is incorrect: it relies on being able to determine liveness of an object
3007         in an ObjectPropertyCondition based on the state of the object's MarkedBit.
3008         However, there's no guarantee that GC has run and that the MarkedBit is already
3009         set even if the object is live.  As a result, we may not re-install adaptive
3010         watchpoints based on presumed dead objects which are actually live.
3011
3012         I'm rolling this out, and will implement a more comprehensive fix to handle
3013         watchpoint liveness later.
3014
3015         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:
3016         (JSC::AdaptiveInferredPropertyValueWatchpointBase::fire):
3017         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
3018         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
3019         * bytecode/ObjectPropertyCondition.cpp:
3020         (JSC::ObjectPropertyCondition::dumpInContext const):
3021         * bytecode/StructureStubClearingWatchpoint.cpp:
3022         (JSC::StructureStubClearingWatchpoint::fireInternal):
3023         * dfg/DFGAdaptiveStructureWatchpoint.cpp:
3024         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
3025         * runtime/StructureRareData.cpp:
3026         (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal):
3027
3028 2019-03-23  Keith Miller  <keith_miller@apple.com>
3029
3030         Refactor clz/ctz and fix getLSBSet.
3031         https://bugs.webkit.org/show_bug.cgi?id=196162
3032
3033         Reviewed by Saam Barati.
3034
3035         Refactor references of clz32/64 and ctz32 to use clz and ctz,
3036         respectively.
3037
3038         * dfg/DFGAbstractInterpreterInlines.h:
3039         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
3040         * dfg/DFGOperations.cpp:
3041         * runtime/JSBigInt.cpp:
3042         (JSC::JSBigInt::digitDiv):
3043         (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
3044         (JSC::JSBigInt::calculateMaximumCharactersRequired):
3045         (JSC::JSBigInt::toStringBasePowerOfTwo):
3046         (JSC::JSBigInt::compareToDouble):
3047         * runtime/MathObject.cpp:
3048         (JSC::mathProtoFuncClz32):
3049
3050 2019-03-23  Yusuke Suzuki  <ysuzuki@apple.com>
3051
3052         [JSC] Shrink sizeof(RegExp)
3053         https://bugs.webkit.org/show_bug.cgi?id=196133
3054
3055         Reviewed by Mark Lam.
3056
3057         Some applications have many RegExp cells. But RegExp cells are very large (144B).
3058         This patch reduces the size from 144B to 48B by,
3059
3060         1. Allocate Yarr::YarrCodeBlock in non-GC heap. We can avoid this allocation if JIT is disabled.
3061         2. m_captureGroupNames and m_namedGroupToParenIndex are moved to RareData. They are only used when RegExp has named capture groups.
3062
3063         * runtime/RegExp.cpp:
3064         (JSC::RegExp::finishCreation):
3065         (JSC::RegExp::estimatedSize):
3066         (JSC::RegExp::compile):
3067         (JSC::RegExp::matchConcurrently):
3068         (JSC::RegExp::compileMatchOnly):
3069         (JSC::RegExp::deleteCode):
3070         (JSC::RegExp::printTraceData):
3071         * runtime/RegExp.h:
3072         * runtime/RegExpInlines.h:
3073         (JSC::RegExp::hasCodeFor):
3074         (JSC::RegExp::matchInline):
3075         (JSC::RegExp::hasMatchOnlyCodeFor):
3076
3077 2019-03-22  Keith Rollin  <krollin@apple.com>
3078
3079         Enable ThinLTO support in Production builds
3080         https://bugs.webkit.org/show_bug.cgi?id=190758
3081         <rdar://problem/45413233>
3082
3083         Reviewed by Daniel Bates.
3084
3085         Tweak JavaScriptCore's Base.xcconfig to be more in-line with other
3086         .xcconfig files with regards to LTO settings. However, don't actually
3087         enable LTO for JavaScriptCore. LTO is not enabled for JavaScriptCore
3088         due to <rdar://problem/24543547>.
3089
3090         * Configurations/Base.xcconfig:
3091
3092 2019-03-22  Mark Lam  <mark.lam@apple.com>
3093
3094         Placate exception check validation in genericTypedArrayViewProtoFuncLastIndexOf().
3095         https://bugs.webkit.org/show_bug.cgi?id=196154
3096         <rdar://problem/49145307>
3097
3098         Reviewed by Filip Pizlo.
3099
3100         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
3101         (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
3102
3103 2019-03-22  Mark Lam  <mark.lam@apple.com>
3104
3105         Placate exception check validation in constructJSWebAssemblyLinkError().
3106         https://bugs.webkit.org/show_bug.cgi?id=196152
3107         <rdar://problem/49145257>
3108
3109         Reviewed by Michael Saboff.
3110
3111         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
3112         (JSC::constructJSWebAssemblyLinkError):
3113
3114 2019-03-22  Timothy Hatcher  <timothy@apple.com>
3115
3116         Change macosx() to macos() in WK_API... and JSC_API... macros.
3117         https://bugs.webkit.org/show_bug.cgi?id=196106
3118
3119         Reviewed by Brian Burg.
3120
3121         * API/JSBasePrivate.h:
3122         * API/JSContext.h:
3123         * API/JSContextPrivate.h:
3124         * API/JSContextRef.h:
3125         * API/JSContextRefInternal.h:
3126         * API/JSContextRefPrivate.h:
3127         * API/JSManagedValue.h:
3128         * API/JSObjectRef.h:
3129         * API/JSObjectRefPrivate.h:
3130         * API/JSRemoteInspector.h:
3131         * API/JSScript.h:
3132         * API/JSTypedArray.h:
3133         * API/JSValue.h:
3134         * API/JSValuePrivate.h:
3135         * API/JSValueRef.h:
3136         * API/JSVirtualMachinePrivate.h:
3137
3138 2019-03-22  Yusuke Suzuki  <ysuzuki@apple.com>
3139
3140         Unreviewed, build fix for Windows
3141         https://bugs.webkit.org/show_bug.cgi?id=196122
3142
3143         * runtime/FunctionExecutable.cpp:
3144
3145 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3146
3147         [JSC] Shrink sizeof(FunctionExecutable) by 16bytes
3148         https://bugs.webkit.org/show_bug.cgi?id=196122
3149
3150         Reviewed by Saam Barati.
3151
3152         This patch reduces sizeof(FunctionExecutable) by 16 bytes.
3153
3154         1. ScriptExecutable::m_numParametersForCall and ScriptExecutable::m_numParametersForConstruct are not used in a meaningful way. Removed them.
3155         2. ScriptExecutable::m_lastLine and ScriptExecutable::m_endColumn can be calculated from UnlinkedFunctionExecutable. So FunctionExecutable does not need to hold it.
3156            This patch adds GlobalExecutable, which are non-function ScriptExecutables, and move m_lastLine and m_endColumn to this class.
3157         3. FunctionExecutable still needs to have the feature overriding m_lastLine and m_endColumn. We move overridden data in FunctionExecutable::RareData.
3158
3159         * CMakeLists.txt:
3160         * JavaScriptCore.xcodeproj/project.pbxproj:
3161         * Sources.txt:
3162         * bytecode/UnlinkedFunctionExecutable.cpp:
3163         (JSC::UnlinkedFunctionExecutable::link):
3164         * runtime/EvalExecutable.cpp:
3165         (JSC::EvalExecutable::EvalExecutable):
3166         * runtime/EvalExecutable.h:
3167         * runtime/FunctionExecutable.cpp:
3168         (JSC::FunctionExecutable::FunctionExecutable):
3169         (JSC::FunctionExecutable::ensureRareDataSlow):
3170         (JSC::FunctionExecutable::overrideInfo):
3171         * runtime/FunctionExecutable.h:
3172         * runtime/GlobalExecutable.cpp: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
3173         * runtime/GlobalExecutable.h: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
3174         (JSC::GlobalExecutable::lastLine const):
3175         (JSC::GlobalExecutable::endColumn const):
3176         (JSC::GlobalExecutable::recordParse):
3177         (JSC::GlobalExecutable::GlobalExecutable):
3178         * runtime/ModuleProgramExecutable.cpp:
3179         (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
3180         * runtime/ModuleProgramExecutable.h:
3181         * runtime/ProgramExecutable.cpp:
3182         (JSC::ProgramExecutable::ProgramExecutable):
3183         * runtime/ProgramExecutable.h:
3184         * runtime/ScriptExecutable.cpp:
3185         (JSC::ScriptExecutable::clearCode):
3186         (JSC::ScriptExecutable::installCode):
3187         (JSC::ScriptExecutable::hasClearableCode const):
3188         (JSC::ScriptExecutable::newCodeBlockFor):
3189         (JSC::ScriptExecutable::typeProfilingEndOffset const):
3190         (JSC::ScriptExecutable::recordParse):
3191         (JSC::ScriptExecutable::lastLine const):
3192         (JSC::ScriptExecutable::endColumn const):
3193         * runtime/ScriptExecutable.h:
3194         (JSC::ScriptExecutable::hasJITCodeForCall const):
3195         (JSC::ScriptExecutable::hasJITCodeForConstruct const):
3196         (JSC::ScriptExecutable::recordParse):
3197         (JSC::ScriptExecutable::lastLine const): Deleted.
3198         (JSC::ScriptExecutable::endColumn const): Deleted.
3199         * tools/FunctionOverrides.h:
3200
3201 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3202
3203         [JSC] Shrink sizeof(RegExpObject)
3204         https://bugs.webkit.org/show_bug.cgi?id=196130
3205
3206         Reviewed by Saam Barati.
3207
3208         sizeof(RegExpObject) is 48B due to one bool flag. We should compress this flag into lower bit of RegExp* field so that we can make RegExpObject 32B.
3209         It saves memory footprint 1.3% in RAMification's regexp.
3210
3211         * dfg/DFGSpeculativeJIT.cpp:
3212         (JSC::DFG::SpeculativeJIT::compileNewRegexp):
3213         (JSC::DFG::SpeculativeJIT::compileSetRegExpObjectLastIndex):
3214         * ftl/FTLAbstractHeapRepository.h:
3215         * ftl/FTLLowerDFGToB3.cpp:
3216         (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):
3217         (JSC::FTL::DFG::LowerDFGToB3::compileSetRegExpObjectLastIndex):
3218         * runtime/RegExpObject.cpp:
3219         (JSC::RegExpObject::RegExpObject):
3220         (JSC::RegExpObject::visitChildren):
3221         (JSC::RegExpObject::getOwnPropertySlot):
3222         (JSC::RegExpObject::defineOwnProperty):
3223         * runtime/RegExpObject.h:
3224
3225 2019-03-21  Tomas Popela  <tpopela@redhat.com>
3226
3227         [JSC] Fix build after r243232 on unsupported 64bit architectures
3228         https://bugs.webkit.org/show_bug.cgi?id=196072
3229
3230         Reviewed by Keith Miller.
3231
3232         As Keith suggested we already expect 16 free bits at the top of any
3233         pointer for JSValue even for the unsupported 64 bit arches.
3234
3235         * bytecode/CodeOrigin.h:
3236
3237 2019-03-21  Mark Lam  <mark.lam@apple.com>
3238
3239         Remove an invalid assertion in DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined().
3240         https://bugs.webkit.org/show_bug.cgi?id=196116
3241         <rdar://problem/48976951>
3242
3243         Reviewed by Filip Pizlo.
3244
3245         The DFG backend should not make assumptions about what optimizations the front end
3246         will or will not do.  The assertion asserts that the operand cannot be known to be
3247         a cell.  However, it is not guaranteed that the front end will fold away this case.
3248         Also, the DFG backend is perfectly capable of generating code to handle the case
3249         where the operand is a cell.
3250
3251         The attached test case demonstrates a case where the operand can be a known cell.
3252         The test needs to be run with the concurrent JIT and GC, and is racy.  It used to
3253         trip up this assertion about once every 10 runs or so.
3254
3255         * dfg/DFGSpeculativeJIT64.cpp:
3256         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined):
3257
3258 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
3259
3260         JSC::createError should clear exception thrown by errorDescriptionForValue
3261         https://bugs.webkit.org/show_bug.cgi?id=196089
3262
3263         Reviewed by Mark Lam.
3264
3265         errorDescriptionForValue returns a nullString in case of failure, but it
3266         might also throw an OOM exception when resolving a rope string. We need
3267         to clear any potential exceptions thrown by errorDescriptionForValue
3268         before returning the OOM from JSC::createError.
3269
3270         * runtime/ExceptionHelpers.cpp:
3271         (JSC::createError):
3272
3273 2019-03-21  Robin Morisset  <rmorisset@apple.com>
3274
3275         B3::Opcode can fit in a single byte, shrinking B3Value by 8 bytes
3276         https://bugs.webkit.org/show_bug.cgi?id=196014
3277
3278         Reviewed by Keith Miller.
3279
3280         B3::Opcode has less than one hundred cases, so it can easily fit in one byte (from two currently)
3281         This shrinks B3::Kind from 4 bytes to 2 (by removing the byte of padding at the end).
3282         This in turns eliminate padding from B3::Value, shrinking it by 8 bytes (out of 80).
3283
3284         * b3/B3Opcode.h:
3285
3286 2019-03-21  Michael Catanzaro  <mcatanzaro@igalia.com>
3287
3288         Unreviewed, more clang 3.8 build fixes
3289         https://bugs.webkit.org/show_bug.cgi?id=195947
3290         <rdar://problem/49069219>
3291
3292         In the spirit of making our code worse to please old compilers....
3293
3294         * bindings/ScriptValue.cpp:
3295         (Inspector::jsToInspectorValue):
3296         * bytecode/GetterSetterAccessCase.cpp:
3297         (JSC::GetterSetterAccessCase::create):
3298         (JSC::GetterSetterAccessCase::clone const):
3299         * bytecode/InstanceOfAccessCase.cpp:
3300         (JSC::InstanceOfAccessCase::clone const):
3301         * bytecode/IntrinsicGetterAccessCase.cpp:
3302         (JSC::IntrinsicGetterAccessCase::clone const):
3303         * bytecode/ModuleNamespaceAccessCase.cpp:
3304         (JSC::ModuleNamespaceAccessCase::clone const):
3305         * bytecode/ProxyableAccessCase.cpp:
3306         (JSC::ProxyableAccessCase::clone const):
3307
3308 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3309
3310         [JSC] Do not create JIT related data under non-JIT mode
3311         https://bugs.webkit.org/show_bug.cgi?id=195982
3312
3313         Reviewed by Mark Lam.
3314
3315         We avoid creations of JIT related data structures under non-JIT mode.
3316         This patch removes the following allocations.
3317
3318         1. JITThunks
3319         2. FTLThunks
3320         3. FixedVMPoolExecutableAllocator
3321         4. noJITValueProfileSingleton since it is no longer used
3322         5. ARM disassembler should be initialized when it is used
3323         6. Wasm related data structures are accidentally allocated if VM::canUseJIT() == false &&
3324            Options::useWebAssembly() == true. Add Wasm::isSupported() function to check the both conditions.
3325
3326         * CMakeLists.txt:
3327         * JavaScriptCore.xcodeproj/project.pbxproj:
3328         * heap/Heap.cpp:
3329         (JSC::Heap::runEndPhase):
3330         * jit/ExecutableAllocator.cpp:
3331         (JSC::FixedVMPoolExecutableAllocator::~FixedVMPoolExecutableAllocator):
3332         (JSC::ExecutableAllocator::initializeUnderlyingAllocator):
3333         (JSC::ExecutableAllocator::isValid const):
3334         (JSC::ExecutableAllocator::underMemoryPressure):
3335         (JSC::ExecutableAllocator::memoryPressureMultiplier):
3336         (JSC::ExecutableAllocator::allocate):
3337         (JSC::ExecutableAllocator::isValidExecutableMemory):
3338         (JSC::ExecutableAllocator::getLock const):
3339         (JSC::ExecutableAllocator::committedByteCount):
3340         (JSC::ExecutableAllocator::dumpProfile):
3341         (JSC::startOfFixedExecutableMemoryPoolImpl):
3342         (JSC::endOfFixedExecutableMemoryPoolImpl):
3343         (JSC::ExecutableAllocator::initialize):
3344         (JSC::ExecutableAllocator::initializeAllocator): Deleted.
3345         (JSC::ExecutableAllocator::ExecutableAllocator): Deleted.
3346         (JSC::ExecutableAllocator::~ExecutableAllocator): Deleted.
3347         * jit/ExecutableAllocator.h:
3348         (JSC::ExecutableAllocatorBase::isValid const):
3349         (JSC::ExecutableAllocatorBase::underMemoryPressure):
3350         (JSC::ExecutableAllocatorBase::memoryPressureMultiplier):
3351         (JSC::ExecutableAllocatorBase::dumpProfile):
3352         (JSC::ExecutableAllocatorBase::allocate):
3353         (JSC::ExecutableAllocatorBase::setJITEnabled):
3354         (JSC::ExecutableAllocatorBase::isValidExecutableMemory):
3355         (JSC::ExecutableAllocatorBase::committedByteCount):
3356         (JSC::ExecutableAllocatorBase::getLock const):
3357         (JSC::ExecutableAllocator::isValid const): Deleted.
3358         (JSC::ExecutableAllocator::underMemoryPressure): Deleted.
3359         (JSC::ExecutableAllocator::memoryPressureMultiplier): Deleted.
3360         (JSC::ExecutableAllocator::allocate): Deleted.
3361         (JSC::ExecutableAllocator::setJITEnabled): Deleted.
3362         (JSC::ExecutableAllocator::isValidExecutableMemory): Deleted.
3363         (JSC::ExecutableAllocator::committedByteCount): Deleted.
3364         (JSC::ExecutableAllocator::getLock const): Deleted.
3365         * jsc.cpp:
3366         (functionWebAssemblyMemoryMode):
3367         * runtime/InitializeThreading.cpp:
3368         (JSC::initializeThreading):
3369         * runtime/JSGlobalObject.cpp:
3370         (JSC::JSGlobalObject::init):
3371         * runtime/JSLock.cpp:
3372         (JSC::JSLock::didAcquireLock):
3373         * runtime/Options.cpp:
3374         (JSC::recomputeDependentOptions):
3375         * runtime/VM.cpp:
3376         (JSC::enableAssembler):
3377         (JSC::VM::canUseAssembler):
3378         (JSC::VM::VM):
3379         * runtime/VM.h:
3380         * wasm/WasmCapabilities.h: Added.
3381         (JSC::Wasm::isSupported):
3382         * wasm/WasmFaultSignalHandler.cpp:
3383         (JSC::Wasm::enableFastMemory):
3384
3385 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3386
3387         [JSC] Fix JSC build with newer ICU
3388         https://bugs.webkit.org/show_bug.cgi?id=196098
3389
3390         Reviewed by Keith Miller.
3391
3392         IntlDateTimeFormat and IntlNumberFormat have switch statement over ICU's enums. However it lacks "default" clause so that
3393         the compile error occurs when a new enum value is added in ICU side. We should have "default" clause which just fallbacks
3394         "unknown"_s case. The behavior is not changed since we already have `return "unknown"_s;` statement anyway after the
3395         switch statement. This patch just suppresses a compile error.
3396
3397         * runtime/IntlDateTimeFormat.cpp:
3398         (JSC::IntlDateTimeFormat::partTypeString):
3399         * runtime/IntlNumberFormat.cpp:
3400         (JSC::IntlNumberFormat::partTypeString):
3401
3402 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
3403
3404         JSObject::putDirectIndexSlowOrBeyondVectorLength should check if indexIsSufficientlyBeyondLengthForSparseMap
3405         https://bugs.webkit.org/show_bug.cgi?id=196078
3406         <rdar://problem/35925380>
3407
3408         Reviewed by Mark Lam.
3409
3410         Unlike the other variations of putByIndex, it only checked if the index
3411         was larger than MIN_SPARSE_ARRAY_INDEX when the indexingType was
3412         ALL_BLANK_INDEXING_TYPES. This resulted in a huge butterfly being
3413         allocated for object literals (e.g. `{[9e4]: ...}`) and objects parsed
3414         from JSON.
3415
3416         * runtime/JSObject.cpp:
3417         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength):
3418
3419 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
3420
3421         CachedUnlinkedSourceCodeShape::m_provider should be a CachedRefPtr
3422         https://bugs.webkit.org/show_bug.cgi?id=196079
3423
3424         Reviewed by Saam Barati.
3425
3426         It was mistakenly cached as CachedPtr, which was leaking the decoded SourceProvider.
3427
3428         * runtime/CachedTypes.cpp:
3429         (JSC::CachedUnlinkedSourceCodeShape::encode):
3430
3431 2019-03-21  Mark Lam  <mark.lam@apple.com>
3432
3433         Placate exception check validation in operationArrayIndexOfString().
3434         https://bugs.webkit.org/show_bug.cgi?id=196067
3435         <rdar://problem/49056572>
3436
3437         Reviewed by Michael Saboff.
3438
3439         * dfg/DFGOperations.cpp:
3440
3441 2019-03-21  Xan Lopez  <xan@igalia.com>
3442
3443         [JSC][x86] Drop support for x87 floating point
3444         https://bugs.webkit.org/show_bug.cgi?id=194853
3445
3446         Reviewed by Don Olmstead.
3447
3448         Require SSE2 throughout the codebase, and remove x87 support where
3449         it was optionally available. SSE2 detection happens at compile
3450         time through a static_assert.
3451
3452         * assembler/MacroAssemblerX86.h:
3453         (JSC::MacroAssemblerX86::storeDouble):
3454         (JSC::MacroAssemblerX86::moveDoubleToInts):
3455         (JSC::MacroAssemblerX86::supportsFloatingPoint):
3456         (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
3457         (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
3458         (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
3459         * assembler/MacroAssemblerX86Common.cpp:
3460         * assembler/MacroAssemblerX86Common.h:
3461         (JSC::MacroAssemblerX86Common::moveDouble):
3462         (JSC::MacroAssemblerX86Common::loadDouble):
3463         (JSC::MacroAssemblerX86Common::loadFloat):
3464         (JSC::MacroAssemblerX86Common::storeDouble):
3465         (JSC::MacroAssemblerX86Common::storeFloat):
3466         (JSC::MacroAssemblerX86Common::convertDoubleToFloat):
3467         (JSC::MacroAssemblerX86Common::convertFloatToDouble):
3468         (JSC::MacroAssemblerX86Common::addDouble):
3469         (JSC::MacroAssemblerX86Common::addFloat):
3470         (JSC::MacroAssemblerX86Common::divDouble):
3471         (JSC::MacroAssemblerX86Common::divFloat):
3472         (JSC::MacroAssemblerX86Common::subDouble):
3473         (JSC::MacroAssemblerX86Common::subFloat):
3474         (JSC::MacroAssemblerX86Common::mulDouble):
3475         (JSC::MacroAssemblerX86Common::mulFloat):
3476         (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
3477         (JSC::MacroAssemblerX86Common::convertInt32ToFloat):
3478         (JSC::MacroAssemblerX86Common::branchDouble):
3479         (JSC::MacroAssemblerX86Common::branchFloat):
3480         (JSC::MacroAssemblerX86Common::compareDouble):
3481         (JSC::MacroAssemblerX86Common::compareFloat):
3482         (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
3483         (JSC::MacroAssemblerX86Common::truncateDoubleToInt32):
3484         (JSC::MacroAssemblerX86Common::truncateFloatToInt32):
3485         (JSC::MacroAssemblerX86Common::branchConvertDoubleToInt32):
3486         (JSC::MacroAssemblerX86Common::branchDoubleNonZero):
3487         (JSC::MacroAssemblerX86Common::branchDoubleZeroOrNaN):
3488         (JSC::MacroAssemblerX86Common::lshiftPacked):
3489         (JSC::MacroAssemblerX86Common::rshiftPacked):
3490         (JSC::MacroAssemblerX86Common::orPacked):
3491         (JSC::MacroAssemblerX86Common::move32ToFloat):
3492         (JSC::MacroAssemblerX86Common::moveFloatTo32):
3493         (JSC::MacroAssemblerX86Common::moveConditionallyDouble):
3494         (JSC::MacroAssemblerX86Common::moveConditionallyFloat):
3495         * offlineasm/x86.rb:
3496         * runtime/MathCommon.cpp:
3497         (JSC::operationMathPow):
3498
3499 2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>
3500
3501         [GLIB] User data not correctly passed to callback of functions and constructors with no parameters
3502         https://bugs.webkit.org/show_bug.cgi?id=196073
3503
3504         Reviewed by Michael Catanzaro.
3505
3506         This is because GClosure always expects a first parameter as instance. In case of functions or constructors with
3507         no parameters we insert a fake instance which is just a null pointer that is ignored by the callback. But
3508         if the function/constructor has user data the callback will expect one parameter for the user data. In that case
3509         we can simply swap instance/user data so that the fake instance will be the second argument and user data the
3510         first one.
3511
3512         * API/glib/JSCClass.cpp:
3513         (jscClassCreateConstructor): Use g_cclosure_new_swap() if parameters is empty and user data was provided.
3514         * API/glib/JSCValue.cpp:
3515         (jscValueFunctionCreate): Ditto.
3516
3517 2019-03-21  Pablo Saavedra  <psaavedra@igalia.com>
3518
3519         [JSC][32-bit] Build failure after r243232
3520         https://bugs.webkit.org/show_bug.cgi?id=196068
3521
3522         Reviewed by Mark Lam.
3523
3524         * dfg/DFGOSRExit.cpp:
3525         (JSC::DFG::reifyInlinedCallFrames):
3526         * dfg/DFGOSRExitCompilerCommon.cpp:
3527         (JSC::DFG::reifyInlinedCallFrames):
3528
3529 2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>
3530
3531         [GLib] Returning G_TYPE_OBJECT from a method does not work
3532         https://bugs.webkit.org/show_bug.cgi?id=195574
3533
3534         Reviewed by Michael Catanzaro.
3535
3536         Add more documentation to clarify the ownership of wrapped objects when created and when returned by functions.
3537
3538         * API/glib/JSCCallbackFunction.cpp:
3539         (JSC::JSCCallbackFunction::construct): Also allow to return boxed types from a constructor.
3540         * API/glib/JSCClass.cpp:
3541         * API/glib/JSCValue.cpp:
3542
3543 2019-03-21  Mark Lam  <mark.lam@apple.com>
3544
3545         Cap length of an array with spread to MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH.
3546         https://bugs.webkit.org/show_bug.cgi?id=196055
3547         <rdar://problem/49067448>
3548
3549         Reviewed by Yusuke Suzuki.
3550
3551         We are doing this because:
3552         1. We expect the array to be densely packed.
3553         2. SpeculativeJIT::compileAllocateNewArrayWithSize() (and the FTL equivalent)
3554            expects the array length to be less than MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH
3555            if we don't want to use an ArrayStorage shape.
3556         3. There's no reason why an array with spread needs to be that large anyway.
3557            MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH is plenty.
3558
3559         In this patch, we also add a debug assert in compileAllocateNewArrayWithSize() and
3560         emitAllocateButterfly() to check for overflows.
3561
3562         * assembler/AbortReason.h:
3563         * dfg/DFGOperations.cpp:
3564         * dfg/DFGSpeculativeJIT.cpp:
3565         (JSC::DFG::SpeculativeJIT::compileCreateRest):
3566         (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
3567         (JSC::DFG::SpeculativeJIT::emitAllocateButterfly):
3568         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
3569         * ftl/FTLLowerDFGToB3.cpp:
3570         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
3571         * runtime/ArrayConventions.h:
3572         * runtime/CommonSlowPaths.cpp:
3573         (JSC::SLOW_PATH_DECL):
3574
3575 2019-03-20  Yusuke Suzuki  <ysuzuki@apple.com>
3576
3577         [JSC] Use finalizer in JSGlobalLexicalEnvironment and JSGlobalObject
3578         https://bugs.webkit.org/show_bug.cgi?id=195992
3579
3580         Reviewed by Keith Miller and Mark Lam.
3581
3582         JSGlobalLexicalEnvironment and JSGlobalObject have their own CompleteSubspace to call destructors while they are not inheriting JSDestructibleObject.
3583         But it is too costly since (1) it requires CompleteSubspace in VM, (2) both objects allocate MarkedBlocks while # of them are really small.
3584
3585         Instead of using CompleteSubspace, we just set finalizers for them. Since these objects are rarely allocated, setting finalizers does not show
3586         memory / performance problems (actually, previously we used finalizer for ArrayPrototype due to the same reason, and it does not show any problems).
3587
3588         And we also add following two changes to JSSegmentedVariableObject.
3589
3590         1. Remove one boolean used for debugging in Release build. It enlarges sizeof(JSSegmentedVariableObject) and allocates one more MarkedBlock.
3591         2. Use cellLock() instead.
3592
3593         * CMakeLists.txt:
3594         * JavaScriptCore.xcodeproj/project.pbxproj:
3595         * Sources.txt:
3596         * runtime/JSSegmentedVariableObject.cpp:
3597         (JSC::JSSegmentedVariableObject::findVariableIndex):
3598         (JSC::JSSegmentedVariableObject::addVariables):
3599         (JSC::JSSegmentedVariableObject::visitChildren):
3600         (JSC::JSSegmentedVariableObject::~JSSegmentedVariableObject):
3601         (JSC::JSSegmentedVariableObject::finishCreation):
3602         * runtime/JSSegmentedVariableObject.h:
3603         (JSC::JSSegmentedVariableObject::subspaceFor): Deleted.
3604         * runtime/JSSegmentedVariableObjectHeapCellType.cpp: Removed.
3605         * runtime/JSSegmentedVariableObjectHeapCellType.h: Removed.
3606         * runtime/StringIteratorPrototype.cpp:
3607         * runtime/VM.cpp:
3608         (JSC::VM::VM):
3609         * runtime/VM.h:
3610
3611 2019-03-20  Saam Barati  <sbarati@apple.com>
3612
3613         DFG::AbstractValue::validateOSREntry is wrong when isHeapTop and the incoming value is Empty
3614         https://bugs.webkit.org/show_bug.cgi?id=195721
3615
3616         Reviewed by Filip Pizlo.
3617
3618         There was a check in AbstractValue::validateOSREntry where it checked
3619         if isHeapTop(), and if so, just returned true. However, this is wrong
3620         if the value we're checking against is the empty value, since HeapTop
3621         does not include the Empty value. Instead, this check should be
3622         isBytecodeTop(), which does account for the empty value.
3623         
3624         This patch also does a couple of other things:
3625         - For our OSR entry AbstractValues, we were using HeapTop to mark
3626          a dead value. That is now changed to BytecodeTop. (The idea here
3627          is just to have validateOSREntry return early.)
3628         - It wasn't obvious to me how I could make this fail in JS code.
3629          The symptom we'd end up seeing is something like a nullptr derefernece
3630          from forgetting to do a TDZ check. Instead, I've added a unit test.
3631          This unit test lives in a new test file: testdfg. testdfg is similar
3632          to testb3/testair/testapi.
3633
3634         * JavaScriptCore.xcodeproj/project.pbxproj:
3635         * bytecode/SpeculatedType.h:
3636         * dfg/DFGAbstractValue.h:
3637         (JSC::DFG::AbstractValue::isBytecodeTop const):
3638         (JSC::DFG::AbstractValue::validateOSREntryValue const):
3639         * dfg/testdfg.cpp: Added.
3640         (hiddenTruthBecauseNoReturnIsStupid):
3641         (usage):
3642         (JSC::DFG::testEmptyValueDoesNotValidateWithHeapTop):
3643         (JSC::DFG::run):
3644         (run):
3645         (main):
3646         * shell/CMakeLists.txt:
3647
3648 2019-03-20  Saam Barati  <sbarati@apple.com>
3649
3650         typeOfDoubleSum is wrong for when NaN can be produced
3651         https://bugs.webkit.org/show_bug.cgi?id=196030
3652
3653         Reviewed by Filip Pizlo.
3654
3655         We were using typeOfDoubleSum(SpeculatedType, SpeculatedType) for add/sub/mul.
3656         It assumed that the only way the resulting type could be NaN is if one of
3657         the inputs were NaN. However, this is wrong. NaN can be produced in at least
3658         these cases:
3659           Infinity - Infinity
3660           Infinity + (-Infinity)
3661           Infinity * 0
3662
3663         * bytecode/SpeculatedType.cpp:
3664         (JSC::typeOfDoubleSumOrDifferenceOrProduct):
3665         (JSC::typeOfDoubleSum):
3666         (JSC::typeOfDoubleDifference):
3667         (JSC::typeOfDoubleProduct):
3668
3669 2019-03-20  Simon Fraser  <simon.fraser@apple.com>
3670
3671         Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
3672         https://bugs.webkit.org/show_bug.cgi?id=196049
3673
3674         Reviewed by Tim Horton.
3675
3676         This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
3677         overflow scrolling in general, so rename it.
3678
3679         * Configurations/FeatureDefines.xcconfig:
3680
3681 2019-03-20  Saam Barati  <sbarati@apple.com>
3682
3683         GetCallee does not report the correct type in AI
3684         https://bugs.webkit.org/show_bug.cgi?id=195981
3685
3686         Reviewed by Yusuke Suzuki.
3687
3688         I found this as part of my work in:
3689         https://bugs.webkit.org/show_bug.cgi?id=195924
3690         
3691         I'm not sure how to write a test for it.
3692         
3693         GetCallee was always reporting that the result is SpecFunction. However,
3694         for eval, it may result in just a JSCallee object, which is not a JSFunction.
3695
3696         * dfg/DFGAbstractInterpreterInlines.h:
3697         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
3698
3699 2019-03-20  Mark Lam  <mark.lam@apple.com>
3700
3701         Open source arm64e code.
3702         https://bugs.webkit.org/show_bug.cgi?id=196012
3703         <rdar://problem/49066237>
3704
3705         Reviewed by Keith Miller.
3706
3707         * JavaScriptCore.xcodeproj/project.pbxproj:
3708         * Sources.txt:
3709         * assembler/ARM64EAssembler.h: Added.
3710         (JSC::ARM64EAssembler::encodeGroup1):
3711         (JSC::ARM64EAssembler::encodeGroup2):
3712         (JSC::ARM64EAssembler::encodeGroup4):
3713         (JSC::ARM64EAssembler::pacia1716):
3714         (JSC::ARM64EAssembler::pacib1716):
3715         (JSC::ARM64EAssembler::autia1716):
3716         (JSC::ARM64EAssembler::autib1716):
3717         (JSC::ARM64EAssembler::paciaz):
3718         (JSC::ARM64EAssembler::paciasp):
3719         (JSC::ARM64EAssembler::pacibz):
3720         (JSC::ARM64EAssembler::pacibsp):
3721         (JSC::ARM64EAssembler::autiaz):
3722         (JSC::ARM64EAssembler::autiasp):
3723         (JSC::ARM64EAssembler::autibz):
3724         (JSC::ARM64EAssembler::autibsp):
3725         (JSC::ARM64EAssembler::xpaclri):
3726         (JSC::ARM64EAssembler::pacia):
3727         (JSC::ARM64EAssembler::pacib):
3728         (JSC::ARM64EAssembler::pacda):
3729         (JSC::ARM64EAssembler::pacdb):
3730         (JSC::ARM64EAssembler::autia):
3731         (JSC::ARM64EAssembler::autib):
3732         (JSC::ARM64EAssembler::autda):
3733         (JSC::ARM64EAssembler::autdb):
3734         (JSC::ARM64EAssembler::paciza):
3735         (JSC::ARM64EAssembler::pacizb):
3736         (JSC::ARM64EAssembler::pacdza):
3737         (JSC::ARM64EAssembler::pacdzb):
3738         (JSC::ARM64EAssembler::autiza):
3739         (JSC::ARM64EAssembler::autizb):
3740         (JSC::ARM64EAssembler::autdza):
3741         (JSC::ARM64EAssembler::autdzb):
3742         (JSC::ARM64EAssembler::xpaci):
3743         (JSC::ARM64EAssembler::xpacd):
3744         (JSC::ARM64EAssembler::pacga):
3745         (JSC::ARM64EAssembler::braa):
3746         (JSC::ARM64EAssembler::brab):
3747         (JSC::ARM64EAssembler::blraa):
3748         (JSC::ARM64EAssembler::blrab):
3749         (JSC::ARM64EAssembler::braaz):
3750         (JSC::ARM64EAssembler::brabz):
3751         (JSC::ARM64EAssembler::blraaz):
3752         (JSC::ARM64EAssembler::blrabz):
3753         (JSC::ARM64EAssembler::retaa):
3754         (JSC::ARM64EAssembler::retab):
3755         (JSC::ARM64EAssembler::eretaa):
3756         (JSC::ARM64EAssembler::eretab):
3757         (JSC::ARM64EAssembler::linkPointer):
3758         (JSC::ARM64EAssembler::repatchPointer):
3759         (JSC::ARM64EAssembler::setPointer):
3760         (JSC::ARM64EAssembler::readPointer):
3761         (JSC::ARM64EAssembler::readCallTarget):
3762         (JSC::ARM64EAssembler::ret):
3763         * assembler/MacroAssembler.cpp:
3764         * assembler/MacroAssembler.h:
3765         * assembler/MacroAssemblerARM64.cpp:
3766         * assembler/MacroAssemblerARM64E.h: Added.
3767         (JSC::MacroAssemblerARM64E::tagReturnAddress):
3768         (JSC::MacroAssemblerARM64E::untagReturnAddress):
3769         (JSC::MacroAssemblerARM64E::tagPtr):
3770         (JSC::MacroAssemblerARM64E::untagPtr):
3771         (JSC::MacroAssemblerARM64E::removePtrTag):
3772         (JSC::MacroAssemblerARM64E::callTrustedPtr):
3773         (JSC::MacroAssemblerARM64E::call):
3774         (JSC::MacroAssemblerARM64E::callRegister):
3775         (JSC::MacroAssemblerARM64E::jump):
3776         * dfg/DFGOSRExit.cpp:
3777         (JSC::DFG::reifyInlinedCallFrames):
3778         * dfg/DFGOSRExitCompilerCommon.cpp:
3779         (JSC::DFG::reifyInlinedCallFrames):
3780         * ftl/FTLThunks.cpp:
3781         (JSC::FTL::genericGenerationThunkGenerator):
3782         * jit/CCallHelpers.h:
3783         (JSC::CCallHelpers::prepareForTailCallSlow):
3784         * jit/CallFrameShuffler.cpp:
3785         (JSC::CallFrameShuffler::prepareForTailCall):
3786         * jit/ExecutableAllocator.cpp:
3787         (JSC::ExecutableAllocator::allocate):
3788         * jit/ThunkGenerators.cpp:
3789         (JSC::arityFixupGenerator):
3790         * llint/LLIntOfflineAsmConfig.h:
3791         * llint/LowLevelInterpreter.asm:
3792         * llint/LowLevelInterpreter64.asm:
3793         * runtime/ClassInfo.h:
3794         * runtime/InitializeThreading.cpp:
3795         (JSC::initializeThreading):
3796         * runtime/JSCPtrTag.cpp: Added.
3797         (JSC::tagForPtr):
3798         (JSC::ptrTagName):
3799         (JSC::initializePtrTagLookup):
3800         * runtime/JSCPtrTag.h:
3801         (JSC::initializePtrTagLookup):
3802         * runtime/Options.cpp:
3803         (JSC::recomputeDependentOptions):
3804
3805 2019-03-20  Tadeu Zagallo  <tzagallo@apple.com>
3806
3807         JSC::createError needs to check for OOM in errorDescriptionForValue
3808         https://bugs.webkit.org/show_bug.cgi?id=196032
3809         <rdar://problem/46842740>
3810
3811         Reviewed by Mark Lam.
3812
3813         We were missing exceptions checks at two levels:
3814         - In errorDescriptionForValue, when the value is a string, we should
3815           check that JSString::value returns a valid string, since we might run
3816           out of memory if it is a rope and we need to resolve it.
3817         - In createError, we should check for the result of errorDescriptionForValue
3818           before concatenating it with the message provided by the caller.
3819
3820         * runtime/ExceptionHelpers.cpp:
3821         (JSC::errorDescriptionForValue):
3822         (JSC::createError):
3823         * runtime/ExceptionHelpers.h:
3824
3825 2019-03-20  Devin Rousso  <drousso@apple.com>
3826
3827         Web Inspector: DOM: include window as part of any event listener chain
3828         https://bugs.webkit.org/show_bug.cgi?id=195730
3829         <rdar://problem/48916872>
3830
3831         Reviewed by Timothy Hatcher.
3832
3833         * inspector/protocol/DOM.json:
3834         Modify `DOM.getEventListenersForNode` to not save the handler object, as that was never
3835         used by the frontend. Add an `onWindow` optional property to `DOM.EventListener` that is set
3836         when the event listener was retrieved from the `window` object.
3837
3838 2019-03-20  Devin Rousso  <drousso@apple.com>
3839
3840         Web Inspector: Runtime: lazily create the agent
3841         https://bugs.webkit.org/show_bug.cgi?id=195972
3842         <rdar://problem/49039655>
3843
3844         Reviewed by Timothy Hatcher.
3845
3846         * inspector/JSGlobalObjectInspectorController.cpp:
3847         (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
3848         (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
3849
3850         * inspector/agents/InspectorRuntimeAgent.h:
3851         (Inspector::InspectorRuntimeAgent::enabled): Deleted.
3852         * inspector/agents/InspectorRuntimeAgent.cpp:
3853         (Inspector::InspectorRuntimeAgent::didCreateFrontendAndBackend): Added.
3854         (Inspector::InspectorRuntimeAgent::willDestroyFrontendAndBackend):
3855
3856         * inspector/agents/JSGlobalObjectRuntimeAgent.h:
3857         * inspector/agents/JSGlobalObjectRuntimeAgent.cpp:
3858         (Inspector::JSGlobalObjectRuntimeAgent::didCreateFrontendAndBackend): Deleted.
3859
3860 2019-03-20  Michael Saboff  <msaboff@apple.com>
3861
3862         JSC test crash: stress/dont-strength-reduce-regexp-with-compile-error.js.default
3863         https://bugs.webkit.org/show_bug.cgi?id=195906
3864
3865         Reviewed by Mark Lam.
3866
3867         The problem here as that we may successfully parsed a RegExp without running out of stack,
3868         but later run out of stack when trying to JIT compile the same expression.
3869
3870         Added a check for available stack space when we call into one of the parenthesis compilation
3871         functions that recurse.  When we don't have enough stack space to recurse, we fail the JIT
3872         compilation and let the interpreter handle the expression.
3873