47fb917daa93a664768b042d527f67c2e8267d73
[WebKit.git] / Source / JavaScriptCore / ChangeLog
1 2019-03-11  Justin Fan  <justin_fan@apple.com>
2
3         [Web GPU] Update GPUSwapChainDescriptor, GPUSwapChain and implement GPUCanvasContext
4         https://bugs.webkit.org/show_bug.cgi?id=194406
5         <rdar://problem/47892466>
6
7         Reviewed by Myles C. Maxfield.
8
9         Added WebGPU to inspector context types.
10
11         * inspector/protocol/Canvas.json:
12         * inspector/scripts/codegen/generator.py:
13
14 2019-03-11  Yusuke Suzuki  <ysuzuki@apple.com>
15
16         [JSC] Reduce # of structures in JSGlobalObject initialization
17         https://bugs.webkit.org/show_bug.cgi?id=195498
18
19         Reviewed by Darin Adler.
20
21         This patch reduces # of structure allocations in JSGlobalObject initialization. Now it becomes 141, it fits in one
22         MarkedBlock and this patch drops one MarkedBlock used for Structure previously.
23
24         * CMakeLists.txt:
25         * DerivedSources-output.xcfilelist:
26         * DerivedSources.make:
27         * JavaScriptCore.xcodeproj/project.pbxproj:
28         * runtime/ArrayIteratorPrototype.cpp:
29         (JSC::ArrayIteratorPrototype::finishCreation): ArrayIteratorPrototype, MapIteratorPrototype, and StringIteratorPrototype's
30         "next" properties are referenced by JSGlobalObject::init, and it causes reification of the lazy "next" property and structure
31         transition anyway. So we should put it eagerly "without-transition" configuration to avoid one structure transition.
32
33         * runtime/ArrayPrototype.cpp:
34         (JSC::ArrayPrototype::finishCreation): @@unscopable object's structure should be dictionary because (1) it is used as a dictionary
35         in with-scope-resolution and (2) since with-scope-resolution is C++ runtime function anyway, non-dictionary structure does not add
36         any performance benefit. This change saves several structures that are not useful.
37
38         * runtime/ClonedArguments.cpp:
39         (JSC::ClonedArguments::createStructure): Bake CloneArguments's structure with 'without-transition' manner.
40
41         * runtime/JSGlobalObject.cpp:
42         (JSC::JSGlobalObject::init): Previously we are always call resetProtoype at the end of JSGlobalObject::init. But it is not necessary
43         since we do not change [[Prototype]] of JSGlobalObject. All we want is (1) fixupPrototypeChainWithObjectPrototype's operation and (2) setGlobalThis
44         operation. Since setGlobalThis part is done in JSGlobalObject::finishCreation, fixupPrototypeChainWithObjectPrototype is only the thing
45         we should do here.
46
47         (JSC::JSGlobalObject::fixupPrototypeChainWithObjectPrototype):
48         (JSC::JSGlobalObject::resetPrototype): If the [[Prototype]] is the same to the current [[Prototype]], we can skip the operation.
49
50         * runtime/JSGlobalObject.h:
51         * runtime/MapIteratorPrototype.cpp:
52         (JSC::MapIteratorPrototype::finishCreation):
53         * runtime/NullGetterFunction.h:
54         * runtime/NullSetterFunction.h: Since structures of them are allocated per JSGlobalObject and they are per-JSGlobalObject,
55         we can use without-transition property addition.
56
57         * runtime/StringIteratorPrototype.cpp:
58         (JSC::StringIteratorPrototype::finishCreation):
59         * runtime/VM.cpp:
60         (JSC::VM::VM):
61         (JSC::VM::setIteratorStructureSlow):
62         (JSC::VM::mapIteratorStructureSlow): These structures are only used in WebCore's main thread.
63         * runtime/VM.h:
64         (JSC::VM::setIteratorStructure):
65         (JSC::VM::mapIteratorStructure):
66
67 2019-03-08  Yusuke Suzuki  <ysuzuki@apple.com>
68
69         [JSC] BuiltinExecutables should behave like a WeakSet instead of generic WeakHandleOwner for memory footprint
70         https://bugs.webkit.org/show_bug.cgi?id=195508
71
72         Reviewed by Darin Adler.
73
74         Weak<> is not cheap in terms of memory footprint. We allocate WeakBlock (256 bytes) for book-keeping Weak<>.
75         Currently BuiltinExecutables has 203 Weak<> members and many WeakBlocks are actually allocated because
76         many UnlinkedFunctionExecutables in BuiltinExecutables are allocated during JSGlobalObject initialization process.
77
78         This patch changes two things in BuiltinExecutables.
79
80         1. Previously we have m_xxxSourceCode fields too. But we do not need to keep it since we know how to produce it when it is required.
81            We generate SourceCode in xxxSourceCode() method instead of just returning m_xxxSourceCode. This reduces sizeof(BuiltinExecutables) 24 x 203 = 4KB.
82
83         2. Instead of using Weak<>, BuiltinExecutables holds raw array of UnlinkedFunctionExecutable*. And Heap::finalizeUnconditionalFinalizers() correctly clears dead executables.
84            This is similar to JSWeakSet implementation. And it saves WeakBlock allocations.
85
86         * builtins/BuiltinExecutables.cpp:
87         (JSC::BuiltinExecutables::BuiltinExecutables):
88         (JSC::BuiltinExecutables::finalizeUnconditionally):
89         (JSC::JSC_FOREACH_BUILTIN_CODE): Deleted.
90         (JSC::BuiltinExecutables::finalize): Deleted.
91         * builtins/BuiltinExecutables.h:
92         (JSC::BuiltinExecutables::static_cast<unsigned>):
93         (): Deleted.
94         * heap/Heap.cpp:
95         (JSC::Heap::finalizeUnconditionalFinalizers):
96
97 2019-03-11  Robin Morisset  <rmorisset@apple.com>
98
99         IntlDateTimeFormat can be shrunk by 32 bytes
100         https://bugs.webkit.org/show_bug.cgi?id=195504
101
102         Reviewed by Darin Adler.
103
104         * runtime/IntlDateTimeFormat.h:
105
106 2019-03-11  Robin Morisset  <rmorisset@apple.com>
107
108         IntlCollator can be shrunk by 16 bytes
109         https://bugs.webkit.org/show_bug.cgi?id=195503
110
111         Reviewed by Darin Adler.
112
113         * runtime/IntlCollator.h:
114
115 2019-03-11  Robin Morisset  <rmorisset@apple.com>
116
117         IntlNumberFormat can be shrunk by 16 bytes
118         https://bugs.webkit.org/show_bug.cgi?id=195505
119
120         Reviewed by Darin Adler.
121
122         * runtime/IntlNumberFormat.h:
123
124 2019-03-11  Caio Lima  <ticaiolima@gmail.com>
125
126         [ESNext][BigInt] Implement "~" unary operation
127         https://bugs.webkit.org/show_bug.cgi?id=182216
128
129         Reviewed by Keith Miller.
130
131         This patch is adding support of BigInt into op_bitnot operations. In
132         addition, we are changing ArithBitNot to handle only Number operands,
133         while introducing a new node named ValueBitNot to handle Untyped and
134         BigInt. This node follows the same approach we are doing into other
135         arithimetic operations into DFG.
136
137         * dfg/DFGAbstractInterpreterInlines.h:
138         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
139
140         It is possible that fixup and prediction propagation don't convert a
141         ValueBitNot(ConstInt32) into ArithBitNot(ConstInt32) because these
142         analysis are conservative. In such case, we are adding constant
143         folding rules to ValueBitNot AI.
144
145         * dfg/DFGBackwardsPropagationPhase.cpp:
146         (JSC::DFG::BackwardsPropagationPhase::propagate):
147
148         ValueBitNot has same rules as ArithBitNot on backwards propagation.
149
150         * dfg/DFGByteCodeParser.cpp:
151         (JSC::DFG::ByteCodeParser::parseBlock):
152
153         We can emit ArithBitNot if we know that operand of op_bitnot is a
154         Number or any int. Otherwise we fallback to ValueBitNot and rely on
155         fixup to convert the node to ArithBitNot when it is possible.
156         ValueBitNot uses heap prediction on prediction propagation and we
157         collect its type from op_bitnot's value profiler.
158
159         * dfg/DFGClobberize.h:
160         (JSC::DFG::clobberize):
161
162         When we have the case with ValueBitNot(BigInt), we don't clobberize
163         world.
164
165         * dfg/DFGDoesGC.cpp:
166         (JSC::DFG::doesGC):
167
168         ValueBitNot can GC on BigIntUse because, right now, all bitNot
169         operation allocates temporary BigInts to perform calculations and it
170         can potentially trigger GC.
171
172         * dfg/DFGFixupPhase.cpp:
173         (JSC::DFG::FixupPhase::fixupNode):
174
175         ValueBitNot is responsible do handle BigIntUse and UntypedUse. To all
176         other uses, we fallback to ArithBitNot.
177
178         * dfg/DFGNode.h:
179         (JSC::DFG::Node::hasHeapPrediction):
180         * dfg/DFGNodeType.h:
181         * dfg/DFGOperations.cpp:
182         (JSC::DFG::bitwiseBinaryOp):
183
184         This template function is abstracting the new semantics of numeric
185         values operations on bitwise operations. These operations usually
186         folow these steps:
187
188             1. rhsNumeric = GetInt32OrBigInt(rhs)
189             2. lhsNumeric = GetInt32OrBigInt(lhs)
190             3. trhow error if TypeOf(rhsNumeric) != TypeOf(lhsNumeric)
191             4. return BigInt::bitwiseOp(bitOp, rhs, lhs) if TypeOf(lhsNumeric) == BigInt
192             5. return rhs <int32BitOp> lhs
193
194         Since we have almost the same code for every bitwise op,
195         we use such template to avoid code duplication. The template receives
196         Int32 and BigInt operations as parameter. Error message is received as
197         `const char*` instead of `String&` to avoid String allocation even when
198         there is no error to throw.
199
200         * dfg/DFGOperations.h:
201         * dfg/DFGPredictionPropagationPhase.cpp:
202         * dfg/DFGSafeToExecute.h:
203         (JSC::DFG::safeToExecute):
204         * dfg/DFGSpeculativeJIT.cpp:
205         (JSC::DFG::SpeculativeJIT::compileValueBitNot):
206
207         ValueBitNot generates speculative code for BigIntUse and this code is a
208         call to `operationBitNotBigInt`. This operation is faster than
209         `operationValueBitNot` because there is no need to check types of
210         operands and execute properly operation. We still need to check
211         exceptions after `operationBitNotBigInt` because it can throw OOM.
212
213         (JSC::DFG::SpeculativeJIT::compileBitwiseNot):
214         * dfg/DFGSpeculativeJIT.h:
215         * dfg/DFGSpeculativeJIT32_64.cpp:
216         (JSC::DFG::SpeculativeJIT::compile):
217         * dfg/DFGSpeculativeJIT64.cpp:
218         (JSC::DFG::SpeculativeJIT::compile):
219         * ftl/FTLCapabilities.cpp:
220         (JSC::FTL::canCompile):
221         * ftl/FTLLowerDFGToB3.cpp:
222         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
223         (JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot):
224         (JSC::FTL::DFG::LowerDFGToB3::compileArithBitNot):
225         * runtime/CommonSlowPaths.cpp:
226         (JSC::SLOW_PATH_DECL):
227         * runtime/JSBigInt.cpp:
228         (JSC::JSBigInt::bitwiseNot):
229         * runtime/JSBigInt.h:
230
231 2019-03-11  Darin Adler  <darin@apple.com>
232
233         Specify fixed precision explicitly to prepare to change String::number and StringBuilder::appendNumber floating point behavior
234         https://bugs.webkit.org/show_bug.cgi?id=195533
235
236         Reviewed by Brent Fulgham.
237
238         * API/tests/ExecutionTimeLimitTest.cpp:
239         (testExecutionTimeLimit): Use appendFixedPrecisionNumber.
240         * runtime/NumberPrototype.cpp:
241         (JSC::numberProtoFuncToPrecision): Use numberToStringFixedPrecision.
242         * runtime/Options.cpp:
243         (JSC::Option::dump const): Use appendFixedPrecisionNumber.
244
245 2019-03-10  Ross Kirsling  <ross.kirsling@sony.com>
246
247         Invalid flags in a RegExp literal should be an early SyntaxError
248         https://bugs.webkit.org/show_bug.cgi?id=195514
249
250         Reviewed by Darin Adler.
251
252         Currently we're throwing a *runtime* SyntaxError; this should occur at parse time. 
253
254           12.2.8.1 Static Semantics: Early Errors
255             PrimaryExpression : RegularExpressionLiteral
256               - It is a Syntax Error if BodyText of RegularExpressionLiteral cannot be recognized
257                 using the goal symbol Pattern of the ECMAScript RegExp grammar specified in 21.2.1.
258               - It is a Syntax Error if FlagText of RegularExpressionLiteral contains any code points
259                 other than "g", "i", "m",  "s", "u", or "y", or if it contains the same code point more than once.
260
261         In fixing this, let's also move flag handling from runtime/ to yarr/.
262
263         * yarr/YarrSyntaxChecker.cpp:
264         (JSC::Yarr::checkSyntax):
265         Check flags before checking pattern.
266
267         * CMakeLists.txt:
268         * JavaScriptCore.xcodeproj/project.pbxproj:
269         * Sources.txt:
270         * bytecompiler/NodesCodegen.cpp:
271         (JSC::RegExpNode::emitBytecode):
272         * inspector/ContentSearchUtilities.cpp:
273         (Inspector::ContentSearchUtilities::findMagicComment):
274         * runtime/CachedTypes.cpp:
275         * runtime/RegExp.cpp:
276         (JSC::RegExp::RegExp):
277         (JSC::RegExp::createWithoutCaching):
278         (JSC::RegExp::create):
279         (JSC::regExpFlags): Deleted.
280         * runtime/RegExp.h:
281         * runtime/RegExpCache.cpp:
282         (JSC::RegExpCache::lookupOrCreate):
283         (JSC::RegExpCache::ensureEmptyRegExpSlow):
284         * runtime/RegExpCache.h:
285         * runtime/RegExpConstructor.cpp:
286         (JSC::toFlags):
287         (JSC::regExpCreate):
288         (JSC::constructRegExp):
289         * runtime/RegExpKey.h:
290         (JSC::RegExpKey::RegExpKey):
291         (WTF::HashTraits<JSC::RegExpKey>::constructDeletedValue):
292         (WTF::HashTraits<JSC::RegExpKey>::isDeletedValue):
293         (): Deleted.
294         * runtime/RegExpPrototype.cpp:
295         (JSC::regExpProtoFuncCompile):
296         * testRegExp.cpp:
297         (parseRegExpLine):
298         * yarr/RegularExpression.cpp:
299         (JSC::Yarr::RegularExpression::Private::compile):
300         * yarr/YarrFlags.cpp: Added.
301         (JSC::Yarr::parseFlags):
302         * yarr/YarrFlags.h: Added.
303         * yarr/YarrInterpreter.h:
304         (JSC::Yarr::BytecodePattern::ignoreCase const):
305         (JSC::Yarr::BytecodePattern::multiline const):
306         (JSC::Yarr::BytecodePattern::sticky const):
307         (JSC::Yarr::BytecodePattern::unicode const):
308         (JSC::Yarr::BytecodePattern::dotAll const):
309         * yarr/YarrPattern.cpp:
310         (JSC::Yarr::YarrPattern::compile):
311         (JSC::Yarr::YarrPattern::YarrPattern):
312         (JSC::Yarr::YarrPattern::dumpPattern):
313         * yarr/YarrPattern.h:
314         (JSC::Yarr::YarrPattern::global const):
315         (JSC::Yarr::YarrPattern::ignoreCase const):
316         (JSC::Yarr::YarrPattern::multiline const):
317         (JSC::Yarr::YarrPattern::sticky const):
318         (JSC::Yarr::YarrPattern::unicode const):
319         (JSC::Yarr::YarrPattern::dotAll const):
320         Move flag handling to Yarr and modernize API.
321
322 2019-03-09  Robin Morisset  <rmorisset@apple.com>
323
324         Compilation can be shrunk by 8 bytes
325         https://bugs.webkit.org/show_bug.cgi?id=195500
326
327         Reviewed by Mark Lam.
328
329         * profiler/ProfilerCompilation.cpp:
330         (JSC::Profiler::Compilation::Compilation):
331         * profiler/ProfilerCompilation.h:
332
333 2019-03-09  Robin Morisset  <rmorisset@apple.com>
334
335         BinarySwitch can be shrunk by 8 bytes
336         https://bugs.webkit.org/show_bug.cgi?id=195493
337
338         Reviewed by Mark Lam.
339
340         * jit/BinarySwitch.cpp:
341         (JSC::BinarySwitch::BinarySwitch):
342         * jit/BinarySwitch.h:
343
344 2019-03-09  Robin Morisset  <rmorisset@apple.com>
345
346         AsyncStackTrace can be shrunk by 8 bytes
347         https://bugs.webkit.org/show_bug.cgi?id=195491
348
349         Reviewed by Mark Lam.
350
351         * inspector/AsyncStackTrace.h:
352
353 2019-03-08  Mark Lam  <mark.lam@apple.com>
354
355         Stack overflow crash in JSC::JSObject::hasInstance.
356         https://bugs.webkit.org/show_bug.cgi?id=195458
357         <rdar://problem/48710195>
358
359         Reviewed by Yusuke Suzuki.
360
361         * runtime/JSObject.cpp:
362         (JSC::JSObject::hasInstance):
363
364 2019-03-08  Robin Morisset  <rmorisset@apple.com>
365
366         IntegerCheckCombiningPhase::Range can be shrunk by 8 bytes
367         https://bugs.webkit.org/show_bug.cgi?id=195487
368
369         Reviewed by Saam Barati.
370
371         * dfg/DFGIntegerCheckCombiningPhase.cpp:
372
373 2019-03-08  Robin Morisset  <rmorisset@apple.com>
374
375         TypeLocation can be shrunk by 8 bytes
376         https://bugs.webkit.org/show_bug.cgi?id=195483
377
378         Reviewed by Mark Lam.
379
380         * bytecode/TypeLocation.h:
381         (JSC::TypeLocation::TypeLocation):
382
383 2019-03-08  Robin Morisset  <rmorisset@apple.com>
384
385         GetByIdStatus can be shrunk by 16 bytes
386         https://bugs.webkit.org/show_bug.cgi?id=195480
387
388         Reviewed by Saam Barati.
389
390         8 bytes from reordering fields
391         8 more bytes by making the enum State only use 1 byte.
392
393         * bytecode/GetByIdStatus.cpp:
394         (JSC::GetByIdStatus::GetByIdStatus):
395         * bytecode/GetByIdStatus.h:
396
397 2019-03-08  Robin Morisset  <rmorisset@apple.com>
398
399         PutByIdVariant can be shrunk by 8 bytes
400         https://bugs.webkit.org/show_bug.cgi?id=195482
401
402         Reviewed by Mark Lam.
403
404         * bytecode/PutByIdVariant.h:
405         (JSC::PutByIdVariant::PutByIdVariant):
406
407 2019-03-08  Yusuke Suzuki  <ysuzuki@apple.com>
408
409         Unreviewed, follow-up after r242568
410
411         Robin pointed that calculation of `numberOfChildren` and `nonEmptyIndex` is unnecessary.
412
413         * dfg/DFGAbstractInterpreterInlines.h:
414         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
415
416 2019-03-08  Yusuke Suzuki  <ysuzuki@apple.com>
417
418         [JSC] We should have more WithoutTransition functions which are usable for JSGlobalObject initialization
419         https://bugs.webkit.org/show_bug.cgi?id=195447
420
421         Reviewed by Filip Pizlo.
422
423         This patch reduces # of unnecessary structure transitions in JSGlobalObject initialization to avoid unnecessary allocations
424         caused by Structure transition. One example is WeakBlock allocation for StructureTransitionTable.
425         To achieve this, we (1) add putDirectNonIndexAccessorWithoutTransition and putDirectNativeIntrinsicGetterWithoutTransition
426         to add accessor properties without transition, and (2) add NameAdditionMode::WithoutStructureTransition mode to InternalFunction::finishCreation
427         to use `putDirectWithoutTransition` instead of `putDirect`.
428
429         * inspector/JSInjectedScriptHostPrototype.cpp:
430         (Inspector::JSInjectedScriptHostPrototype::finishCreation):
431         * inspector/JSJavaScriptCallFramePrototype.cpp:
432         (Inspector::JSJavaScriptCallFramePrototype::finishCreation):
433         * runtime/ArrayConstructor.cpp:
434         (JSC::ArrayConstructor::finishCreation):
435         * runtime/AsyncFunctionConstructor.cpp:
436         (JSC::AsyncFunctionConstructor::finishCreation):
437         * runtime/AsyncGeneratorFunctionConstructor.cpp:
438         (JSC::AsyncGeneratorFunctionConstructor::finishCreation):
439         * runtime/BigIntConstructor.cpp:
440         (JSC::BigIntConstructor::finishCreation):
441         * runtime/BooleanConstructor.cpp:
442         (JSC::BooleanConstructor::finishCreation):
443         * runtime/DateConstructor.cpp:
444         (JSC::DateConstructor::finishCreation):
445         * runtime/ErrorConstructor.cpp:
446         (JSC::ErrorConstructor::finishCreation):
447         * runtime/FunctionConstructor.cpp:
448         (JSC::FunctionConstructor::finishCreation):
449         * runtime/FunctionPrototype.cpp:
450         (JSC::FunctionPrototype::finishCreation):
451         (JSC::FunctionPrototype::addFunctionProperties):
452         (JSC::FunctionPrototype::initRestrictedProperties):
453         * runtime/FunctionPrototype.h:
454         * runtime/GeneratorFunctionConstructor.cpp:
455         (JSC::GeneratorFunctionConstructor::finishCreation):
456         * runtime/InternalFunction.cpp:
457         (JSC::InternalFunction::finishCreation):
458         * runtime/InternalFunction.h:
459         * runtime/IntlCollatorConstructor.cpp:
460         (JSC::IntlCollatorConstructor::finishCreation):
461         * runtime/IntlDateTimeFormatConstructor.cpp:
462         (JSC::IntlDateTimeFormatConstructor::finishCreation):
463         * runtime/IntlNumberFormatConstructor.cpp:
464         (JSC::IntlNumberFormatConstructor::finishCreation):
465         * runtime/IntlPluralRulesConstructor.cpp:
466         (JSC::IntlPluralRulesConstructor::finishCreation):
467         * runtime/JSArrayBufferConstructor.cpp:
468         (JSC::JSGenericArrayBufferConstructor<sharingMode>::finishCreation):
469         * runtime/JSArrayBufferPrototype.cpp:
470         (JSC::JSArrayBufferPrototype::finishCreation):
471         * runtime/JSGenericTypedArrayViewConstructorInlines.h:
472         (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):
473         * runtime/JSGlobalObject.cpp:
474         (JSC::JSGlobalObject::init):
475         * runtime/JSObject.cpp:
476         (JSC::JSObject::putDirectNonIndexAccessorWithoutTransition):
477         (JSC::JSObject::putDirectNativeIntrinsicGetterWithoutTransition):
478         * runtime/JSObject.h:
479         * runtime/JSPromiseConstructor.cpp:
480         (JSC::JSPromiseConstructor::finishCreation):
481         * runtime/JSTypedArrayViewConstructor.cpp:
482         (JSC::JSTypedArrayViewConstructor::finishCreation):
483         * runtime/JSTypedArrayViewPrototype.cpp:
484         (JSC::JSTypedArrayViewPrototype::finishCreation):
485         * runtime/MapConstructor.cpp:
486         (JSC::MapConstructor::finishCreation):
487         * runtime/MapPrototype.cpp:
488         (JSC::MapPrototype::finishCreation):
489         * runtime/NativeErrorConstructor.cpp:
490         (JSC::NativeErrorConstructorBase::finishCreation):
491         * runtime/NullGetterFunction.h:
492         * runtime/NullSetterFunction.h:
493         * runtime/NumberConstructor.cpp:
494         (JSC::NumberConstructor::finishCreation):
495         * runtime/ObjectConstructor.cpp:
496         (JSC::ObjectConstructor::finishCreation):
497         * runtime/ProxyConstructor.cpp:
498         (JSC::ProxyConstructor::finishCreation):
499         * runtime/RegExpConstructor.cpp:
500         (JSC::RegExpConstructor::finishCreation):
501         * runtime/RegExpPrototype.cpp:
502         (JSC::RegExpPrototype::finishCreation):
503         * runtime/SetConstructor.cpp:
504         (JSC::SetConstructor::finishCreation):
505         * runtime/SetPrototype.cpp:
506         (JSC::SetPrototype::finishCreation):
507         * runtime/StringConstructor.cpp:
508         (JSC::StringConstructor::finishCreation):
509         * runtime/SymbolConstructor.cpp:
510         (JSC::SymbolConstructor::finishCreation):
511         * runtime/WeakMapConstructor.cpp:
512         (JSC::WeakMapConstructor::finishCreation):
513         * runtime/WeakSetConstructor.cpp:
514         (JSC::WeakSetConstructor::finishCreation):
515         * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
516         (JSC::WebAssemblyCompileErrorConstructor::finishCreation):
517         * wasm/js/WebAssemblyInstanceConstructor.cpp:
518         (JSC::WebAssemblyInstanceConstructor::finishCreation):
519         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
520         (JSC::WebAssemblyLinkErrorConstructor::finishCreation):
521         * wasm/js/WebAssemblyMemoryConstructor.cpp:
522         (JSC::WebAssemblyMemoryConstructor::finishCreation):
523         * wasm/js/WebAssemblyModuleConstructor.cpp:
524         (JSC::WebAssemblyModuleConstructor::finishCreation):
525         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
526         (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):
527         * wasm/js/WebAssemblyTableConstructor.cpp:
528         (JSC::WebAssemblyTableConstructor::finishCreation):
529
530 2019-03-08  Tadeu Zagallo  <tzagallo@apple.com>
531
532         op_check_tdz does not def its argument
533         https://bugs.webkit.org/show_bug.cgi?id=192880
534         <rdar://problem/46221598>
535
536         Reviewed by Saam Barati.
537
538         This prevented the for-in loop optimization in the bytecode generator, since
539         the analysis sees a redefinition of the loop variable.
540
541         * bytecode/BytecodeUseDef.h:
542         (JSC::computeDefsForBytecodeOffset):
543
544 2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>
545
546         [JSC] Make more fields lazy in JSGlobalObject
547         https://bugs.webkit.org/show_bug.cgi?id=195449
548
549         Reviewed by Mark Lam.
550
551         This patch makes more fields lazy-allocated in JSGlobalObject to save memory.
552
553         1. Some minor structures like moduleRecordStructure.
554         2. Some functions like parseInt / parseFloat. While they are eagerly created in JIT mode anyway to materialize NumberConstructor, we can lazily allocate them in non JIT mode.
555         3. ArrayBuffer constructor. While it is eagerly allocated in WebCore, we can make lazily allocated in JSC.
556
557         * interpreter/Interpreter.cpp:
558         (JSC::Interpreter::execute):
559         * runtime/JSArrayBufferPrototype.h:
560         * runtime/JSGlobalObject.cpp:
561         (JSC::JSGlobalObject::init):
562         (JSC::JSGlobalObject::visitChildren):
563         * runtime/JSGlobalObject.h:
564         (JSC::JSGlobalObject::parseIntFunction const):
565         (JSC::JSGlobalObject::parseFloatFunction const):
566         (JSC::JSGlobalObject::evalFunction const):
567         (JSC::JSGlobalObject::strictEvalActivationStructure const):
568         (JSC::JSGlobalObject::moduleRecordStructure const):
569         (JSC::JSGlobalObject::moduleNamespaceObjectStructure const):
570         (JSC::JSGlobalObject::proxyObjectStructure const):
571         (JSC::JSGlobalObject::callableProxyObjectStructure const):
572         (JSC::JSGlobalObject::proxyRevokeStructure const):
573         (JSC::JSGlobalObject::arrayBufferConstructor const):
574         (JSC::JSGlobalObject::arrayBufferPrototype const):
575         (JSC::JSGlobalObject::arrayBufferStructure const):
576         * runtime/ProxyObject.h:
577         * runtime/StrictEvalActivation.cpp:
578         (JSC::StrictEvalActivation::StrictEvalActivation):
579         * runtime/StrictEvalActivation.h:
580         * wasm/js/JSWebAssemblyMemory.cpp:
581         (JSC::JSWebAssemblyMemory::buffer):
582         * wasm/js/WebAssemblyModuleConstructor.cpp:
583         (JSC::webAssemblyModuleCustomSections):
584
585 2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>
586
587         [JSC] Remove merging must handle values into proven types in CFA
588         https://bugs.webkit.org/show_bug.cgi?id=195444
589
590         Reviewed by Saam Barati.
591
592         Previously, we are merging must handle values as a proven constant in CFA. This is OK as long as this proven AbstractValue is blurred by merging the other legit AbstractValues
593         from the successors. But let's consider the following code, this is actually generated DFG graph from the attached test in r242626.
594
595             Block #2 (loop header) succ #3, #4
596             ...
597             1: ForceOSRExit
598             ...
599             2: JSConstant(0)
600             3: SetLocal(@2, loc6)
601             ...
602             4: Branch(#3, #4)
603
604             Block #3 (This is OSR entry target) pred #2, #3, must handle value for loc6 => JSConstant(Int32, 31)
605             ...
606             5: GetLocal(loc6)
607             6: StringFromCharCode(@5)
608             ...
609
610         Block #3 is OSR entry target. So we have must handle value for loc6 and it is Int32 constant 31. Then we merge this constant as a proven value in #3's loc6 AbstractValue.
611         If the value from #2 blurs the value, it is OK. However, #2 has ForceOSRExit. So must handle value suddenly becomes the only source of loc6 in #3. Then we use this constant
612         as a proven value. But this is not expected behavior since must handle value is just a snapshot of the locals when we kick off the concurrent compilation. In the above example,
613         we assume that loop index is an constant 31, but it is wrong, and OSR entry fails. Because there is no strong assumption that the must handle value is the proven type or value,
614         we should not merge it in CFA.
615
616         Since (1) this is just an optimization, (2) type information is already propagated in prediction injection phase, and (3) the must handle value does not show the performance
617         progression in r211461 and we no longer see type misprediction in marsaglia-osr-entry.js, this patch simply removes must handle value type widening in CFA.
618
619         * dfg/DFGCFAPhase.cpp:
620         (JSC::DFG::CFAPhase::run):
621         (JSC::DFG::CFAPhase::performBlockCFA):
622         (JSC::DFG::CFAPhase::injectOSR): Deleted.
623
624 2019-03-07  Yusuke Suzuki  <ysuzuki@apple.com>
625
626         [JSC] StringFromCharCode fast path should accept 0xff in DFG and FTL
627         https://bugs.webkit.org/show_bug.cgi?id=195429
628
629         Reviewed by Saam Barati.
630
631         We can create single characters without allocation up to 0xff character code. But currently, DFGSpeculativeJIT and FTLLowerDFGToB3 go to the slow path
632         for 0xff case. On the other hand, DFG DoesGC phase says GC won't happen if the child is int32 constant and it is <= 0xff. So, if you have `String.fromCharCode(0xff)`,
633         this breaks the assumption in DFG DoesGC. The correct fix is changing the check in DFGSpeculativeJIT and FTLLowerDFGToB3 from AboveOrEqual to Above.
634         Note that ThunkGenerators's StringFromCharCode thunk was correct.
635
636         * dfg/DFGSpeculativeJIT.cpp:
637         (JSC::DFG::SpeculativeJIT::compileFromCharCode):
638         * ftl/FTLLowerDFGToB3.cpp:
639         (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode):
640
641 2019-03-07  Mark Lam  <mark.lam@apple.com>
642
643         Follow up refactoring in try-finally code after r242591.
644         https://bugs.webkit.org/show_bug.cgi?id=195428
645
646         Reviewed by Saam Barati.
647
648         1. Added some comments in emitFinallyCompletion() to describe each completion case.
649         2. Converted CatchEntry into a struct.
650         3. Renamed variable hasBreaksOrContinuesNotCoveredByJumps to hasBreaksOrContinuesThatEscapeCurrentFinally
651            to be more clear about its purpose.
652
653         * bytecompiler/BytecodeGenerator.cpp:
654         (JSC::BytecodeGenerator::generate):
655         (JSC::BytecodeGenerator::emitOutOfLineExceptionHandler):
656         (JSC::BytecodeGenerator::emitFinallyCompletion):
657         * bytecompiler/BytecodeGenerator.h:
658
659 2019-03-07  Saam Barati  <sbarati@apple.com>
660
661         CompactVariableMap::Handle's copy operator= leaks the previous data
662         https://bugs.webkit.org/show_bug.cgi?id=195398
663
664         Reviewed by Yusuke Suzuki.
665
666         The copy constructor was just assigning |this| to the new value,
667         forgetting to decrement the ref count of the thing pointed to by
668         the |this| handle. Based on Yusuke's suggestion, this patch refactors
669         the move constructor, move operator=, and copy operator= to use the
670         swap() primitive and the copy constructor primitive.
671
672         * parser/VariableEnvironment.cpp:
673         (JSC::CompactVariableMap::Handle::Handle):
674         (JSC::CompactVariableMap::Handle::swap):
675         (JSC::CompactVariableMap::Handle::operator=): Deleted.
676         * parser/VariableEnvironment.h:
677         (JSC::CompactVariableMap::Handle::Handle):
678         (JSC::CompactVariableMap::Handle::operator=):
679
680 2019-03-07  Tadeu Zagallo  <tzagallo@apple.com>
681
682         Lazily decode cached bytecode
683         https://bugs.webkit.org/show_bug.cgi?id=194810
684
685         Reviewed by Saam Barati.
686
687         Like lazy parsing, we should pause at code block boundaries. Instead
688         of always eagerly decoding UnlinkedFunctionExecutable's UnlinkedCodeBlocks,
689         we store their offsets in the executable and lazily decode them on the next
690         call to `unlinkedCodeBlockFor`.
691
692         * bytecode/UnlinkedFunctionExecutable.cpp:
693         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
694         (JSC::UnlinkedFunctionExecutable::~UnlinkedFunctionExecutable):
695         (JSC::UnlinkedFunctionExecutable::visitChildren):
696         (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
697         (JSC::UnlinkedFunctionExecutable::decodeCachedCodeBlocks):
698         * bytecode/UnlinkedFunctionExecutable.h:
699         * runtime/CachedTypes.cpp:
700         (JSC::Decoder::Decoder):
701         (JSC::Decoder::~Decoder):
702         (JSC::Decoder::create):
703         (JSC::Decoder::offsetOf):
704         (JSC::Decoder::cacheOffset):
705         (JSC::Decoder::ptrForOffsetFromBase):
706         (JSC::Decoder::handleForEnvironment const):
707         (JSC::Decoder::setHandleForEnvironment):
708         (JSC::Decoder::addFinalizer):
709         (JSC::VariableLengthObject::isEmpty const):
710         (JSC::CachedWriteBarrier::isEmpty const):
711         (JSC::CachedFunctionExecutable::unlinkedCodeBlockForCall const):
712         (JSC::CachedFunctionExecutable::unlinkedCodeBlockForConstruct const):
713         (JSC::CachedFunctionExecutable::decode const):
714         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
715         (JSC::decodeCodeBlockImpl):
716         (JSC::isCachedBytecodeStillValid):
717         (JSC::decodeFunctionCodeBlock):
718         * runtime/CachedTypes.h:
719         (JSC::Decoder::vm):
720
721 2019-03-06  Mark Lam  <mark.lam@apple.com>
722
723         Exception is a JSCell, not a JSObject.
724         https://bugs.webkit.org/show_bug.cgi?id=195392
725
726         Reviewed by Saam Barati.
727
728         Exception is a VM implementation construct to carry a stack trace for the point
729         where it is thrown from.  As a reminder, an Exception is needed because:
730         1. JS code can throw primitives as well that are non-cells.
731         2. Error objects capture the stack trace at the point where they are constructed,
732            which is not always the same as the point where they are thrown (if they are
733            thrown).
734
735         Hence, Exception should not be visible to JS code, and therefore should not be a
736         JSObject.  Hence, it should not inherit from JSDestructibleObject.
737
738         This patch changes the following:
739
740         1. Exception now inherits directly from JSCell instead.
741
742         2. Places where we return an Exception masquerading as a JSObject* are now
743            updated to return a nullptr when we encounter an exception.
744
745         3. We still return Exception* as JSValue or EncodedJSValue when we encounter an
746            exception in functions that return JSValue or EncodedJSValue.  This is because
747            the number that implements the following pattern is too numerous:
748
749                 return throw<Some Error>(...)
750
751            We'll leave these as is for now.
752
753         * bytecode/CodeBlock.h:
754         (JSC::ScriptExecutable::prepareForExecution):
755         * interpreter/Interpreter.cpp:
756         (JSC::Interpreter::executeProgram):
757         (JSC::Interpreter::executeCall):
758         (JSC::Interpreter::executeConstruct):
759         (JSC::Interpreter::prepareForRepeatCall):
760         (JSC::Interpreter::execute):
761         (JSC::Interpreter::executeModuleProgram):
762         * jit/JITOperations.cpp:
763         * llint/LLIntSlowPaths.cpp:
764         (JSC::LLInt::setUpCall):
765         * runtime/ConstructData.cpp:
766         (JSC::construct):
767         * runtime/Error.cpp:
768         (JSC::throwConstructorCannotBeCalledAsFunctionTypeError):
769         (JSC::throwTypeError):
770         (JSC::throwSyntaxError):
771         * runtime/Error.h:
772         (JSC::throwRangeError):
773         * runtime/Exception.cpp:
774         (JSC::Exception::createStructure):
775         * runtime/Exception.h:
776         * runtime/ExceptionHelpers.cpp:
777         (JSC::throwOutOfMemoryError):
778         (JSC::throwStackOverflowError):
779         (JSC::throwTerminatedExecutionException):
780         * runtime/ExceptionHelpers.h:
781         * runtime/FunctionConstructor.cpp:
782         (JSC::constructFunction):
783         (JSC::constructFunctionSkippingEvalEnabledCheck):
784         * runtime/IntlPluralRules.cpp:
785         (JSC::IntlPluralRules::resolvedOptions):
786         * runtime/JSGenericTypedArrayViewConstructorInlines.h:
787         (JSC::constructGenericTypedArrayViewWithArguments):
788         * runtime/JSObject.h:
789         * runtime/ObjectConstructor.cpp:
790         (JSC::objectConstructorSeal):
791         (JSC::objectConstructorFreeze):
792         * runtime/ProgramExecutable.cpp:
793         (JSC::ProgramExecutable::initializeGlobalProperties):
794         * runtime/RegExpConstructor.cpp:
795         (JSC::regExpCreate):
796         (JSC::constructRegExp):
797         * runtime/ScriptExecutable.cpp:
798         (JSC::ScriptExecutable::newCodeBlockFor):
799         (JSC::ScriptExecutable::prepareForExecutionImpl):
800         * runtime/ScriptExecutable.h:
801         * runtime/ThrowScope.cpp:
802         (JSC::ThrowScope::throwException):
803         * runtime/ThrowScope.h:
804         (JSC::ThrowScope::throwException):
805         (JSC::throwException):
806         * runtime/VM.cpp:
807         (JSC::VM::throwException):
808         * runtime/VM.h:
809
810 2019-03-06  Ross Kirsling  <ross.kirsling@sony.com>
811
812         [Win] Remove -DUCHAR_TYPE=wchar_t stopgap and learn to live with char16_t.
813         https://bugs.webkit.org/show_bug.cgi?id=195346
814
815         Reviewed by Fujii Hironori.
816
817         * jsc.cpp:
818         (currentWorkingDirectory):
819         (fetchModuleFromLocalFileSystem):
820         * runtime/DateConversion.cpp:
821         (JSC::formatDateTime):
822         Use wchar helpers as needed.
823
824 2019-03-06  Mark Lam  <mark.lam@apple.com>
825
826         Fix incorrect handling of try-finally completion values.
827         https://bugs.webkit.org/show_bug.cgi?id=195131
828         <rdar://problem/46222079>
829
830         Reviewed by Saam Barati and Yusuke Suzuki.
831
832         Consider the following:
833
834             function foo() {                        // line 1
835                 try {
836                     return 42;                      // line 3
837                 } finally {
838                     for (var j = 0; j < 1; j++) {   // line 5
839                         try {
840                             throw '';               // line 7
841                         } finally {
842                             continue;               // line 9
843                         }
844                     }
845                 }                                   // line 11
846             }
847             var result = foo();
848
849         With the current (before fix) code base, result will be the exception object thrown
850         at line 7.  The expected result should be 42, returned at line 3.
851
852         The bug is that we were previously only using one set of completion type and
853         value registers for the entire function.  This is inadequate because the outer
854         try-finally needs to preserve its own completion type and value ({ Return, 42 }
855         in this case) in order to be able to complete correctly.
856
857         One might be deceived into thinking that the above example should complete with
858         the exception thrown at line 7.  However, according to Section 13.15.8 of the
859         ECMAScript spec, the 'continue' in the finally at line 9 counts as an abrupt
860         completion.  As a result, it overrides the throw from line 7.  After the continue,
861         execution resumes at the top of the loop at line 5, followed by a normal completion
862         at line 11.
863
864         Also according to Section 13.15.8, given that the completion type of the outer
865         finally is normal, the resultant completion of the outer try-finally should be
866         the completion of the outer try block i.e. { Return, 42 }.
867
868         This patch makes the following changes:
869         
870         1. Fix handling of finally completion to use a unique set of completion
871            type and value registers for each FinallyContext.
872
873         2. Move the setting of Throw completion type to the out of line exception handler.
874            This makes the mainline code slightly less branchy.
875
876         3. Introduce emitOutOfLineCatchHandler(), emitOutOfLineFinallyHandler(), and
877            emitOutOfLineExceptionHandler() to make it clearer that these are not emitting
878            bytecode inline.  Also, these make it clearer when we're emitting a handler
879            for a catch vs a finally.
880
881         4. Allocate the FinallyContext on the stack instead of as a member of the
882            heap allocated ControlFlowScope.  This simplifies its life-cycle management
883            and reduces the amount of needed copying.
884
885         5. Update emitFinallyCompletion() to propagate the completion type and value to
886            the outer FinallyContext when needed.
887
888         6. Fix emitJumpIf() to use the right order of operands.  Previously, we were
889            only using it to do op_stricteq and op_nstricteq comparisons.  So, the order
890            wasn't important.  We now use it to also do op_beloweq comparisons.  Hence,
891            the order needs to be corrected.
892
893         7. Remove the unused CompletionType::Break and Continue.  These are encoded with
894            the jumpIDs of the jump targets instead.
895
896         Relevant specifications:
897         Section 13.15.8: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-try-statement-runtime-semantics-evaluation
898         Section 6.3.2.4: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-updateempty
899
900         * bytecompiler/BytecodeGenerator.cpp:
901         (JSC::FinallyContext::FinallyContext):
902         (JSC::BytecodeGenerator::generate):
903         (JSC::BytecodeGenerator::BytecodeGenerator):
904         (JSC::BytecodeGenerator::pushFinallyControlFlowScope):
905         (JSC::BytecodeGenerator::popFinallyControlFlowScope):
906         (JSC::BytecodeGenerator::emitOutOfLineCatchHandler):
907         (JSC::BytecodeGenerator::emitOutOfLineFinallyHandler):
908         (JSC::BytecodeGenerator::emitOutOfLineExceptionHandler):
909         (JSC::BytecodeGenerator::emitEnumeration):
910         (JSC::BytecodeGenerator::emitJumpViaFinallyIfNeeded):
911         (JSC::BytecodeGenerator::emitReturnViaFinallyIfNeeded):
912         (JSC::BytecodeGenerator::emitFinallyCompletion):
913         (JSC::BytecodeGenerator::emitJumpIf):
914         (JSC::BytecodeGenerator::emitCatch): Deleted.
915         (JSC::BytecodeGenerator::allocateCompletionRecordRegisters): Deleted.
916         (JSC::BytecodeGenerator::releaseCompletionRecordRegisters): Deleted.
917         * bytecompiler/BytecodeGenerator.h:
918         (JSC::FinallyContext::completionTypeRegister const):
919         (JSC::FinallyContext::completionValueRegister const):
920         (JSC::ControlFlowScope::ControlFlowScope):
921         (JSC::BytecodeGenerator::emitLoad):
922         (JSC::BytecodeGenerator::CompletionRecordScope::CompletionRecordScope): Deleted.
923         (JSC::BytecodeGenerator::CompletionRecordScope::~CompletionRecordScope): Deleted.
924         (JSC::BytecodeGenerator::completionTypeRegister const): Deleted.
925         (JSC::BytecodeGenerator::completionValueRegister const): Deleted.
926         (JSC::BytecodeGenerator::emitSetCompletionType): Deleted.
927         (JSC::BytecodeGenerator::emitSetCompletionValue): Deleted.
928         * bytecompiler/NodesCodegen.cpp:
929         (JSC::TryNode::emitBytecode):
930
931 2019-03-06  Saam Barati  <sbarati@apple.com>
932
933         JSScript should keep the cache file locked for the duration of its existence and should truncate the cache when it is out of date
934         https://bugs.webkit.org/show_bug.cgi?id=195186
935
936         Reviewed by Keith Miller.
937
938         This patch makes it so that JSScript will keep its bytecode cache file
939         locked as long as the JSScript is alive. This makes it obvious that it's
940         safe to update that file, as it will only be used in a single VM, across
941         all processes, at a single time. We may be able to extend this in the future
942         if we can atomically update it across VMs/processes. However, we're choosing
943         more restricted semantics now as it's always easier to extend these semantics
944         in the future opposed to having to support the more flexible behavior
945         up front.
946         
947         This patch also:
948         - Adds error messages if writing the cache fails. We don't expect this to
949           fail, but previously we would say we cached it even if write() fails.
950         - Removes the unused m_moduleKey field.
951         - Makes calling cacheBytecodeWithError with an already non-empty cache file fail.
952           In the future, we should extend this to just fill in the parts of the cache
953           that are not present. But we don't have the ability to do that yet, so we
954           just result in an error for now.
955
956         * API/JSScript.mm:
957         (-[JSScript dealloc]):
958         (-[JSScript readCache]):
959         (-[JSScript init]):
960         (-[JSScript writeCache:]):
961         * API/JSScriptInternal.h:
962         * API/tests/testapi.mm:
963         (testCacheFileIsExclusive):
964         (testCacheFileFailsWhenItsAlreadyCached):
965         (testObjectiveCAPI):
966
967 2019-03-06  Christopher Reid  <chris.reid@sony.com>
968
969         Followups to (r242306): Use LockHolder instead of std::lock_guard on Remote Inspector Locks
970         https://bugs.webkit.org/show_bug.cgi?id=195381
971
972         Reviewed by Mark Lam.
973
974         Replacing std::lock_guard uses in Remote Inspector with WTF::LockHolder.
975         Also using `= { }` for struct initialization instead of memeset.
976
977         * inspector/remote/RemoteConnectionToTarget.cpp:
978         * inspector/remote/RemoteInspector.cpp:
979         * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
980         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
981         * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
982         * inspector/remote/glib/RemoteInspectorGlib.cpp:
983         * inspector/remote/playstation/RemoteInspectorPlayStation.cpp:
984         * inspector/remote/playstation/RemoteInspectorSocketClientPlayStation.cpp:
985         * inspector/remote/playstation/RemoteInspectorSocketPlayStation.cpp:
986         * inspector/remote/playstation/RemoteInspectorSocketServerPlayStation.cpp:
987
988 2019-03-06  Saam Barati  <sbarati@apple.com>
989
990         Air::reportUsedRegisters must padInterference
991         https://bugs.webkit.org/show_bug.cgi?id=195303
992         <rdar://problem/48270343>
993
994         Reviewed by Keith Miller.
995
996         reportUsedRegisters uses reg liveness to eliminate loads/moves into dead
997         registers. However, liveness can report incorrect results in certain 
998         scenarios when considering liveness at instruction boundaries. For example,
999         it can go wrong when an Inst has a LateUse of a register and the following
1000         Inst has an EarlyDef of that same register. Such a scenario could lead us
1001         to incorrectly say the register is not live-in to the first Inst. Pad
1002         interference inserts Nops between such instruction boundaries that cause
1003         this issue.
1004         
1005         The test with this patch fixes the issue in reportUsedRegisters. This patch
1006         also conservatively makes it so that lowerAfterRegAlloc calls padInterference
1007         since it also reasons about liveness.
1008
1009         * b3/air/AirLowerAfterRegAlloc.cpp:
1010         (JSC::B3::Air::lowerAfterRegAlloc):
1011         * b3/air/AirPadInterference.h:
1012         * b3/air/AirReportUsedRegisters.cpp:
1013         (JSC::B3::Air::reportUsedRegisters):
1014         * b3/testb3.cpp:
1015         (JSC::B3::testReportUsedRegistersLateUseNotDead):
1016         (JSC::B3::run):
1017
1018 2019-03-06  Yusuke Suzuki  <ysuzuki@apple.com>
1019
1020         [JSC] AI should not propagate AbstractValue relying on constant folding phase
1021         https://bugs.webkit.org/show_bug.cgi?id=195375
1022
1023         Reviewed by Saam Barati.
1024
1025         MakeRope rule in AI attempts to propagate the node, which will be produced after constant folding phase runs.
1026         This is wrong since we do not guarantee that constant folding phase runs after AI runs (e.g. DFGSpeculativeJIT
1027         and FTLLowerDFGToB3 run AI). This results in the bug that the value produced at runtime is different from the
1028         proven constant value in AI. In the attached test, AI says the value is SpecStringIdent while the resulted value
1029         at runtime is SpecStringVar, resulting in wrong MakeRope code. This patch removes the path propagating the node
1030         relying on constant folding phase.
1031
1032         * dfg/DFGAbstractInterpreterInlines.h:
1033         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1034
1035 2019-03-05  Saam barati  <sbarati@apple.com>
1036
1037         op_switch_char broken for rope strings after JSRopeString layout rewrite
1038         https://bugs.webkit.org/show_bug.cgi?id=195339
1039         <rdar://problem/48592545>
1040
1041         Reviewed by Yusuke Suzuki.
1042
1043         When we did the JSString rewrite, we accidentally broke LLInt's switch_char
1044         for rope strings. That change made it so that we always go to the slow path
1045         for ropes. That's wrong. The slow path should only be taken when the rope
1046         is of length 1. For lengths other than 1, we need to fall through to the
1047         default case. This patch fixes this.
1048
1049         * llint/LowLevelInterpreter32_64.asm:
1050         * llint/LowLevelInterpreter64.asm:
1051         * runtime/JSString.h:
1052
1053 2019-03-05  Yusuke Suzuki  <ysuzuki@apple.com>
1054
1055         [JSC] Should check exception for JSString::toExistingAtomicString
1056         https://bugs.webkit.org/show_bug.cgi?id=195337
1057
1058         Reviewed by Keith Miller, Saam Barati, and Mark Lam.
1059
1060         We missed the exception check for JSString::toExistingAtomicString while it can resolve
1061         a rope and throw an OOM exception. This patch adds necessary exception checks. This patch
1062         fixes test failures in debug build, reported in https://bugs.webkit.org/show_bug.cgi?id=194375#c93.
1063
1064         * dfg/DFGOperations.cpp:
1065         * jit/JITOperations.cpp:
1066         (JSC::getByVal):
1067         * llint/LLIntSlowPaths.cpp:
1068         (JSC::LLInt::getByVal):
1069         * runtime/CommonSlowPaths.cpp:
1070         (JSC::SLOW_PATH_DECL):
1071
1072 2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>
1073
1074         Unreviewed, build fix for debug builds after r242397
1075
1076         * runtime/JSString.h:
1077
1078 2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>
1079
1080         [JSC] Store bits for JSRopeString in 3 stores
1081         https://bugs.webkit.org/show_bug.cgi?id=195234
1082
1083         Reviewed by Saam Barati.
1084
1085         This patch cleans up the initialization of JSRopeString fields in DFG and FTL.
1086         Previously, we store some part of data separately. Instead, this patch calculates
1087         the data first by bit operations and store calculated data with fewer stores.
1088
1089         This patch also cleans up is8Bit and isSubstring flags. We put them in lower bits
1090         of the first fiber instead of the upper 16 bits. Since we only have 3 bit flags, (isRope, is8Bit, isSubstring),
1091         we can put them into the lower 3 bits, they are always empty due to alignment.
1092
1093         * bytecode/AccessCase.cpp:
1094         (JSC::AccessCase::generateImpl): A bit clean up of StringLength IC to give a chance of unnecessary mov removal.
1095         * dfg/DFGSpeculativeJIT.cpp:
1096         (JSC::DFG::SpeculativeJIT::canBeRope):
1097         (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
1098         (JSC::DFG::SpeculativeJIT::compileMakeRope):
1099         * dfg/DFGSpeculativeJIT.h:
1100         * ftl/FTLAbstractHeapRepository.cpp:
1101         (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
1102         * ftl/FTLAbstractHeapRepository.h:
1103         * ftl/FTLLowerDFGToB3.cpp:
1104         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
1105         (JSC::FTL::DFG::LowerDFGToB3::isRopeString):
1106         (JSC::FTL::DFG::LowerDFGToB3::isNotRopeString):
1107         * runtime/JSString.cpp:
1108         (JSC::JSString::visitChildren):
1109         * runtime/JSString.h:
1110         (JSC::JSString::is8Bit const):
1111         (JSC::JSString::isSubstring const):
1112         * tools/JSDollarVM.cpp:
1113         (JSC::functionCreateNullRopeString):
1114         (JSC::JSDollarVM::finishCreation):
1115
1116 2019-03-04  Joseph Pecoraro  <pecoraro@apple.com>
1117
1118         ITMLKit Inspector: Data Bindings / Associated Data for nodes
1119         https://bugs.webkit.org/show_bug.cgi?id=195290
1120         <rdar://problem/48304019>
1121
1122         Reviewed by Devin Rousso.
1123
1124         * inspector/protocol/DOM.json:
1125
1126 2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>
1127
1128         [JSC] Make Reflect lazily-allocated by dropping @Reflect references from builtin JS
1129         https://bugs.webkit.org/show_bug.cgi?id=195250
1130
1131         Reviewed by Saam Barati.
1132
1133         By removing @Reflect from builtin JS, we can make Reflect object allocation lazy.
1134         We move @ownKeys function from @Reflect to @Object to remove @Reflect reference.
1135
1136         We also remove m_intlObject field from JSGlobalObject since we no longer use it.
1137
1138         * builtins/BuiltinNames.h:
1139         * builtins/GlobalOperations.js:
1140         (globalPrivate.copyDataProperties):
1141         (globalPrivate.copyDataPropertiesNoExclusions):
1142         * runtime/JSGlobalObject.cpp:
1143         (JSC::createReflectProperty):
1144         (JSC::JSGlobalObject::init):
1145         (JSC::JSGlobalObject::visitChildren):
1146         * runtime/JSGlobalObject.h:
1147         * runtime/ObjectConstructor.cpp:
1148         (JSC::ObjectConstructor::finishCreation):
1149         (JSC::objectConstructorOwnKeys):
1150         * runtime/ReflectObject.cpp:
1151         (JSC::ReflectObject::finishCreation):
1152
1153 2019-03-04  Yusuke Suzuki  <ysuzuki@apple.com>
1154
1155         [JSC] Offer @makeTypeError instead of exposing @TypeError
1156         https://bugs.webkit.org/show_bug.cgi?id=193858
1157
1158         Reviewed by Mark Lam.
1159
1160         Instead of exposing @TypeError, we expose @makeTypeError function.
1161         And we make TypeError and Error lazily-allocated objects in non JIT environment.
1162         In JIT environment, only TypeError becomes lazily-allocated since WebAssembly errors
1163         touch Error prototype anyway. But we can make them lazy in a subsequent patch.
1164
1165         * builtins/AsyncFromSyncIteratorPrototype.js:
1166         * builtins/AsyncGeneratorPrototype.js:
1167         (globalPrivate.asyncGeneratorEnqueue):
1168         * builtins/BuiltinNames.h:
1169         * builtins/PromiseOperations.js:
1170         (globalPrivate.createResolvingFunctions.resolve):
1171         * runtime/JSGlobalObject.cpp:
1172         (JSC::JSGlobalObject::initializeErrorConstructor):
1173         (JSC::JSGlobalObject::init):
1174         (JSC::JSGlobalObject::visitChildren):
1175         * runtime/JSGlobalObject.h:
1176         (JSC::JSGlobalObject::errorPrototype const):
1177         (JSC::JSGlobalObject::errorStructure const):
1178         * runtime/JSGlobalObjectFunctions.cpp:
1179         (JSC::globalFuncMakeTypeError):
1180         * runtime/JSGlobalObjectFunctions.h:
1181
1182 2019-03-04  Carlos Garcia Campos  <cgarcia@igalia.com>
1183
1184         [GLib] Returning G_TYPE_OBJECT from a constructor does not work
1185         https://bugs.webkit.org/show_bug.cgi?id=195206
1186
1187         Reviewed by Žan Doberšek.
1188
1189         We are freeing the newly created object before returning from the constructor.
1190
1191         * API/glib/JSCCallbackFunction.cpp:
1192         (JSC::JSCCallbackFunction::construct):
1193
1194 2019-03-02  Darin Adler  <darin@apple.com>
1195
1196         Retire legacy dtoa function and DecimalNumber class
1197         https://bugs.webkit.org/show_bug.cgi?id=195253
1198
1199         Reviewed by Daniel Bates.
1200
1201         * runtime/NumberPrototype.cpp:
1202         (JSC::numberProtoFuncToExponential): Removed dependency on NumberToStringBufferLength,
1203         using NumberToStringBuffer instead. Also tweaked style of implementation a bit.
1204
1205 2019-03-01  Darin Adler  <darin@apple.com>
1206
1207         Finish removing String::format
1208         https://bugs.webkit.org/show_bug.cgi?id=194893
1209
1210         Reviewed by Daniel Bates.
1211
1212         * bytecode/CodeBlock.cpp:
1213         (JSC::CodeBlock::nameForRegister): Use makeString instead of String::format,
1214         using the new "pad" function.
1215
1216 2019-03-01  Christopher Reid  <chris.reid@sony.com>
1217
1218         [PlayStation] Upstream playstation's remote inspector server
1219         https://bugs.webkit.org/show_bug.cgi?id=193806
1220
1221         Reviewed by Joseph Pecoraro.
1222
1223         Upstreaming PlayStation's Remote Inspector implementation.
1224         It is using a JSON RPC protocol over TCP sockets.
1225         This inspector implementation is planned to also support running on a WinCairo Client and Server.
1226
1227         * PlatformPlayStation.cmake:
1228         * SourcesGTK.txt:
1229         * SourcesWPE.txt:
1230         * inspector/remote/RemoteConnectionToTarget.cpp: Renamed from Source/JavaScriptCore/inspector/remote/glib/RemoteConnectionToTargetGlib.cpp.
1231         * inspector/remote/RemoteInspector.h:
1232         * inspector/remote/playstation/RemoteInspectorConnectionClient.h: Added.
1233         * inspector/remote/playstation/RemoteInspectorConnectionClientPlayStation.cpp: Added.
1234         * inspector/remote/playstation/RemoteInspectorMessageParser.h: Added.
1235         * inspector/remote/playstation/RemoteInspectorMessageParserPlayStation.cpp: Added.
1236         * inspector/remote/playstation/RemoteInspectorPlayStation.cpp: Added.
1237         * inspector/remote/playstation/RemoteInspectorServer.h: Added.
1238         * inspector/remote/playstation/RemoteInspectorServerPlayStation.cpp: Added.
1239         * inspector/remote/playstation/RemoteInspectorSocket.h: Added.
1240         * inspector/remote/playstation/RemoteInspectorSocketClient.h: Added.
1241         * inspector/remote/playstation/RemoteInspectorSocketClientPlayStation.cpp: Added.
1242         * inspector/remote/playstation/RemoteInspectorSocketPlayStation.cpp: Added.
1243         * inspector/remote/playstation/RemoteInspectorSocketServer.h: Added.
1244         * inspector/remote/playstation/RemoteInspectorSocketServerPlayStation.cpp: Added.
1245
1246 2019-03-01  Saam Barati  <sbarati@apple.com>
1247
1248         Create SPI to crash if a JSC VM is created
1249         https://bugs.webkit.org/show_bug.cgi?id=195231
1250         <rdar://problem/47717990>
1251
1252         Reviewed by Mark Lam.
1253
1254         * API/JSVirtualMachine.mm:
1255         (+[JSVirtualMachine setCrashOnVMCreation:]):
1256         * API/JSVirtualMachinePrivate.h:
1257         * runtime/VM.cpp:
1258         (JSC::VM::VM):
1259         (JSC::VM::setCrashOnVMCreation):
1260         * runtime/VM.h:
1261
1262 2019-03-01  Yusuke Suzuki  <ysuzuki@apple.com>
1263
1264         [JSC] Fix FTL build on ARM32_64 by adding stubs for JSRopeString::offsetOfXXX
1265         https://bugs.webkit.org/show_bug.cgi?id=195235
1266
1267         Reviewed by Saam Barati.
1268
1269         This is a workaround until https://bugs.webkit.org/show_bug.cgi?id=195234 is done.
1270
1271         * runtime/JSString.h:
1272
1273 2019-03-01  Yusuke Suzuki  <ysuzuki@apple.com>
1274
1275         [JSC] Use runtime calls for DFG MakeRope if !CPU(ADDRESS64)
1276         https://bugs.webkit.org/show_bug.cgi?id=195221
1277
1278         Reviewed by Mark Lam.
1279
1280         ARM32_64 builds DFG 64bit, but the size of address is 32bit. Make DFG MakeRope a runtime call not only for DFG 32_64,
1281         but also DFG 64 with !CPU(ADDRESS64). This patch unifies compileMakeRope again, and use a runtime call for !CPU(ADDRESS64).
1282
1283         * dfg/DFGSpeculativeJIT.cpp:
1284         (JSC::DFG::SpeculativeJIT::compileMakeRope):
1285         * dfg/DFGSpeculativeJIT32_64.cpp:
1286         (JSC::DFG::SpeculativeJIT::compileMakeRope): Deleted.
1287         * dfg/DFGSpeculativeJIT64.cpp:
1288         (JSC::DFG::SpeculativeJIT::compileMakeRope): Deleted.
1289
1290 2019-03-01  Justin Fan  <justin_fan@apple.com>
1291
1292         [Web GPU] 32-bit builds broken by attempt to disable WebGPU on 32-bit
1293         https://bugs.webkit.org/show_bug.cgi?id=195191
1294
1295         Rubber-stamped by Dean Jackson.
1296
1297         Dropping support for 32-bit entirely, so I'm intentionally leaving 32-bit broken.
1298
1299         * Configurations/FeatureDefines.xcconfig:
1300
1301 2019-03-01  Dominik Infuehr  <dinfuehr@igalia.com>
1302
1303         Fix debug builds with GCC
1304         https://bugs.webkit.org/show_bug.cgi?id=195205
1305
1306         Unreviewed. Fix debug builds in GCC by removing
1307         the constexpr-keyword for this function.
1308
1309         * runtime/CachedTypes.cpp:
1310         (JSC::tagFromSourceCodeType):
1311
1312 2019-03-01  Dominik Infuehr  <dinfuehr@igalia.com>
1313
1314         [ARM] Fix assembler warnings in ctiMasmProbeTrampoline
1315         https://bugs.webkit.org/show_bug.cgi?id=195164
1316
1317         Reviewed by Mark Lam.
1318
1319         Short branches in IT blocks are deprecated in AArch32. In addition the
1320         the conditional branch was the only instruction in the IT block. Short
1321         branches are able to encode the condition code themselves, the additional
1322         IT instruction is not needed.
1323
1324         The assembler was also warning that writing into APSR without a bitmask
1325         was deprecated. Therefore use APSR_nzcvq instead, this generates the same
1326         instruction encoding.
1327
1328         * assembler/MacroAssemblerARMv7.cpp:
1329
1330 2019-02-28  Tadeu Zagallo  <tzagallo@apple.com>
1331
1332         Remove CachedPtr::m_isEmpty and CachedOptional::m_isEmpty fields
1333         https://bugs.webkit.org/show_bug.cgi?id=194999
1334
1335         Reviewed by Saam Barati.
1336
1337         These fields are unnecessary, since we can just check that m_offset
1338         has not been initialized (I added VariableLengthObject::isEmpty for
1339         that). They also add 7-byte padding to these classes, which is pretty
1340         bad given how frequently CachedPtr is used.
1341
1342         * runtime/CachedTypes.cpp:
1343         (JSC::CachedObject::operator new[]):
1344         (JSC::VariableLengthObject::allocate):
1345         (JSC::VariableLengthObject::isEmpty const):
1346         (JSC::CachedPtr::encode):
1347         (JSC::CachedPtr::decode const):
1348         (JSC::CachedPtr::get const):
1349         (JSC::CachedOptional::encode):
1350         (JSC::CachedOptional::decode const):
1351         (JSC::CachedOptional::decodeAsPtr const):
1352
1353 2019-02-28  Yusuke Suzuki  <ysuzuki@apple.com>
1354
1355         [JSC] sizeof(JSString) should be 16
1356         https://bugs.webkit.org/show_bug.cgi?id=194375
1357
1358         Reviewed by Saam Barati.
1359
1360         This patch reduces sizeof(JSString) from 24 to 16 to fit it into GC heap cell atom. And it also reduces sizeof(JSRopeString) from 48 to 32.
1361         Both classes cut 16 bytes per instance in GC allocation. This new layout is used in 64bit architectures which has little endianess.
1362
1363         JSString no longer has length and flags directly. JSString has String, and we query information to this String instead of holding duplicate
1364         information in JSString. We embed isRope bit into this String's pointer so that we can convert JSRopeString to JSString in an atomic manner.
1365         We emit store-store fence before we put String pointer. This should exist even before this patch, so this patch also fixes one concurrency issue.
1366
1367         The old JSRopeString separately had JSString* fibers along with String. In this patch, we merge the first JSString* fiber and String pointer
1368         storage into one to reduce the size of JSRopeString. JSRopeString has three pointer width storage. We pick 48bit effective address of JSString*
1369         fibers to compress three fibers + length + flags into three pointer width storage.
1370
1371         In 64bit architecture, JSString and JSRopeString have the following memory layout to make sizeof(JSString) == 16 and sizeof(JSRopeString) == 32.
1372         JSString has only one pointer. We use it for String. length() and is8Bit() queries go to StringImpl. In JSRopeString, we reuse the above pointer
1373         place for the 1st fiber. JSRopeString has three fibers so its size is 48. To keep length and is8Bit flag information in JSRopeString, JSRopeString
1374         encodes these information into the fiber pointers. is8Bit flag is encoded in the 1st fiber pointer. length is embedded directly, and two fibers
1375         are compressed into 12bytes. isRope information is encoded in the first fiber's LSB.
1376
1377         Since length of JSRopeString should be frequently accessed compared to each fiber, we put length in contiguous 32byte field, and compress 2nd
1378         and 3rd fibers into the following 80byte fields. One problem is that now 2nd and 3rd fibers are split. Storing and loading 2nd and 3rd fibers
1379         are not one pointer load operation. To make concurrent collector work correctly, we must initialize 2nd and 3rd fibers at JSRopeString creation
1380         and we must not modify these part later.
1381
1382                      0                        8        10               16                       32                                     48
1383         JSString     [   ID      ][  header  ][   String pointer      0]
1384         JSRopeString [   ID      ][  header  ][ flags ][ 1st fiber    1][  length  ][2nd lower32][2nd upper16][3rd lower16][3rd upper32]
1385                                                                       ^
1386                                                                    isRope bit
1387
1388         Since fibers in JSRopeString are not initialized in atomic pointer store manner, we must initialize all the fiber fields at JSRopeString creation.
1389         To achieve this, we modify our JSRopeString::RopeBuilder implementation not to create half-baked JSRopeString.
1390
1391         This patch also makes an empty JSString singleton per VM. This makes evaluation of JSString in boolean context one pointer comparison. This is
1392         critical in this change since this patch enlarges the code necessary to get length from JSString in JIT. Without this guarantee, our code of boolean
1393         context evaluation is bloated. This patch hides all the JSString::create and JSRopeString::create in the private permission. JSString and JSRopeString
1394         creation is only allowed from jsString and related helper functions and they return a singleton empty JSString if the length is zero. We also change
1395         JSRopeString::RopeBuilder not to construct an empty JSRopeString.
1396
1397         This patch is performance neutral in Speedometer2 and JetStream2. And it improves RAMification by 2.7%.
1398
1399         * JavaScriptCore.xcodeproj/project.pbxproj:
1400         * assembler/MacroAssemblerARM64.h:
1401         (JSC::MacroAssemblerARM64::storeZero16):
1402         * assembler/MacroAssemblerX86Common.h:
1403         (JSC::MacroAssemblerX86Common::storeZero16):
1404         (JSC::MacroAssemblerX86Common::store16):
1405         * bytecode/AccessCase.cpp:
1406         (JSC::AccessCase::generateImpl):
1407         * bytecode/InlineAccess.cpp:
1408         (JSC::InlineAccess::dumpCacheSizesAndCrash):
1409         (JSC::linkCodeInline):
1410         (JSC::InlineAccess::isCacheableStringLength):
1411         (JSC::InlineAccess::generateStringLength):
1412         * bytecode/InlineAccess.h:
1413         (JSC::InlineAccess::sizeForPropertyAccess):
1414         (JSC::InlineAccess::sizeForPropertyReplace):
1415         (JSC::InlineAccess::sizeForLengthAccess):
1416         * dfg/DFGOperations.cpp:
1417         * dfg/DFGOperations.h:
1418         * dfg/DFGSpeculativeJIT.cpp:
1419         (JSC::DFG::SpeculativeJIT::compileStringSlice):
1420         (JSC::DFG::SpeculativeJIT::compileToLowerCase):
1421         (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
1422         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
1423         (JSC::DFG::SpeculativeJIT::compileStringEquality):
1424         (JSC::DFG::SpeculativeJIT::compileStringZeroLength):
1425         (JSC::DFG::SpeculativeJIT::compileLogicalNotStringOrOther):
1426         (JSC::DFG::SpeculativeJIT::emitStringBranch):
1427         (JSC::DFG::SpeculativeJIT::emitStringOrOtherBranch):
1428         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
1429         (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
1430         (JSC::DFG::SpeculativeJIT::emitPopulateSliceIndex):
1431         (JSC::DFG::SpeculativeJIT::compileArraySlice):
1432         (JSC::DFG::SpeculativeJIT::compileArrayIndexOf):
1433         (JSC::DFG::SpeculativeJIT::speculateStringIdentAndLoadStorage):
1434         (JSC::DFG::SpeculativeJIT::emitSwitchCharStringJump):
1435         (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString):
1436         (JSC::DFG::SpeculativeJIT::compileMakeRope): Deleted.
1437         * dfg/DFGSpeculativeJIT.h:
1438         * dfg/DFGSpeculativeJIT32_64.cpp:
1439         (JSC::DFG::SpeculativeJIT::compile):
1440         (JSC::DFG::SpeculativeJIT::compileMakeRope):
1441         * dfg/DFGSpeculativeJIT64.cpp:
1442         (JSC::DFG::SpeculativeJIT::compile):
1443         (JSC::DFG::SpeculativeJIT::compileMakeRope):
1444         * ftl/FTLAbstractHeapRepository.cpp:
1445         (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
1446         * ftl/FTLAbstractHeapRepository.h:
1447         * ftl/FTLLowerDFGToB3.cpp:
1448         (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage):
1449         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength):
1450         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
1451         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
1452         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharCodeAt):
1453         (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
1454         (JSC::FTL::DFG::LowerDFGToB3::compileStringToUntypedStrictEquality):
1455         (JSC::FTL::DFG::LowerDFGToB3::compileSwitch):
1456         (JSC::FTL::DFG::LowerDFGToB3::mapHashString):
1457         (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
1458         (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty):
1459         (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice):
1460         (JSC::FTL::DFG::LowerDFGToB3::compileToLowerCase):
1461         (JSC::FTL::DFG::LowerDFGToB3::stringsEqual):
1462         (JSC::FTL::DFG::LowerDFGToB3::boolify):
1463         (JSC::FTL::DFG::LowerDFGToB3::switchString):
1464         (JSC::FTL::DFG::LowerDFGToB3::isRopeString):
1465         (JSC::FTL::DFG::LowerDFGToB3::isNotRopeString):
1466         (JSC::FTL::DFG::LowerDFGToB3::speculateStringIdent):
1467         * jit/AssemblyHelpers.cpp:
1468         (JSC::AssemblyHelpers::emitConvertValueToBoolean):
1469         (JSC::AssemblyHelpers::branchIfValue):
1470         * jit/AssemblyHelpers.h:
1471         (JSC::AssemblyHelpers::branchIfRopeStringImpl):
1472         (JSC::AssemblyHelpers::branchIfNotRopeStringImpl):
1473         * jit/JITInlines.h:
1474         (JSC::JIT::emitLoadCharacterString):
1475         * jit/Repatch.cpp:
1476         (JSC::tryCacheGetByID):
1477         * jit/ThunkGenerators.cpp:
1478         (JSC::stringGetByValGenerator):
1479         (JSC::stringCharLoad):
1480         * llint/LowLevelInterpreter.asm:
1481         * llint/LowLevelInterpreter32_64.asm:
1482         * llint/LowLevelInterpreter64.asm:
1483         * runtime/JSString.cpp:
1484         (JSC::JSString::createEmptyString):
1485         (JSC::JSRopeString::RopeBuilder<RecordOverflow>::expand):
1486         (JSC::JSString::dumpToStream):
1487         (JSC::JSString::estimatedSize):
1488         (JSC::JSString::visitChildren):
1489         (JSC::JSRopeString::resolveRopeInternal8 const):
1490         (JSC::JSRopeString::resolveRopeInternal8NoSubstring const):
1491         (JSC::JSRopeString::resolveRopeInternal16 const):
1492         (JSC::JSRopeString::resolveRopeInternal16NoSubstring const):
1493         (JSC::JSRopeString::resolveRopeToAtomicString const):
1494         (JSC::JSRopeString::convertToNonRope const):
1495         (JSC::JSRopeString::resolveRopeToExistingAtomicString const):
1496         (JSC::JSRopeString::resolveRopeWithFunction const):
1497         (JSC::JSRopeString::resolveRope const):
1498         (JSC::JSRopeString::resolveRopeSlowCase8 const):
1499         (JSC::JSRopeString::resolveRopeSlowCase const):
1500         (JSC::JSRopeString::outOfMemory const):
1501         (JSC::JSRopeString::visitFibers): Deleted.
1502         (JSC::JSRopeString::clearFibers const): Deleted.
1503         * runtime/JSString.h:
1504         (JSC::JSString::uninitializedValueInternal const):
1505         (JSC::JSString::valueInternal const):
1506         (JSC::JSString::JSString):
1507         (JSC::JSString::finishCreation):
1508         (JSC::JSString::create):
1509         (JSC::JSString::offsetOfValue):
1510         (JSC::JSString::isRope const):
1511         (JSC::JSString::is8Bit const):
1512         (JSC::JSString::length const):
1513         (JSC::JSString::tryGetValueImpl const):
1514         (JSC::JSString::toAtomicString const):
1515         (JSC::JSString::toExistingAtomicString const):
1516         (JSC::JSString::value const):
1517         (JSC::JSString::tryGetValue const):
1518         (JSC::JSRopeString::unsafeView const):
1519         (JSC::JSRopeString::viewWithUnderlyingString const):
1520         (JSC::JSString::unsafeView const):
1521         (JSC::JSString::viewWithUnderlyingString const):
1522         (JSC::JSString::offsetOfLength): Deleted.
1523         (JSC::JSString::offsetOfFlags): Deleted.
1524         (JSC::JSString::setIs8Bit const): Deleted.
1525         (JSC::JSString::setLength): Deleted.
1526         (JSC::JSString::string): Deleted.
1527         (JSC::jsStringBuilder): Deleted.
1528         * runtime/JSStringInlines.h:
1529         (JSC::JSString::~JSString):
1530         (JSC::JSString::equal const):
1531         * runtime/ObjectPrototype.cpp:
1532         (JSC::objectProtoFuncToString):
1533         * runtime/RegExpMatchesArray.h:
1534         (JSC::createRegExpMatchesArray):
1535         * runtime/RegExpObjectInlines.h:
1536         (JSC::collectMatches):
1537         * runtime/RegExpPrototype.cpp:
1538         (JSC::regExpProtoFuncSplitFast):
1539         * runtime/SmallStrings.cpp:
1540         (JSC::SmallStrings::initializeCommonStrings):
1541         (JSC::SmallStrings::createEmptyString): Deleted.
1542         * runtime/SmallStrings.h:
1543         * runtime/StringPrototype.cpp:
1544         (JSC::stringProtoFuncSlice):
1545         * runtime/StringPrototypeInlines.h: Added.
1546         (JSC::stringSlice):
1547
1548 2019-02-28  Saam barati  <sbarati@apple.com>
1549
1550         Unreviewed. Attempt windows build fix after r242239.
1551
1552         * runtime/CachedTypes.cpp:
1553         (JSC::tagFromSourceCodeType):
1554
1555 2019-02-28  Mark Lam  <mark.lam@apple.com>
1556
1557         In cloop.rb, rename :int and :uint to :intptr and :uintptr.
1558         https://bugs.webkit.org/show_bug.cgi?id=195183
1559
1560         Reviewed by Yusuke Suzuki.
1561
1562         Also changed intMemRef and uintMemRef to intptrMemRef and uintptrMemRef respectively.
1563
1564         * offlineasm/cloop.rb:
1565
1566 2019-02-28  Saam barati  <sbarati@apple.com>
1567
1568         Make JSScript:cacheBytecodeWithError update the cache when the script changes
1569         https://bugs.webkit.org/show_bug.cgi?id=194912
1570
1571         Reviewed by Mark Lam.
1572
1573         Prior to this patch, the JSScript SPI would never check if its cached
1574         bytecode were still valid. This would lead the cacheBytecodeWithError
1575         succeeding even if the underlying cache were stale. This patch fixes
1576         that by making JSScript check if the cache is still valid. If it's not,
1577         we will cache bytecode when cacheBytecodeWithError is invoked.
1578
1579         * API/JSScript.mm:
1580         (-[JSScript readCache]):
1581         (-[JSScript writeCache:]):
1582         * API/tests/testapi.mm:
1583         (testBytecodeCacheWithSameCacheFileAndDifferentScript):
1584         (testObjectiveCAPI):
1585         * runtime/CachedTypes.cpp:
1586         (JSC::Decoder::Decoder):
1587         (JSC::VariableLengthObject::buffer const):
1588         (JSC::CachedPtr::decode const):
1589         (JSC::tagFromSourceCodeType):
1590         (JSC::GenericCacheEntry::isUpToDate const):
1591         (JSC::CacheEntry::isStillValid const):
1592         (JSC::GenericCacheEntry::decode const):
1593         (JSC::GenericCacheEntry::isStillValid const):
1594         (JSC::encodeCodeBlock):
1595         (JSC::decodeCodeBlockImpl):
1596         (JSC::isCachedBytecodeStillValid):
1597         * runtime/CachedTypes.h:
1598         * runtime/CodeCache.cpp:
1599         (JSC::sourceCodeKeyForSerializedBytecode):
1600         (JSC::sourceCodeKeyForSerializedProgram):
1601         (JSC::sourceCodeKeyForSerializedModule):
1602         (JSC::serializeBytecode):
1603         * runtime/CodeCache.h:
1604         (JSC::CodeCacheMap::fetchFromDiskImpl):
1605         * runtime/Completion.cpp:
1606         (JSC::generateProgramBytecode):
1607         (JSC::generateBytecode): Deleted.
1608         * runtime/Completion.h:
1609
1610 2019-02-28  Mark Lam  <mark.lam@apple.com>
1611
1612         cloop.rb shift mask should depend on the word size being shifted.
1613         https://bugs.webkit.org/show_bug.cgi?id=195181
1614         <rdar://problem/48484164>
1615
1616         Reviewed by Yusuke Suzuki.
1617
1618         Previously, we're always masking the shift amount with 0x1f.  This is only correct
1619         for 32-bit words.  For 64-bit words, the mask should be 0x3f.  For pointer sized
1620         shifts, the mask depends on sizeof(uintptr_t).
1621
1622         * offlineasm/cloop.rb:
1623
1624 2019-02-28  Justin Fan  <justin_fan@apple.com>
1625
1626         [Web GPU] Enable Web GPU only on 64-bit
1627         https://bugs.webkit.org/show_bug.cgi?id=195139
1628
1629         Because Metal is only supported on 64 bit apps.
1630
1631         Unreviewed build fix.
1632
1633         * Configurations/FeatureDefines.xcconfig:
1634
1635 2019-02-27  Mark Lam  <mark.lam@apple.com>
1636
1637         The parser is failing to record the token location of new in new.target.
1638         https://bugs.webkit.org/show_bug.cgi?id=195127
1639         <rdar://problem/39645578>
1640
1641         Reviewed by Yusuke Suzuki.
1642
1643         Also adjust the token location for the following to be as shown:
1644
1645             new.target
1646             ^
1647             super
1648             ^
1649             import.meta
1650             ^
1651
1652         * parser/Parser.cpp:
1653         (JSC::Parser<LexerType>::parseMemberExpression):
1654
1655 2019-02-27  Yusuke Suzuki  <ysuzuki@apple.com>
1656
1657         [JSC] mustHandleValues for dead bytecode locals should be ignored in DFG phases
1658         https://bugs.webkit.org/show_bug.cgi?id=195144
1659         <rdar://problem/47595961>
1660
1661         Reviewed by Mark Lam.
1662
1663         DFGMaximalFlushInsertionPhase inserts Flush for all the locals at the end of basic blocks. This enlarges the live ranges of
1664         locals in DFG, and it sometimes makes DFG value live while it is dead in bytecode. The issue happens when we use mustHandleValues
1665         to widen AbstractValue in CFAPhase. At that time, DFG tells "this value is live in DFG", but it may be dead in the bytecode level.
1666         At that time, we attempt to merge AbstractValue with dead mustHandleValue, which is cleared as jsUndefined() in
1667         DFG::Plan::cleanMustHandleValuesIfNecessary before start compilation, and crash because jsUndefined() may be irrelevant to the FlushFormat
1668         in VariableAccessData.
1669
1670         This patch makes the type of mustHandleValues Operands<Optional<JSValue>>. We clear dead JSValues in DFG::Plan::cleanMustHandleValuesIfNecessary.
1671         And we skip handling dead mustHandleValue in DFG phases.
1672
1673         * bytecode/Operands.h:
1674         (JSC::Operands::isLocal const):
1675         (JSC::Operands::isVariable const): Deleted.
1676         * dfg/DFGCFAPhase.cpp:
1677         (JSC::DFG::CFAPhase::injectOSR):
1678         * dfg/DFGDriver.cpp:
1679         (JSC::DFG::compileImpl):
1680         (JSC::DFG::compile):
1681         * dfg/DFGDriver.h:
1682         * dfg/DFGJITCode.cpp:
1683         (JSC::DFG::JITCode::reconstruct):
1684         * dfg/DFGJITCode.h:
1685         * dfg/DFGOperations.cpp:
1686         * dfg/DFGPlan.cpp:
1687         (JSC::DFG::Plan::Plan):
1688         (JSC::DFG::Plan::checkLivenessAndVisitChildren):
1689         (JSC::DFG::Plan::cleanMustHandleValuesIfNecessary):
1690         * dfg/DFGPlan.h:
1691         (JSC::DFG::Plan::mustHandleValues const):
1692         * dfg/DFGPredictionInjectionPhase.cpp:
1693         (JSC::DFG::PredictionInjectionPhase::run):
1694         * dfg/DFGTypeCheckHoistingPhase.cpp:
1695         (JSC::DFG::TypeCheckHoistingPhase::disableHoistingAcrossOSREntries):
1696         * ftl/FTLOSREntry.cpp:
1697         (JSC::FTL::prepareOSREntry):
1698         * jit/JITOperations.cpp:
1699
1700 2019-02-27  Simon Fraser  <simon.fraser@apple.com>
1701
1702         Roll out r242014; it caused crashes in compositing logging (webkit.org/b/195141)
1703
1704         * bytecode/CodeBlock.cpp:
1705         (JSC::CodeBlock::nameForRegister):
1706
1707 2019-02-27  Robin Morisset  <rmorisset@apple.com>
1708
1709         DFG: Loop-invariant code motion (LICM) should not hoist dead code
1710         https://bugs.webkit.org/show_bug.cgi?id=194945
1711         <rdar://problem/48311657>
1712
1713         Reviewed by Saam Barati.
1714
1715         * dfg/DFGLICMPhase.cpp:
1716         (JSC::DFG::LICMPhase::run):
1717
1718 2019-02-27  Antoine Quint  <graouts@apple.com>
1719
1720         Support Pointer Events on macOS
1721         https://bugs.webkit.org/show_bug.cgi?id=195008
1722         <rdar://problem/47454419>
1723
1724         Reviewed by Dean Jackson.
1725
1726         * Configurations/FeatureDefines.xcconfig:
1727
1728 2019-02-26  Mark Lam  <mark.lam@apple.com>
1729
1730         Remove poisons in JSCPoison and uses of them.
1731         https://bugs.webkit.org/show_bug.cgi?id=195082
1732
1733         Reviewed by Yusuke Suzuki.
1734
1735         Also removed unused poisoning code in WriteBarrier, AssemblyHelpers,
1736         DFG::SpeculativeJIT, FTLLowerDFGToB3, and FTL::Output.
1737
1738         * API/JSAPIWrapperObject.h:
1739         (JSC::JSAPIWrapperObject::wrappedObject):
1740         * API/JSCallbackFunction.h:
1741         * API/JSCallbackObject.h:
1742         * API/glib/JSAPIWrapperGlobalObject.h:
1743         * CMakeLists.txt:
1744         * JavaScriptCore.xcodeproj/project.pbxproj:
1745         * Sources.txt:
1746         * bytecode/AccessCase.cpp:
1747         (JSC::AccessCase::generateWithGuard):
1748         * dfg/DFGSpeculativeJIT.cpp:
1749         (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments):
1750         (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
1751         (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon):
1752         (JSC::DFG::SpeculativeJIT::compileGetExecutable):
1753         (JSC::DFG::SpeculativeJIT::compileCreateThis):
1754         * dfg/DFGSpeculativeJIT.h:
1755         (JSC::DFG::SpeculativeJIT::TrustedImmPtr::weakPoisonedPointer): Deleted.
1756         * ftl/FTLLowerDFGToB3.cpp:
1757         (JSC::FTL::DFG::LowerDFGToB3::compileGetExecutable):
1758         (JSC::FTL::DFG::LowerDFGToB3::compileGetArrayLength):
1759         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
1760         (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
1761         (JSC::FTL::DFG::LowerDFGToB3::weakPointer):
1762         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoison): Deleted.
1763         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnLoadedType): Deleted.
1764         (JSC::FTL::DFG::LowerDFGToB3::dynamicPoisonOnType): Deleted.
1765         (JSC::FTL::DFG::LowerDFGToB3::weakPoisonedPointer): Deleted.
1766         * ftl/FTLOutput.h:
1767         (JSC::FTL::Output::weakPoisonedPointer): Deleted.
1768         * jit/AssemblyHelpers.cpp:
1769         (JSC::AssemblyHelpers::emitDynamicPoison): Deleted.
1770         (JSC::AssemblyHelpers::emitDynamicPoisonOnLoadedType): Deleted.
1771         (JSC::AssemblyHelpers::emitDynamicPoisonOnType): Deleted.
1772         * jit/AssemblyHelpers.h:
1773         * jit/JITOpcodes.cpp:
1774         (JSC::JIT::emit_op_create_this):
1775         * jit/JITPropertyAccess.cpp:
1776         (JSC::JIT::emitScopedArgumentsGetByVal):
1777         * jit/Repatch.cpp:
1778         (JSC::linkPolymorphicCall):
1779         * jit/ThunkGenerators.cpp:
1780         (JSC::virtualThunkFor):
1781         (JSC::nativeForGenerator):
1782         (JSC::boundThisNoArgsFunctionCallGenerator):
1783         * parser/UnlinkedSourceCode.h:
1784         * runtime/ArrayPrototype.h:
1785         * runtime/CustomGetterSetter.h:
1786         (JSC::CustomGetterSetter::getter const):
1787         (JSC::CustomGetterSetter::setter const):
1788         * runtime/InitializeThreading.cpp:
1789         (JSC::initializeThreading):
1790         * runtime/InternalFunction.cpp:
1791         (JSC::InternalFunction::getCallData):
1792         (JSC::InternalFunction::getConstructData):
1793         * runtime/InternalFunction.h:
1794         (JSC::InternalFunction::nativeFunctionFor):
1795         * runtime/JSArrayBuffer.h:
1796         * runtime/JSBoundFunction.h:
1797         * runtime/JSCPoison.cpp: Removed.
1798         * runtime/JSCPoison.h: Removed.
1799         * runtime/JSFunction.h:
1800         * runtime/JSGlobalObject.h:
1801         * runtime/JSScriptFetchParameters.h:
1802         * runtime/JSScriptFetcher.h:
1803         * runtime/JSString.h:
1804         * runtime/NativeExecutable.cpp:
1805         (JSC::NativeExecutable::hashFor const):
1806         * runtime/NativeExecutable.h:
1807         * runtime/Options.h:
1808         * runtime/ScopedArguments.h:
1809         * runtime/Structure.cpp:
1810         (JSC::StructureTransitionTable::setSingleTransition):
1811         * runtime/StructureTransitionTable.h:
1812         (JSC::StructureTransitionTable::map const):
1813         (JSC::StructureTransitionTable::weakImpl const):
1814         (JSC::StructureTransitionTable::setMap):
1815         * runtime/WriteBarrier.h:
1816         * wasm/WasmB3IRGenerator.cpp:
1817         * wasm/WasmInstance.h:
1818         * wasm/js/JSToWasm.cpp:
1819         (JSC::Wasm::createJSToWasmWrapper):
1820         * wasm/js/JSWebAssemblyCodeBlock.h:
1821         * wasm/js/JSWebAssemblyInstance.cpp:
1822         (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance):
1823         (JSC::JSWebAssemblyInstance::visitChildren):
1824         * wasm/js/JSWebAssemblyInstance.h:
1825         * wasm/js/JSWebAssemblyMemory.h:
1826         * wasm/js/JSWebAssemblyModule.h:
1827         * wasm/js/JSWebAssemblyTable.cpp:
1828         (JSC::JSWebAssemblyTable::JSWebAssemblyTable):
1829         (JSC::JSWebAssemblyTable::grow):
1830         (JSC::JSWebAssemblyTable::clearFunction):
1831         * wasm/js/JSWebAssemblyTable.h:
1832         * wasm/js/WasmToJS.cpp:
1833         (JSC::Wasm::materializeImportJSCell):
1834         (JSC::Wasm::handleBadI64Use):
1835         (JSC::Wasm::wasmToJS):
1836         * wasm/js/WebAssemblyFunctionBase.h:
1837         * wasm/js/WebAssemblyModuleRecord.cpp:
1838         (JSC::WebAssemblyModuleRecord::link):
1839         (JSC::WebAssemblyModuleRecord::evaluate):
1840         * wasm/js/WebAssemblyModuleRecord.h:
1841         * wasm/js/WebAssemblyToJSCallee.h:
1842         * wasm/js/WebAssemblyWrapperFunction.h:
1843
1844 2019-02-26  Mark Lam  <mark.lam@apple.com>
1845
1846         wasmToJS() should purify incoming NaNs.
1847         https://bugs.webkit.org/show_bug.cgi?id=194807
1848         <rdar://problem/48189132>
1849
1850         Reviewed by Saam Barati.
1851
1852         * runtime/JSCJSValue.h:
1853         (JSC::jsNumber):
1854         * runtime/TypedArrayAdaptors.h:
1855         (JSC::IntegralTypedArrayAdaptor::toJSValue):
1856         * wasm/js/WasmToJS.cpp:
1857         (JSC::Wasm::wasmToJS):
1858
1859 2019-02-26  Dominik Infuehr  <dinfuehr@igalia.com>
1860
1861         Fix warnings on ARM and MIPS
1862         https://bugs.webkit.org/show_bug.cgi?id=195049
1863
1864         Reviewed by Mark Lam.
1865
1866         Fix all warnings on ARM and MIPS.
1867
1868         * assembler/MacroAssemblerPrinter.cpp:
1869         (JSC::Printer::printMemory):
1870         * assembler/testmasm.cpp:
1871         (JSC::testProbeModifiesStackValues):
1872         * bytecode/InByIdStatus.cpp:
1873         (JSC::InByIdStatus::computeFor):
1874         * runtime/CachedTypes.cpp:
1875         (JSC::VariableLengthObject::buffer const):
1876         * runtime/JSBigInt.h:
1877         * tools/JSDollarVM.cpp:
1878         (JSC::codeBlockFromArg):
1879
1880 2019-02-26  Mark Lam  <mark.lam@apple.com>
1881
1882         Misc cleanup in StructureIDTable after r242096.
1883         https://bugs.webkit.org/show_bug.cgi?id=195063
1884
1885         Reviewed by Saam Barati.
1886
1887         * runtime/StructureIDTable.cpp:
1888         (JSC::StructureIDTable::allocateID):
1889         - RELEASE_ASSERT that the StructureID allocation will succeed.
1890
1891         * runtime/StructureIDTable.h:
1892         (JSC::StructureIDTable::decode):
1893         (JSC::StructureIDTable::encode):
1894         - Add back a comment that Yusuke requested but was lost when the patch was rolled
1895           out and relanded.
1896         - Applied bitwise_casts that Saam requested.
1897
1898 2019-02-26  Mark Lam  <mark.lam@apple.com>
1899
1900         Gardening: 32-bit build fix after r242096.
1901         https://bugs.webkit.org/show_bug.cgi?id=194989
1902
1903         Not reviewed.
1904
1905         * jit/AssemblyHelpers.cpp:
1906         (JSC::AssemblyHelpers::emitLoadStructure):
1907
1908 2019-02-26  Mark Lam  <mark.lam@apple.com>
1909
1910         Unpoison MacroAssemblerCodePtr, ClassInfo pointers, and a few other things.
1911         https://bugs.webkit.org/show_bug.cgi?id=195039
1912
1913         Reviewed by Saam Barati.
1914
1915         1. Unpoison MacroAssemblerCodePtrs, ReturnAddressPtr.
1916         2. Replace PoisonedClassInfoPtr with ClassInfo*.
1917         3. Replace PoisonedMasmPtr with const void*.
1918         4. Remove all references to CodeBlockPoison, JITCodePoison, and GlobalDataPoison.
1919
1920         * API/JSCallbackObject.h:
1921         * API/JSObjectRef.cpp:
1922         (classInfoPrivate):
1923         * assembler/MacroAssemblerCodeRef.h:
1924         (JSC::FunctionPtr::FunctionPtr):
1925         (JSC::FunctionPtr::executableAddress const):
1926         (JSC::FunctionPtr::retaggedExecutableAddress const):
1927         (JSC::ReturnAddressPtr::ReturnAddressPtr):
1928         (JSC::ReturnAddressPtr::value const):
1929         (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
1930         (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
1931         (JSC::MacroAssemblerCodePtr:: const):
1932         (JSC::MacroAssemblerCodePtr::operator! const):
1933         (JSC::MacroAssemblerCodePtr::operator== const):
1934         (JSC::MacroAssemblerCodePtr::hash const):
1935         (JSC::MacroAssemblerCodePtr::emptyValue):
1936         (JSC::MacroAssemblerCodePtr::deletedValue):
1937         (JSC::FunctionPtr<tag>::FunctionPtr):
1938         (JSC::MacroAssemblerCodePtr::poisonedPtr const): Deleted.
1939         * b3/B3LowerMacros.cpp:
1940         * b3/testb3.cpp:
1941         (JSC::B3::testInterpreter):
1942         * dfg/DFGOSRExitCompilerCommon.h:
1943         (JSC::DFG::adjustFrameAndStackInOSRExitCompilerThunk):
1944         * dfg/DFGSpeculativeJIT.cpp:
1945         (JSC::DFG::SpeculativeJIT::compileCheckSubClass):
1946         (JSC::DFG::SpeculativeJIT::compileNewStringObject):
1947         (JSC::DFG::SpeculativeJIT::emitSwitchIntJump):
1948         (JSC::DFG::SpeculativeJIT::emitSwitchImm):
1949         (JSC::DFG::SpeculativeJIT::emitSwitchCharStringJump):
1950         (JSC::DFG::SpeculativeJIT::emitSwitchChar):
1951         * dfg/DFGSpeculativeJIT.h:
1952         * ftl/FTLLowerDFGToB3.cpp:
1953         (JSC::FTL::DFG::LowerDFGToB3::compileNewStringObject):
1954         (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
1955         * jit/AssemblyHelpers.h:
1956         (JSC::AssemblyHelpers::emitAllocateDestructibleObject):
1957         * jit/ThunkGenerators.cpp:
1958         (JSC::virtualThunkFor):
1959         (JSC::boundThisNoArgsFunctionCallGenerator):
1960         * runtime/JSCPoison.h:
1961         * runtime/JSDestructibleObject.h:
1962         (JSC::JSDestructibleObject::classInfo const):
1963         * runtime/JSSegmentedVariableObject.h:
1964         (JSC::JSSegmentedVariableObject::classInfo const):
1965         * runtime/Structure.h:
1966         * runtime/VM.h:
1967         * wasm/WasmB3IRGenerator.cpp:
1968         (JSC::Wasm::B3IRGenerator::addCall):
1969         (JSC::Wasm::B3IRGenerator::addCallIndirect):
1970         * wasm/WasmBinding.cpp:
1971         (JSC::Wasm::wasmToWasm):
1972
1973 2019-02-26  Mark Lam  <mark.lam@apple.com>
1974
1975         [Re-landing] Add some randomness into the StructureID.
1976         https://bugs.webkit.org/show_bug.cgi?id=194989
1977         <rdar://problem/47975563>
1978
1979         Reviewed by Yusuke Suzuki.
1980
1981         1. On 64-bit, the StructureID will now be encoded as:
1982
1983             ----------------------------------------------------------------
1984             | 1 Nuke Bit | 24 StructureIDTable index bits | 7 entropy bits |
1985             ----------------------------------------------------------------
1986
1987            The entropy bits are chosen at random and assigned when a StructureID is
1988            allocated.
1989
1990         2. Instead of Structure pointers, the StructureIDTable will now contain
1991            encodedStructureBits, which is encoded as such:
1992
1993             ----------------------------------------------------------------
1994             | 7 entropy bits |                   57 structure pointer bits |
1995             ----------------------------------------------------------------
1996
1997            The entropy bits here are the same 7 bits used in the encoding of the
1998            StructureID for this structure entry in the StructureIDTable.
1999
2000         3. Retrieval of the structure pointer given a StructureID is now computed as
2001            follows:
2002
2003                 index = structureID >> 7; // with arithmetic shift.
2004                 encodedStructureBits = structureIDTable[index];
2005                 structure = encodedStructureBits ^ (structureID << 57);
2006
2007             We use an arithmetic shift for the right shift because that will preserve
2008             the nuke bit in the high bit of the index if the StructureID was not
2009             decontaminated before use as expected.
2010
2011         4. Remove unused function loadArgumentWithSpecificClass() in SpecializedThunkJIT.
2012
2013         5. Define StructureIDTable::m_size to be the number of allocated StructureIDs
2014            instead of always being the same as m_capacity.
2015
2016         6. Change StructureIDTable::s_unusedID's value to 0.
2017
2018            Its previous value of unusedPointer i.e. 0xd1e7beef, does not make sense for
2019            StructureID on 64-bit.  Also, there was never any code that initializes unused
2020            IDs to the s_unusedID.  The only meaningful value for s_unusedID is 0, which
2021            is the ID we'll get when the freelist is empty, prompting a resize of the
2022            structureIDTable.
2023
2024         This patch appears to be perf neutral on JetStream 2 run via the cli on a
2025         11" MacBook Air, 13" MacBook Pro, iPhone 6S, and iPhone XR.
2026
2027         * ftl/FTLLowerDFGToB3.cpp:
2028         (JSC::FTL::DFG::LowerDFGToB3::loadStructure):
2029         * heap/SlotVisitor.cpp:
2030         (JSC::SlotVisitor::appendJSCellOrAuxiliary):
2031         * jit/AssemblyHelpers.cpp:
2032         (JSC::AssemblyHelpers::emitLoadStructure):
2033         * jit/AssemblyHelpers.h:
2034         * jit/SpecializedThunkJIT.h:
2035         (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): Deleted.
2036         * llint/LowLevelInterpreter.asm:
2037         * llint/LowLevelInterpreter64.asm:
2038         * runtime/StructureIDTable.cpp:
2039         (JSC::StructureIDTable::StructureIDTable):
2040         (JSC::StructureIDTable::makeFreeListFromRange):
2041         (JSC::StructureIDTable::resize):
2042         (JSC::StructureIDTable::allocateID):
2043         (JSC::StructureIDTable::deallocateID):
2044         * runtime/StructureIDTable.h:
2045         (JSC::StructureIDTable::decode):
2046         (JSC::StructureIDTable::encode):
2047         (JSC::StructureIDTable::get):
2048         (JSC::StructureIDTable::isValid):
2049
2050 2019-02-26  Ryan Haddad  <ryanhaddad@apple.com>
2051
2052         Unreviewed, rolling out r242071.
2053
2054         Breaks internal builds.
2055
2056         Reverted changeset:
2057
2058         "Add some randomness into the StructureID."
2059         https://bugs.webkit.org/show_bug.cgi?id=194989
2060         https://trac.webkit.org/changeset/242071
2061
2062 2019-02-26  Guillaume Emont  <guijemont@igalia.com>
2063
2064         [JSC] Fix compilation on 32-bit platforms after r242071
2065         https://bugs.webkit.org/show_bug.cgi?id=195042
2066
2067         Reviewed by Carlos Garcia Campos.
2068
2069         * jit/AssemblyHelpers.cpp:
2070         (JSC::AssemblyHelpers::emitLoadStructure):
2071
2072 2019-02-26  Guillaume Emont  <guijemont@igalia.com>
2073
2074         [JSC] Repeat string created from Array.prototype.join() take too much memory
2075         https://bugs.webkit.org/show_bug.cgi?id=193912
2076
2077         Reviewed by Saam Barati.
2078
2079         Added a fast case in Array.prototype.join when the array is
2080         uninitialized.
2081
2082         * runtime/ArrayPrototype.cpp:
2083         (JSC::canUseFastJoin):
2084         (JSC::fastJoin):
2085         * runtime/JSStringInlines.h:
2086         (JSC::repeatCharacter): moved from StringPrototype.cpp
2087         * runtime/StringPrototype.cpp:
2088
2089 2019-02-25  Mark Lam  <mark.lam@apple.com>
2090
2091         Add some randomness into the StructureID.
2092         https://bugs.webkit.org/show_bug.cgi?id=194989
2093         <rdar://problem/47975563>
2094
2095         Reviewed by Yusuke Suzuki.
2096
2097         1. On 64-bit, the StructureID will now be encoded as:
2098
2099             ----------------------------------------------------------------
2100             | 1 Nuke Bit | 24 StructureIDTable index bits | 7 entropy bits |
2101             ----------------------------------------------------------------
2102
2103            The entropy bits are chosen at random and assigned when a StructureID is
2104            allocated.
2105
2106         2. Instead of Structure pointers, the StructureIDTable will now contain
2107            encodedStructureBits, which is encoded as such:
2108
2109             ----------------------------------------------------------------
2110             | 7 entropy bits |                   57 structure pointer bits |
2111             ----------------------------------------------------------------
2112
2113            The entropy bits here are the same 7 bits used in the encoding of the
2114            StructureID for this structure entry in the StructureIDTable.
2115
2116         3. Retrieval of the structure pointer given a StructureID is now computed as
2117            follows:
2118
2119                 index = structureID >> 7; // with arithmetic shift.
2120                 encodedStructureBits = structureIDTable[index];
2121                 structure = encodedStructureBits ^ (structureID << 57);
2122
2123             We use an arithmetic shift for the right shift because that will preserve
2124             the nuke bit in the high bit of the index if the StructureID was not
2125             decontaminated before use as expected.
2126
2127         4. Remove unused function loadArgumentWithSpecificClass() in SpecializedThunkJIT.
2128
2129         5. Define StructureIDTable::m_size to be the number of allocated StructureIDs
2130            instead of always being the same as m_capacity.
2131
2132         6. Change StructureIDTable::s_unusedID's value to 0.
2133
2134            Its previous value of unusedPointer i.e. 0xd1e7beef, does not make sense for
2135            StructureID on 64-bit.  Also, there was never any code that initializes unused
2136            IDs to the s_unusedID.  The only meaningful value for s_unusedID is 0, which
2137            is the ID we'll get when the freelist is empty, prompting a resize of the
2138            structureIDTable.
2139
2140         This patch appears to be perf neutral on JetStream 2 run via the cli on a
2141         11" MacBook Air, 13" MacBook Pro, iPhone 6S, and iPhone XR.
2142
2143         * ftl/FTLLowerDFGToB3.cpp:
2144         (JSC::FTL::DFG::LowerDFGToB3::loadStructure):
2145         * heap/SlotVisitor.cpp:
2146         (JSC::SlotVisitor::appendJSCellOrAuxiliary):
2147         * jit/AssemblyHelpers.cpp:
2148         (JSC::AssemblyHelpers::emitLoadStructure):
2149         * jit/AssemblyHelpers.h:
2150         * jit/SpecializedThunkJIT.h:
2151         (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): Deleted.
2152         * llint/LowLevelInterpreter.asm:
2153         * llint/LowLevelInterpreter64.asm:
2154         * runtime/StructureIDTable.cpp:
2155         (JSC::StructureIDTable::StructureIDTable):
2156         (JSC::StructureIDTable::makeFreeListFromRange):
2157         (JSC::StructureIDTable::resize):
2158         (JSC::StructureIDTable::allocateID):
2159         (JSC::StructureIDTable::deallocateID):
2160         * runtime/StructureIDTable.h:
2161         (JSC::StructureIDTable::decode):
2162         (JSC::StructureIDTable::encode):
2163         (JSC::StructureIDTable::get):
2164         (JSC::StructureIDTable::isValid):
2165
2166 2019-02-25  Yusuke Suzuki  <ysuzuki@apple.com>
2167
2168         [JSC] Revert r226885 to make SlotVisitor creation lazy
2169         https://bugs.webkit.org/show_bug.cgi?id=195013
2170
2171         Reviewed by Saam Barati.
2172
2173         We once changed SlotVisitor creation apriori to drop the lock. Also, it turns out that SlotVisitor is memory-consuming.
2174         We should defer SlotVisitor creation until it is actually required. This patch reverts r226885. Even with this patch,
2175         we still hold many SlotVisitors after we execute many parallel markers at least once. But recovering the feature of
2176         dynamically allocating SlotVisitors helps further memory optimizations in this area.
2177
2178         * heap/Heap.cpp:
2179         (JSC::Heap::Heap):
2180         (JSC::Heap::runBeginPhase):
2181         * heap/Heap.h:
2182         * heap/HeapInlines.h:
2183         (JSC::Heap::forEachSlotVisitor):
2184         (JSC::Heap::numberOfSlotVisitors):
2185         * heap/MarkingConstraintSolver.cpp:
2186         (JSC::MarkingConstraintSolver::didVisitSomething const):
2187         * heap/SlotVisitor.h:
2188
2189 2019-02-25  Saam Barati  <sbarati@apple.com>
2190
2191         testb3 and testair should test O0/O1/O2
2192         https://bugs.webkit.org/show_bug.cgi?id=194637
2193
2194         Reviewed by Mark Lam.
2195
2196         This patch makes it so that we run all tests in testair and testb3
2197         in O0, O1, and O2. However, some tests are invalid for O0 and O1.
2198         This patch makes it so we only run those tests in O2. These are
2199         often tests that assert certain optimizations have occurred. There
2200         are also a class of tests that rely on using patchpoints to stress 
2201         the register allocator into only a single valid allocation. The
2202         O0, and sometimes O1, register allocators are not always good enough
2203         to allocate such programs. To make these valid allocators to use, we rely
2204         on the FTL and Wasm to not emit such patchpoints.
2205
2206         * b3/air/testair.cpp:
2207         (main):
2208         * b3/testb3.cpp:
2209         (JSC::B3::compileProc):
2210         (JSC::B3::testAddLoadTwice):
2211         (JSC::B3::testMulLoadTwice):
2212         (JSC::B3::testSimplePatchpointWithOuputClobbersGPArgs):
2213         (JSC::B3::testSimplePatchpointWithOuputClobbersFPArgs):
2214         (JSC::B3::testPatchpointWithEarlyClobber):
2215         (JSC::B3::testSimpleCheck):
2216         (JSC::B3::testCheckFalse):
2217         (JSC::B3::testCheckTrue):
2218         (JSC::B3::testCheckLessThan):
2219         (JSC::B3::testCheckMegaCombo):
2220         (JSC::B3::testCheckTrickyMegaCombo):
2221         (JSC::B3::testCheckTwoMegaCombos):
2222         (JSC::B3::testCheckTwoNonRedundantMegaCombos):
2223         (JSC::B3::testCheckAddImm):
2224         (JSC::B3::testCheckAddImmCommute):
2225         (JSC::B3::testCheckAddImmSomeRegister):
2226         (JSC::B3::testCheckAdd):
2227         (JSC::B3::testCheckAdd64):
2228         (JSC::B3::testCheckAddFold):
2229         (JSC::B3::testCheckAddFoldFail):
2230         (JSC::B3::testCheckAddSelfOverflow64):
2231         (JSC::B3::testCheckAddSelfOverflow32):
2232         (JSC::B3::testCheckSubImm):
2233         (JSC::B3::testCheckSubBadImm):
2234         (JSC::B3::testCheckSub):
2235         (JSC::B3::testCheckSub64):
2236         (JSC::B3::testCheckSubFold):
2237         (JSC::B3::testCheckSubFoldFail):
2238         (JSC::B3::testCheckNeg):
2239         (JSC::B3::testCheckNeg64):
2240         (JSC::B3::testCheckMul):
2241         (JSC::B3::testCheckMulMemory):
2242         (JSC::B3::testCheckMul2):
2243         (JSC::B3::testCheckMul64):
2244         (JSC::B3::testCheckMulFold):
2245         (JSC::B3::testCheckMulFoldFail):
2246         (JSC::B3::testCheckMul64SShr):
2247         (JSC::B3::testLinearScanWithCalleeOnStack):
2248         (JSC::B3::testCheckSelect):
2249         (JSC::B3::testCheckSelectCheckSelect):
2250         (JSC::B3::testCheckSelectAndCSE):
2251         (JSC::B3::testLateRegister):
2252         (JSC::B3::testReduceStrengthCheckBottomUseInAnotherBlock):
2253         (JSC::B3::testSomeEarlyRegister):
2254         (JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled2):
2255         (JSC::B3::testPinRegisters):
2256         (JSC::B3::testX86LeaAddAddShlLeft):
2257         (JSC::B3::testX86LeaAddAddShlRight):
2258         (JSC::B3::testX86LeaAddAdd):
2259         (JSC::B3::testX86LeaAddShlRight):
2260         (JSC::B3::testX86LeaAddShlLeftScale1):
2261         (JSC::B3::testX86LeaAddShlLeftScale2):
2262         (JSC::B3::testX86LeaAddShlLeftScale4):
2263         (JSC::B3::testX86LeaAddShlLeftScale8):
2264         (JSC::B3::testLoadBaseIndexShift2):
2265         (JSC::B3::testOptimizeMaterialization):
2266         (JSC::B3::testLICMPure):
2267         (JSC::B3::testLICMPureSideExits):
2268         (JSC::B3::testLICMPureWritesPinned):
2269         (JSC::B3::testLICMPureWrites):
2270         (JSC::B3::testLICMReadsPinned):
2271         (JSC::B3::testLICMReads):
2272         (JSC::B3::testLICMPureNotBackwardsDominant):
2273         (JSC::B3::testLICMPureNotBackwardsDominantFoiledByChild):
2274         (JSC::B3::testLICMControlDependent):
2275         (JSC::B3::testLICMControlDependentNotBackwardsDominant):
2276         (JSC::B3::testLICMReadsWritesDifferentHeaps):
2277         (JSC::B3::testWasmBoundsCheck):
2278         (JSC::B3::run):
2279         (main):
2280
2281 2019-02-25  Yusuke Suzuki  <ysuzuki@apple.com>
2282
2283         [JSC] stress/function-constructor-reading-from-global-lexical-environment.js fails in 32bit arch
2284         https://bugs.webkit.org/show_bug.cgi?id=195030
2285         <rdar://problem/48385088>
2286
2287         Reviewed by Saam Barati.
2288
2289         While LLInt64 has checkTDZInGlobalPutToScopeIfNecessary for op_put_to_scope GlobalLexicalVar to check the value in the variable slot is not empty,
2290         this check is missing in LLInt32_64. Previously, this check was subsumed accidentally by the WatchpointSet check in GlobalLexicalVar in `notifyWrite`:
2291         because no "put" attempt succeeds here, the status WatchpointSet was ClearWatchpoint, we always go to the slow path, and we always throw the TDZ error
2292         before configuring the WatchpointSet in the slow path. But after r241862, WatchpointSet is not used under non-JIT configuration. This skips WatchpointSet
2293         check and LLInt32_64 starts failing tests because of lack of checkTDZInGlobalPutToScopeIfNecessary. This patch adds checkTDZInGlobalPutToScopeIfNecessary
2294         in LLInt32_64 too. This patch fixes the following four failing tests.
2295
2296             stress/function-constructor-reading-from-global-lexical-environment.js.bytecode-cache
2297             stress/function-constructor-reading-from-global-lexical-environment.js.default
2298             stress/global-lexical-variable-tdz.js.bytecode-cache
2299             stress/global-lexical-variable-tdz.js.default
2300
2301         * llint/LowLevelInterpreter32_64.asm:
2302
2303 2019-02-25  Yusuke Suzuki  <ysuzuki@apple.com>
2304
2305         [JSC] Make Intl fields lazily-allocated
2306         https://bugs.webkit.org/show_bug.cgi?id=195022
2307
2308         Reviewed by Mark Lam.
2309
2310         This patch makes the following memory footprint optimization in IntlObject.
2311
2312         1. Make IntlObject fields including Intl.Collator lazily-allocated because we already removed direct references from JS builtins to these constructors (@Collator etc.).
2313
2314         2. Move LazyProperty<IntlObject, Structure> structures from IntlObject to JSGlobalObject. This makes sizeof(IntlObject) the same to the other ones of usual runtime Objects,
2315            and drop one MarkedBlock.
2316
2317         * runtime/IntlCollatorConstructor.h:
2318         * runtime/IntlDateTimeFormatConstructor.h:
2319         * runtime/IntlNumberFormatConstructor.h:
2320         * runtime/IntlObject.cpp:
2321         (JSC::createCollatorConstructor):
2322         (JSC::createNumberFormatConstructor):
2323         (JSC::createDateTimeFormatConstructor):
2324         (JSC::createPluralRulesConstructor):
2325         (JSC::IntlObject::finishCreation):
2326         (JSC::IntlObject::visitChildren): Deleted.
2327         * runtime/IntlObject.h:
2328         * runtime/IntlPluralRulesConstructor.h:
2329         * runtime/JSGlobalObject.cpp:
2330         (JSC::JSGlobalObject::init):
2331         (JSC::JSGlobalObject::visitChildren):
2332         (JSC::JSGlobalObject::defaultCollator):
2333         * runtime/JSGlobalObject.h:
2334         (JSC::JSGlobalObject::collatorStructure):
2335         (JSC::JSGlobalObject::numberFormatStructure):
2336         (JSC::JSGlobalObject::dateTimeFormatStructure):
2337         (JSC::JSGlobalObject::pluralRulesStructure):
2338         (JSC::JSGlobalObject::intlObject const): Deleted.
2339         * runtime/JSGlobalObjectFunctions.cpp:
2340         (JSC::globalFuncDateTimeFormat):
2341         * runtime/NumberPrototype.cpp:
2342         (JSC::numberProtoFuncToLocaleString):
2343         * runtime/StringPrototype.cpp:
2344         (JSC::stringProtoFuncLocaleCompare):
2345
2346 2019-02-25  Tadeu Zagallo  <tzagallo@apple.com>
2347
2348         Avoid hashing CompactVariableEnvironment when decoding CompactVariableMap::Handle
2349         https://bugs.webkit.org/show_bug.cgi?id=194937
2350
2351         Reviewed by Saam Barati.
2352
2353         Hashing the CompactVariableEnvironment is expensive and we could avoid it
2354         when decoding multiple handles to the same environment. This is sound because
2355         a pointer to the same CompactVariableEnvironment will hash the same.
2356
2357         * runtime/CachedTypes.cpp:
2358         (JSC::Decoder::handleForEnvironment const):
2359         (JSC::Decoder::setHandleForEnvironment):
2360         (JSC::CachedCompactVariableMapHandle::decode const):
2361
2362 2019-02-25  Tadeu Zagallo  <tzagallo@apple.com>
2363
2364         Remove unnecessary WTF:: prefixes in CachedTypes
2365         https://bugs.webkit.org/show_bug.cgi?id=194936
2366
2367         Reviewed by Saam Barati.
2368
2369         Cleanup unnecessary prefixes from Optional, roundUpToMultipleOf and
2370         pageSize.
2371
2372         * runtime/CachedTypes.cpp:
2373         (JSC::Encoder::cachedOffsetForPtr):
2374         (JSC::Encoder::Page::malloc):
2375         (JSC::Encoder::allocateNewPage):
2376         (JSC::CachedPtr::encode):
2377         (JSC::CachedPtr::decode const):
2378         (JSC::CachedOptional::encode):
2379         (JSC::CachedOptional::decode const):
2380
2381 2019-02-25  Yusuke Suzuki  <ysuzuki@apple.com>
2382
2383         [JSC] Drop direct references to Intl constructors by rewriting Intl JS builtins in C++
2384         https://bugs.webkit.org/show_bug.cgi?id=194976
2385
2386         Reviewed by Michael Saboff.
2387
2388         This patch paves the way to making IntlObject allocation lazy by removing direct references
2389         to Intl constructors (Intl.Collator etc.) from builtin JS. To achieve that,
2390
2391         1. We implement String.prototype.toLocaleCompare and Number.prototype.toLocaleString in C++
2392            instead of JS builtins. Since these functions end up calling ICU C++ runtime, writing them in
2393            JS does not offer performance improvement.
2394
2395         2. We remove @DateTimeFormat constructor reference, and instead, exposing @dateTimeFormat function,
2396            which returns formatted string directly. We still have JS builtins for DateTimeFormat things
2397            because the initialization of its "options" JSObject involves many get_by_id / put_by_id things,
2398            which are efficient in JS. But we avoid exposing @DateTimeFormat directly, so that Intl constructors
2399            can be lazily allocated.
2400
2401         * CMakeLists.txt:
2402         * DerivedSources-input.xcfilelist:
2403         * DerivedSources.make:
2404         * JavaScriptCore.xcodeproj/project.pbxproj:
2405         * builtins/BuiltinNames.h:
2406         * builtins/DatePrototype.js:
2407         (toLocaleString):
2408         (toLocaleDateString):
2409         (toLocaleTimeString):
2410         * builtins/NumberPrototype.js: Removed.
2411         * builtins/StringPrototype.js:
2412         (intrinsic.StringPrototypeReplaceIntrinsic.replace):
2413         (globalPrivate.getDefaultCollator): Deleted.
2414         * runtime/JSGlobalObject.cpp:
2415         (JSC::JSGlobalObject::init):
2416         (JSC::JSGlobalObject::visitChildren):
2417         (JSC::JSGlobalObject::defaultCollator):
2418         * runtime/JSGlobalObject.h:
2419         * runtime/JSGlobalObjectFunctions.cpp:
2420         (JSC::globalFuncDateTimeFormat):
2421         * runtime/JSGlobalObjectFunctions.h:
2422         * runtime/NumberPrototype.cpp:
2423         (JSC::NumberPrototype::finishCreation):
2424         (JSC::throwVMToThisNumberError):
2425         (JSC::numberProtoFuncToExponential):
2426         (JSC::numberProtoFuncToFixed):
2427         (JSC::numberProtoFuncToPrecision):
2428         (JSC::numberProtoFuncToString):
2429         (JSC::numberProtoFuncToLocaleString):
2430         (JSC::numberProtoFuncValueOf):
2431         * runtime/StringPrototype.cpp:
2432         (JSC::StringPrototype::finishCreation):
2433         (JSC::stringProtoFuncLocaleCompare):
2434
2435 2019-02-24  Devin Rousso  <drousso@apple.com>
2436
2437         Web Inspector: Change the InspectorOverlay to use native rather than canvas
2438         https://bugs.webkit.org/show_bug.cgi?id=105023
2439         <rdar://problem/13443692>
2440
2441         Reviewed by Brian Burg.
2442
2443         * inspector/protocol/OverlayTypes.json: Removed.
2444         Now that the overlay is entirely generated in C++, we no longer need the special prototol
2445         types for transferring data to a JavaScript context.
2446
2447         * inspector/protocol/Debugger.json:
2448         * inspector/agents/InspectorDebuggerAgent.h:
2449         * inspector/agents/InspectorDebuggerAgent.cpp:
2450         (Inspector::InspectorDebuggerAgent::setOverlayMessage): Deleted.
2451         Remove `Debugger.setOverlayMessage` command as it hasn't been used and is no longer supported.
2452
2453         * CMakeLists.txt:
2454         * DerivedSources-input.xcfilelist:
2455         * DerivedSources.make:
2456
2457 2019-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
2458
2459         [JSC] Lazily create sentinel Map and Set buckets
2460         https://bugs.webkit.org/show_bug.cgi?id=194975
2461
2462         Reviewed by Saam Barati.
2463
2464         If VM::canUseJIT() returns false, we can lazily initialize sentinel Map and Set buckets.
2465         This patch adds getters to VM which lazily allocate these buckets. We eagerly initialize
2466         them if VM::canUseJIT() returns true since they can be touched from DFG and FTL.
2467
2468         * bytecode/BytecodeIntrinsicRegistry.cpp:
2469         (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
2470         (JSC::BytecodeIntrinsicRegistry::sentinelMapBucketValue):
2471         (JSC::BytecodeIntrinsicRegistry::sentinelSetBucketValue):
2472         * bytecode/BytecodeIntrinsicRegistry.h:
2473         * dfg/DFGByteCodeParser.cpp:
2474         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
2475         * dfg/DFGOperations.cpp:
2476         * dfg/DFGSpeculativeJIT.cpp:
2477         (JSC::DFG::SpeculativeJIT::compileGetMapBucketNext):
2478         * dfg/DFGSpeculativeJIT64.cpp:
2479         (JSC::DFG::SpeculativeJIT::compile):
2480         * ftl/FTLLowerDFGToB3.cpp:
2481         (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):
2482         (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucketNext):
2483         * runtime/MapConstructor.cpp:
2484         (JSC::mapPrivateFuncMapBucketNext):
2485         * runtime/SetConstructor.cpp:
2486         (JSC::setPrivateFuncSetBucketNext):
2487         * runtime/VM.cpp:
2488         (JSC::VM::VM):
2489         (JSC::VM::sentinelSetBucketSlow):
2490         (JSC::VM::sentinelMapBucketSlow):
2491         * runtime/VM.h:
2492         (JSC::VM::sentinelSetBucket):
2493         (JSC::VM::sentinelMapBucket):
2494
2495 2019-02-20  Darin Adler  <darin@apple.com>
2496
2497         Finish removing String::format
2498         https://bugs.webkit.org/show_bug.cgi?id=194893
2499
2500         Reviewed by Daniel Bates.
2501
2502         * bytecode/CodeBlock.cpp:
2503         (JSC::CodeBlock::nameForRegister): Use makeString instead of String::format,
2504         using the new "pad" function.
2505
2506 2019-02-23  Robin Morisset  <rmorisset@apple.com>
2507
2508         Remove dead code: AdjacencyList::justOneChild()
2509         https://bugs.webkit.org/show_bug.cgi?id=194965
2510
2511         Reviewed by Sam Weinig.
2512
2513         * dfg/DFGAdjacencyList.h:
2514         (JSC::DFG::AdjacencyList::justOneChild const): Deleted.
2515
2516 2019-02-23  Michael Catanzaro  <mcatanzaro@igalia.com>
2517
2518         Unreviewed, fix -Wunused-param warning
2519
2520         * jsc.cpp:
2521
2522 2019-02-23  Mark Lam  <mark.lam@apple.com>
2523
2524         Add an exception check and some assertions in StringPrototype.cpp.
2525         https://bugs.webkit.org/show_bug.cgi?id=194962
2526         <rdar://problem/48013416>
2527
2528         Reviewed by Yusuke Suzuki and Saam Barati.
2529
2530         * runtime/StringPrototype.cpp:
2531         (JSC::jsSpliceSubstrings):
2532         (JSC::jsSpliceSubstringsWithSeparators):
2533         (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):
2534
2535 2019-02-23  Keith Miller  <keith_miller@apple.com>
2536
2537         Add new mac target numbers
2538         https://bugs.webkit.org/show_bug.cgi?id=194955
2539
2540         Reviewed by Tim Horton.
2541
2542         * Configurations/Base.xcconfig:
2543         * Configurations/DebugRelease.xcconfig:
2544
2545 2019-02-22  Robin Morisset  <rmorisset@apple.com>
2546
2547         DFGBytecodeParser should not declare that a node won't clobberExit if DFGFixupPhase can later declare it does clobberExit
2548         https://bugs.webkit.org/show_bug.cgi?id=194953
2549         <rdar://problem/47595253>
2550
2551         Reviewed by Saam Barati.
2552
2553         For each node that
2554         (a) may or may not clobberExit depending on their arrayMode
2555         (b) and get their arrayMode from profiling information in DFGBytecodeParser
2556         (c) and can have their arrayMode refined by DFGFixupPhase,
2557         We must make sure to be conservative in the DFGBytecodeParser and treat it as if it unconditionnally clobbered the exit.
2558         Otherwise we will hit a validation failure after fixup if the next node was marked ExitValid and exits to the same semantic origin.
2559
2560         The list of nodes that fit (a) is:
2561         - StringCharAt
2562         - HasIndexProperty
2563         - GetByVal
2564         - PutByValDirect
2565         - PutByVal
2566         - PutByValAlias
2567         - GetIndexedPropertyStorage
2568
2569         Out of these, the following also fit (b) and (c):
2570         - HasIndexedProperty
2571         - GetByVal
2572         - PutByValDirect
2573         - PutByVal
2574
2575         GetByVal already had "m_exitOK = false; // GetByVal must be treated as if it clobbers exit state, since FixupPhase may make it generic."
2576         So we just have to fix the other three the same way.
2577
2578         * dfg/DFGByteCodeParser.cpp:
2579         (JSC::DFG::ByteCodeParser::parseBlock):
2580         (JSC::DFG::ByteCodeParser::handlePutByVal):
2581
2582 2019-02-22  Robin Morisset  <rmorisset@apple.com>
2583
2584         B3ReduceStrength: missing peephole optimizations for binary operations
2585         https://bugs.webkit.org/show_bug.cgi?id=194252
2586
2587         Reviewed by Saam Barati.
2588
2589         Adds several sets of optimizations for BitAnd, BitOr and BitXor.
2590         Using BitAnd distributivity over BitOr and BitXor:
2591           Turn any of these (for Op == BitOr || Op == BitXor):
2592                 Op(BitAnd(x1, x2), BitAnd(x1, x3))
2593                 Op(BitAnd(x2, x1), BitAnd(x1, x3))
2594                 Op(BitAnd(x1, x2), BitAnd(x3, x1))
2595                 Op(BitAnd(x2, x1), BitAnd(x3, x1))
2596            Into this: BitAnd(Op(x2, x3), x1)
2597            And any of these:
2598                 Op(BitAnd(x1, x2), x1)
2599                 Op(BitAnd(x2, x1), x1)
2600                 Op(x1, BitAnd(x1, x2))
2601                 Op(x1, BitAnd(x2, x1))
2602            Into this: BitAnd(Op(x2, x1), x1)
2603            This second set is equivalent to doing x1 => BitAnd(x1, x1), and then applying the first set.
2604         Using de Morgan laws (we represent not as BitXor with allOnes):
2605           BitAnd(BitXor(x1, allOnes), BitXor(x2, allOnes)) => BitXor(BitOr(x1, x2), allOnes)
2606           BitOr(BitXor(x1, allOnes), BitXor(x2, allOnes) => BitXor(BitAnd(x1, x2), allOnes)
2607           BitOr(BitXor(x, allOnes), c) => BitXor(BitAnd(x, ~c), allOnes)
2608           BitAnd(BitXor(x, allOnes), c) => BitXor(BitOr(x, ~c), allOnes)
2609         The latter two are equivalent to doing c => BitXor(~c, allOnes), and then applying the former two.
2610
2611         All of these transformations either reduce the number of operations (which we always do when possible), or bring the expression closer to having:
2612           - BitXor with all ones at the outermost
2613           - then BitAnd
2614           - then other BitXor
2615           - then BitOr at the innermost.
2616         These transformations that don't directly reduce the number of operations are still useful for normalization (helping things like CSE), and also can enable
2617         more optimizations (for example BitXor with all ones can easily cancel each other once they are all at the outermost level).
2618
2619         * b3/B3ReduceStrength.cpp:
2620         * b3/testb3.cpp:
2621         (JSC::B3::testBitAndNotNot):
2622         (JSC::B3::testBitAndNotImm):
2623         (JSC::B3::testBitOrAndAndArgs):
2624         (JSC::B3::testBitOrAndSameArgs):
2625         (JSC::B3::testBitOrNotNot):
2626         (JSC::B3::testBitOrNotImm):
2627         (JSC::B3::testBitXorAndAndArgs):
2628         (JSC::B3::testBitXorAndSameArgs):
2629         (JSC::B3::run):
2630
2631 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
2632
2633         [JSC] putNonEnumerable in JSWrapperMap is too costly
2634         https://bugs.webkit.org/show_bug.cgi?id=194935
2635
2636         Reviewed by Mark Lam.
2637
2638         When we convert Objective-C blocks to JS objects, we need to set up a corresponding function object correctly.
2639         During this allocation, we call [JSValue defineProperty:descriptor] to connect a "prototype" object and "constructor" object.
2640         The problem is that this API has a particularly costly implementation:
2641
2642             [[_context globalObject][@"Object"] invokeMethod:@"defineProperty" withArguments:@[ self, key, descriptor ]];
2643
2644         This wraps each JS objects appear in this code with Objective-C wrapper. And we convert a NSDictionary to JSObject, which
2645         has "writable", "enumerable", "configurable", "value" fields, and call the "defineProperty" JS function through Objective-C wrapper.
2646         This allocates many Objective-C wrappers and JS objects for descriptors. Since JSC has a direct C++ API "defineOwnProperty", we should
2647         bypass these Objective-C APIs and call JSC's code directly.
2648
2649         This patch changes `putNonEnumerable` implementation, from calling [JSValue defineProperty:descriptor] to calling JSC C++ code directly.
2650         We do not change [JSValue defineProperty:descriptor] implementation for now because of two reasons. (1) This is not used in our benchmarks
2651         except for this (converting an Objective-C block to a JS object) one path. And (2) even if we were to re-write [JSValue defineProperty:descriptor]
2652         to be more optimized, we would still want to call the JSC C++ version of defineProperty directly here to avoid NSDictionary allocation for a descriptor.
2653
2654         * API/APIUtils.h:
2655         (setException):
2656         * API/JSWrapperMap.mm:
2657         (putNonEnumerable):
2658         (copyMethodsToObject):
2659         (-[JSObjCClassInfo allocateConstructorAndPrototypeInContext:]):
2660         (-[JSObjCClassInfo wrapperForObject:inContext:]):
2661
2662 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
2663
2664         Unreviewed, build fix after r241954
2665         https://bugs.webkit.org/show_bug.cgi?id=194939
2666
2667         Renaming setCanAccessHeap was incomplete.
2668
2669         * runtime/SmallStrings.cpp:
2670         (JSC::SmallStrings::initializeCommonStrings):
2671         * runtime/VM.cpp:
2672         (JSC::VM::~VM):
2673
2674 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
2675
2676         [JSC] SmallStringsStorage is unnecessary
2677         https://bugs.webkit.org/show_bug.cgi?id=194939
2678
2679         Reviewed by Mark Lam.
2680
2681         SmallStrings hold common small JSStrings. Their underlying StringImpl is also held by SmallStringsStorage.
2682         But it is duplicate since we can get StringImpl from small JSStrings. This patch removes SmallStringsStorage,
2683         and get StringImpls from JSStrings if necessary.
2684
2685         We also add m_canAccessHeap flag to SmallStrings. At the time of VM destruction, JSStrings are destroyed when
2686         VM's Heap is finalized. We must not touch JSStrings before VM's heap (and JSStrings in SmallStrings) is initialized,
2687         and after VM's Heap is destroyed. We add this m_canAccessHeap flag to allow users to get StringImpl during the
2688         this sensitive period. If m_canAccessHeap is false, we get StringImpl from AtomicStringImpl::add.
2689
2690         * runtime/SmallStrings.cpp:
2691         (JSC::SmallStrings::initializeCommonStrings):
2692         (JSC::SmallStrings::singleCharacterStringRep):
2693         (JSC::SmallStringsStorage::rep): Deleted.
2694         (JSC::SmallStringsStorage::SmallStringsStorage): Deleted.
2695         (JSC::SmallStrings::createSingleCharacterString): Deleted.
2696         * runtime/SmallStrings.h:
2697         (JSC::SmallStrings::setCanAccessHeap):
2698         * runtime/VM.cpp:
2699         (JSC::VM::VM):
2700         (JSC::VM::~VM):
2701
2702 2019-02-22  Tadeu Zagallo  <tzagallo@apple.com>
2703
2704         Cache CompactVariableMap::Handle instead of VariableEnvironment for UnlinkedFunctionExecutable
2705         https://bugs.webkit.org/show_bug.cgi?id=194706
2706
2707         Reviewed by Saam Barati.
2708
2709         In https://bugs.webkit.org/show_bug.cgi?id=194583 we started using a
2710         CompactVariableMap::Handle instead of VariableEnvironment for
2711         UnlinkedFunctionExecutables, but we were creating the full environment
2712         to encode the executable in the bytecode cache. This patch changes it so
2713         that we cache the handle instead of the environment. This avoids duplicating
2714         the VariableEnvironment whenever we have to cache two handles that point
2715         to the environment.
2716
2717         * bytecode/UnlinkedFunctionExecutable.h:
2718         * parser/VariableEnvironment.cpp:
2719         (JSC::CompactVariableMap::get):
2720         * parser/VariableEnvironment.h:
2721         * runtime/CachedTypes.cpp:
2722         (JSC::CachedCompactVariableEnvironment::encode):
2723         (JSC::CachedCompactVariableEnvironment::decode const):
2724         (JSC::CachedCompactVariableMapHandle::encode):
2725         (JSC::CachedCompactVariableMapHandle::decode const):
2726         (JSC::CachedFunctionExecutable::encode):
2727         (JSC::CachedFunctionExecutable::decode const):
2728         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
2729
2730 2019-02-21  Saam Barati  <sbarati@apple.com>
2731
2732         Update JSScript SPI based on feedback
2733         https://bugs.webkit.org/show_bug.cgi?id=194517
2734
2735         Reviewed by Keith Miller.
2736
2737         This patch updates the JSScript SPI in the following ways:
2738         - JSScript can now represent both modules and programs. This is a property
2739         of the script determined during creation.
2740         - JSScript now takes a sourceURL during construction. For modules, this acts
2741         as the module identifier.
2742         - JSScript now has SPI for writing the cache out to disk. We don't do this
2743         automatically.
2744         - JSScript will load the bytecode cache on creation if it exists.
2745         - We retrofit these new requirements on the prior JSScript SPI that
2746         we're going to remove as soon as we can: https://bugs.webkit.org/show_bug.cgi?id=194909.
2747         Previous SPI assumes all JSScripts are modules. Previous SPI also assigns
2748         a sourceURL to the JSScript based on what the module loader decided the
2749         identifier should be. We'll remove this once we remove the old SPI.
2750         
2751         This patch also adds SPI to JSContext to evaluate a JSScript. For modules,
2752         this is like returning the result of doing dynamic import. For programs,
2753         this does normal program evaluation.
2754         
2755         This patch also fixes a bug in generateBytecode/generateModuleBytecode where
2756         we would try to cache the bytecode even if recursivelyGenerateUnlinkedCodeBlock
2757         returned null. E.g, if the script had a syntax error.
2758         
2759         When writing tests, I also discovered that someone previously broke
2760         testapi. This patch also fixes those failures. They were broken when
2761         we switched to using a testapiScripts directory to hold our test .js
2762         scripts. 
2763
2764         * API/JSAPIGlobalObject.h:
2765         * API/JSAPIGlobalObject.mm:
2766         (JSC::JSAPIGlobalObject::moduleLoaderResolve):
2767         (JSC::JSAPIGlobalObject::moduleLoaderFetch):
2768         (JSC::JSAPIGlobalObject::loadAndEvaluateJSScriptModule):
2769         * API/JSBase.cpp:
2770         (JSEvaluateScriptInternal):
2771         (JSEvaluateScript):
2772         * API/JSBaseInternal.h: Added.
2773         * API/JSContext.mm:
2774         (-[JSContext evaluateScript:withSourceURL:]):
2775         (-[JSContext evaluateJSScript:]):
2776         * API/JSContextPrivate.h:
2777         * API/JSScript.h:
2778         * API/JSScript.mm:
2779         (+[JSScript scriptWithSource:inVirtualMachine:]):
2780         (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
2781         (createError):
2782         (+[JSScript scriptOfType:inVirtualMachine:withSourceURL:andSource:andBytecodeCache:error:]):
2783         (+[JSScript scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error:]):
2784         (-[JSScript cacheBytecodeWithError:]):
2785         (-[JSScript sourceURL]):
2786         (-[JSScript type]):
2787         (-[JSScript jsSourceCode]):
2788         (-[JSScript writeCache:]):
2789         (-[JSScript setSourceURL:]):
2790         (-[JSScript forceRecreateJSSourceCode]):
2791         (-[JSScript writeCache]): Deleted.
2792         (-[JSScript jsSourceCode:]): Deleted.
2793         * API/JSScriptInternal.h:
2794         * API/tests/FunctionOverridesTest.cpp:
2795         (testFunctionOverrides):
2796         * API/tests/testapi.c:
2797         (main):
2798         * API/tests/testapi.mm:
2799         (tempFile):
2800         (testModuleBytecodeCache):
2801         (testProgramBytecodeCache):
2802         (testBytecodeCacheWithSyntaxError):
2803         (testProgramJSScriptException):
2804         (testLoadBasicFileLegacySPI):
2805         (+[JSContextMemoryMappedLoaderDelegate newContext]):
2806         (-[JSContextMemoryMappedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
2807         (testLoadBasicFile):
2808         (+[JSContextAugmentedLoaderDelegate newContext]):
2809         (-[JSContextAugmentedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
2810         (testJSScriptURL):
2811         (testObjectiveCAPI):
2812         (testBytecodeCache): Deleted.
2813         * API/tests/testapiScripts/foo.js: Added.
2814         * JavaScriptCore.xcodeproj/project.pbxproj:
2815         * runtime/Completion.cpp:
2816         (JSC::generateBytecode):
2817         (JSC::generateModuleBytecode):
2818
2819 2019-02-21  Mark Lam  <mark.lam@apple.com>
2820
2821         Add more doesGC() assertions.
2822         https://bugs.webkit.org/show_bug.cgi?id=194911
2823         <rdar://problem/48285723>
2824
2825         Reviewed by Saam Barati and Yusuke Suzuki.
2826
2827         * dfg/DFGOSRExit.cpp:
2828         (JSC::DFG::OSRExit::compileOSRExit):
2829         - Set expectDoesGC here because we no longer have to worry about missing store
2830           barriers in optimized code after this point.  This will prevent false positive
2831           assertion failures arising from functions called beneath compileOSRExit().
2832
2833         (JSC::DFG::OSRExit::compileExit):
2834         - Add a comment to explain why the generated ramp needs to set expectDoesGC even
2835           though compileOSRExit() also sets it.  Reason: compileOSRExit() is only called
2836           for the first OSR from this code origin, the generated ramp is called for many
2837           subsequents OSR exits from this code origin.
2838
2839         * ftl/FTLOSRExitCompiler.cpp:
2840         (JSC::FTL::compileStub):
2841         - Added a comment for the equivalent reason to the one above.
2842
2843         (JSC::FTL::compileFTLOSRExit):
2844         - Set expectDoesGC here because we no longer have to worry about missing store
2845           barriers in optimized code after this point.  This will prevent false positive
2846           assertion failures arising from functions called beneath compileFTLOSRExit().
2847
2848         * heap/CompleteSubspace.cpp:
2849         (JSC::CompleteSubspace::tryAllocateSlow):
2850         * heap/CompleteSubspaceInlines.h:
2851         (JSC::CompleteSubspace::allocateNonVirtual):
2852         - assert expectDoesGC.
2853
2854         * heap/DeferGC.h:
2855         (JSC::DeferGC::~DeferGC):
2856         - assert expectDoesGC.
2857         - Also added WTF_FORBID_HEAP_ALLOCATION to DeferGC, DeferGCForAWhile, and DisallowGC
2858           because all 3 should be stack allocated RAII objects.
2859
2860         * heap/GCDeferralContext.h:
2861         * heap/GCDeferralContextInlines.h:
2862         (JSC::GCDeferralContext::~GCDeferralContext):
2863         - Added WTF_FORBID_HEAP_ALLOCATION.
2864         - assert expectDoesGC.
2865
2866         * heap/Heap.cpp:
2867         (JSC::Heap::collectNow):
2868         (JSC::Heap::collectAsync):
2869         (JSC::Heap::collectSync):
2870         (JSC::Heap::stopIfNecessarySlow):
2871         (JSC::Heap::collectIfNecessaryOrDefer):
2872         * heap/HeapInlines.h:
2873         (JSC::Heap::acquireAccess):
2874         (JSC::Heap::stopIfNecessary):
2875         * heap/LargeAllocation.cpp:
2876         (JSC::LargeAllocation::tryCreate):
2877         * heap/LocalAllocatorInlines.h:
2878         (JSC::LocalAllocator::allocate):
2879         - conservatively assert expectDoesGC on these functions that may trigger a GC
2880           though they don't always do.
2881
2882         * runtime/DisallowScope.h:
2883         - DisallowScope should be stack allocated because it's an RAII object.
2884
2885         * runtime/JSCellInlines.h:
2886         (JSC::tryAllocateCellHelper):
2887         - Remove the expectDoesGC assertion because it is now covered by assertions in
2888           CompleteSubspace, LargeAllocation, and LocalAllocator.
2889
2890         * runtime/RegExpMatchesArray.h:
2891         (JSC::createRegExpMatchesArray):
2892         - assert expectDoesGC.
2893
2894 2019-02-21  Yusuke Suzuki  <ysuzuki@apple.com>
2895
2896         [JSC] Use Fast Malloc as much as possible
2897         https://bugs.webkit.org/show_bug.cgi?id=194316
2898
2899         Reviewed by Mark Lam.
2900
2901         We should use Fast Malloc as much as possible to offer the whole memory view to bmalloc.
2902
2903         * inspector/scripts/codegen/cpp_generator_templates.py:
2904         * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
2905         * inspector/scripts/tests/generic/expected/enum-values.json-result:
2906         * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
2907         * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
2908         * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
2909         * jit/ExecutableAllocator.h:
2910         * jsc.cpp:
2911         * runtime/JSRunLoopTimer.h:
2912         * tools/VMInspector.h:
2913         * wasm/WasmThunks.h:
2914
2915 2019-02-20  Yusuke Suzuki  <ysuzuki@apple.com>
2916
2917         [JSC] Remove WatchpointSet creation for SymbolTable entries if VM::canUseJIT() returns false
2918         https://bugs.webkit.org/show_bug.cgi?id=194891
2919
2920         Reviewed by Geoffrey Garen.
2921
2922         WatchpointSet in SymbolTable is used to fold the value into a constant in JIT tiers. And it is
2923         not useful under the non-JIT mode. This patch avoids creation of WatchpointSet in SymbolTable
2924         if VM::canUseJIT() returns false.
2925
2926         * llint/LowLevelInterpreter32_64.asm:
2927         * llint/LowLevelInterpreter64.asm:
2928         * runtime/SymbolTable.cpp:
2929         (JSC::SymbolTableEntry::addWatchpoint): Deleted.
2930         * runtime/SymbolTable.h:
2931         (JSC::SymbolTableEntry::isWatchable const):
2932         (JSC::SymbolTableEntry::watchpointSet):
2933
2934 2019-02-20  Mark Lam  <mark.lam@apple.com>
2935
2936         Add code to validate expected GC activity modelled by doesGC() against what the runtime encounters.
2937         https://bugs.webkit.org/show_bug.cgi?id=193938
2938         <rdar://problem/47616277>
2939
2940         Reviewed by Michael Saboff, Saam Barati, and Robin Morisset.
2941
2942         In DFG::SpeculativeJIT::compile() and FTL::LowerDFGToB3::compileNode(), before
2943         emitting code / B3IR for each DFG node, we emit a write to set Heap::m_expectDoesGC
2944         to the value returned by doesGC() for that node.  In the runtime (i.e. in allocateCell()
2945         and functions that can resolve a rope), we assert that Heap::m_expectDoesGC is
2946         true.
2947
2948         This validation code is currently only enabled for debug builds.  It is disabled
2949         for release builds by default, but it can easily be made to run on release builds
2950         as well by forcing ENABLE_DFG_DOES_GC_VALIDATION to 1 in Heap.h.
2951
2952         To allow this validation code to run on release builds as well, the validation uses
2953         RELEASE_ASSERT instead of ASSERT.
2954
2955         To ensure that Heap.h is #include'd for all files that needs to do this validation
2956         (so that the validation code is accidentally disabled), we guard the validation
2957         code with an if conditional on constexpr bool validateDFGDoesGC (instead of using
2958         a #if ENABLE(DFG_DOES_GC_VALIDATION)).  This way, if Heap.h isn't #include'd, the
2959         validation code will fail to build (no silent failures).
2960
2961         Currently, all JSC tests and Layout tests should pass with this validation enabled
2962         in debug builds.  We'll only see new failures if there's a regression or if new
2963         tests reveal a previously untested code path that has an undetected issue.
2964
2965         * dfg/DFGOSRExit.cpp:
2966         (JSC::DFG::OSRExit::executeOSRExit):
2967         (JSC::DFG::OSRExit::compileExit):
2968         * dfg/DFGSpeculativeJIT64.cpp:
2969         (JSC::DFG::SpeculativeJIT::compile):
2970         * ftl/FTLLowerDFGToB3.cpp:
2971         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
2972         * ftl/FTLOSRExitCompiler.cpp:
2973         (JSC::FTL::compileStub):
2974         * heap/Heap.h:
2975         (JSC::Heap::expectDoesGC const):
2976         (JSC::Heap::setExpectDoesGC):
2977         (JSC::Heap::addressOfExpectDoesGC):
2978         * jit/JITArithmetic.cpp:
2979         (JSC::JIT::emit_compareAndJump):
2980         * runtime/JSCellInlines.h:
2981         (JSC::tryAllocateCellHelper):
2982         * runtime/JSString.h:
2983         (JSC::jsSingleCharacterString):
2984         (JSC::JSString::toAtomicString const):
2985         (JSC::JSString::toExistingAtomicString const):
2986         (JSC::JSString::value const):
2987         (JSC::JSString::tryGetValue const):
2988         (JSC::JSRopeString::unsafeView const):
2989         (JSC::JSRopeString::viewWithUnderlyingString const):
2990         (JSC::JSString::unsafeView const):
2991
2992 2019-02-20  Andy Estes  <aestes@apple.com>
2993
2994         [Xcode] Add SDKVariant.xcconfig to various Xcode projects
2995         https://bugs.webkit.org/show_bug.cgi?id=194869
2996
2997         Rubber-stamped by Jer Noble.
2998
2999         * JavaScriptCore.xcodeproj/project.pbxproj:
3000
3001 2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>
3002
3003         Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
3004         https://bugs.webkit.org/show_bug.cgi?id=172848
3005         <rdar://problem/25709212>
3006
3007         Reviewed by Mark Lam.
3008
3009         * heap/HeapSnapshotBuilder.h:
3010         * heap/HeapSnapshotBuilder.cpp:
3011         Update the snapshot version. Change the node's 0 | 1 internal value
3012         to be a 32bit bit flag. This is nice in that it is both compatible
3013         with the previous snapshot version and the same size. We can use more
3014         flags in the future.
3015
3016         (JSC::HeapSnapshotBuilder::json):
3017         In cases where the classInfo gives us "Object" check for a better
3018         class name by checking (o).__proto__.constructor.name. We avoid this
3019         check in cases where (o).hasOwnProperty("constructor") which is the
3020         case for most Foo.prototype objects. Otherwise this would get the
3021         name of the Foo superclass for the Foo.prototype object.
3022
3023         * runtime/JSObject.cpp:
3024         (JSC::JSObject::calculatedClassName):
3025         Handle some possible edge cases that were not handled before, such as
3026         a JSObject without a GlobalObject or an object which doesn't
3027         have a default getPrototype. Try to make the code a little clearer.
3028
3029 2019-02-19  Truitt Savell  <tsavell@apple.com>
3030
3031         Unreviewed, rolling out r241784.
3032
3033         Broke all OpenSource builds.
3034
3035         Reverted changeset:
3036
3037         "Web Inspector: Improve ES6 Class instances in Heap Snapshot
3038         instances view"
3039         https://bugs.webkit.org/show_bug.cgi?id=172848
3040         https://trac.webkit.org/changeset/241784
3041
3042 2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>
3043
3044         Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
3045         https://bugs.webkit.org/show_bug.cgi?id=172848
3046         <rdar://problem/25709212>
3047
3048         Reviewed by Mark Lam.
3049
3050         * heap/HeapSnapshotBuilder.h:
3051         * heap/HeapSnapshotBuilder.cpp:
3052         Update the snapshot version. Change the node's 0 | 1 internal value
3053         to be a 32bit bit flag. This is nice in that it is both compatible
3054         with the previous snapshot version and the same size. We can use more
3055         flags in the future.
3056
3057         (JSC::HeapSnapshotBuilder::json):
3058         In cases where the classInfo gives us "Object" check for a better
3059         class name by checking (o).__proto__.constructor.name. We avoid this
3060         check in cases where (o).hasOwnProperty("constructor") which is the
3061         case for most Foo.prototype objects. Otherwise this would get the
3062         name of the Foo superclass for the Foo.prototype object.
3063
3064         * runtime/JSObject.cpp:
3065         (JSC::JSObject::calculatedClassName):
3066         Handle some possible edge cases that were not handled before, such as
3067         a JSObject without a GlobalObject or an object which doesn't
3068         have a default getPrototype. Try to make the code a little clearer.
3069
3070 2019-02-19  Robin Morisset  <rmorisset@apple.com>
3071
3072         B3-O2 incorrectly optimizes this subtest
3073         https://bugs.webkit.org/show_bug.cgi?id=194625
3074
3075         Reviewed by Saam Barati.
3076
3077         Trivial fix. Instead of doing
3078             if (!cond) foo else bar => if (cond) bar else foo
3079         B3LowerToAir was doing
3080             if (x^C) foo else bar => if (cond) bar else foo whenever C&1, even if C was for example 3.
3081
3082         * b3/B3LowerToAir.cpp:
3083         * b3/testb3.cpp:
3084         (JSC::B3::testBitNotOnBooleanAndBranch32):
3085         (JSC::B3::testNotOnBooleanAndBranch32): Added.
3086
3087 2019-02-19  Robin Morisset  <rmorisset@apple.com>
3088
3089         CachedCall should not consider it UNLIKELY that it will not stack overflow
3090         https://bugs.webkit.org/show_bug.cgi?id=194831
3091
3092         Reviewed by Mark Lam.
3093
3094         * interpreter/CachedCall.h:
3095         (JSC::CachedCall::CachedCall):
3096
3097 2019-02-19  Mark Lam  <mark.lam@apple.com>
3098
3099         Fix DFG doesGC() for TryGetById and ProfileType nodes.
3100         https://bugs.webkit.org/show_bug.cgi?id=194821
3101         <rdar://problem/48206690>
3102
3103         Reviewed by Saam Barati.
3104
3105         Fix doesGC() for the following nodes:
3106
3107             ProfileType:
3108                 calls operationProcessTypeProfilerLogDFG(), which can calculatedClassName(),
3109                 which can call JSString::tryGetValue(), which can resolve a rope.
3110
3111             TryGetById:
3112                 calls operationTryGetByIdOptimize(), which can startWatchingPropertyForReplacements()
3113                 on a structure, which can allocate StructureRareData.
3114
3115         * dfg/DFGDoesGC.cpp:
3116         (JSC::DFG::doesGC):
3117
3118 2019-02-18  Yusuke Suzuki  <ysuzuki@apple.com>
3119
3120         [JSC] Introduce JSNonDestructibleProxy for JavaScriptCore.framework's GlobalThis
3121         https://bugs.webkit.org/show_bug.cgi?id=194799
3122
3123         Reviewed by Saam Barati.
3124
3125         JSProxy is destructible one because we have JSWindowProxy which has ref counted object.
3126         However, JavaScriptCore.framework's JSProxy for GlobalThis does not need to be destructible.
3127         This is important since we need to separate Heap subspaces between destructible and non-destructible objects.
3128         If we can put more and more objects in non-destructible status, we can get rid of low-usage MarkedBlock.
3129         This patch adds JSNonDestructibleProxy, which is not destructible JSProxy. While it inherits JSDestructibleObject,
3130         we can make the subclass still non-destructible thanks to Subspace mechanism. This drops one more low-usage MarkedBlock.
3131
3132         * CMakeLists.txt:
3133         * JavaScriptCore.xcodeproj/project.pbxproj:
3134         * Sources.txt:
3135         * runtime/JSGlobalObject.cpp:
3136         (JSC::JSGlobalObject::resetPrototype):
3137         (JSC::JSGlobalObject::finishCreation):
3138         * runtime/JSNonDestructibleProxy.cpp: Added.
3139         * runtime/JSNonDestructibleProxy.h: Added.
3140         (JSC::JSNonDestructibleProxy::subspaceFor):
3141         (JSC::JSNonDestructibleProxy::create):
3142         (JSC::JSNonDestructibleProxy::createStructure):
3143         (JSC::JSNonDestructibleProxy::JSNonDestructibleProxy):
3144         * runtime/JSProxy.h:
3145         (JSC::JSProxy::JSProxy):
3146
3147 2019-02-19  Robin Morisset  <rmorisset@apple.com>
3148
3149         B3ReduceStrength::simplifyCFG() could do a lot more on each iteration
3150         https://bugs.webkit.org/show_bug.cgi?id=194475
3151
3152         Reviewed by Saam Barati.
3153
3154         B3ReduceStrength::simplifyCFG() does three optimizations (which I will call A, B and C):
3155         - A makes any terminal that points to a block that is empty except for a jump point to that jump's target instead.
3156         - B transforms any branch or switch that points to a single block into a jump
3157         - C finds blocks ending with jumps, whose successor has a single predecessor, and inline that successor block in place of the jump
3158
3159         It currently is limited in the following way:
3160         - A and C can only fire once per block per iteration
3161         - B can create jumps that would trigger A, but they may not be seen until the next iteration
3162
3163         Both problems are mitigated by going through the blocks in post-order, so that when a block is optimized most of its successors have already been optimized.
3164         In a sense it is the symmetric of the peephole optimizer that goes in pre-order so that when an instruction is optimized most of its children have already been optimized.
3165
3166         On JetStream2 it reduces the average number of iterations from 3.35 to 3.24.
3167
3168         * b3/B3ReduceStrength.cpp:
3169
3170 2019-02-19  Tadeu Zagallo  <tzagallo@apple.com>
3171
3172         Move bytecode cache-related filesystem code out of CodeCache
3173         https://bugs.webkit.org/show_bug.cgi?id=194675
3174
3175         Reviewed by Saam Barati.
3176
3177         The code is only used for the bytecode-cache tests, so it should live in
3178         jsc.cpp rather than in the CodeCache. The logic now lives in ShellSourceProvider,
3179         which overrides the a virtual method in SourceProvider, `cacheBytecode`,
3180         in order to write the cache to disk.
3181
3182         * jsc.cpp:
3183         (ShellSourceProvider::create):
3184         (ShellSourceProvider::~ShellSourceProvider):
3185         (ShellSourceProvider::cachePath const):
3186         (ShellSourceProvider::loadBytecode):
3187         (ShellSourceProvider::ShellSourceProvider):
3188         (jscSource):
3189         (GlobalObject::moduleLoaderFetch):
3190         (functionDollarEvalScript):
3191         (runWithOptions):
3192         * parser/SourceProvider.h:
3193         (JSC::SourceProvider::cacheBytecode const):
3194         * runtime/CodeCache.cpp:
3195         (JSC::writeCodeBlock):
3196         * runtime/CodeCache.h:
3197         (JSC::CodeCacheMap::fetchFromDiskImpl):
3198
3199 2019-02-18  Dominik Infuehr  <dinfuehr@igalia.com>
3200
3201         [ARM] Fix crash with sampling profiler
3202         https://bugs.webkit.org/show_bug.cgi?id=194772
3203
3204         Reviewed by Mark Lam.
3205
3206         sampling-profiler-richards.js was crashing with an enabled sampling profiler. add32
3207         did not update the stack pointer in a single instruction. The src register was first
3208         moved into the stack pointer, the immediate imm was added in a subsequent instruction.
3209
3210         This was problematic when a signal handler was invoked before applying the immediate,
3211         when the stack pointer is still set to the temporary value. Avoid this by calculating src+imm in
3212         a temporary register and then move it in one go into the stack pointer.
3213
3214         * assembler/MacroAssemblerARMv7.h:
3215         (JSC::MacroAssemblerARMv7::add32):
3216
3217 2019-02-18  Mark Lam  <mark.lam@apple.com>
3218
3219         Fix DFG doesGC() for CompareEq/Less/LessEq/Greater/GreaterEq and CompareStrictEq nodes.
3220         https://bugs.webkit.org/show_bug.cgi?id=194800
3221         <rdar://problem/48183773>
3222
3223         Reviewed by Yusuke Suzuki.
3224
3225         Fix doesGC() for the following nodes:
3226
3227             CompareEq:
3228             CompareLess:
3229             CompareLessEq:
3230             CompareGreater:
3231             CompareGreaterEq:
3232             CompareStrictEq:
3233                 Only return false (i.e. does not GC) for child node use kinds that have
3234                 been vetted to not do anything that can GC.  For all other use kinds
3235                 (including StringUse and BigIntUse), we return true (i.e. does GC).
3236
3237         * dfg/DFGDoesGC.cpp:
3238         (JSC::DFG::doesGC):
3239
3240 2019-02-16  Darin Adler  <darin@apple.com>
3241
3242         Continue reducing use of String::format, now focusing on hex: "%p", "%x", etc.
3243         https://bugs.webkit.org/show_bug.cgi?id=194752
3244
3245         Reviewed by Daniel Bates.
3246
3247         * heap/HeapSnapshotBuilder.cpp:
3248         (JSC::HeapSnapshotBuilder::json): Added back the "0x" that was removed when changing
3249         this file to use appendUnsignedAsHex instead of "%p". The intent at that time was to
3250         keep behavior the same, so let's do that.
3251
3252         * parser/Lexer.cpp:
3253         (JSC::Lexer<T>::invalidCharacterMessage const): Use makeString and hex instead of
3254         String::format and "%04x".
3255
3256 2019-02-18  Yusuke Suzuki  <ysuzuki@apple.com>
3257
3258         [JSC] Add LazyClassStructure::getInitializedOnMainThread
3259         https://bugs.webkit.org/show_bug.cgi?id=194784
3260         <rdar://problem/48154820>
3261
3262         Reviewed by Mark Lam.
3263
3264         LazyClassStructure::get and LazyProperty::get functions do not allow compiler threads to call them. But for booleanPrototype, numberPrototype and symbolPrototype cases,
3265         we would like to call them from compiler threads. We eagerly initialize them if VM::canUseJIT() is true, so that compiler threads can safely call LazyClassStructure::get
3266         and LazyProperty::get for booleanPrototype, numberPrototype and symbolPrototype. But still assertion hits because the assertion requires that these functions need to be
3267         called in non compiler threads. Calling `getConcurrently()` is not possible since symbolPrototype() function is called from both the main thread and compiler threads,
3268         and we would like to lazily initialize SymbolPrototype object if it is called from the main thread, which can happen with non-JIT configuration.
3269
3270         This patch adds `getInitializedOnMainThread()`. Compiler threads can call it only when we know that the value is already initialized on the main thread. The main thread
3271         can call it at anytime and this function lazily initializes the value. This is useful to make some of prototypes lazy with non-JIT configuration: With non-JIT configuration,
3272         this function is always called from the main thread and it initializes the value lazily. Non-JIT configuration does not care about compiler threads since they do not exist.
3273         With JIT configuration, we eagerly initialize them in JSGlobalObject::init so that `getInitializedOnMainThread()` always succeeds.
3274
3275         Basically, `getInitializedOnMainThread()` is `get` with different assertion location: While `get` always crashes if it is called from compiler threads, `getInitializedOnMainThread()`
3276         crashes only when actual initialization happens on compiler threads. We do not merge them since `get` is still useful to find accidental initialization from compiler threads.
3277
3278         * runtime/JSGlobalObject.h:
3279         (JSC::JSGlobalObject::booleanPrototype const):
3280         (JSC::JSGlobalObject::numberPrototype const):
3281         (JSC::JSGlobalObject::symbolPrototype const):
3282         * runtime/LazyClassStructure.h:
3283         (JSC::LazyClassStructure::getInitializedOnMainThread const):
3284         (JSC::LazyClassStructure::prototypeInitializedOnMainThread const):
3285         (JSC::LazyClassStructure::constructorInitializedOnMainThread const):
3286         * runtime/LazyProperty.h:
3287         (JSC::LazyProperty::get const):
3288         (JSC::LazyProperty::getInitializedOnMainThread const):
3289
3290 2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>
3291
3292         Web Inspector: Better categorize CPU usage per-thread / worker
3293         https://bugs.webkit.org/show_bug.cgi?id=194564
3294
3295         Reviewed by Devin Rousso.
3296
3297         * inspector/protocol/CPUProfiler.json:
3298         Add additional properties per-Event, and new per-Thread object info.
3299
3300 2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>
3301
3302         Bytecode cache should a have a boot-specific validation
3303         https://bugs.webkit.org/show_bug.cgi?id=194769
3304         <rdar://problem/48149509>
3305
3306         Reviewed by Keith Miller.
3307
3308         Add the boot UUID to the cached bytecode to enforce that it is not reused
3309         across reboots.
3310
3311         * runtime/CachedTypes.cpp:
3312         (JSC::Encoder::malloc):
3313         (JSC::GenericCacheEntry::GenericCacheEntry):
3314         (JSC::GenericCacheEntry::tag const):
3315         (JSC::CacheEntry::CacheEntry):
3316         (JSC::CacheEntry::decode const):
3317         (JSC::GenericCacheEntry::decode const):
3318         (JSC::encodeCodeBlock):
3319
3320 2019-02-18  Eric Carlson  <eric.carlson@apple.com>
3321
3322         Add MSE logging configuration
3323         https://bugs.webkit.org/show_bug.cgi?id=194719
3324         <rdar://problem/48122151>
3325
3326         Reviewed by Joseph Pecoraro.
3327
3328         * inspector/ConsoleMessage.cpp:
3329         (Inspector::messageSourceValue):
3330         * inspector/protocol/Console.json:
3331         * inspector/scripts/codegen/generator.py:
3332         * runtime/ConsoleTypes.h:
3333
3334 2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>
3335
3336         Add version number to cached bytecode
3337         https://bugs.webkit.org/show_bug.cgi?id=194768
3338         <rdar://problem/48147968>
3339
3340         Reviewed by Saam Barati.
3341
3342         Add a version number to the bytecode cache that should be unique per build.
3343
3344         * CMakeLists.txt:
3345         * DerivedSources-output.xcfilelist:
3346         * DerivedSources.make:
3347         * runtime/CachedTypes.cpp:
3348         (JSC::Encoder::malloc):
3349         (JSC::GenericCacheEntry::GenericCacheEntry):
3350         (JSC::CacheEntry::CacheEntry):
3351         (JSC::CacheEntry::encode):
3352         (JSC::CacheEntry::decode const):
3353         (JSC::GenericCacheEntry::decode const):
3354         (JSC::decodeCodeBlockImpl):
3355         * runtime/CodeCache.h:
3356         (JSC::CodeCacheMap::fetchFromDiskImpl):
3357
3358 2019-02-17  Saam Barati  <sbarati@apple.com>
3359
3360         WasmB3IRGenerator models some effects incorrectly
3361         https://bugs.webkit.org/show_bug.cgi?id=194038
3362
3363         Reviewed by Keith Miller.
3364
3365         * wasm/WasmB3IRGenerator.cpp:
3366         (JSC::Wasm::B3IRGenerator::restoreWasmContextInstance):
3367         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
3368         These two functions were using global state instead of the
3369         arguments passed into the function.
3370
3371         (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
3372         (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
3373         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF64>):
3374         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF32>):
3375         Any patchpoint that allows scratch register usage must
3376         also say that it clobbers the scratch registers.
3377
3378 2019-02-17  Saam Barati  <sbarati@apple.com>
3379
3380         Deadlock when adding a Structure property transition and then doing incremental marking
3381         https://bugs.webkit.org/show_bug.cgi?id=194767
3382
3383         Reviewed by Mark Lam.
3384
3385         This can happen in the following scenario:
3386         
3387         You have a Structure S. S is on the mark stack. Then:
3388         1. S grabs its lock
3389         2. S adds a new property transition
3390         3. We find out we need to do some incremental marking
3391         4. We mark S
3392         5. visitChildren on S will try to grab its lock
3393         6. We are now in a deadlock
3394
3395         * heap/Heap.cpp:
3396         (JSC::Heap::performIncrement):
3397         * runtime/Structure.cpp:
3398         (JSC::Structure::addNewPropertyTransition):
3399
3400 2019-02-17  David Kilzer  <ddkilzer@apple.com>
3401
3402         Unreviewed, rolling out r241620.
3403
3404         "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
3405         (Requested by ddkilzer on #webkit.)
3406
3407         Reverted changeset:
3408
3409         "[WTF] Add environment variable helpers"
3410         https://bugs.webkit.org/show_bug.cgi?id=192405
3411         https://trac.webkit.org/changeset/241620
3412
3413 2019-02-17  Commit Queue  <commit-queue@webkit.org>
3414
3415         Unreviewed, rolling out r241612.
3416         https://bugs.webkit.org/show_bug.cgi?id=194762
3417
3418         "It regressed JetStream2 parsing tests by ~40%" (Requested by
3419         saamyjoon on #webkit).
3420
3421         Reverted changeset:
3422
3423         "Move bytecode cache-related filesystem code out of CodeCache"
3424         https://bugs.webkit.org/show_bug.cgi?id=194675
3425         https://trac.webkit.org/changeset/241612
3426
3427 2019-02-16  Yusuke Suzuki  <ysuzuki@apple.com>
3428
3429         [JSC] JSWrapperObject should not be destructible
3430         https://bugs.webkit.org/show_bug.cgi?id=194743
3431
3432         Reviewed by Saam Barati.
3433
3434         JSWrapperObject should be just a wrapper object for JSValue, thus, it should not be a JSDestructibleObject.
3435         Currently it is destructible object because DateInstance uses it. This patch changes Base of DateInstance from
3436         JSWrapperObject to JSDestructibleObject, and makes JSWrapperObject non-destructible.
3437
3438         * runtime/BigIntObject.cpp:
3439         (JSC::BigIntObject::BigIntObject):
3440         * runtime/BooleanConstructor.cpp:
3441         (JSC::BooleanConstructor::finishCreation):
3442         * runtime/BooleanObject.cpp:
3443         (JSC::BooleanObject::BooleanObject):
3444         * runtime/BooleanObject.h:
3445         * runtime/DateInstance.cpp:
3446         (JSC::DateInstance::DateInstance):
3447         (JSC::DateInstance::finishCreation):
3448         * runtime/DateInstance.h:
3449         * runtime/DatePrototype.cpp:
3450         (JSC::dateProtoFuncGetTime):
3451         (JSC::dateProtoFuncSetTime):
3452         (JSC::setNewValueFromTimeArgs):
3453         (JSC::setNewValueFromDateArgs):
3454         (JSC::dateProtoFuncSetYear):
3455         * runtime/JSCPoison.h:
3456         * runtime/JSWrapperObject.h:
3457         (JSC::JSWrapperObject::JSWrapperObject):
3458         * runtime/NumberObject.cpp:
3459         (JSC::NumberObject::NumberObject):
3460         * runtime/NumberObject.h:
3461         * runtime/StringConstructor.cpp:
3462         (JSC::StringConstructor::finishCreation):
3463         * runtime/StringObject.cpp:
3464         (JSC::StringObject::StringObject):
3465         * runtime/StringObject.h:
3466         (JSC::StringObject::internalValue const):
3467         * runtime/SymbolObject.cpp:
3468         (JSC::SymbolObject::SymbolObject):
3469         * runtime/SymbolObject.h:
3470
3471 2019-02-16  Yusuke Suzuki  <ysuzuki@apple.com>
3472
3473         [JSC] Shrink UnlinkedFunctionExecutable
3474         https://bugs.webkit.org/show_bug.cgi?id=194733
3475
3476         Reviewed by Mark Lam.
3477
3478         UnlinkedFunctionExecutable has sourceURLDirective and sourceMappingURLDirective. These
3479         directives can be found in the comment of non typical function's source code (Program,
3480         Eval code, and Global function from function constructor etc.), and tricky thing is that
3481         SourceProvider's directives are updated by Parser. The reason why we have these fields in
3482         UnlinkedFunctionExecutable is that we need to update the SourceProvider's directives even
3483         if we skip parsing by using CodeCache. These fields are effective only if (1)
3484         UnlinkedFunctionExecutable is for non typical function things, and (2) it has sourceURLDirective
3485         or sourceMappingURLDirective. This is rare enough to purge them to a separated
3486         UnlinkedFunctionExecutable::RareData to make UnlinkedFunctionExecutable small.
3487         sizeof(UnlinkedFunctionExecutable) is very important since it is super frequently allocated
3488         cell. Furthermore, the current JSC allocates two MarkedBlocks for UnlinkedFunctionExecutable
3489         in JSGlobalObject initialization, but the usage of the second MarkedBlock is quite low (8%).
3490         If we can reduce the size of UnlinkedFunctionExecutable, we can make them one MarkedBlock.
3491         Since UnlinkedFunctionExecutable is allocated from IsoSubspace, we do not need to fit it to
3492         one of size class.
3493
3494         This patch adds RareData to UnlinkedFunctionExecutable and move some rare datas into RareData.
3495         And kill one MarkedBlock allocation in JSC initialization phase.
3496
3497         * bytecode/UnlinkedFunctionExecutable.cpp:
3498         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
3499         (JSC::UnlinkedFunctionExecutable::ensureRareDataSlow):
3500         * bytecode/UnlinkedFunctionExecutable.h:
3501         * debugger/DebuggerLocation.cpp:
3502         (JSC::DebuggerLocation::DebuggerLocation):
3503         * inspector/ScriptDebugServer.cpp:
3504         (Inspector::ScriptDebugServer::dispatchDidParseSource):
3505         * parser/Lexer.h:
3506         (JSC::Lexer::sourceURLDirective const):
3507         (JSC::Lexer::sourceMappingURLDirective const):
3508         (JSC::Lexer::sourceURL const): Deleted.
3509         (JSC::Lexer::sourceMappingURL const): Deleted.
3510         * parser/Parser.h:
3511         (JSC::Parser<LexerType>::parse):
3512         * parser/SourceProvider.h:
3513         (JSC::SourceProvider::sourceURLDirective const):
3514         (JSC::SourceProvider::sourceMappingURLDirective const):
3515         (JSC::SourceProvider::setSourceURLDirective):
3516         (JSC::SourceProvider::setSourceMappingURLDirective):
3517         (JSC::SourceProvider::sourceURL const): Deleted. We rename it from sourceURL to sourceURLDirective
3518         since it is the correct name.
3519         (JSC::SourceProvider::sourceMappingURL const): Deleted. We rename it from sourceMappingURL to
3520         sourceMappingURLDirective since it is the correct name.
3521         * runtime/CachedTypes.cpp:
3522         (JSC::CachedSourceProviderShape::encode):
3523         (JSC::CachedFunctionExecutableRareData::encode):
3524         (JSC::CachedFunctionExecutableRareData::decode const): CachedFunctionExecutable did not have
3525         sourceMappingURL to sourceMappingURLDirective. So this patch keeps the same logic.
3526         (JSC::CachedFunctionExecutable::rareData const):
3527         (JSC::CachedFunctionExecutable::encode):
3528         (JSC::CachedFunctionExecutable::decode const):
3529         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
3530         * runtime/CodeCache.cpp:
3531         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
3532         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
3533         * runtime/CodeCache.h:
3534         (JSC::generateUnlinkedCodeBlockImpl):
3535         * runtime/FunctionExecutable.h:
3536         * runtime/SamplingProfiler.cpp:
3537         (JSC::SamplingProfiler::StackFrame::url):
3538
3539 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
3540
3541         [JSC] Remove unused global private variables
3542         https://bugs.webkit.org/show_bug.cgi?id=194741
3543
3544         Reviewed by Joseph Pecoraro.
3545
3546         There are some private functions and constants that are no longer referenced from builtin JS code.
3547         This patch cleans up them.
3548
3549         * builtins/BuiltinNames.h:
3550         * builtins/ObjectConstructor.js:
3551         (entries):
3552         * runtime/JSGlobalObject.cpp:
3553         (JSC::JSGlobalObject::init):
3554
3555 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
3556
3557         [JSC] Lazily create empty RegExp
3558         https://bugs.webkit.org/show_bug.cgi?id=194735
3559
3560         Reviewed by Keith Miller.
3561
3562         Some scripts do not have any RegExp. In that case, allocating MarkedBlock for RegExp is costly.
3563         Previously, there was always one RegExp, "empty RegExp". This patch lazily creates it and drop
3564         one MarkedBlock.
3565
3566         * runtime/JSGlobalObject.cpp:
3567         (JSC::JSGlobalObject::init):
3568         * runtime/RegExpCache.cpp:
3569         (JSC::RegExpCache::ensureEmptyRegExpSlow):
3570         (JSC::RegExpCache::initialize): Deleted.
3571         * runtime/RegExpCache.h:
3572         (JSC::RegExpCache::ensureEmptyRegExp):
3573         (JSC::RegExpCache::emptyRegExp const): Deleted.
3574         * runtime/RegExpCachedResult.cpp:
3575         (JSC::RegExpCachedResult::lastResult):
3576         * runtime/RegExpCachedResult.h:
3577         * runtime/VM.cpp:
3578         (JSC::VM::VM):
3579
3580 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
3581
3582         [JSC] Make builtin objects more lazily initialized under non-JIT mode
3583         https://bugs.webkit.org/show_bug.cgi?id=194727
3584
3585         Reviewed by Saam Barati.
3586
3587         Boolean, Symbol, and Number constructors and prototypes are initialized eagerly, but this is largely
3588         because concurrent compiler can touch NumberPrototype etc. when traversing object's prototypes. This
3589         means that eager initialization is not necessary under non-JIT mode. While we can investigate all the
3590         accesses to these prototypes from the concurrent compiler threads, this "lazily initialize under non-JIT"
3591         is safe and beneficial to non-JIT mode. This patch lazily initializes them under non-JIT mode, and
3592         drop some @Number references to avoid eager initialization. This removes some object allocations and 1
3593         MarkedBlock allocation just for Symbols.
3594
3595         * runtime/JSGlobalObject.cpp:
3596         (JSC::JSGlobalObject::init):
3597         (JSC::JSGlobalObject::visitChildren):
3598         * runtime/JSGlobalObject.h:
3599         (JSC::JSGlobalObject::numberToStringWatchpoint):
3600         (JSC::JSGlobalObject::booleanPrototype const):
3601         (JSC::JSGlobalObject::numberPrototype const):
3602         (JSC::JSGlobalObject::symbolPrototype const):
3603         (JSC::JSGlobalObject::booleanObjectStructure const):
3604         (JSC::JSGlobalObject::symbolObjectStructure const):
3605         (JSC::JSGlobalObject::numberObjectStructure const):
3606         (JSC::JSGlobalObject::stringObjectStructure const):
3607
3608 2019-02-15  Michael Saboff  <msaboff@apple.com>
3609
3610         RELEASE_ASSERT at com.apple.JavaScriptCore: JSC::jsSubstringOfResolved
3611         https://bugs.webkit.org/show_bug.cgi?id=194558
3612
3613         Reviewed by Saam Barati.
3614
3615         Added an in bounds check before the read of the next character for Unicode regular expressions
3616         for pattern generation that didn't already have such checks.
3617
3618         * yarr/YarrJIT.cpp:
3619         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
3620         (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
3621         (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
3622         (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
3623
3624 2019-02-15  Dean Jackson  <dino@apple.com>
3625
3626         Allow emulation of user gestures from Web Inspector console
3627         https://bugs.webkit.org/show_bug.cgi?id=194725
3628         <rdar://problem/48126604>
3629
3630         Reviewed by Joseph Pecoraro and Devin Rousso.
3631
3632         * inspector/agents/InspectorRuntimeAgent.cpp: Add a new optional parameter, emulateUserGesture,
3633         to the evaluate function, and mark the function as override so that PageRuntimeAgent
3634         can change the behaviour.
3635         (Inspector::InspectorRuntimeAgent::evaluate):
3636         * inspector/agents/InspectorRuntimeAgent.h:
3637         * inspector/protocol/Runtime.json:
3638
3639 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
3640
3641         [JSC] Do not initialize Wasm related data if Wasm is not enabled
3642         https://bugs.webkit.org/show_bug.cgi?id=194728
3643
3644         Reviewed by Mark Lam.
3645
3646         Under non-JIT mode, these data structures are unnecessary. Should not allocate extra memory for that.
3647
3648         * runtime/InitializeThreading.cpp:
3649         (JSC::initializeThreading):
3650         * runtime/JSLock.cpp:
3651         (JSC::JSLock::didAcquireLock):
3652
3653 2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>
3654
3655         [WTF] Add environment variable helpers
3656         https://bugs.webkit.org/show_bug.cgi?id=192405
3657
3658         Reviewed by Michael Catanzaro.
3659
3660         * inspector/remote/glib/RemoteInspectorGlib.cpp:
3661         (Inspector::RemoteInspector::RemoteInspector):
3662         (Inspector::RemoteInspector::start):
3663         * jsc.cpp:
3664         (startTimeoutThreadIfNeeded):
3665         * runtime/Options.cpp:
3666         (JSC::overrideOptionWithHeuristic):
3667         (JSC::Options::overrideAliasedOptionWithHeuristic):
3668         (JSC::Options::initialize):
3669         * runtime/VM.cpp:
3670         (JSC::enableAssembler):
3671         (JSC::VM::VM):
3672         * tools/CodeProfiling.cpp:
3673         (JSC::CodeProfiling::notifyAllocator):
3674         Utilize WTF::Environment where possible.
3675
3676 2019-02-15  Mark Lam  <mark.lam@apple.com>
3677
3678         SamplingProfiler::stackTracesAsJSON() should escape strings.
3679         https://bugs.webkit.org/show_bug.cgi?id=194649
3680         <rdar://problem/48072386>
3681
3682         Reviewed by Saam Barati.
3683
3684         Ditto for TypeSet::toJSONString() and TypeSet::toJSONString().
3685
3686         * runtime/SamplingProfiler.cpp:
3687         (JSC::SamplingProfiler::stackTracesAsJSON):
3688         * runtime/TypeSet.cpp:
3689         (JSC::TypeSet::toJSONString const):
3690         (JSC::StructureShape::toJSONString const):
3691
3692 2019-02-15  Robin Morisset  <rmorisset@apple.com>
3693
3694         CodeBlock::jettison should clear related watchpoints
3695         https://bugs.webkit.org/show_bug.cgi?id=194544
3696
3697         Reviewed by Mark Lam.
3698
3699         * bytecode/CodeBlock.cpp:
3700         (JSC::CodeBlock::jettison):
3701         * dfg/DFGCommonData.h:
3702         (JSC::DFG::CommonData::clearWatchpoints): Added.
3703         * dfg/CommonData.cpp:
3704         (JSC::DFG::CommonData::clearWatchpoints): Added.
3705
3706 2019-02-15  Tadeu Zagallo  <tzagallo@apple.com>
3707
3708         Move bytecode cache-related filesystem code out of CodeCache
3709         https://bugs.webkit.org/show_bug.cgi?id=194675
3710
3711         Reviewed by Saam Barati.
3712
3713         That code is only used for the bytecode-cache tests, so it should live in
3714         jsc.cpp rather than in the CodeCache.
3715
3716         * jsc.cpp:
3717         (CliSourceProvider::create):
3718         (CliSourceProvider::~CliSourceProvider):
3719         (CliSourceProvider::cachePath const):
3720         (CliSourceProvider::loadBytecode):
3721         (CliSourceProvider::CliSourceProvider):
3722         (jscSource):
3723         (GlobalObject::moduleLoaderFetch):
3724         (functionDollarEvalScript):
3725         (runWithOptions):
3726         * parser/SourceProvider.h:
3727         (JSC::SourceProvider::cacheBytecode const):
3728         * runtime/CodeCache.cpp:
3729         (JSC::writeCodeBlock):
3730         * runtime/CodeCache.h:
3731         (JSC::CodeCacheMap::fetchFromDiskImpl):
3732
3733 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
3734
3735         [JSC] DFG, FTL, and Wasm worklist creation should be fenced
3736         https://bugs.webkit.org/show_bug.cgi?id=194714
3737
3738         Reviewed by Mark Lam.
3739
3740         Let's consider about the following extreme case.
3741
3742         1. VM (A) is created.
3743         2. Another VM (B) is created on a different thread.
3744         3. (A) is being destroyed. It calls DFG::existingWorklistForIndexOrNull in a destructor.
3745         4. At the same time, (B) starts using DFG Worklist and it is instantiated in call_once.
3746         5. But (A) reads the pointer directly through DFG::existingWorklistForIndexOrNull.
3747         6. (A) sees the half-baked worklist, which may be in the middle of creation.
3748
3749         This patch puts store-store fence just before putting a pointer to a global variable.
3750         This fence is executed only three times at most, for DFG, FTL, and Wasm worklist initializations.
3751
3752         * dfg/DFGWorklist.cpp:
3753         (JSC::DFG::ensureGlobalDFGWorklist):
3754         (JSC::DFG::ensureGlobalFTLWorklist):
3755         * wasm/WasmWorklist.cpp:
3756         (JSC::Wasm::ensureWorklist):
3757
3758 2019-02-15  Commit Queue  <commit-queue@webkit.org>
3759
3760         Unreviewed, rolling out r241559 and r241566.
3761         https://bugs.webkit.org/show_bug.cgi?id=194710
3762
3763         Causes layout test crashes under GuardMalloc (Requested by
3764         ryanhaddad on #webkit).
3765
3766         Reverted changesets:
3767
3768         "[WTF] Add environment variable helpers"
3769         https://bugs.webkit.org/show_bug.cgi?id=192405
3770         https://trac.webkit.org/changeset/241559
3771
3772         "Unreviewed build fix for WinCairo Debug after r241559."
3773         https://trac.webkit.org/changeset/241566
3774
3775 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
3776
3777         [JSC] Do not even allocate JIT worklists in non-JIT mode
3778         https://bugs.webkit.org/show_bug.cgi?id=194693
3779
3780         Reviewed by Mark Lam.
3781
3782         Heap always allocates JIT worklists for Baseline, DFG, and FTL. While they do not have actual threads, Worklist itself already allocates some memory.
3783         And we do not perform any GC operations that are only meaningful in JIT environment.
3784
3785         1. We add VM::canUseJIT() check in Heap's ensureXXXWorklist things to prevent them from being allocated.
3786         2. We remove DFG marking constraint in non-JIT mode.
3787         3. We do not gather conservative roots from scratch buffers under the non-JIT mode (BTW, # of scratch buffers are always zero in non-JIT mode)
3788         4. We do not visit JITStubRoutineSet.
3789         5. Align JITWorklist function names to the other worklists.
3790
3791         * dfg/DFGOSRExitPreparation.cpp:
3792         (JSC::DFG::prepareCodeOriginForOSRExit):
3793         * dfg/DFGPlan.h:
3794         * dfg/DFGWorklist.cpp:
3795         (JSC::DFG::markCodeBlocks): Deleted.
3796         * dfg/DFGWorklist.h:
3797         * heap/Heap.cpp:
3798         (JSC::Heap::completeAllJITPlans):
3799         (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):
3800         (JSC::Heap::gatherScratchBufferRoots):
3801         (JSC::Heap::removeDeadCompilerWorklistEntries):
3802         (JSC::Heap::stopThePeriphery):
3803         (JSC::Heap::suspendCompilerThreads):
3804         (JSC::Heap::resumeCompilerThreads):
3805         (JSC::Heap::addCoreConstraints):
3806         * jit/JITWorklist.cpp:
3807         (JSC::JITWorklist::existingGlobalWorklistOrNull):
3808         (JSC::JITWorklist::ensureGlobalWorklist):
3809         (JSC::JITWorklist::instance): Deleted.
3810         * jit/JITWorklist.h:
3811         * llint/LLIntSlowPaths.cpp:
3812         (JSC::LLInt::jitCompileAndSetHeuristics):
3813         * runtime/VM.cpp:
3814         (JSC::VM::~VM):
3815         (JSC::VM::gatherScratchBufferRoots):
3816         (JSC::VM::gatherConservativeRoots): Deleted.
3817         * runtime/VM.h:
3818
3819 2019-02-15  Saam barati  <sbarati@apple.com>
3820
3821         [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
3822         https://bugs.webkit.org/show_bug.cgi?id=194036
3823
3824         Reviewed by Yusuke Suzuki.
3825
3826         This patch adds a new Air-O0 backend. Air-O0 runs fewer passes and doesn't
3827         use linear scan for register allocation. Instead of linear scan, Air-O0 does
3828         mostly block-local register allocation, and it does this as it's emitting
3829         code directly. The register allocator uses liveness analysis to reduce
3830         the number of spills. Doing register allocation as we're emitting code
3831         allows us to skip editing the IR to insert spills, which saves a non trivial
3832         amount of compile time. For stack allocation, we give each Tmp its own slot.
3833         This is less than ideal. We probably want to do some trivial live range analysis
3834         in the future. The reason this isn't a deal breaker for Wasm is that this patch
3835         makes it so that we reuse Tmps as we're generating Air IR in the AirIRGenerator.
3836         Because Wasm is a stack machine, we trivially know when we kill a stack value (its last use).
3837         
3838         This patch is another 25% Wasm startup time speedup. It seems to be worth
3839         another 1% on JetStream2.
3840
3841         * JavaScriptCore.xcodeproj/project.pbxproj:
3842         * Sources.txt:
3843         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp: Added.
3844         (JSC::B3::Air::GenerateAndAllocateRegisters::GenerateAndAllocateRegisters):
3845         (JSC::B3::Air::GenerateAndAllocateRegisters::buildLiveRanges):
3846         (JSC::B3::Air::GenerateAndAllocateRegisters::insertBlocksForFlushAfterTerminalPatchpoints):
3847         (JSC::B3::Air::callFrameAddr):
3848         (JSC::B3::Air::GenerateAndAllocateRegisters::flush):
3849         (JSC::B3::Air::GenerateAndAllocateRegisters::spill):
3850         (JSC::B3::Air::GenerateAndAllocateRegisters::alloc):
3851         (JSC::B3::Air::GenerateAndAllocateRegisters::freeDeadTmpsIfNeeded):
3852         (JSC::B3::Air::GenerateAndAllocateRegisters::assignTmp):
3853         (JSC::B3::Air::GenerateAndAllocateRegisters::isDisallowedRegister):
3854         (JSC::B3::Air::GenerateAndAllocateRegisters::prepareForGeneration):
3855         (JSC::B3::Air::GenerateAndAllocateRegisters::generate):
3856         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h: Added.
3857         * b3/air/AirCode.cpp:
3858         * b3/air/AirCode.h:
3859         * b3/air/AirGenerate.cpp:
3860         (JSC::B3::Air::prepareForGeneration):
3861         (JSC::B3::Air::generateWithAlreadyAllocatedRegisters):
3862         (JSC::B3::Air::generate):
3863         * b3/air/AirHandleCalleeSaves.cpp:
3864         (JSC::B3::Air::handleCalleeSaves):
3865         * b3/air/AirHandleCalleeSaves.h:
3866         * b3/air/AirTmpMap.h:
3867         * runtime/Options.h:
3868         * wasm/WasmAirIRGenerator.cpp:
3869         (JSC::Wasm::AirIRGenerator::didKill):
3870         (JSC::Wasm::AirIRGenerator::newTmp):
3871         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
3872         (JSC::Wasm::parseAndCompileAir):
3873         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
3874         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
3875         * wasm/WasmAirIRGenerator.h:
3876         * wasm/WasmB3IRGenerator.cpp:
3877         (JSC::Wasm::B3IRGenerator::didKill):
3878         * wasm/WasmBBQPlan.cpp:
3879         (JSC::Wasm::BBQPlan::compileFunctions):
3880         * wasm/WasmFunctionParser.h:
3881         (JSC::Wasm::FunctionParser<Context>::parseBody):
3882         (JSC::Wasm::FunctionParser<Context>::parseExpression):
3883         * wasm/WasmValidate.cpp:
3884         (JSC::Wasm::Validate::didKill):
3885
3886 2019-02-14  Saam barati  <sbarati@apple.com>
3887
3888         lowerStackArgs should lower Lea32/64 on ARM64 to Add
3889         https://bugs.webkit.org/show_bug.cgi?id=194656
3890
3891         Reviewed by Yusuke Suzuki.
3892
3893         On arm64, Lea is just implemented as an add. However, Air treats it as an
3894         address with a given width. Because of this width, we were incorrectly
3895         computing whether or not this immediate could fit into the instruction itself
3896         or it needed to be explicitly put into a register. This patch makes
3897         AirLowerStackArgs lower Lea to Add on arm64.
3898
3899         * b3/air/AirLowerStackArgs.cpp:
3900         (JSC::B3::Air::lowerStackArgs):
3901         * b3/air/AirOpcode.opcodes:
3902         * b3/air/testair.cpp:
3903
3904 2019-02-14  Saam Barati  <sbarati@apple.com>
3905
3906         Cache the results of BytecodeGenerator::getVariablesUnderTDZ
3907         https://bugs.webkit.org/show_bug.cgi?id=194583
3908         <rdar://problem/48028140>
3909
3910         Reviewed by Yusuke Suzuki.
3911
3912         This patch makes it so that getVariablesUnderTDZ caches a result of
3913         CompactVariableMap::Handle. getVariablesUnderTDZ is costly when
3914         it's called in an environment where there are a lot of variables.
3915         This patch makes it so we cache its results. This is profitable when
3916         getVariablesUnderTDZ is called repeatedly with the same environment
3917         state. This is common since we call this every time we encounter a
3918         function definition/expression node.
3919
3920         * builtins/BuiltinExecutables.cpp:
3921         (JSC::BuiltinExecutables::createExecutable):
3922         * bytecode/UnlinkedFunctionExecutable.cpp:
3923         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
3924         * bytecode/UnlinkedFunctionExecutable.h:
3925         * bytecompiler/BytecodeGenerator.cpp:
3926         (JSC::BytecodeGenerator::popLexicalScopeInternal):
3927         (JSC::BytecodeGenerator::liftTDZCheckIfPossible):
3928         (JSC::BytecodeGenerator::pushTDZVariables):
3929         (JSC::BytecodeGenerator::getVariablesUnderTDZ):
3930         (JSC::BytecodeGenerator::restoreTDZStack):
3931         * bytecompiler/BytecodeGenerator.h:
3932         (JSC::BytecodeGenerator::makeFunction):
3933         * parser/VariableEnvironment.cpp:
3934         (JSC::CompactVariableMap::Handle::Handle):
3935         (JSC::CompactVariableMap::Handle::operator=):
3936         * parser/VariableEnvironment.h:
3937         (JSC::CompactVariableMap::Handle::operator bool const):
3938         * runtime/CodeCache.cpp:
3939         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
3940
3941 2019-02-14  Yusuke Suzuki  <ysuzuki@apple.com>
3942
3943         [JSC] Non-JIT entrypoints should share NativeJITCode per entrypoint type
3944         https://bugs.webkit.org/show_bug.cgi?id=194659
3945
3946         Reviewed by Mark Lam.
3947
3948         Non-JIT entrypoints create NativeJITCode every time it is called. But it is meaningless since these entry point code are identical.
3949         We should create one per entrypoint type (for function, we should have CodeForCall and CodeForConstruct) and continue to use them.
3950         And we use NativeJITCode instead of DirectJITCode if it does not have difference between usual entrypoint and arity check entrypoint.
3951
3952         * dfg/DFGJITCode.h:
3953         * dfg/DFGJITFinalizer.cpp:
3954         (JSC::DFG::JITFinalizer::finalize):
3955         (JSC::DFG::JITFinalizer::finalizeFunction):
3956         * jit/JITCode.cpp:
3957         (JSC::DirectJITCode::initializeCodeRefForDFG):
3958         (JSC::DirectJITCode::initializeCodeRef): Deleted.
3959         (JSC::NativeJITCode::initializeCodeRef): Deleted.
3960         * jit/JITCode.h:
3961         * llint/LLIntEntrypoint.cpp:
3962         (JSC::LLInt::setFunctionEntrypoint):
3963         (JSC::LLInt::setEvalEntrypoint):
3964         (JSC::LLInt::setProgramEntrypoint):
3965         (JSC::LLInt::setModuleProgramEntrypoint): Retagged is removed since the tag is the same.
3966
3967 2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>
3968
3969         [WTF] Add environment variable helpers
3970         https://bugs.webkit.org/show_bug.cgi?id=192405