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