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