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