Temporarily disable PICTURE_SIZES
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2015-06-29  Dean Jackson  <dino@apple.com>
2
3         Temporarily disable PICTURE_SIZES
4         https://bugs.webkit.org/show_bug.cgi?id=146435
5         <rdar://problem/21087013>
6
7         Reviewed by Tim Horton.
8
9         Temporarily disable PICTURE_SIZES because it causes problems with out
10         of date <picture> polyfills.
11
12         * Configurations/FeatureDefines.xcconfig:
13
14 2015-06-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>
15
16         Binding generator should allow using JSC::Value for "any" parameter in lieu of ScriptValue
17         https://bugs.webkit.org/show_bug.cgi?id=146403
18
19         Reviewed by Darin Adler.
20
21         * bindings/ScriptValue.h: Added implicit conversion to JSC::JSValue.
22
23 2015-06-28 Aleksandr Skachkov   <gskachkov@gmail.com>
24
25         [ES6] Implement ES6 arrow function syntax. No Line terminator between function parameters and =>
26         https://bugs.webkit.org/show_bug.cgi?id=146394
27
28         Reviewed by Yusuke Suzuki.
29
30         * parser/Parser.cpp:
31         (JSC::Parser<LexerType>::parseFunctionInfo):
32
33 2015-06-27  Darin Adler  <darin@apple.com>
34
35         Make converting JSString to StringView idiomatically safe
36         https://bugs.webkit.org/show_bug.cgi?id=146387
37
38         Reviewed by Anders Carlsson.
39
40         * jsc.cpp:
41         (functionPrint): Add explicit call to SafeView::get, needed since there
42         is no StringView temporary.
43         (functionDebug): Ditto.
44
45         * runtime/ArrayPrototype.cpp:
46         (JSC::holesMustForwardToPrototype): Refactored into helper function.
47         (JSC::join): Refactored so that StringView is a function argument, making
48         the lifetime simpler.
49         (JSC::arrayProtoFuncJoin): Ditto.
50         (JSC::arrayProtoFuncReverse): Use new holesMustForwardToPrototype helper.
51
52         * runtime/JSGlobalObjectFunctions.cpp:
53         (JSC::encode): Add explicit call to SafeView::get.
54
55         * runtime/JSString.h: Moved declarations of functions to the top of the
56         file instead of mixing them in with the function definitions. Changed
57         return type of the view function to return a JSString::SafeView so that
58         the JSString's lifetime will last as long as the StringView does in
59         typical coding idioms.
60         (JSC::JSString::getIndex): Use unsafeView so we can index into the
61         view; could also have used view.get but here in this class this seems fine.
62         (JSC::JSRopeString::unsafeView): Renamed existing view function to this.
63         (JSC::JSString::unsafeView): Ditto.
64         (JSC::JSString::SafeView::SafeView): Contains reference to an ExecState
65         and a JSString. The ExecState is needed to create the StringView, and the
66         JSString needs to be kept alive as long as the StringView is.
67         (JSC::JSString::SafeView::operator StringView): Call unsafeView.
68         (JSC::JSString::SafeView::get): Convenience for when we want to call
69         StringView member functions.
70         (JSC::JSString::view): Added. Returns a SafeView.
71
72         * runtime/StringPrototype.cpp:
73         (JSC::stringProtoFuncIndexOf): Add explicit call to SafeView::get.
74
75 2015-06-26  Csaba Osztrogonác  <ossy@webkit.org>
76
77         Remove ARMv7Assembler.cpp
78         https://bugs.webkit.org/show_bug.cgi?id=146340
79
80         Reviewed by Filip Pizlo.
81
82         * CMakeLists.txt:
83         * JavaScriptCore.xcodeproj/project.pbxproj:
84         * assembler/ARMv7Assembler.cpp: Removed.
85
86 2015-06-26  Csaba Osztrogonác  <ossy@webkit.org>
87
88         Fix the !ENABLE(ES6_ARROWFUNCTION_SYNTAX) build after r185989
89         https://bugs.webkit.org/show_bug.cgi?id=146344
90
91         Reviewed by Yusuke Suzuki.
92
93         * parser/Parser.cpp:
94         (JSC::Parser<LexerType>::parseSourceElements):
95
96 2015-06-26 Aleksandr Skachkov  <gskachkov@gmail.com>
97
98          [ES6] Implement ES6 arrow function syntax. Parser of arrow function with execution as common function. 
99          https://bugs.webkit.org/show_bug.cgi?id=144955
100
101          Reviewed by Yusuke Suzuki.
102
103          Added support of ES6 arrow function. Changes were made according to following spec http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax. Patch does not include any arrow function specific behavior e.g. lexical bind this, arguments and etc.     
104         This patch implements the simplest cases of arrow function declaration:
105            parameters             () => 10 + 20
106            parameter               x => x + 20
107            parameters         (x, y) => x + y
108            function with block     x => { return x*10; }
109
110         Not implemented:
111            bind of the this, arguments, super and etc.
112            exception in case of trying to use 'new' with arrow function
113
114         * parser/ASTBuilder.h:
115         (JSC::ASTBuilder::createFunctionExpr):
116         (JSC::ASTBuilder::createArrowFunctionExpr):
117         (JSC::ASTBuilder::createGetterOrSetterProperty):
118         (JSC::ASTBuilder::createFuncDeclStatement):
119         * parser/Lexer.cpp:
120         (JSC::Lexer<T>::setTokenPosition):
121         (JSC::Lexer<T>::lex):
122         * parser/Lexer.h:
123         (JSC::Lexer::lastTokenLocation):
124         (JSC::Lexer::setTerminator):
125         * parser/Parser.cpp:
126         (JSC::Parser<LexerType>::parseInner):
127         (JSC::Parser<LexerType>::parseSourceElements):
128         (JSC::Parser<LexerType>::parseArrowFunctionSingleExpressionBody):
129         (JSC::Parser<LexerType>::parseSwitchClauses):
130         (JSC::Parser<LexerType>::parseSwitchDefaultClause):
131         (JSC::Parser<LexerType>::parseBlockStatement):
132         (JSC::Parser<LexerType>::parseFunctionBody):
133         (JSC::stringForFunctionMode):
134         (JSC::Parser<LexerType>::parseFunctionParameters):
135         (JSC::Parser<LexerType>::parseFunctionInfo):
136         (JSC::Parser<LexerType>::parseFunctionDeclaration):
137         (JSC::Parser<LexerType>::parseClass):
138         (JSC::Parser<LexerType>::parseAssignmentExpression):
139         (JSC::Parser<LexerType>::parsePropertyMethod):
140         (JSC::Parser<LexerType>::parseGetterSetter):
141         (JSC::Parser<LexerType>::parseArrowFunctionExpression):
142         * parser/Parser.h:
143         (JSC::Parser::locationBeforeLastToken):
144         (JSC::Parser::isEndOfArrowFunction):
145         (JSC::Parser::isArrowFunctionParamters):
146         (JSC::Parser::setEndOfStatement):
147         * parser/ParserFunctionInfo.h:
148         * parser/ParserTokens.h:
149         * parser/SourceCode.h:
150         (JSC::SourceCode::subArrowExpression):
151         * parser/SourceProviderCacheItem.h:
152         (JSC::SourceProviderCacheItem::endFunctionToken):
153         (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
154         * parser/SyntaxChecker.h:
155         (JSC::SyntaxChecker::createArrowFunctionExpr):
156         (JSC::SyntaxChecker::setFunctionNameStart):
157
158 2015-06-25  Yusuke Suzuki  <utatane.tea@gmail.com>
159
160         [ES6] Support rest element in destructuring assignments
161         https://bugs.webkit.org/show_bug.cgi?id=146206
162
163         Reviewed by Oliver Hunt.
164
165         This patch enables rest element (...rest) in array binding patterns.
166         It generates array from the iterables.
167         In variable declarations and parameters, `[...identifier]` form is only allowed,
168         while expressions can take `[...[...rest]]` pattern.
169
170         * bytecompiler/BytecodeGenerator.cpp:
171         (JSC::BytecodeGenerator::emitEnumeration):
172         (JSC::BytecodeGenerator::emitIteratorNext):
173         * bytecompiler/BytecodeGenerator.h:
174         * bytecompiler/NodesCodegen.cpp:
175         (JSC::ArrayPatternNode::bindValue):
176         (JSC::ArrayPatternNode::toString):
177         * parser/ASTBuilder.h:
178         (JSC::ASTBuilder::appendArrayPatternSkipEntry):
179         (JSC::ASTBuilder::appendArrayPatternEntry):
180         (JSC::ASTBuilder::appendArrayPatternRestEntry):
181         * parser/Nodes.h:
182         (JSC::ArrayPatternNode::appendIndex):
183         * parser/Parser.cpp:
184         (JSC::Parser<LexerType>::parseDeconstructionPattern):
185         * parser/SyntaxChecker.h:
186         (JSC::SyntaxChecker::operatorStackPop):
187         * tests/stress/rest-elements.js: Added.
188         (shouldBe):
189         (shouldThrow):
190
191 2015-06-25  Commit Queue  <commit-queue@webkit.org>
192
193         Unreviewed, rolling out r185956.
194         https://bugs.webkit.org/show_bug.cgi?id=146321
195
196         Causes massive crashes on test bots (Requested by bfulgham on
197         #webkit).
198
199         Reverted changeset:
200
201         "Enabling MEDIA_STREAM"
202         https://bugs.webkit.org/show_bug.cgi?id=145947
203         http://trac.webkit.org/changeset/185956
204
205 2015-06-25  Michael Saboff  <msaboff@apple.com>
206
207         Minor fix to idx bounds check after 185954
208
209         Rubber Stamped by Ryosuke Niwa.
210
211         Changed "idx > 1" to "idx > 0" in two places.
212
213         * runtime/ExceptionHelpers.cpp:
214         (JSC::functionCallBase):
215
216 2015-06-25  Keith Miller  <keith_miller@apple.com>
217
218         Address Sanitizer does not play well with memcpy in JSC::MachineThreads::tryCopyOtherThreadStack.
219         https://bugs.webkit.org/show_bug.cgi?id=146297
220
221         Reviewed by Filip Pizlo.
222
223         Since we cannot blacklist the system memcpy we must use our own naive implementation,
224         copyMemory. This is not a significant performance loss as tryCopyOtherThreadStack is
225         only called as part of an O(heapsize) operation. As the heap is generally much larger
226         than the stack the performance hit is minimal.
227
228         * heap/MachineStackMarker.cpp:
229         (JSC::copyMemory):
230         (JSC::MachineThreads::tryCopyOtherThreadStack):
231         (JSC::asanUnsafeMemcpy): Deleted.
232
233 2015-06-25  Matthew Daiter  <mdaiter@apple.com>
234
235         Enabling MEDIA_STREAM
236         https://bugs.webkit.org/show_bug.cgi?id=145947
237         <rdar://problem/21365829>
238
239         Reviewed by Brent Fulgham.
240
241         * Configurations/FeatureDefines.xcconfig:
242
243 2015-06-25  Michael Saboff  <msaboff@apple.com>
244
245         REGRESSION (r181889): basspro.com hangs on load under JSC::ErrorInstance::finishCreation(JSC::ExecState*, JSC::VM&, WTF::String const&, bool) + 2801 (JavaScriptCore + 3560689)
246         https://bugs.webkit.org/show_bug.cgi?id=146298
247
248         Reviewed by Mark Lam.
249
250         We were underflowing in ExceptionHelpers.cpp::functionCallBase() with a right to left
251         string index.  Added checks that idx stays within the string.  Also added a termination
252         condition when idx is 0.
253
254         * runtime/ExceptionHelpers.cpp:
255         (JSC::functionCallBase):
256
257 2015-06-24  Chris Dumez  <cdumez@apple.com>
258
259         Unreviewed, speculative build fix after r185942.
260
261         Add missing include for StrongInlines.h.
262
263         * runtime/ArrayPrototype.cpp:
264
265 2015-06-24  Darin Adler  <darin@apple.com>
266
267         Optimize Array.join and Array.reverse for high speed array types
268         https://bugs.webkit.org/show_bug.cgi?id=146275
269
270         Reviewed by Mark Lam.
271
272         This seems to yield another 17% speed improvement in the array
273         test from the Peacekeeper benchmark.
274
275         * runtime/ArrayPrototype.cpp:
276         (JSC::isHole): Added. Helper to check for holes.
277         (JSC::containsHole): Ditto.
278         (JSC::arrayProtoFuncJoin): Added special cases for the various types
279         of arrays that could be in a butterfly.
280         (JSC::arrayProtoFuncReverse): Ditto.
281
282         * runtime/JSStringJoiner.h: Made appendEmptyString public so we can
283         call it from the new parts of Array.join.
284
285 2015-06-24  Filip Pizlo  <fpizlo@apple.com>
286
287         DFG::SpeculativeJIT shouldn't use filter==Contradiction when it meant isClear
288         https://bugs.webkit.org/show_bug.cgi?id=146291
289         rdar://problem/21435366
290
291         Reviewed by Michael Saboff.
292         
293         The filter() method returns Contradiction only when a value *becomes* clear. This is
294         necessary for supporting the convention that non-JSValue nodes have a bottom proved
295         type. (We should fix that convention eventually, but for now let's just be consistent
296         about it.)
297         
298         * dfg/DFGFiltrationResult.h: Document the issue.
299         * dfg/DFGSpeculativeJIT32_64.cpp: Work around the issue.
300         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
301         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
302         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
303         * dfg/DFGSpeculativeJIT64.cpp: Work around the issue.
304         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
305         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52):
306         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
307         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
308
309 2015-06-24  Michael Saboff  <msaboff@apple.com>
310
311         Crash on gog.com due to PolymorphicCallNode's having stale references to CallLinkInfo
312         https://bugs.webkit.org/show_bug.cgi?id=146285
313
314         Reviewed by Filip Pizlo.
315
316         CallLinkInfo's contain a RefPtr to a PolymorphicCallStubRoutine, named stub, which contains
317         a collection of PolymorphicCallNode.  Those PolymorphicCallNodes have a reference back to the
318         CallLinkInfo.  When a CallLinkInfo replaces or clears "stub", the ref count of the
319         PolymorphicCallStubRoutine is decremented as expected, but since it inherits from
320         GCAwareJITStubRoutine, it isn't actually deleted until GC.  In the mean time, the original
321         CallLinkInfo can go away.  If PolymorphicCallNode::unlink() is called at that point,
322         it will try to unlink a now deleted CallLinkInfo and crash as a result.
323
324         The fix is to clear the CallLinkInfo references from any PolymorphicCallNode objects when
325         when we set a new stub or clear an existing stub for a CallLinkInfo.  This is done by
326         calling PolymorphicCallNode::clearCallNodesFor() on the old stub.
327
328         The prior code would only call clearCallNodesFor() from the CallLinkInfo destructor.
329         This only took care of the last PolymorphicCallStubRoutine held in the CallLinkInfo.
330         Any prior PolymorphicCallStubRoutine would still have a, now bad, reference to the CallLinkInfo.
331
332         In the process I refactored CallLinkInfo from a struct to a class with proper accessors and
333         made all the data elements private.
334
335         * bytecode/CallLinkInfo.cpp:
336         (JSC::CallLinkInfo::clearStub): Updated to call PolymorphicCallStubRoutine::clearCallNodesFor()
337         to clear the back references to this CallLinkInfo.
338         * bytecode/CallLinkInfo.h:
339         (JSC::CallLinkInfo::~CallLinkInfo): Moved clearCallNodesFor() call to clearStub().
340         (JSC::CallLinkInfo::setStub): Clear any prior stub before changing to the new stub.
341
342 2015-06-24  Michael Saboff  <msaboff@apple.com>
343
344         Refactor CallLinkInfo from a struct to a class
345         https://bugs.webkit.org/show_bug.cgi?id=146292
346
347         Rubber stamped by Filip Pizlo.
348
349         Refactored CallLinkInfo from a struct to a class with proper accessors and made all the
350         data elements private.
351
352         Done in preparation for fixing https://bugs.webkit.org/show_bug.cgi?id=146285.
353
354         * bytecode/CallLinkInfo.cpp:
355         (JSC::CallLinkInfo::clearStub):
356         (JSC::CallLinkInfo::unlink):
357         (JSC::CallLinkInfo::visitWeak):
358         * bytecode/CallLinkInfo.h:
359         (JSC::CallLinkInfo::callTypeFor):
360         (JSC::CallLinkInfo::CallLinkInfo):
361         (JSC::CallLinkInfo::~CallLinkInfo):
362         (JSC::CallLinkInfo::specializationKindFor):
363         (JSC::CallLinkInfo::specializationKind):
364         (JSC::CallLinkInfo::isLinked):
365         (JSC::CallLinkInfo::setUpCall):
366         (JSC::CallLinkInfo::setCallLocations):
367         (JSC::CallLinkInfo::setUpCallFromFTL):
368         (JSC::CallLinkInfo::callReturnLocation):
369         (JSC::CallLinkInfo::hotPathBegin):
370         (JSC::CallLinkInfo::hotPathOther):
371         (JSC::CallLinkInfo::setCallee):
372         (JSC::CallLinkInfo::clearCallee):
373         (JSC::CallLinkInfo::callee):
374         (JSC::CallLinkInfo::setLastSeenCallee):
375         (JSC::CallLinkInfo::clearLastSeenCallee):
376         (JSC::CallLinkInfo::lastSeenCallee):
377         (JSC::CallLinkInfo::haveLastSeenCallee):
378         (JSC::CallLinkInfo::setStub):
379         (JSC::CallLinkInfo::stub):
380         (JSC::CallLinkInfo::seenOnce):
381         (JSC::CallLinkInfo::clearSeen):
382         (JSC::CallLinkInfo::setSeen):
383         (JSC::CallLinkInfo::hasSeenClosure):
384         (JSC::CallLinkInfo::setHasSeenClosure):
385         (JSC::CallLinkInfo::clearedByGC):
386         (JSC::CallLinkInfo::setCallType):
387         (JSC::CallLinkInfo::callType):
388         (JSC::CallLinkInfo::addressOfMaxNumArguments):
389         (JSC::CallLinkInfo::maxNumArguments):
390         (JSC::CallLinkInfo::offsetOfSlowPathCount):
391         (JSC::CallLinkInfo::setCalleeGPR):
392         (JSC::CallLinkInfo::calleeGPR):
393         (JSC::CallLinkInfo::slowPathCount):
394         (JSC::CallLinkInfo::setCodeOrigin):
395         (JSC::CallLinkInfo::codeOrigin):
396         (JSC::getCallLinkInfoCodeOrigin):
397         * bytecode/CallLinkStatus.cpp:
398         (JSC::CallLinkStatus::computeFor):
399         (JSC::CallLinkStatus::computeFromCallLinkInfo):
400         (JSC::CallLinkStatus::computeDFGStatuses):
401         * bytecode/CallLinkStatus.h:
402         * bytecode/CodeBlock.cpp:
403         (JSC::CodeBlock::printCallOp):
404         (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex):
405         * dfg/DFGJITCompiler.cpp:
406         (JSC::DFG::JITCompiler::link):
407         * dfg/DFGOSRExitCompilerCommon.cpp:
408         (JSC::DFG::reifyInlinedCallFrames):
409         * dfg/DFGSpeculativeJIT32_64.cpp:
410         (JSC::DFG::SpeculativeJIT::emitCall):
411         * dfg/DFGSpeculativeJIT64.cpp:
412         (JSC::DFG::SpeculativeJIT::emitCall):
413         * ftl/FTLJSCallBase.cpp:
414         (JSC::FTL::JSCallBase::link):
415         * jit/AccessorCallJITStubRoutine.h:
416         * jit/JIT.cpp:
417         (JSC::JIT::privateCompile):
418         * jit/JIT.h:
419         * jit/JITCall.cpp:
420         (JSC::JIT::compileSetupVarargsFrame):
421         (JSC::JIT::compileOpCall):
422         * jit/JITCall32_64.cpp:
423         (JSC::JIT::compileSetupVarargsFrame):
424         (JSC::JIT::compileOpCall):
425         * jit/JITOperations.cpp:
426         * jit/PolymorphicCallStubRoutine.cpp:
427         (JSC::PolymorphicCallNode::unlink):
428         (JSC::PolymorphicCallNode::clearCallLinkInfo):
429         * jit/PolymorphicCallStubRoutine.h:
430         * jit/Repatch.cpp:
431         (JSC::generateByIdStub):
432         (JSC::linkSlowFor):
433         (JSC::linkFor):
434         (JSC::revertCall):
435         (JSC::unlinkFor):
436         (JSC::linkPolymorphicCall):
437         * jit/ThunkGenerators.cpp:
438         (JSC::virtualForThunkGenerator):
439
440 2015-06-24  Doug Russell  <d_russell@apple.com>
441
442         Bug 146177 - AX: AXObjectCache should try to use an unignored accessibilityObject 
443         when posting a selection notification when on the border between two accessibilityObjects
444         https://bugs.webkit.org/show_bug.cgi?id=146177
445
446         Add an adopt() function to simplify JSRetainPtr<JSStringRef> { Adopt, string } to adopt(string).
447
448         Reviewed by Darin Adler.
449
450         * API/JSRetainPtr.h:
451         (adopt):
452
453 2015-06-24  Keith Miller  <keith_miller@apple.com>
454
455         Strict Equality on objects should only check that one of the two sides is an object.
456         https://bugs.webkit.org/show_bug.cgi?id=145992
457
458         This patch adds a new optimization for checking strict equality on objects.
459         If we speculate that a strict equality comparison has an object on one side
460         we only need to type check that side. Equality is then determined by a pointer
461         comparison between the two values (although in the 32-bit case we must also check
462         that the other side is a cell). Once LICM hoists type checks out of a loop we
463         can be cleverer about how we choose the operand we type check if both are
464         speculated to be objects.
465
466         For testing I added the addressOf function, which returns the address
467         of a Cell to the runtime.
468
469         Reviewed by Mark Lam.
470
471         * dfg/DFGFixupPhase.cpp:
472         (JSC::DFG::FixupPhase::fixupNode):
473         * dfg/DFGSpeculativeJIT.cpp:
474         (JSC::DFG::SpeculativeJIT::compileStrictEq):
475         * dfg/DFGSpeculativeJIT.h:
476         * dfg/DFGSpeculativeJIT32_64.cpp:
477         (JSC::DFG::SpeculativeJIT::compileObjectStrictEquality):
478         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectStrictEquality):
479         * dfg/DFGSpeculativeJIT64.cpp:
480         (JSC::DFG::SpeculativeJIT::compileObjectStrictEquality):
481         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectStrictEquality):
482         * ftl/FTLCapabilities.cpp:
483         (JSC::FTL::canCompile):
484         * ftl/FTLLowerDFGToLLVM.cpp:
485         (JSC::FTL::DFG::LowerDFGToLLVM::compileCompareStrictEq):
486         * jsc.cpp:
487         (GlobalObject::finishCreation):
488         (functionAddressOf):
489         * tests/stress/equality-type-checking.js: Added.
490         (Foo):
491         (checkStrictEq):
492         (checkStrictEqOther):
493
494 2015-06-24  Mark Lam  <mark.lam@apple.com>
495
496         Fixed assertion in JSStringJoiner::join() (regression from r185899).
497
498         Not reviewed.
499
500         JSStringJoiner did not account for the case where the array being joined can
501         have null or undefined elements.  As a result, its size may be less than
502         its initially reserved capacity (which was estimated based on the array length).
503
504         * runtime/JSStringJoiner.cpp:
505         (JSC::JSStringJoiner::join):
506
507 2015-06-24  Darin Adler  <darin@apple.com>
508
509         Fix Array.concat with RuntimeArray (regression from my last patch)
510
511         * runtime/ArrayPrototype.cpp:
512         (JSC::arrayProtoFuncConcat): Use getLength instead of JSArray::length.
513
514         * runtime/JSArray.cpp:
515         (JSC::JSArray::defineOwnProperty): Added comment about use of
516         JSArray::length here that is incorrect (in a really non-obvious way).
517         (JSC::JSArray::fillArgList): Ditto.
518         (JSC::JSArray::copyToArguments): Ditto.
519
520         * runtime/JSArray.h: Added a comment explaining that it is not always
521         safe to use JSArray::length.
522
523 2015-06-23  Mark Lam  <mark.lam@apple.com>
524
525         Gardening: Fixing 2 bad asserts from r185889.
526         https://bugs.webkit.org/show_bug.cgi?id=140575
527
528         Not reviewed.
529
530         * runtime/JSBoundSlotBaseFunction.cpp:
531         (JSC::JSBoundSlotBaseFunction::finishCreation):
532
533 2015-06-23  Dan Bernstein  <mitz@apple.com>
534
535         Fixed iOS production builds.
536
537         * JavaScriptCore.xcodeproj/project.pbxproj:
538
539 2015-06-22  Darin Adler  <darin@apple.com>
540
541         Make Array.join work directly on substrings without reifying them
542         https://bugs.webkit.org/show_bug.cgi?id=146191
543
544         Reviewed by Andreas Kling.
545
546         Besides the Array.join change, this has other optimizations based on
547         profiling the Peacekeeper array benchmark.
548
549         I measured a 14% speed improvement in the Peacekeeper array benchmark.
550
551         Still a lot of low hanging fruit in that test because so many of functions
552         on the array prototype are not optimizing for simple cases. For example,
553         the reverse function does individual get and put calls even when the array
554         is entirely made up of integers in contiguous storage.
555
556         * runtime/ArrayPrototype.cpp:
557         (JSC::getProperty): Use tryGetIndexQuickly first before getPropertySlot.
558         (JSC::argumentClampedIndexFromStartOrEnd): Marked inline.
559         (JSC::shift): Use the getProperty helper in this file instead of using
560         getPropertySlot. Use putByIndexInline instead of calling putByIndex directly.
561         In both cases this can yield a faster code path.
562         (JSC::unshift): Ditto.
563         (JSC::arrayProtoFuncToString): Updated to use the new JSStringJoiner
564         interface. Changed local variable name to thisArray since it's not a
565         JSObject*. Changed loop index to i instead of k.
566         (JSC::arrayProtoFuncToLocaleString): Updated to use the new JSStringJoiner
567         interface. Renamed thisObj to thisObject. Added a missing exception check
568         after the toLocaleString function is called, but before toString is called
569         the result of that function.
570         (JSC::arrayProtoFuncJoin): Updated to use the new JSStringJointer interface.
571         Added a missing exception check after calling toString on the separator
572         but before calling get to get the first element in the array-like object
573         being joined. Changed loop index to i instead of k. Added missing exception
574         check after calling toString on each string from the array before calling
575         get for the next element.
576         (JSC::arrayProtoFuncConcat): Use JSArray::length instead of using the
577         getLength function.
578         (JSC::arrayProtoFuncReverse): Ditto. Also use putByIndexInline.
579         (JSC::arrayProtoFuncShift): Ditto.
580         (JSC::arrayProtoFuncSplice): Use getIndex instead of get, which includes some
581         additional optimizations.
582         (JSC::getOrHole): Deleted. Unused function.
583         (JSC::arrayProtoFuncUnShift): Use putByIndexInline.
584
585         * runtime/ExceptionHelpers.cpp:
586         (JSC::errorDescriptionForValue): Removed the duplicate copy of the the logic
587         from JSValue::toString.
588
589         * runtime/JSCJSValue.cpp:
590         (JSC::JSValue::toStringSlowCase): Improved the performance when converting a
591         small integer to a single character string.
592         (JSC::JSValue::toWTFStringSlowCase): Moved the contents of the
593         inlineJSValueNotStringtoString function here.
594         * runtime/JSCJSValue.h: Removed no longer used toWTFStringInline and fixed
595         a comment with a typo.
596
597         * runtime/JSObject.h:
598         (JSC::JSObject::putByIndexInline): Marked ALWAYS_INLINE because this was not
599         getting inlined at some call sites.
600         (JSC::JSObject::indexingData): Deleted. Unused function.
601         (JSC::JSObject::currentIndexingData): Deleted. Unused function.
602         (JSC::JSObject::getHolyIndexQuickly): Deleted. Unused function.
603         (JSC::JSObject::relevantLength): Deleted. Unused function.
604         (JSC::JSObject::currentRelevantLength): Deleted. Unused function.
605
606         * runtime/JSString.h: Added the StringViewWithUnderlyingString struct and
607         the viewWithUnderlyingString function. Removed the inlineJSValueNotStringtoString
608         and toWTFStringInline functions.
609
610         * runtime/JSStringJoiner.cpp:
611         (JSC::appendStringToData): Changed this to be a template instead of writing
612         it out, since StringView::getCharactersWithUpconvert does almsot exactly what
613         this function was trying to do.
614         (JSC::joinStrings): Rewrote this to use StringView.
615         (JSC::JSStringJoiner::joinedLength): Added. Factored out from the join function.
616         (JSC::JSStringJoiner::join): Rewrote to make it a bit simpler. Added an assertion
617         that we entirely filled capacity, since we are now reserving capacity and using
618         uncheckedAppend. Use String instead of RefPtr<StringImpl> because there was no
619         particular value to using the impl directly.
620
621         * runtime/JSStringJoiner.h: Changed the interface to the class to use StringView.
622         Also changed this class so it now has the responsibility to convert each JSValue
623         into a string. This let us share more code between toString and join, and also
624         lets us use the new viewWithUnderlyingString function, which could be confusing at
625         all the call sites, but is easier to understand here.
626
627 2015-06-23  Matthew Mirman  <mmirman@apple.com>
628
629         Completes native binding descriptors with native getters and potentially setters.
630         https://bugs.webkit.org/show_bug.cgi?id=140575
631         rdar://problem/19506502
632
633         Reviewed by Mark Lam.
634
635         * CMakeLists.txt:  Added JSBoundSlotBaseFunction.cpp
636         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
637         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
638         * JavaScriptCore.xcodeproj/project.pbxproj:
639         * inspector/InjectedScriptSource.js: Added case for descriptor having a native getter.
640         * runtime/JSBoundSlotBaseFunction.cpp: Added.
641         (JSC::boundSlotBaseFunctionCall):
642         (JSC::JSBoundSlotBaseFunction::JSBoundSlotBaseFunction):  
643         Necessary wrapper for custom getters and setters as objects.
644         (JSC::JSBoundSlotBaseFunction::create):
645         (JSC::JSBoundSlotBaseFunction::visitChildren):
646         (JSC::JSBoundSlotBaseFunction::finishCreation):
647         * runtime/JSBoundSlotBaseFunction.h: Added.
648         (JSC::JSBoundSlotBaseFunction::createStructure):
649         (JSC::JSBoundSlotBaseFunction::boundSlotBase):
650         (JSC::JSBoundSlotBaseFunction::customGetterSetter):
651         (JSC::JSBoundSlotBaseFunction::isGetter):
652         * runtime/JSGlobalObject.cpp:
653         (JSC::JSGlobalObject::init): Added a globally initialized structure for JSBoundSlotBaseFunction
654         (JSC::JSGlobalObject::visitChildren): visits that structure
655         * runtime/JSGlobalObject.h:
656         (JSC::JSGlobalObject::boundSlotBaseFunctionStructure): added a getter for that structure
657         * runtime/JSObject.cpp:
658         (JSC::JSObject::getOwnPropertyDescriptor): extends the case for CustomGetterSetter to 
659         actually include GetterSetter as a JSBoundSlotBaseFunction
660         * runtime/VM.cpp: Added initializer for customGetterSetterFunctionMap
661         * runtime/VM.h: Added cache for JSBoundSlotBaseFunction
662
663 2015-06-22  Yusuke Suzuki  <utatane.tea@gmail.com>
664
665         [ES6] Allow trailing comma in ArrayBindingPattern and ObjectBindingPattern
666         https://bugs.webkit.org/show_bug.cgi?id=146192
667
668         Reviewed by Darin Adler.
669
670         According to the ES6 spec, trailing comma in ArrayBindingPattern and ObjectBindingPattern is allowed.
671         And empty ArrayBindingPattern and ObjectBindingPattern is also allowed.
672
673         This patch allows trailing comma and empty binding patterns.
674
675         * bytecompiler/NodesCodegen.cpp:
676         (JSC::ArrayPatternNode::bindValue):
677         * parser/Parser.cpp:
678         (JSC::Parser<LexerType>::parseDeconstructionPattern):
679         * tests/stress/trailing-comma-in-patterns.js: Added.
680         (shouldBe):
681         (iterator):
682
683 2015-06-20  Yusuke Suzuki  <utatane.tea@gmail.com>
684
685         [ES6] Destructuring assignment need to accept iterables
686         https://bugs.webkit.org/show_bug.cgi?id=144111
687
688         Reviewed by Darin Adler.
689
690         This patch makes that destructuring assignments to array binding patterns accept iterables.
691         Previously, it just access the indexed properties.
692         After this patch, it iterates the given value by using ES6 iterator protocol.
693
694         The iteration becomes different from the for-of case.
695         1. Since there's no break/continue case, finally scope is not necessary.
696         2. When the error is raised, the close status of the iterator becomes true. So IteratorClose is not called for that.
697         3. Since the array binding patterns requires a limited count of iterations (if there is no rest(...rest) case), IteratorClose is called when the iteration does not consume the all values of the iterator.
698         4. Since the array binding patterns requires a specified count of iterations, iterator's next call is skipped when iterator becomes closed.
699
700         * bytecompiler/BytecodeGenerator.cpp:
701         (JSC::BytecodeGenerator::emitIteratorClose):
702         * bytecompiler/BytecodeGenerator.h:
703         * bytecompiler/NodesCodegen.cpp:
704         (JSC::ArrayPatternNode::bindValue):
705         * parser/ASTBuilder.h:
706         (JSC::ASTBuilder::finishArrayPattern):
707         * parser/Nodes.h:
708         * parser/Parser.cpp:
709         (JSC::Parser<LexerType>::parseDeconstructionPattern):
710         * parser/SyntaxChecker.h:
711         (JSC::SyntaxChecker::operatorStackPop):
712         * tests/stress/destructuring-assignment-accepts-iterables.js: Added.
713         (shouldBe):
714         (shouldThrow):
715         (.set shouldThrow):
716
717 2015-06-19  Devin Rousso  <drousso@apple.com>
718
719         Web Inspector: Highlight currently edited CSS selector
720         https://bugs.webkit.org/show_bug.cgi?id=145658
721
722         Reviewed by Joseph Pecoraro.
723
724         * inspector/protocol/DOM.json: Added highlightSelector to show highlight over multiple nodes.
725
726 2015-06-19  Mark Lam  <mark.lam@apple.com>
727
728         Gardening: fix build for EWS bots.
729
730         Not reviewed.
731
732         * runtime/JSArray.cpp:
733         (JSC::JSArray::setLengthWithArrayStorage):
734
735 2015-06-19  Michael Saboff  <msaboff@apple.com>
736
737         Crash in com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::FTL::fixFunctionBasedOnStackMaps + 17225
738         https://bugs.webkit.org/show_bug.cgi?id=146133
739
740         Reviewed by Geoffrey Garen.
741
742         When generating code to put in inline caching areas, if there isn't enough space,
743         then create and link to an out of line area.  We connect the inline code to this
744         out of line code area by planting a jump from the inline area to the out of line
745         code and appending a jump at the end of the out of line code bck to the instruction
746         following the inline area.  We fill the unused inline area with nops, primarily to 
747         ensure the disassembler doesn't get confused.
748
749         * ftl/FTLCompile.cpp:
750         (generateInlineIfPossibleOutOfLineIfNot): New function that determines if there is enough space
751         in the inline code area for the code to link.  If so, it links inline, otherwise it links the
752         code out of line and plants appropriate jumps to/from the out of line code.
753         (generateICFastPath):
754         (generateCheckInICFastPath):
755         (fixFunctionBasedOnStackMaps):
756         Use generateInlineIfPossibleOutOfLineIfNot() to link code intended for inline cache space.
757
758         * ftl/FTLJITFinalizer.cpp:
759         (JSC::FTL::JITFinalizer::finalizeFunction):
760         * ftl/FTLJITFinalizer.h:
761         (JSC::FTL::OutOfLineCodeInfo::OutOfLineCodeInfo):
762         Added code to finalize any out of line LinkBuffer created by generateInlineIfPossibleOutOfLineIfNot().
763
764 2015-06-19  Geoffrey Garen  <ggaren@apple.com>
765
766         WebKit crash while loading nytimes at JavaScriptCore: JSC::ExecutableAllocator::allocate + 276
767         https://bugs.webkit.org/show_bug.cgi?id=146163
768         <rdar://problem/20392986>
769
770         Reviewed by Michael Saboff.
771
772         There's no good way to test this in our test harness because we don't
773         have a way to simulate executable memory pressure, and doing so would
774         cause the cases that still use JITCompilationMustSucceed to crash.
775
776         Instead, I tested by manually forcing all regexp JIT compilation to
777         fail and running the JavaScriptCore tests.
778
779         * yarr/YarrJIT.cpp:
780         (JSC::Yarr::YarrGenerator::compile): Allow compilation to fail. We can
781         fall back to the regexp interpreter if we need to.
782
783 2015-06-19  Mark Lam  <mark.lam@apple.com>
784
785         Employ explicit operator bool() instead of using the UnspecifiedBoolType workaround.
786         https://bugs.webkit.org/show_bug.cgi?id=146154
787
788         Reviewed by Darin Adler.
789
790         * assembler/MacroAssemblerCodeRef.h:
791         (JSC::MacroAssemblerCodePtr::dataLocation):
792         (JSC::MacroAssemblerCodePtr::operator bool):
793         (JSC::MacroAssemblerCodePtr::operator==):
794         (JSC::MacroAssemblerCodeRef::tryToDisassemble):
795         (JSC::MacroAssemblerCodeRef::operator bool):
796         (JSC::MacroAssemblerCodeRef::dump):
797         (JSC::MacroAssemblerCodePtr::operator UnspecifiedBoolType*): Deleted.
798         (JSC::MacroAssemblerCodeRef::operator UnspecifiedBoolType*): Deleted.
799
800         * bytecode/CodeOrigin.cpp:
801         (JSC::CodeOrigin::isApproximatelyEqualTo):
802         - Fixed a bug here where we were expecting to compare Executable pointers, but
803           ended up comparing a (UnspecifiedBoolType*)1 with another
804           (UnspecifiedBoolType*)1.
805
806         * bytecode/LLIntCallLinkInfo.h:
807         (JSC::LLIntCallLinkInfo::~LLIntCallLinkInfo):
808         (JSC::LLIntCallLinkInfo::isLinked):
809         (JSC::LLIntCallLinkInfo::unlink):
810         * dfg/DFGBlockWorklist.h:
811         (JSC::DFG::BlockWith::BlockWith):
812         (JSC::DFG::BlockWith::operator bool):
813         (JSC::DFG::BlockWithOrder::BlockWithOrder):
814         (JSC::DFG::BlockWithOrder::operator bool):
815         (JSC::DFG::BlockWith::operator UnspecifiedBoolType*): Deleted.
816         (JSC::DFG::BlockWithOrder::operator UnspecifiedBoolType*): Deleted.
817         * dfg/DFGIntegerRangeOptimizationPhase.cpp:
818         * dfg/DFGLazyNode.h:
819         (JSC::DFG::LazyNode::operator!):
820         (JSC::DFG::LazyNode::operator bool):
821         (JSC::DFG::LazyNode::operator UnspecifiedBoolType*): Deleted.
822         * heap/CopyWriteBarrier.h:
823         (JSC::CopyWriteBarrier::operator!):
824         (JSC::CopyWriteBarrier::operator bool):
825         (JSC::CopyWriteBarrier::get):
826         (JSC::CopyWriteBarrier::operator UnspecifiedBoolType*): Deleted.
827         * heap/Handle.h:
828         (JSC::HandleBase::operator!):
829         (JSC::HandleBase::operator bool):
830         (JSC::HandleBase::slot):
831         (JSC::HandleBase::operator UnspecifiedBoolType*): Deleted.
832         * heap/Strong.h:
833         (JSC::Strong::operator!):
834         (JSC::Strong::operator bool):
835         (JSC::Strong::swap):
836         (JSC::Strong::operator UnspecifiedBoolType*): Deleted.
837         * jit/JITWriteBarrier.h:
838         (JSC::JITWriteBarrierBase::operator bool):
839         (JSC::JITWriteBarrierBase::operator!):
840         (JSC::JITWriteBarrierBase::setFlagOnBarrier):
841         (JSC::JITWriteBarrierBase::operator UnspecifiedBoolType*): Deleted.
842         * runtime/JSArray.cpp:
843         (JSC::JSArray::setLengthWithArrayStorage):
844         * runtime/JSCJSValue.h:
845         * runtime/JSCJSValueInlines.h:
846         (JSC::JSValue::JSValue):
847         (JSC::JSValue::operator bool):
848         (JSC::JSValue::operator==):
849         (JSC::JSValue::operator UnspecifiedBoolType*): Deleted.
850         * runtime/JSObject.h:
851         (JSC::JSObject::hasSparseMap):
852         * runtime/PropertyDescriptor.h:
853         (JSC::PropertyDescriptor::writablePresent):
854         (JSC::PropertyDescriptor::enumerablePresent):
855         (JSC::PropertyDescriptor::configurablePresent):
856         (JSC::PropertyDescriptor::setterPresent):
857         (JSC::PropertyDescriptor::getterPresent):
858         * runtime/WriteBarrier.h:
859         (JSC::WriteBarrierBase::slot):
860         (JSC::WriteBarrierBase::operator bool):
861         (JSC::WriteBarrierBase::operator!):
862         (JSC::WriteBarrierBase<Unknown>::tagPointer):
863         (JSC::WriteBarrierBase<Unknown>::payloadPointer):
864         (JSC::WriteBarrierBase<Unknown>::operator bool):
865         (JSC::WriteBarrierBase<Unknown>::operator!):
866         (JSC::WriteBarrierBase::operator UnspecifiedBoolType*): Deleted.
867         (JSC::WriteBarrierBase<Unknown>::operator UnspecifiedBoolType*): Deleted.
868
869 2015-06-19  Anders Carlsson  <andersca@apple.com>
870
871         Add a JSC symlink in /System/Library/PrivateFrameworks
872         https://bugs.webkit.org/show_bug.cgi?id=146158
873         rdar://problem/21465968
874
875         Reviewed by Dan Bernstein.
876
877         * JavaScriptCore.xcodeproj/project.pbxproj:
878
879 2015-06-19  Joseph Pecoraro  <pecoraro@apple.com>
880
881         Web Inspector: Avoid getOwnPropertyNames/Symbols on very large lists
882         https://bugs.webkit.org/show_bug.cgi?id=146141
883
884         Reviewed by Timothy Hatcher.
885
886         * inspector/InjectedScriptSource.js:
887         (InjectedScript.prototype._propertyDescriptors):
888         Avoid calling getOwnPropertyNames/Symbols on very large lists. Instead
889         just generate property descriptors for the first 100 indexes. Note
890         this would behave poorly for sparse arrays with a length > 100, but
891         general support for lists with more than 100 elements is poor. See:
892         <https://webkit.org/b/143589> Web Inspector: Better handling for large collections in Object Trees
893
894 2015-06-18  Yusuke Suzuki  <utatane.tea@gmail.com>
895
896         [DFG] Avoid OSR exit in the middle of string concatenation
897         https://bugs.webkit.org/show_bug.cgi?id=145820
898
899         Reviewed by Filip Pizlo.
900
901         DFG attempt to compile ValueAdd with String type into MakeRope(left, ToString(ToPrimitive(right))).
902
903         So when right is speculated as SpecObject, ToPrimitive(SpecObject) is speculated as SpecString.
904         It leads ToString to become Identity with a speculated type check.
905
906         However, ToPrimitive and ToString are originated from the same bytecode. And ToPrimitive may have
907         an observable side effect when the given parameter is an object (calling object.{toString,valueOf}).
908
909         So when object.toString() returns a number (it is allowed in the ES spec), ToPrimitive performs
910         observable `object.toString()` calling. But ToString is converted into a speculated type check for
911         SpecString and it raises OSR exit. And we exit to the original ValueAdd's bytecode position and
912         it redundantly performs an observable ToPrimitive execution.
913
914         To fix this, this patch avoid fixing up for newly introduced ToString node.
915         Since fix up phase is not iterated repeatedly, by avoiding fixing up when generating the node,
916         we can avoid conversion from ToString to Check.
917
918         * dfg/DFGFixupPhase.cpp:
919         (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
920         * tests/stress/toprimitive-speculated-types.js: Added.
921         (shouldBe):
922         (raw):
923         (Counter):
924
925 2015-06-18  Brian J. Burg  <burg@cs.washington.edu>
926
927         Web Inspector: improve generated types for objects passed to backend commands
928         https://bugs.webkit.org/show_bug.cgi?id=146091
929
930         Reviewed by Joseph Pecoraro.
931
932         The main change is that objects passed in will have a type like const T& or const T*,
933         rather than const RefPtr<T>&&. These protocol objects are owned by the generated dispatcher
934         methods and only exist to pass data to backend command implementations. So, there is no
935         reason for callees to add a reference or take ownership of these inputs.
936
937         Some small improvements were made in the code generator to standardize how these
938         expressions are generated for parameters. Optional in parameters are now prefixed with
939         'opt_in_' to make the generated method signatures and implementations clearer.
940
941         * inspector/InspectorValues.cpp:
942         (Inspector::InspectorArrayBase::get): Add const qualifier.
943         * inspector/InspectorValues.h:
944         * inspector/agents/InspectorDebuggerAgent.cpp:
945         (Inspector::InspectorDebuggerAgent::setBreakpointByUrl):
946         (Inspector::parseLocation):
947         (Inspector::InspectorDebuggerAgent::setBreakpoint):
948         (Inspector::InspectorDebuggerAgent::continueToLocation):
949         * inspector/agents/InspectorDebuggerAgent.h:
950         * inspector/agents/InspectorRuntimeAgent.cpp:
951         (Inspector::InspectorRuntimeAgent::callFunctionOn):
952         (Inspector::InspectorRuntimeAgent::saveResult):
953         (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets):
954         * inspector/agents/InspectorRuntimeAgent.h:
955
956         * inspector/scripts/codegen/cpp_generator.py: Always generate PrimitiveType('array').
957         (CppGenerator.cpp_type_for_unchecked_formal_in_parameter): Alter the type signature
958         for an unchecked input to use pointers or references.
959
960         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
961         (CppBackendDispatcherHeaderGenerator._generate_handler_declaration_for_command):
962         (CppBackendDispatcherHeaderGenerator._generate_async_handler_declaration_for_command):
963         Local variables for optional parameters now have the 'opt_' prefix.
964
965         * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
966         (CppBackendDispatcherImplementationGenerator._generate_async_dispatcher_class_for_domain):
967         (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command):
968         Local variables for optional parameters now have the 'opt_' prefix.
969         Split parameterName and parameterKey into two separate template variables to avoid mixups.
970
971         * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
972
973 2015-06-18  Joseph Pecoraro  <pecoraro@apple.com>
974
975         Unreviewed. Rollout r185670 as it caused some tests to be flakey.
976
977         * debugger/Debugger.cpp:
978
979 2015-06-17  Alex Christensen  <achristensen@webkit.org>
980
981         [Content Extensions] Log blocked loads to the WebInspector console
982         https://bugs.webkit.org/show_bug.cgi?id=146089
983
984         Reviewed by Joseph Pecoraro.
985
986         * inspector/ConsoleMessage.cpp:
987         (Inspector::messageSourceValue):
988         * inspector/protocol/Console.json:
989         * runtime/ConsoleTypes.h:
990         Add content blocker message source.
991
992 2015-06-18  Saam Barati  <saambarati1@gmail.com>
993
994         [ES6] support default values in deconstruction parameter nodes
995         https://bugs.webkit.org/show_bug.cgi?id=142679
996
997         Reviewed by Darin Adler.
998
999         ES6 destructuring allows destructuring properties to assign 
1000         default values. A link to the spec: 
1001         https://people.mozilla.org/~jorendorff/es6-draft.html#sec-destructuring-binding-patterns
1002
1003         This patch implements default values for all places where deconstruction
1004         is allowed besides function parameters. This is because function
1005         parameters are parsed in a separate parser arena than the function
1006         body itself and ExpresionNode's which are default values for
1007         deconstruction parameters will be deallocated by the time we parse the body
1008         of the function. I have opened a bug to address this problem:
1009         https://bugs.webkit.org/show_bug.cgi?id=145995
1010
1011         * bytecompiler/NodesCodegen.cpp:
1012         (JSC::DeconstructionPatternNode::~DeconstructionPatternNode):
1013         (JSC::assignDefaultValueIfUndefined):
1014         (JSC::ArrayPatternNode::bindValue):
1015         (JSC::ArrayPatternNode::emitDirectBinding):
1016         (JSC::ArrayPatternNode::toString):
1017         (JSC::ArrayPatternNode::collectBoundIdentifiers):
1018         (JSC::ObjectPatternNode::bindValue):
1019         * parser/ASTBuilder.h:
1020         (JSC::ASTBuilder::appendArrayPatternSkipEntry):
1021         (JSC::ASTBuilder::appendArrayPatternEntry):
1022         (JSC::ASTBuilder::createObjectPattern):
1023         (JSC::ASTBuilder::appendObjectPatternEntry):
1024         (JSC::ASTBuilder::createBindingLocation):
1025         * parser/Nodes.h:
1026         (JSC::ArrayPatternNode::appendIndex):
1027         (JSC::ObjectPatternNode::appendEntry):
1028         (JSC::ObjectPatternNode::Entry::Entry): Deleted.
1029         * parser/Parser.cpp:
1030         (JSC::Parser<LexerType>::parseDeconstructionPattern):
1031         (JSC::Parser<LexerType>::parseDefaultValueForDeconstructionPattern):
1032         (JSC::Parser<LexerType>::parseConstDeclarationList):
1033         * parser/Parser.h:
1034         * parser/SyntaxChecker.h:
1035         (JSC::SyntaxChecker::operatorStackPop):
1036
1037 2015-06-17  Joseph Pecoraro  <pecoraro@apple.com>
1038
1039         Web Inspector: Do not show JavaScriptCore builtins in inspector
1040         https://bugs.webkit.org/show_bug.cgi?id=146049
1041
1042         Reviewed by Timothy Hatcher.
1043
1044         * debugger/Debugger.cpp:
1045
1046 2015-06-17  Andreas Kling  <akling@apple.com>
1047
1048         [JSC] jsSubstring() should have a fast path for 0..baseLength "substrings."
1049         <https://webkit.org/b/146051>
1050
1051         Reviewed by Anders Carlsson.
1052
1053         If asked to make a substring that actually spans the entire base string,
1054         have jsSubstring() just return the base instead of allocating a new JSString.
1055
1056         3% speed-up on Octane/regexp.
1057
1058         * runtime/JSString.h:
1059         (JSC::jsSubstring):
1060
1061 2015-06-16  Alex Christensen  <achristensen@webkit.org>
1062
1063         32-bit build fix after r185640.
1064
1065         * dfg/DFGIntegerRangeOptimizationPhase.cpp:
1066         Explicitly cast clamped int64_t to an int.
1067
1068 2015-06-09  Filip Pizlo  <fpizlo@apple.com>
1069
1070         FTL should eliminate array bounds checks in loops
1071         https://bugs.webkit.org/show_bug.cgi?id=145768
1072
1073         Reviewed by Benjamin Poulain.
1074         
1075         This adds a phase that does forward propagation of integer inequalities. This allows us
1076         to do the algebraic reasoning we need to eliminate array bounds checks in loops. It
1077         also eliminates overflow checks on ArithAdd with a constant.
1078         
1079         The phase's analysis produces results that are powerful enough to do speculative bounds
1080         check hoisting, but this phase currently only does elimination. We can implement
1081         hoisting later.
1082         
1083         On programs that just loop over an array like:
1084         
1085             for (var i = 0; i < array.length; ++i)
1086                 thingy += array[i]
1087         
1088         This change is a 60% speed-up.
1089         
1090         This is also a ~3% speed-up on Kraken, and it shows various speed-ups on individual
1091         tests in Octane.
1092
1093         * CMakeLists.txt:
1094         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1095         * JavaScriptCore.xcodeproj/project.pbxproj:
1096         * dfg/DFGIntegerRangeOptimizationPhase.cpp: Added.
1097         (JSC::DFG::performIntegerRangeOptimization):
1098         * dfg/DFGIntegerRangeOptimizationPhase.h: Added.
1099         * dfg/DFGPlan.cpp:
1100         (JSC::DFG::Plan::compileInThreadImpl):
1101         * tests/stress/add-overflows-after-not-equal.js: Added.
1102         * tests/stress/no-abc-skippy-loop.js: Added.
1103         * tests/stress/no-abc-skippy-paired-loop.js: Added.
1104         * tests/stress/sub-overflows-after-not-equal.js: Added.
1105
1106 2015-06-16  Andreas Kling  <akling@apple.com>
1107
1108         Remove unused template parameter InlineCapacity from SegmentedVector.
1109         <https://webkit.org/b/146044>
1110
1111         Reviewed by Anders Carlsson.
1112
1113         * bytecode/ArrayProfile.h:
1114         * dfg/DFGCommonData.h:
1115
1116 2015-06-16  Michael Saboff  <msaboff@apple.com>
1117
1118         Inlining in the DFG trashes ByteCodeParser::m_currentInstruction for the calling function
1119         https://bugs.webkit.org/show_bug.cgi?id=146029
1120
1121         Reviewed by Benjamin Poulain.
1122
1123         Save and restore m_currentInstruction around call to ByteCodeParser::inlineCall() as it will
1124         use m_currentInstruction during its own parsing.  This happens because inlineCall() parses the
1125         inlined callee's bytecodes by calling parseCodeBlock() which calls parseBlock() on each block.
1126         It is in parseBlock() that we set m_currentInstruction to an instruction before we parse it.
1127
1128         * dfg/DFGByteCodeParser.cpp:
1129         (JSC::DFG::ByteCodeParser::attemptToInlineCall):
1130         (JSC::DFG::ByteCodeParser::parseBlock): Added an ASSERT to catch this issue.
1131
1132 2015-06-16  Filip Pizlo  <fpizlo@apple.com>
1133
1134         Unreviewed, roll out unintended JSC change from https://trac.webkit.org/changeset/185425.
1135
1136         * bytecode/CodeBlock.h:
1137         (JSC::CodeBlock::hasExitSite):
1138         (JSC::CodeBlock::exitProfile):
1139         (JSC::CodeBlock::numberOfExitSites): Deleted.
1140         * bytecode/DFGExitProfile.cpp:
1141         (JSC::DFG::ExitProfile::add):
1142         * bytecode/DFGExitProfile.h:
1143         (JSC::DFG::ExitProfile::hasExitSite):
1144         (JSC::DFG::ExitProfile::size): Deleted.
1145         * dfg/DFGByteCodeParser.cpp:
1146         (JSC::DFG::ByteCodeParser::inliningCost):
1147         * runtime/Options.h:
1148
1149 2015-06-16  Mark Lam  <mark.lam@apple.com>
1150
1151         Use NakedPtr<Exception>& to return exception results.
1152         https://bugs.webkit.org/show_bug.cgi?id=145870
1153
1154         Reviewed by Anders Carlsson and Filip Pizlo.
1155
1156         Before r185259, calls into the VM takes a JSValue* exception result argument for
1157         returning any uncaught exception that may have been thrown while executing JS code.
1158         As a result, clients of the VM functions will declare a local JSValue exception
1159         result which is automatically initialized to a null value (i.e. the empty value,
1160         not the JS null value).
1161
1162         With r185259, the VM functions were changed to take an Exception*& exception result
1163         instead, and the VM functions are responsible for initializing the exception result
1164         to null if no exception is thrown.
1165
1166         This introduces 2 issues:
1167
1168         1. the VM functions are vulnerable to modifications that may add early returns
1169            before the exception result is nullified.  This can result in the exception
1170            result being used without initialization.
1171
1172         2. Previously, a client could technically use the same exception result for more
1173            than one calls into the VM functions.  If an earlier call sets it to a thrown
1174            value, the thrown value will stick unless a subsequent call throws a different
1175            exception.
1176
1177            With the new Exception*& exception result, the VM functions will always clear
1178            the exception result before proceeding.  As a result, the client's exception
1179            result will be null after the second call even though the first call saw an
1180            exception thrown.  This is a change in the expected behavior.
1181
1182         To fix these issues, we'll introduce a NakedPtr smart pointer whose sole purpose
1183         is to guarantee that the pointer is initialized.  The VM functions will now take
1184         a NakedPtr<Exception>& instead of the Exception*&.  This ensures that the
1185         exception result is initialized.
1186
1187         The VM functions be also reverted to only set the exception result if a new
1188         exception is thrown.
1189
1190         * API/JSBase.cpp:
1191         (JSEvaluateScript):
1192         * API/JSScriptRef.cpp:
1193         * bindings/ScriptFunctionCall.cpp:
1194         (Deprecated::ScriptFunctionCall::call):
1195         * bindings/ScriptFunctionCall.h:
1196         * debugger/Debugger.cpp:
1197         (JSC::Debugger::hasBreakpoint):
1198         * debugger/Debugger.h:
1199         * debugger/DebuggerCallFrame.cpp:
1200         (JSC::DebuggerCallFrame::thisValue):
1201         (JSC::DebuggerCallFrame::evaluate):
1202         * debugger/DebuggerCallFrame.h:
1203         (JSC::DebuggerCallFrame::isValid):
1204         * inspector/InjectedScriptManager.cpp:
1205         (Inspector::InjectedScriptManager::createInjectedScript):
1206         * inspector/InspectorEnvironment.h:
1207         * inspector/JSJavaScriptCallFrame.cpp:
1208         (Inspector::JSJavaScriptCallFrame::evaluate):
1209         * inspector/JavaScriptCallFrame.h:
1210         (Inspector::JavaScriptCallFrame::vmEntryGlobalObject):
1211         (Inspector::JavaScriptCallFrame::thisValue):
1212         (Inspector::JavaScriptCallFrame::evaluate):
1213         * inspector/ScriptDebugServer.cpp:
1214         (Inspector::ScriptDebugServer::evaluateBreakpointAction):
1215         * jsc.cpp:
1216         (functionRun):
1217         (functionLoad):
1218         (runWithScripts):
1219         (runInteractive):
1220         * runtime/CallData.cpp:
1221         (JSC::call):
1222         * runtime/CallData.h:
1223         * runtime/Completion.cpp:
1224         (JSC::checkSyntax):
1225         (JSC::evaluate):
1226         * runtime/Completion.h:
1227         (JSC::evaluate):
1228
1229 2015-06-15  Filip Pizlo  <fpizlo@apple.com>
1230
1231         FTL boolify() UntypedUse is wrong in the masquerades-as-undefined case
1232         https://bugs.webkit.org/show_bug.cgi?id=146002
1233
1234         Reviewed by Darin Adler.
1235
1236         * ftl/FTLLowerDFGToLLVM.cpp: Put this in an anonymous namespace. We should have done that all along. It makes it easier to add debug code.
1237         (JSC::FTL::DFG::LowerDFGToLLVM::boolify): Fix the bug.
1238         * tests/stress/logical-not-masquerades.js: Added. This test creates a masquerader so that the watchpoint is invalid. Previously this would fail for the normal object cases.
1239         (foo):
1240
1241 2015-06-16  Andreas Kling  <akling@apple.com>
1242
1243         [JSC] Pre-bake final Structure for RegExp matches arrays.
1244         <https://webkit.org/b/146006>
1245
1246         Reviewed by Darin Adler.
1247
1248         Since we always add the "index" and "input" fields to RegExp matches arrays,
1249         cache a finished structure on the global object so we can create these arrays without
1250         starting from scratch with a bare array every time.
1251
1252         10% progression on Octane/regexp (on my MBP.)
1253
1254         * runtime/JSArray.h:
1255         (JSC::JSArray::create):
1256         (JSC::JSArray::tryCreateUninitialized):
1257         (JSC::JSArray::createWithButterfly): Factored out JSArray construction into a helper
1258         so we can call this from RegExpMatchesArray.cpp.
1259
1260         * runtime/JSGlobalObject.cpp:
1261         (JSC::JSGlobalObject::init):
1262         (JSC::JSGlobalObject::visitChildren):
1263         * runtime/JSGlobalObject.h:
1264         (JSC::JSGlobalObject::regExpMatchesArrayStructure): Add a cached Structure for RegExp
1265         subpattern matches arrays.
1266
1267         * runtime/JSObject.h:
1268         (JSC::JSNonFinalObject::finishCreation): Tweak assertion that used to check that
1269         JSNonFinalObjects always start out with zero capacity. Since RegExp matches arrays now
1270         start out with capacity for 2 properties, that won't work. Change it to check that we
1271         don't have inline storage instead, since that should only be used by final objects.
1272
1273         * runtime/RegExpMatchesArray.h:
1274         * runtime/RegExpMatchesArray.cpp:
1275         (JSC::tryCreateUninitializedRegExpMatchesArray): Helper to construct a JSArray with
1276         the cached Structure and a Butterfly with 2 slots of property storage.
1277
1278         (JSC::createRegExpMatchesArray):
1279         (JSC::createRegExpMatchesArrayStructure): Creates the array Structure that gets cached
1280         by the JSGlobalObject.
1281
1282 2015-06-16  Saam Barati  <saambarati1@gmail.com>
1283
1284         LLInt's code path for get_from_scope with case GlobalVarWithVarInjectionChecks has dead code
1285         https://bugs.webkit.org/show_bug.cgi?id=144268
1286
1287         Reviewed by Darin Adler.
1288
1289         The call to loadVariable(.) both for 32bit and 64bit is unnecessary. 
1290         It grabs a value that is immediately overwritten by a call to getGlobalVar(). 
1291
1292         * llint/LowLevelInterpreter32_64.asm:
1293         * llint/LowLevelInterpreter64.asm:
1294
1295 2015-06-14  Yusuke Suzuki  <utatane.tea@gmail.com>
1296
1297         [ES6] Introduce %IteratorPrototype% and drop all XXXIteratorConstructor
1298         https://bugs.webkit.org/show_bug.cgi?id=145963
1299
1300         Reviewed by Darin Adler.
1301
1302         ES6 iterators inherit %IteratorPrototype%.
1303         And these prototype objects of derived iterators don't have @@iterator methods.
1304         Instead they use the %IteratorPrototype%[@@iterator] method.
1305
1306         To encourage inlining in for-of statement, we define this method in JS builtins.
1307
1308         And these iterator prototype objects don't have any constructor function.
1309         This patch drops them (like StringIteratorConstructor).
1310
1311         * CMakeLists.txt:
1312         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1313         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1314         * JavaScriptCore.xcodeproj/project.pbxproj:
1315         * builtins/Iterator.prototype.js: Renamed from Source/JavaScriptCore/runtime/StringIteratorConstructor.cpp.
1316         (SymbolIterator):
1317         * runtime/ArrayIteratorConstructor.cpp:
1318         (JSC::ArrayIteratorConstructor::finishCreation): Deleted.
1319         * runtime/ArrayIteratorConstructor.h: Removed.
1320         (JSC::ArrayIteratorConstructor::create): Deleted.
1321         (JSC::ArrayIteratorConstructor::createStructure): Deleted.
1322         (JSC::ArrayIteratorConstructor::ArrayIteratorConstructor): Deleted.
1323         * runtime/ArrayIteratorPrototype.cpp:
1324         (JSC::ArrayIteratorPrototype::finishCreation):
1325         (JSC::arrayIteratorProtoFuncIterator): Deleted.
1326         * runtime/IteratorPrototype.cpp: Renamed from Source/JavaScriptCore/runtime/ArrayIteratorConstructor.cpp.
1327         (JSC::IteratorPrototype::finishCreation):
1328         * runtime/IteratorPrototype.h: Renamed from Source/JavaScriptCore/runtime/SetIteratorConstructor.h.
1329         (JSC::IteratorPrototype::create):
1330         (JSC::IteratorPrototype::createStructure):
1331         (JSC::IteratorPrototype::IteratorPrototype):
1332         * runtime/JSFunction.cpp:
1333         (JSC::JSFunction::createBuiltinFunction):
1334         * runtime/JSFunction.h:
1335         * runtime/JSGlobalObject.cpp:
1336         (JSC::JSGlobalObject::init):
1337         (JSC::JSGlobalObject::visitChildren):
1338         * runtime/JSGlobalObject.h:
1339         (JSC::JSGlobalObject::iteratorPrototype):
1340         * runtime/MapIteratorConstructor.cpp: Removed.
1341         (JSC::MapIteratorConstructor::finishCreation): Deleted.
1342         * runtime/MapIteratorConstructor.h: Removed.
1343         (JSC::MapIteratorConstructor::create): Deleted.
1344         (JSC::MapIteratorConstructor::createStructure): Deleted.
1345         (JSC::MapIteratorConstructor::MapIteratorConstructor): Deleted.
1346         * runtime/MapIteratorPrototype.cpp:
1347         (JSC::MapIteratorPrototype::finishCreation): Deleted.
1348         (JSC::MapIteratorPrototypeFuncIterator): Deleted.
1349         * runtime/SetIteratorConstructor.cpp: Removed.
1350         (JSC::SetIteratorConstructor::finishCreation): Deleted.
1351         * runtime/SetIteratorConstructor.h:
1352         (JSC::SetIteratorConstructor::create): Deleted.
1353         (JSC::SetIteratorConstructor::createStructure): Deleted.
1354         (JSC::SetIteratorConstructor::SetIteratorConstructor): Deleted.
1355         * runtime/SetIteratorPrototype.cpp:
1356         (JSC::SetIteratorPrototype::finishCreation): Deleted.
1357         (JSC::SetIteratorPrototypeFuncIterator): Deleted.
1358         * runtime/StringIteratorConstructor.cpp:
1359         (JSC::StringIteratorConstructor::finishCreation): Deleted.
1360         * runtime/StringIteratorConstructor.h: Removed.
1361         (JSC::StringIteratorConstructor::create): Deleted.
1362         (JSC::StringIteratorConstructor::createStructure): Deleted.
1363         (JSC::StringIteratorConstructor::StringIteratorConstructor): Deleted.
1364         * runtime/StringIteratorPrototype.cpp:
1365         (JSC::StringIteratorPrototype::finishCreation):
1366         (JSC::stringIteratorPrototypeIterator): Deleted.
1367         * tests/stress/iterator-prototype.js: Added.
1368         (shouldBe):
1369         (inheritIteratorPrototype):
1370         (testChain):
1371
1372 2015-06-15  Michael Saboff  <msaboff@apple.com>
1373
1374         JIT bug - fails when inspector closed, works when open
1375         https://bugs.webkit.org/show_bug.cgi?id=145243
1376
1377         Reviewed by Oliver Hunt.
1378
1379         We need to provide the Arguments object as the base when creating the HeapLocation for
1380         GetFromArguments and PutToArguments.  Otherwise we endup creating a HeapLocation for
1381         any arguments object, not the one we need.
1382
1383         * dfg/DFGClobberize.h:
1384         (JSC::DFG::clobberize):
1385
1386 2015-06-13  Joseph Pecoraro  <pecoraro@apple.com>
1387
1388         Web Inspector: console.table() with a list of objects no longer works
1389         https://bugs.webkit.org/show_bug.cgi?id=145952
1390
1391         Reviewed by Timothy Hatcher.
1392
1393         * inspector/InjectedScriptSource.js:
1394         (InjectedScript.RemoteObject.prototype._generatePreview):
1395         Calling generatePreview again was actually starting with a preview
1396         of the current object instead of the sub-value. Go down the other
1397         path that correctly generates sub-previews. Leave filtering on the
1398         backend unimplemented, which we were already ignoring.
1399
1400 2015-06-13  Youenn Fablet  <youenn.fablet@crf.canon.fr>
1401
1402         [Streams API] ReadableJSStream should handle promises returned by JS source start callback
1403         https://bugs.webkit.org/show_bug.cgi?id=145792
1404
1405         Reviewed by Darin Adler.
1406
1407         Added support for JSFunction implemented by std::function.
1408
1409         * runtime/JSFunction.cpp:
1410         (JSC::getNativeExecutable): Refactored code to share it with the two JSFunction::create
1411         (JSC::JSFunction::create):
1412         (JSC::runStdFunction):
1413         * runtime/JSFunction.h: Added std::function based JSFunction::create prototype.
1414         * runtime.JSPromise.h:
1415
1416 2015-06-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>
1417
1418         Purge PassRefPtr in JavaScriptCore - 2
1419         https://bugs.webkit.org/show_bug.cgi?id=145834
1420
1421         Reviewed by Darin Adler.
1422
1423         As a step to remove PassRefPtr, this patch cleans up PassRefPtr as much as possible
1424         in JavaScriptCore.
1425
1426         * API/JSClassRef.cpp:
1427         (OpaqueJSClass::create):
1428         * API/JSClassRef.h:
1429         * debugger/DebuggerCallFrame.cpp:
1430         (JSC::DebuggerCallFrame::callerFrame):
1431         * debugger/DebuggerCallFrame.h:
1432         * dfg/DFGJITCompiler.h:
1433         (JSC::DFG::JITCompiler::jitCode):
1434         * inspector/ScriptCallStackFactory.cpp:
1435         (Inspector::createScriptCallStack):
1436         (Inspector::createScriptCallStackForConsole):
1437         (Inspector::createScriptCallStackFromException):
1438         (Inspector::createScriptArguments):
1439         * inspector/ScriptCallStackFactory.h:
1440         * jit/ExecutableAllocator.cpp:
1441         (JSC::ExecutableAllocator::allocate):
1442         * jit/ExecutableAllocator.h:
1443         * jit/ExecutableAllocatorFixedVMPool.cpp:
1444         (JSC::ExecutableAllocator::allocate):
1445         * profiler/LegacyProfiler.cpp:
1446         (JSC::LegacyProfiler::stopProfiling):
1447         * profiler/LegacyProfiler.h:
1448         * runtime/DateInstanceCache.h:
1449         * runtime/Executable.cpp:
1450         (JSC::ScriptExecutable::newCodeBlockFor):
1451         * runtime/Executable.h:
1452         * runtime/GenericTypedArrayView.h:
1453         * runtime/GenericTypedArrayViewInlines.h:
1454         (JSC::GenericTypedArrayView<Adaptor>::create):
1455         (JSC::GenericTypedArrayView<Adaptor>::createUninitialized):
1456
1457 2015-06-12  Darin Adler  <darin@apple.com>
1458
1459         Fix minor ES6 compliance issue in RegExp.prototype.toString and optimize performance a little
1460         https://bugs.webkit.org/show_bug.cgi?id=145935
1461
1462         Reviewed by Anders Carlsson.
1463
1464         Test: js/regexp-toString.html
1465
1466         * runtime/RegExpPrototype.cpp:
1467         (JSC::getFlags): Avoid memory allocation for the flags string by returning it in a character
1468         buffer instead of constructing a WTF::String for it.
1469         (JSC::regExpProtoFuncToString): Require only that the this value be an object; don't require
1470         that it is actually a regular expression object. This is covered in the ES6 specification.
1471         Also removed comment about the "/(?:)/" trick since that is now the repsonsibility of the
1472         getter for the "source" property. Updated to use getFlags so we do one less memory allocation.
1473         (JSC::regExpProtoGetterFlags): Chagned to use getFlags instead of the old flagsString.
1474
1475 2015-06-12  Basile Clement  <basile_clement@apple.com>
1476
1477         DFG Object Allocation Sinking should not consider GetClosureVar as escapes
1478         https://bugs.webkit.org/show_bug.cgi?id=145904
1479
1480         Reviewed by Filip Pizlo.
1481
1482         The object allocation sinking phase is currently able to sink
1483         CreateActivation nodes, but will consider any GetClosureVar node as
1484         escaping.
1485
1486         This is not problematic in general as most of the GetClosureVar nodes
1487         we would have been able to sink over will have been eliminated by CSE
1488         anyway. Still, this is an oversight that we should fix since the
1489         machinery is already in place.
1490
1491         * dfg/DFGObjectAllocationSinkingPhase.cpp:
1492         (JSC::DFG::ObjectAllocationSinkingPhase::handleNode):
1493         * dfg/DFGPromoteHeapAccess.h:
1494         (JSC::DFG::promoteHeapAccess):
1495
1496 2015-06-11  Mark Lam  <mark.lam@apple.com>
1497
1498         WebCore::reportException() needs to be able to accept a raw thrown value in addition to Exception objects.
1499         https://bugs.webkit.org/show_bug.cgi?id=145872
1500
1501         Reviewed by Michael Saboff.
1502
1503         In r185259, we changed exception handling code inside the VM to work with
1504         Exception objects instead of the thrown JSValue.  The handling code will get the
1505         exception stack trace from the Exception object.
1506
1507         However, there is some code that cannot be updated to pass the Exception object.
1508         An example of this are the ObjC API functions.  Those functions are specified to
1509         return any thrown exception JSValue in a JSValueRef.  Since these APIs are
1510         public, we cannot arbitrarily change them to use the Exception object.
1511
1512         There are client code that calls these APIs and then passes the returned exception
1513         JSValue to WebCore::reportException() to be reported.  WebCore::reportException()
1514         previously relied on the VM::exceptionStackTrace() to provide a cache of the
1515         stack trace of the last thrown exception.  VM::exceptionStackTrace() no longer
1516         exists in the current code.
1517
1518         To restore this functionality, we will introduce VM::lastException() which
1519         caches the last thrown Exception object.  With this, if the exception passed to
1520         WebCore::reportException() to be reported isn't an Exception object (which has its
1521         own stack trace), reportException() can again use the cached exception stack trace
1522         which is available from VM::lastException().
1523
1524         * heap/Heap.cpp:
1525         (JSC::Heap::visitException):
1526         - visit VM::m_lastException on GCs.
1527
1528         * interpreter/CallFrame.h:
1529         (JSC::ExecState::lastException):
1530         (JSC::ExecState::clearLastException):
1531         - convenience functions to get and clear the last exception.
1532
1533         * runtime/Exception.cpp:
1534         (JSC::Exception::create):
1535         (JSC::Exception::finishCreation):
1536         - add support to create an Exception object without capturing the JS stack trace.
1537           This is needed for making an Exception object to wrap a thrown value that does
1538           not have a stack trace.
1539           Currently, this is only used by WebCore::reportException() when there is no
1540           Exception object and no last exception available to provide a stack trace.
1541
1542         * runtime/Exception.h:
1543         (JSC::Exception::cast): Deleted.  No longer needed.
1544
1545         * runtime/VM.h:
1546         (JSC::VM::clearLastException):
1547         (JSC::VM::setException):
1548         (JSC::VM::lastException):
1549         (JSC::VM::addressOfLastException):
1550         - Added support for VM::m_lastException.
1551           VM::m_lastException serves to cache the exception stack of the most recently
1552           thrown exception like VM::exceptionStackTrace() used to before r185259.
1553
1554         * runtime/VMEntryScope.cpp:
1555         (JSC::VMEntryScope::VMEntryScope):
1556         - Clear VM::m_lastException when we re-enter the VM.  Exceptions should have been
1557           handled before we re-enter the VM anyway.  So, this is a good place to release
1558           the cached last exception.
1559
1560           NOTE: this is also where the old code before r185259 clears the last exception
1561           stack trace.  So, we're just restoring the previous behavior here in terms of
1562           the lifecycle of the last exception stack.
1563
1564 2015-06-11  Andreas Kling  <akling@apple.com>
1565
1566         jsSubstring() should support creating substrings from substrings.
1567         <https://webkit.org/b/145427>
1568
1569         Reviewed by Geoffrey Garen
1570
1571         Tweak jsSubstring() to support base strings that are themselves substrings.
1572         They will now share the same grandparent base. This avoids creating a new StringImpl.
1573
1574         * runtime/JSString.h:
1575         (JSC::jsSubstring): Don't force rope resolution here. Instead do that in finishCreation()
1576         if the base string is a non-substring rope. Note that resolveRope() is the very last thing
1577         called, since it may allocate and the JSRopeString needs to be ready for marking.
1578
1579         (JSC::JSString::isSubstring): Added a helper to find out if a JSString is
1580         a substring. This is just for internal use, so you don't have to cast to
1581         JSRopeString for the real substringness flag.
1582
1583 2015-06-11  Commit Queue  <commit-queue@webkit.org>
1584
1585         Unreviewed, rolling out r185465.
1586         https://bugs.webkit.org/show_bug.cgi?id=145893
1587
1588         "This patch is breaking 32bit mac build" (Requested by youenn
1589         on #webkit).
1590
1591         Reverted changeset:
1592
1593         "[Streams API] ReadableJSStream should handle promises
1594         returned by JS source start callback"
1595         https://bugs.webkit.org/show_bug.cgi?id=145792
1596         http://trac.webkit.org/changeset/185465
1597
1598 2015-06-11  Youenn Fablet  <youenn.fablet@crf.canon.fr>
1599
1600         [Streams API] ReadableJSStream should handle promises returned by JS source start callback
1601         https://bugs.webkit.org/show_bug.cgi?id=145792
1602
1603         Reviewed by Darin Adler.
1604
1605         Added support for JSFunction implemented by std::function.
1606
1607         * runtime/JSFunction.cpp:
1608         (JSC::getNativeExecutable): Refactored code to share it with the two JSFunction::create
1609         (JSC::JSFunction::create):
1610         (JSC::runStdFunction):
1611         * runtime/JSFunction.h: Added std::function based JSFunction::create prototype.
1612         * runtime.JSPromise.h:
1613
1614 2015-06-10  Yusuke Suzuki  <utatane.tea@gmail.com>
1615
1616         ASSERTION FAILED: s.length() > 1 on LayoutTests/js/regexp-flags.html
1617         https://bugs.webkit.org/show_bug.cgi?id=145599
1618
1619         Unreviewed, simple follow up patch.
1620
1621         use jsString instead of jsMakeNontrivialString
1622         since the flag string may be trivial (0 or 1 length).
1623
1624         * runtime/RegExpPrototype.cpp:
1625         (JSC::regExpProtoGetterFlags):
1626
1627 2015-06-10  Yusuke Suzuki  <utatane.tea@gmail.com>
1628
1629         JavaScript: Drop the “escaped reserved words as identifiers” compatibility measure
1630         https://bugs.webkit.org/show_bug.cgi?id=90678
1631
1632         Reviewed by Darin Adler.
1633
1634         After ES6, escaped reserved words in identifiers are prohibited.
1635         After parsing Identifier, we should perform `m_buffer16.shrink(0)`.
1636
1637         * parser/Lexer.cpp:
1638         (JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
1639         * tests/mozilla/ecma_3/Unicode/uc-003.js:
1640         (test): Deleted.
1641         * tests/stress/reserved-word-with-escape.js: Added.
1642         (testSyntax):
1643         (testSyntaxError):
1644
1645 2015-06-10  Jordan Harband  <ljharb@gmail.com>
1646
1647         Implement RegExp.prototype.flags
1648         https://bugs.webkit.org/show_bug.cgi?id=145599
1649
1650         Reviewed by Geoffrey Garen.
1651         Per https://people.mozilla.org/~jorendorff/es6-draft.html#sec-get-regexp.prototype.flags
1652
1653         * runtime/CommonIdentifiers.h:
1654         * runtime/RegExpPrototype.cpp:
1655         (JSC::flagsString):
1656         (JSC::regExpProtoFuncToString):
1657         (JSC::regExpProtoGetterFlags):
1658         * tests/stress/static-getter-in-names.js:
1659
1660 2015-06-10  Filip Pizlo  <fpizlo@apple.com>
1661
1662         DFG ASSERTION FAILED: !iterate() on stress/singleton-scope-then-overwrite.js.ftl-eager
1663         https://bugs.webkit.org/show_bug.cgi?id=145853
1664
1665         Unreviewed, remove the assertion.
1666
1667         * dfg/DFGCSEPhase.cpp:
1668
1669 2015-06-10  Commit Queue  <commit-queue@webkit.org>
1670
1671         Unreviewed, rolling out r185414.
1672         https://bugs.webkit.org/show_bug.cgi?id=145844
1673
1674         broke debug and jsc tests (Requested by alexchristensen on
1675         #webkit).
1676
1677         Reverted changeset:
1678
1679         "JavaScript: Drop the “escaped reserved words as identifiers”
1680         compatibility measure"
1681         https://bugs.webkit.org/show_bug.cgi?id=90678
1682         http://trac.webkit.org/changeset/185414
1683
1684 2015-06-10  Yusuke Suzuki  <utatane.tea@gmail.com>
1685
1686         JavaScript: Drop the “escaped reserved words as identifiers” compatibility measure
1687         https://bugs.webkit.org/show_bug.cgi?id=90678
1688
1689         Reviewed by Darin Adler.
1690
1691         After ES6, escaped reserved words in identifiers are prohibited.
1692
1693         * parser/Lexer.cpp:
1694         (JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
1695         * tests/stress/reserved-word-with-escape.js: Added.
1696         (testSyntax):
1697         (testSyntaxError):
1698
1699 2015-06-10  Andreas Kling  <akling@apple.com>
1700
1701         [JSC] InlineCallFrame::arguments should be sized-to-fit.
1702         <https://webkit.org/b/145782>
1703
1704         Reviewed by Darin Adler.
1705
1706         I spotted this Vector<ValueRecovery> looking a bit chubby in Instruments,
1707         with 354 kB of memory allocated on cnet.com.
1708
1709         Use resizeToFit() instead of resize() since we know the final size up front.
1710
1711         * dfg/DFGByteCodeParser.cpp:
1712         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
1713
1714 2015-06-09  Chris Dumez  <cdumez@apple.com>
1715
1716         Allow one sync GC per gcTimer interval on critical memory pressure warning
1717         https://bugs.webkit.org/show_bug.cgi?id=145773
1718
1719         Reviewed by Geoffrey Garen.
1720
1721         On critical memory pressure warning, we were calling GCController::garbageCollectSoon(),
1722         which does not offer any guarantee on when the garbage collection will actually take
1723         place.
1724
1725         On critical memory pressure, we need to free up memory as soon as possible to avoid
1726         getting killed so this is an issue. Also, the fact that we clear the PageCache on
1727         critical memory pressure means a GC would likely be useful, even if the last
1728         collection did not free much memory.
1729
1730         This patch adds a new GCController::garbageCollectNowIfNotDoneRecently() API that allows
1731         one synchronous GC per gcTimer interval on critical memory pressure warning. This makes
1732         us more responsive to critical memory pressure and avoids doing synchronous GCs too
1733         often.
1734
1735         * heap/FullGCActivityCallback.cpp:
1736         (JSC::FullGCActivityCallback::doCollection):
1737         * heap/FullGCActivityCallback.h:
1738         (JSC::GCActivityCallback::createFullTimer):
1739         * heap/GCActivityCallback.h:
1740         * heap/Heap.cpp:
1741         (JSC::Heap::collectAllGarbageIfNotDoneRecently):
1742         * heap/Heap.h:
1743
1744         * heap/IncrementalSweeper.cpp:
1745         (JSC::IncrementalSweeper::doWork): Deleted.
1746         * heap/IncrementalSweeper.h:
1747
1748         Drop fullSweep() API as it no longer seems useful. garbageCollectNow()
1749         already does a sweep after the full collection.
1750
1751 2015-06-09  Andreas Kling  <akling@apple.com>
1752
1753         [JSC] CodeBlock::m_constantRegisters should be sized-to-fit.
1754         <https://webkit.org/b/145784>
1755
1756         Reviewed by Darin Adler.
1757
1758         Spotted this Vector looking chubby on cnet.com, with 1.23 MB of memory
1759         allocated below CodeBlock::setConstantRegisters().
1760
1761         Use resizeToFit() instead since we know the final size up front.
1762         Also removed some unused functions that operated on this constants vector
1763         and the corresponding one in UnlinkedCodeBlock.
1764
1765         * bytecode/CodeBlock.cpp:
1766         (JSC::CodeBlock::addOrFindConstant): Deleted.
1767         (JSC::CodeBlock::findConstant): Deleted.
1768         * bytecode/CodeBlock.h:
1769         (JSC::CodeBlock::setConstantRegisters):
1770         (JSC::CodeBlock::numberOfConstantRegisters): Deleted.
1771         * bytecode/UnlinkedCodeBlock.cpp:
1772         (JSC::UnlinkedCodeBlock::addOrFindConstant): Deleted.
1773         * bytecode/UnlinkedCodeBlock.h:
1774         (JSC::UnlinkedCodeBlock::numberOfConstantRegisters): Deleted.
1775         (JSC::UnlinkedCodeBlock::getConstant): Deleted.
1776
1777 2015-06-09  Andreas Kling  <akling@apple.com>
1778
1779         [JSC] Polymorphic{Get,Put}ByIdList::addAccess() should optimize for size, not speed.
1780         <https://webkit.org/b/145786>
1781
1782         Reviewed by Darin Adler.
1783
1784         These functions already contained comments saying they optimize for size over speed,
1785         but they were using Vector::resize() which adds the usual slack for faster append().
1786
1787         Switch them over to using Vector::resizeToFit() instead, which makes the Vector
1788         allocate a perfectly sized backing store.
1789
1790         Spotted 670 kB of the GetById ones, and 165 kB of PutById on cnet.com, so these
1791         Vectors are definitely worth shrink-wrapping.
1792
1793         * bytecode/PolymorphicGetByIdList.cpp:
1794         (JSC::PolymorphicGetByIdList::addAccess):
1795         * bytecode/PolymorphicPutByIdList.cpp:
1796         (JSC::PolymorphicPutByIdList::addAccess):
1797
1798 2015-06-09  Andreas Kling  <akling@apple.com>
1799
1800         [JSC] JSPropertyNameEnumerator's property name vector should be sized-to-fit.
1801         <https://webkit.org/b/145787>
1802
1803         Reviewed by Darin Adler.
1804
1805         Saw 108 kB worth of JSPropertyNameEnumerator backing store Vectors on cnet.com.
1806         Use Vector::resizeToFit() since we know the perfect size up front.
1807
1808         * runtime/JSPropertyNameEnumerator.cpp:
1809         (JSC::JSPropertyNameEnumerator::finishCreation):
1810
1811 2015-06-09  Andreas Kling  <akling@apple.com>
1812
1813         FunctionExecutable::isCompiling() is weird and wrong.
1814         <https://webkit.org/b/145689>
1815
1816         Reviewed by Geoffrey Garen.
1817
1818         Remove FunctionExecutable::isCompiling() and the clearCodeIfNotCompiling() style
1819         functions that called it before throwing away code.
1820
1821         isCompiling() would consider the executable to be "compiling" if it had a CodeBlock
1822         but no JITCode. In practice, every executable gets a JITCode at the same time as it
1823         gets a CodeBlock, by way of prepareForExecutionImpl().
1824
1825         * debugger/Debugger.cpp:
1826         * heap/Heap.cpp:
1827         (JSC::Heap::deleteAllCompiledCode):
1828         (JSC::Heap::deleteAllUnlinkedFunctionCode):
1829         * inspector/agents/InspectorRuntimeAgent.cpp:
1830         (Inspector::TypeRecompiler::visit):
1831         * runtime/Executable.cpp:
1832         (JSC::FunctionExecutable::clearUnlinkedCodeForRecompilation):
1833         (JSC::FunctionExecutable::clearCodeIfNotCompiling): Deleted.
1834         (JSC::FunctionExecutable::clearUnlinkedCodeForRecompilationIfNotCompiling): Deleted.
1835         * runtime/Executable.h:
1836         * runtime/VM.cpp:
1837         (JSC::StackPreservingRecompiler::visit):
1838
1839 2015-06-09  Yusuke Suzuki  <utatane.tea@gmail.com>
1840
1841         Introduce getter definition into static hash tables and use it for getters in RegExp.prototype.
1842         https://bugs.webkit.org/show_bug.cgi?id=145705
1843
1844         Reviewed by Darin Adler.
1845
1846         In this patch, we introduce Accessor type into property tables.
1847         With Accessor type, create_hash_table creates a static getter property.
1848         This getter property is reified as the same to the static functions.
1849
1850         In the mean time, we only support getter because `putEntry` and `lookupPut`
1851         only work with null setter currently. However, in the spec, there's
1852         no need to add static setter properties. So we will add it if it becomes
1853         necessary in the future.
1854
1855         And at the same time, this patch fixes the issue 145738. Before this patch,
1856         `putEntry` in `JSObject::deleteProperty` adds `undefined` property if
1857         `isValidOffset(...)` is false (deleted). As the result, deleting twice
1858         revives the property with `undefined` value.
1859
1860         If the static functions are reified and the entry is
1861         `BuiltinOrFunctionOrAccessor`, there's no need to execute `putEntry` with
1862         static hash table entry. They should be handled in the normal structure's
1863         looking up because they should be already reified. So added guard for this.
1864
1865         * CMakeLists.txt:
1866         * DerivedSources.make:
1867         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
1868         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
1869         * JavaScriptCore.xcodeproj/project.pbxproj:
1870         * create_hash_table:
1871         * runtime/JSObject.cpp:
1872         (JSC::getClassPropertyNames):
1873         (JSC::JSObject::put):
1874         (JSC::JSObject::deleteProperty):
1875         (JSC::JSObject::reifyStaticFunctionsForDelete):
1876         * runtime/Lookup.cpp:
1877         (JSC::reifyStaticAccessor):
1878         (JSC::setUpStaticFunctionSlot):
1879         * runtime/Lookup.h:
1880         (JSC::HashTableValue::propertyGetter):
1881         (JSC::HashTableValue::propertyPutter):
1882         (JSC::HashTableValue::accessorGetter):
1883         (JSC::HashTableValue::accessorSetter):
1884         (JSC::getStaticPropertySlot):
1885         (JSC::getStaticValueSlot):
1886         (JSC::putEntry):
1887         (JSC::reifyStaticProperties):
1888         * runtime/PropertySlot.h:
1889         * runtime/RegExpObject.cpp:
1890         (JSC::RegExpObject::getOwnPropertySlot):
1891         (JSC::regExpObjectGlobal): Deleted.
1892         (JSC::regExpObjectIgnoreCase): Deleted.
1893         (JSC::regExpObjectMultiline): Deleted.
1894         (JSC::appendLineTerminatorEscape<LChar>): Deleted.
1895         (JSC::appendLineTerminatorEscape<UChar>): Deleted.
1896         (JSC::regExpObjectSourceInternal): Deleted.
1897         (JSC::regExpObjectSource): Deleted.
1898         * runtime/RegExpPrototype.cpp:
1899         (JSC::RegExpPrototype::getOwnPropertySlot):
1900         (JSC::regExpProtoGetterGlobal):
1901         (JSC::regExpProtoGetterIgnoreCase):
1902         (JSC::regExpProtoGetterMultiline):
1903         (JSC::appendLineTerminatorEscape<LChar>):
1904         (JSC::appendLineTerminatorEscape<UChar>):
1905         (JSC::regExpProtoGetterSourceInternal):
1906         (JSC::regExpProtoGetterSource):
1907         * tests/stress/static-function-delete.js: Added.
1908         (shouldBe):
1909         * tests/stress/static-function-put.js: Added.
1910         (shouldBe):
1911         * tests/stress/static-getter-delete.js: Added.
1912         (shouldBe):
1913         (shouldThrow):
1914         * tests/stress/static-getter-descriptors.js: Added.
1915         (shouldBe):
1916         * tests/stress/static-getter-enumeration.js: Added.
1917         (shouldBe):
1918         * tests/stress/static-getter-get.js: Added.
1919         (shouldBe):
1920         * tests/stress/static-getter-in-names.js: Added.
1921         (shouldBe):
1922         * tests/stress/static-getter-names.js: Added.
1923         (shouldBe):
1924         * tests/stress/static-getter-put.js: Added.
1925         (shouldBe):
1926         (shouldThrow):
1927
1928 2015-06-09  Andreas Kling  <akling@apple.com>
1929
1930         [JSC] JSString::getIndex() should avoid reifying substrings.
1931         <https://webkit.org/b/145803>
1932
1933         Reviewed by Darin Adler.
1934
1935         Implement getIndex() using JSString::view(), which cuts it down to a one-liner
1936         and also avoids reifying substrings.
1937
1938         I saw 178 kB of reified substrings below operationGetByVal -> getIndex()
1939         on cnet.com, so this should help.
1940
1941         * runtime/JSString.cpp:
1942         (JSC::JSRopeString::getIndexSlowCase): Deleted.
1943         * runtime/JSString.h:
1944         (JSC::JSString::getIndex):
1945
1946 2015-06-09  Andreas Kling  <akling@apple.com>
1947
1948         [JSC] String.prototype.indexOf() should use StringView.
1949         <https://webkit.org/b/145351>
1950
1951         Reviewed by Darin Adler.
1952
1953         Use StringView::find() to implement String.prototype.indexOf().
1954         This avoids reifying the needle and haystack JSStrings in case they
1955         are substrings.
1956
1957         Reduces malloc memory by ~190 kB on cnet.com.
1958
1959         * runtime/StringPrototype.cpp:
1960         (JSC::stringProtoFuncIndexOf):
1961
1962 2015-06-09  Csaba Osztrogonác  <ossy@webkit.org>
1963
1964         [cmake] Fix the style issues in cmake project files
1965         https://bugs.webkit.org/show_bug.cgi?id=145755
1966
1967         Reviewed by Darin Adler.
1968
1969         * CMakeLists.txt:
1970
1971 2015-06-08  Gyuyoung Kim  <gyuyoung.kim@webkit.org>
1972
1973         Purge PassRefPtr in JavaScriptCore
1974         https://bugs.webkit.org/show_bug.cgi?id=145750
1975
1976         As a step to purge PassRefPtr, this patch replaces PassRefPtr with Ref or RefPtr.
1977
1978         Reviewed by Darin Adler.
1979
1980         * API/JSClassRef.cpp:
1981         (OpaqueJSClass::createNoAutomaticPrototype):
1982         * API/JSClassRef.h:
1983         * API/JSContextRef.cpp:
1984         * API/JSScriptRef.cpp:
1985         (OpaqueJSScript::create):
1986         * API/JSStringRef.cpp:
1987         (JSStringCreateWithCharacters):
1988         (JSStringCreateWithUTF8CString):
1989         * API/OpaqueJSString.cpp:
1990         (OpaqueJSString::create):
1991         * API/OpaqueJSString.h:
1992         (OpaqueJSString::create):
1993         * bytecompiler/StaticPropertyAnalysis.h:
1994         (JSC::StaticPropertyAnalysis::create):
1995         * debugger/DebuggerCallFrame.h:
1996         (JSC::DebuggerCallFrame::create):
1997         * dfg/DFGToFTLDeferredCompilationCallback.cpp:
1998         (JSC::DFG::ToFTLDeferredCompilationCallback::create):
1999         * dfg/DFGToFTLDeferredCompilationCallback.h:
2000         * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp:
2001         (JSC::DFG::Ref<ToFTLForOSREntryDeferredCompilationCallback>ToFTLForOSREntryDeferredCompilationCallback::create):
2002         (JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::create): Deleted.
2003         * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h:
2004         * dfg/DFGWorklist.cpp:
2005         (JSC::DFG::Worklist::create):
2006         (JSC::DFG::ensureGlobalDFGWorklist):
2007         (JSC::DFG::ensureGlobalFTLWorklist):
2008         * dfg/DFGWorklist.h:
2009         * heap/EdenGCActivityCallback.h:
2010         (JSC::GCActivityCallback::createEdenTimer):
2011         * heap/FullGCActivityCallback.h:
2012         (JSC::GCActivityCallback::createFullTimer):
2013         * heap/GCActivityCallback.h:
2014         * inspector/InjectedScriptHost.h:
2015         * inspector/JavaScriptCallFrame.h:
2016         (Inspector::JavaScriptCallFrame::create):
2017         * inspector/ScriptArguments.cpp:
2018         (Inspector::ScriptArguments::create):
2019         * inspector/ScriptArguments.h:
2020         * jit/JITStubRoutine.h:
2021         (JSC::JITStubRoutine::createSelfManagedRoutine):
2022         * jit/JITToDFGDeferredCompilationCallback.cpp:
2023         (JSC::JITToDFGDeferredCompilationCallback::create):
2024         * jit/JITToDFGDeferredCompilationCallback.h:
2025         * jsc.cpp:
2026         (jscmain):
2027         * parser/NodeConstructors.h:
2028         (JSC::ArrayPatternNode::create):
2029         (JSC::ObjectPatternNode::create):
2030         (JSC::BindingNode::create):
2031         * parser/Nodes.cpp:
2032         (JSC::FunctionParameters::create):
2033         * parser/Nodes.h:
2034         * parser/SourceProvider.h:
2035         (JSC::StringSourceProvider::create):
2036         * profiler/Profile.cpp:
2037         (JSC::Profile::create):
2038         * profiler/Profile.h:
2039         * profiler/ProfileGenerator.cpp:
2040         (JSC::ProfileGenerator::create):
2041         * profiler/ProfileGenerator.h:
2042         * profiler/ProfileNode.h:
2043         (JSC::ProfileNode::create):
2044         * runtime/DataView.cpp:
2045         (JSC::DataView::create):
2046         * runtime/DataView.h:
2047         * runtime/DateInstanceCache.h:
2048         (JSC::DateInstanceData::create):
2049         * runtime/JSPromiseReaction.cpp:
2050         (JSC::createExecutePromiseReactionMicrotask):
2051         * runtime/JSPromiseReaction.h:
2052         * runtime/PropertyNameArray.h:
2053         (JSC::PropertyNameArrayData::create):
2054         * runtime/TypeSet.h:
2055         (JSC::StructureShape::create):
2056         (JSC::TypeSet::create):
2057         * runtime/TypedArrayBase.h:
2058         (JSC::TypedArrayBase::create):
2059         (JSC::TypedArrayBase::createUninitialized):
2060         (JSC::TypedArrayBase::subarrayImpl):
2061         * runtime/VM.cpp:
2062         (JSC::VM::createContextGroup):
2063         (JSC::VM::create):
2064         (JSC::VM::createLeaked):
2065         * runtime/VM.h:
2066         * yarr/RegularExpression.cpp:
2067         (JSC::Yarr::RegularExpression::Private::create):
2068
2069 2015-06-08  Filip Pizlo  <fpizlo@apple.com>
2070
2071         It should be possible to hoist all constants in DFG SSA
2072         https://bugs.webkit.org/show_bug.cgi?id=145769
2073
2074         Reviewed by Geoffrey Garen.
2075         
2076         It's sometimes somewhat more efficient, and convenient, to have all constants at the
2077         top of the root block. We don't require this as an IR invariant because too many phases
2078         want to be able to insert constants in weird places. But, this phase will be great for
2079         preparing for https://bugs.webkit.org/show_bug.cgi?id=145768.
2080
2081         * CMakeLists.txt:
2082         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2083         * JavaScriptCore.xcodeproj/project.pbxproj:
2084         * dfg/DFGConstantHoistingPhase.cpp: Added.
2085         (JSC::DFG::performConstantHoisting):
2086         * dfg/DFGConstantHoistingPhase.h: Added.
2087         * dfg/DFGPlan.cpp:
2088         (JSC::DFG::Plan::compileInThreadImpl):
2089
2090 2015-06-07  Filip Pizlo  <fpizlo@apple.com>
2091
2092         The tiny set magic in StructureSet should be available in WTF
2093         https://bugs.webkit.org/show_bug.cgi?id=145722
2094
2095         Reviewed by Geoffrey Garen.
2096         
2097         I moved the generic logic of small sets of pointers and moved it into WTF. Now,
2098         StructureSet is a subclass of TinyPtrSet<Structure*>. There shouldn't be any functional
2099         change.
2100
2101         * bytecode/StructureSet.cpp:
2102         (JSC::StructureSet::filter):
2103         (JSC::StructureSet::filterArrayModes):
2104         (JSC::StructureSet::speculationFromStructures):
2105         (JSC::StructureSet::arrayModesFromStructures):
2106         (JSC::StructureSet::dumpInContext):
2107         (JSC::StructureSet::dump):
2108         (JSC::StructureSet::clear): Deleted.
2109         (JSC::StructureSet::add): Deleted.
2110         (JSC::StructureSet::remove): Deleted.
2111         (JSC::StructureSet::contains): Deleted.
2112         (JSC::StructureSet::merge): Deleted.
2113         (JSC::StructureSet::exclude): Deleted.
2114         (JSC::StructureSet::isSubsetOf): Deleted.
2115         (JSC::StructureSet::overlaps): Deleted.
2116         (JSC::StructureSet::operator==): Deleted.
2117         (JSC::StructureSet::addOutOfLine): Deleted.
2118         (JSC::StructureSet::containsOutOfLine): Deleted.
2119         (JSC::StructureSet::copyFromOutOfLine): Deleted.
2120         (JSC::StructureSet::OutOfLineList::create): Deleted.
2121         (JSC::StructureSet::OutOfLineList::destroy): Deleted.
2122         * bytecode/StructureSet.h:
2123         (JSC::StructureSet::onlyStructure):
2124         (JSC::StructureSet::StructureSet): Deleted.
2125         (JSC::StructureSet::operator=): Deleted.
2126         (JSC::StructureSet::~StructureSet): Deleted.
2127         (JSC::StructureSet::isEmpty): Deleted.
2128         (JSC::StructureSet::genericFilter): Deleted.
2129         (JSC::StructureSet::isSupersetOf): Deleted.
2130         (JSC::StructureSet::size): Deleted.
2131         (JSC::StructureSet::at): Deleted.
2132         (JSC::StructureSet::operator[]): Deleted.
2133         (JSC::StructureSet::last): Deleted.
2134         (JSC::StructureSet::iterator::iterator): Deleted.
2135         (JSC::StructureSet::iterator::operator*): Deleted.
2136         (JSC::StructureSet::iterator::operator++): Deleted.
2137         (JSC::StructureSet::iterator::operator==): Deleted.
2138         (JSC::StructureSet::iterator::operator!=): Deleted.
2139         (JSC::StructureSet::begin): Deleted.
2140         (JSC::StructureSet::end): Deleted.
2141         (JSC::StructureSet::ContainsOutOfLine::ContainsOutOfLine): Deleted.
2142         (JSC::StructureSet::ContainsOutOfLine::operator()): Deleted.
2143         (JSC::StructureSet::copyFrom): Deleted.
2144         (JSC::StructureSet::OutOfLineList::list): Deleted.
2145         (JSC::StructureSet::OutOfLineList::OutOfLineList): Deleted.
2146         (JSC::StructureSet::deleteStructureListIfNecessary): Deleted.
2147         (JSC::StructureSet::isThin): Deleted.
2148         (JSC::StructureSet::pointer): Deleted.
2149         (JSC::StructureSet::singleStructure): Deleted.
2150         (JSC::StructureSet::structureList): Deleted.
2151         (JSC::StructureSet::set): Deleted.
2152         (JSC::StructureSet::setEmpty): Deleted.
2153         (JSC::StructureSet::getReservedFlag): Deleted.
2154         (JSC::StructureSet::setReservedFlag): Deleted.
2155         * dfg/DFGStructureAbstractValue.cpp:
2156         (JSC::DFG::StructureAbstractValue::clobber):
2157         (JSC::DFG::StructureAbstractValue::filter):
2158         (JSC::DFG::StructureAbstractValue::filterSlow):
2159         (JSC::DFG::StructureAbstractValue::contains):
2160         * dfg/DFGStructureAbstractValue.h:
2161         (JSC::DFG::StructureAbstractValue::makeTop):
2162
2163 2015-06-08  Csaba Osztrogonác  <ossy@webkit.org>
2164
2165         [ARM] Add the missing setupArgumentsWithExecState functions after r185240
2166         https://bugs.webkit.org/show_bug.cgi?id=145754
2167
2168         Reviewed by Benjamin Poulain.
2169
2170         * jit/CCallHelpers.h:
2171         (JSC::CCallHelpers::setupArgumentsWithExecState):
2172
2173 2015-06-08  Brady Eidson  <beidson@apple.com>
2174
2175         Completely remove all IDB properties/constructors when it is disabled at runtime.
2176         rdar://problem/18429374 and https://bugs.webkit.org/show_bug.cgi?id=137034
2177
2178         Reviewed by Geoffrey Garen.
2179
2180         * runtime/CommonIdentifiers.h:
2181
2182 2015-06-06  Mark Lam  <mark.lam@apple.com>
2183
2184         Returned Exception* values need to be initialized to nullptr when no exceptions are thrown.
2185         https://bugs.webkit.org/show_bug.cgi?id=145720
2186
2187         Reviewed by Dan Bernstein.
2188
2189         * debugger/DebuggerCallFrame.cpp:
2190         (JSC::DebuggerCallFrame::evaluate):
2191
2192 2015-06-05  Mark Lam  <mark.lam@apple.com>
2193
2194         Subclasses of JSNonFinalObject with gc'able children need to implement visitChildren().
2195         https://bugs.webkit.org/show_bug.cgi?id=145709
2196
2197         Reviewed by Geoffrey Garen.
2198
2199         * jsc.cpp:
2200         (functionSetElementRoot):
2201         - The Element class has a member of type Root which extends JSDestructibleObject.
2202           It should be stored in a WriteBarrier, and visited by visitChildren().  
2203
2204         * runtime/ClonedArguments.cpp:
2205         (JSC::ClonedArguments::materializeSpecialsIfNecessary):
2206         (JSC::ClonedArguments::visitChildren):
2207         * runtime/ClonedArguments.h:
2208         - Add missing visitChildren().
2209
2210         * tests/stress/cloned-arguments-should-visit-callee-during-gc.js: Added.
2211         (makeTransientFunction.transientFunc):
2212         (makeTransientFunction):
2213
2214 2015-06-05  Geoffrey Garen  <ggaren@apple.com>
2215
2216         DropAllLocks RELEASE_ASSERT on iOS
2217         https://bugs.webkit.org/show_bug.cgi?id=139654
2218
2219         Reviewed by Mark Lam.
2220
2221         * runtime/JSLock.cpp:
2222         (JSC::JSLock::dropAllLocks): Removed a comment because it duplicated
2223         the code beneath it. Removed a FIXME because we can't ASSERT that
2224         we're holding the lock. WebKit1 on iOS drops the lock before calling to
2225         delegates, not knowing whether it holds the lock or not.
2226
2227         (JSC::JSLock::DropAllLocks::DropAllLocks): Only ASSERT that we are not
2228         GC'ing if we hold the lock. If we do not hold the lock, it is perfectly
2229         valid for some other thread, which does hold the lock, to be GC'ing.
2230         What is not valid is to drop the lock in the middle of GC, since GC
2231         must be atomic.
2232
2233 2015-06-05  Filip Pizlo  <fpizlo@apple.com>
2234
2235         speculateRealNumber() should early exit if you're already a real number, not if you're already a real double.
2236
2237         Rubber stamped by Mark Lam.
2238         
2239         This was causing: https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK1%20(Tests)/r185261%20(5180)/webaudio/note-grain-on-timing-crash-log.txt
2240
2241         * dfg/DFGSpeculativeJIT.cpp:
2242         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
2243
2244 2015-06-05  Mark Lam  <mark.lam@apple.com>
2245
2246         finally blocks should not set the exception stack trace when re-throwing the exception.
2247         https://bugs.webkit.org/show_bug.cgi?id=145525
2248
2249         Reviewed by Geoffrey Garen.
2250
2251         How exceptions presently work:
2252         =============================
2253         1. op_throw can throw any JSValue.
2254         2. the VM tries to capture the stack at the throw point and propagate that as needed.
2255         3. finally blocks are implemented using op_catch to catch the thrown value, and throws it again using op_throw.
2256
2257         What's wrong with how it presently works:
2258         ========================================
2259         1. finally's makes for bad exception throw line numbers in the Inspector console.
2260
2261            The op_throw in finally will throw the value anew i.e. it captures a stack from the re-throw point.
2262            As a result, the Inspector sees the finally block as the throw point.  The original stack is lost.
2263
2264         2. finally's breaks the Inspector's "Breaks on Uncaught Exception"
2265
2266            This is because finally blocks are indistinguishable from catch blocks.  As a result, a try-finally,
2267            which should break in the Inspector on the throw, does not because the Inspector thought the
2268            exception was "caught".
2269
2270         3. finally's yields confusing break points when the Inspector "Breaks on All Exceptions"
2271
2272            a. In a try-finally scenario, the Inspector breaks 2 times: 1 at the throw, 1 at the finally.
2273            b. In a for-of loop (which has synthesized finallys), the Inspector will do another break.
2274               Similarly for other cases of JS code which synthesize finallys.
2275            c. At VM re-entry boundaries (e.g. js throws & returns to native code, which returns to js),
2276               the Inspector will do another break if there's an uncaught exception.
2277
2278         How this patch fixes the issues:
2279         ===============================
2280         1. We introduce an Exception object that wraps the thrown value and the exception stack.
2281
2282            When throwing an exception, the VM will check if the thrown value is an Exception
2283            object or not.  If it is not an Exception object, then we must be throwing a new
2284            exception.  The VM will create an Exception object to wrap the thrown value and
2285            capture the current stack for it.
2286
2287            If the thrown value is already an Exception object, then the requested throw operation
2288            must be a re-throw.  The VM will not capture a new stack for it.
2289
2290         2. op_catch will now populate 2 locals: 1 for the Exception, 1 for the thrown JSValue.
2291
2292            The VM is aware of the Exception object and uses it for rethrows in finally blocks.
2293            JS source code is never aware of the Exception object.
2294
2295            JS code is aware of the thrown value.  If it throws the caught thrown value, that
2296            constitutes a new throw, and a new Exception object will be created for it.
2297
2298         3. The VM no longer tracks the thrown JSValue and the exception stack.  It will only
2299            track a m_exception field which is an Exception*.
2300
2301         4. The BytecodeGenerator has already been updated in a prior patch to distinguish
2302            between Catch, Finally, and SynthesizedFinally blocks.  The interpreter runtime will
2303            now report to the debugger whether we have a Catch handler, not just any handlers.
2304
2305            The debugger will use this detail to determine whether to break or not.  "Break on
2306            uncaught exceptions" will only break if no Catch handler was found.
2307
2308            This solves the issue of the debugger breaking at finally blocks, and for-of statements.
2309
2310         5. The Exception object will also have a flag to indicate whether the debugger has been
2311            notified of the Exception being thrown.  Once the Interpreter notifies the debugger
2312            of the Exception object, it will mark this flag and not repeat the notify the debugger
2313            again of the same Exception.
2314
2315            This solves the issue of the debugger breaking at VM re-entry points due to uncaught
2316            exceptions.
2317
2318         6. The life-cycle of the captured exception stack trace will now follow the life-cycle
2319            of the Exception object.
2320
2321         Other changes:
2322         7. Change all clients of the VM::exception() to expect an Exception* instead of JSValue.
2323
2324         8. Fixed a few bugs where thrown exceptions are not cleared before exiting the VM.
2325
2326         9. Also renamed some variables and classes to better describe what they are.
2327
2328         * API/JSBase.cpp:
2329         (JSEvaluateScript):
2330         (JSCheckScriptSyntax):
2331
2332         * API/JSObjectRef.cpp:
2333         (handleExceptionIfNeeded):
2334         - The functions below all do the same exception check.  Added this helper
2335           to simplify the code.
2336         (JSClassCreate):
2337         (JSObjectMakeFunction):
2338         (JSObjectMakeArray):
2339         (JSObjectMakeDate):
2340         (JSObjectMakeError):
2341         (JSObjectMakeRegExp):
2342         (JSObjectGetProperty):
2343         (JSObjectSetProperty):
2344         (JSObjectGetPropertyAtIndex):
2345         (JSObjectSetPropertyAtIndex):
2346         (JSObjectDeleteProperty):
2347         (JSObjectCallAsFunction):
2348         (JSObjectCallAsConstructor):
2349
2350         * API/JSScriptRef.cpp:
2351         * API/JSValue.mm:
2352         (JSContainerConvertor::take):
2353         (reportExceptionToInspector):
2354
2355         * API/JSValueRef.cpp:
2356         (handleExceptionIfNeeded):
2357         - The functions below all do the same exception check.  Added this helper
2358           to simplify the code.
2359         (evernoteHackNeeded):
2360         (JSValueIsEqual):
2361         (JSValueIsInstanceOfConstructor):
2362         (JSValueCreateJSONString):
2363         (JSValueToNumber):
2364         (JSValueToStringCopy):
2365         (JSValueToObject):
2366
2367         * CMakeLists.txt:
2368         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
2369         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
2370         * JavaScriptCore.xcodeproj/project.pbxproj:
2371         - Added new files Exception.h and Exception.cpp.
2372
2373         * bindings/ScriptFunctionCall.cpp:
2374         (Deprecated::ScriptFunctionCall::call):
2375         * bindings/ScriptFunctionCall.h:
2376
2377         * bytecode/BytecodeList.json:
2378         - op_catch now had 2 operands: the exception register, and the thrown value register.
2379
2380         * bytecode/BytecodeUseDef.h:
2381         (JSC::computeDefsForBytecodeOffset):
2382         * bytecode/CodeBlock.cpp:
2383         (JSC::CodeBlock::dumpBytecode):
2384         (JSC::CodeBlock::handlerForBytecodeOffset):
2385         * bytecode/CodeBlock.h:
2386         - handlerForBytecodeOffset() now can look for just Catch handlers only.
2387
2388         * bytecode/HandlerInfo.h:
2389         - Cleaned up some white space I accidentally added in a previous patch.
2390
2391         * bytecompiler/BytecodeGenerator.cpp:
2392         (JSC::BytecodeGenerator::pushTry):
2393         (JSC::BytecodeGenerator::popTryAndEmitCatch):
2394         (JSC::BytecodeGenerator::emitThrowReferenceError):
2395         (JSC::BytecodeGenerator::emitEnumeration):
2396         * bytecompiler/BytecodeGenerator.h:
2397         (JSC::BytecodeGenerator::emitThrow):
2398         * bytecompiler/NodesCodegen.cpp:
2399         (JSC::TryNode::emitBytecode):
2400         - Adding support for op_catch's 2 operands.
2401
2402         * debugger/Debugger.cpp:
2403         (JSC::Debugger::hasBreakpoint):
2404         (JSC::Debugger::pauseIfNeeded):
2405         (JSC::Debugger::exception):
2406         * debugger/Debugger.h:
2407         * debugger/DebuggerCallFrame.cpp:
2408         (JSC::DebuggerCallFrame::thisValue):
2409         (JSC::DebuggerCallFrame::evaluate):
2410         * debugger/DebuggerCallFrame.h:
2411         (JSC::DebuggerCallFrame::isValid):
2412         * inspector/InjectedScriptManager.cpp:
2413         (Inspector::InjectedScriptManager::createInjectedScript):
2414         * inspector/InspectorEnvironment.h:
2415         * inspector/JSGlobalObjectInspectorController.cpp:
2416         (Inspector::JSGlobalObjectInspectorController::appendAPIBacktrace):
2417         (Inspector::JSGlobalObjectInspectorController::reportAPIException):
2418         * inspector/JSGlobalObjectInspectorController.h:
2419         * inspector/JSGlobalObjectScriptDebugServer.h:
2420         * inspector/JSJavaScriptCallFrame.cpp:
2421         (Inspector::JSJavaScriptCallFrame::evaluate):
2422         * inspector/JavaScriptCallFrame.h:
2423         (Inspector::JavaScriptCallFrame::vmEntryGlobalObject):
2424         (Inspector::JavaScriptCallFrame::thisValue):
2425         (Inspector::JavaScriptCallFrame::evaluate):
2426         * inspector/ScriptCallStackFactory.cpp:
2427         (Inspector::extractSourceInformationFromException):
2428         (Inspector::createScriptCallStackFromException):
2429         * inspector/ScriptCallStackFactory.h:
2430         * inspector/ScriptDebugServer.cpp:
2431         (Inspector::ScriptDebugServer::evaluateBreakpointAction):
2432         (Inspector::ScriptDebugServer::handleBreakpointHit):
2433         (Inspector::ScriptDebugServer::handleExceptionInBreakpointCondition):
2434         * inspector/ScriptDebugServer.h:
2435         * interpreter/CallFrame.h:
2436         (JSC::ExecState::clearException):
2437         (JSC::ExecState::exception):
2438         (JSC::ExecState::hadException):
2439         (JSC::ExecState::atomicStringTable):
2440         (JSC::ExecState::propertyNames):
2441         (JSC::ExecState::clearSupplementaryExceptionInfo): Deleted.
2442
2443         * interpreter/Interpreter.cpp:
2444         (JSC::unwindCallFrame):
2445         (JSC::Interpreter::stackTraceAsString):
2446         (JSC::GetCatchHandlerFunctor::GetCatchHandlerFunctor):
2447         (JSC::GetCatchHandlerFunctor::operator()):
2448         (JSC::Interpreter::unwind):
2449         - Added a check for didNotifyInspectorOfThrow() here to prevent duplicate reports
2450           of the same Exception to the debugger.
2451
2452         (JSC::GetExceptionHandlerFunctor::GetExceptionHandlerFunctor): Deleted.
2453         (JSC::GetExceptionHandlerFunctor::operator()): Deleted.
2454         - Renamed GetExceptionHandlerFunctor to GetCatchHandlerFunctor since the debugger
2455           is only interested in knowing whether we have Catch handlers.
2456
2457         * interpreter/Interpreter.h:
2458         (JSC::SuspendExceptionScope::SuspendExceptionScope):
2459         (JSC::SuspendExceptionScope::~SuspendExceptionScope):
2460         (JSC::Interpreter::sampler):
2461         (JSC::ClearExceptionScope::ClearExceptionScope): Deleted.
2462         (JSC::ClearExceptionScope::~ClearExceptionScope): Deleted.
2463         - Renamed ClearExceptionScope to SuspendExceptionScope because "clear" implies that
2464           we're purging the exception.  Instead, we're merely suspending any handling of
2465           that exception for a period defined by the scope.
2466
2467         * jit/AssemblyHelpers.cpp:
2468         (JSC::AssemblyHelpers::emitExceptionCheck):
2469
2470         * jit/JITExceptions.cpp:
2471         (JSC::genericUnwind):
2472         - Removed the exception argument.  It is always the value in VM::exception() anyway.
2473           genericUnwind() can just get it from the VM, and save everyone some work.
2474
2475         * jit/JITExceptions.h:
2476         * jit/JITOpcodes.cpp:
2477         (JSC::JIT::emit_op_catch):
2478         * jit/JITOpcodes32_64.cpp:
2479         (JSC::JIT::privateCompileCTINativeCall):
2480         (JSC::JIT::emit_op_catch):
2481         - Add support for the new op_catch operands.
2482
2483         * jit/JITOperations.cpp:
2484         * jit/ThunkGenerators.cpp:
2485         (JSC::nativeForGenerator):
2486         * jsc.cpp:
2487         (functionRun):
2488         (functionLoad):
2489         (runWithScripts):
2490         (runInteractive):
2491         * llint/LLIntOffsetsExtractor.cpp:
2492         * llint/LLIntSlowPaths.cpp:
2493         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2494
2495         * llint/LowLevelInterpreter32_64.asm:
2496         * llint/LowLevelInterpreter64.asm:
2497         - Add support for the new op_catch operands.  Also update the code to handle
2498           VM::m_exception being an Exception pointer, not a JSValue.
2499
2500         * parser/NodeConstructors.h:
2501         (JSC::TryNode::TryNode):
2502         * parser/Nodes.h:
2503         * runtime/CallData.cpp:
2504         (JSC::call):
2505         * runtime/CallData.h:
2506
2507         * runtime/Completion.cpp:
2508         (JSC::evaluate):
2509         * runtime/Completion.h:
2510         (JSC::evaluate):
2511         - Change evaluate() to take a reference to the returned exception value instead
2512           of a pointer.  In all but 2 or 3 cases, we want the returned exception anyway.
2513           Might as well simplify the code by requiring the reference.
2514
2515         * runtime/Error.h:
2516         (JSC::throwVMError):
2517         (JSC::throwVMTypeError):
2518
2519         * runtime/Exception.cpp: Added.
2520         (JSC::Exception::create):
2521         (JSC::Exception::destroy):
2522         (JSC::Exception::createStructure):
2523         (JSC::Exception::visitChildren):
2524         (JSC::Exception::Exception):
2525         (JSC::Exception::~Exception):
2526         * runtime/Exception.h: Added.
2527         (JSC::Exception::valueOffset):
2528         (JSC::Exception::cast):
2529         (JSC::Exception::value):
2530         (JSC::Exception::stack):
2531         (JSC::Exception::didNotifyInspectorOfThrow):
2532         (JSC::Exception::setDidNotifyInspectorOfThrow):
2533
2534         * runtime/ExceptionHelpers.cpp:
2535         (JSC::createTerminatedExecutionException):
2536         (JSC::isTerminatedExecutionException):
2537         (JSC::createStackOverflowError):
2538         * runtime/ExceptionHelpers.h:
2539         * runtime/GetterSetter.cpp:
2540         (JSC::callGetter):
2541         * runtime/IteratorOperations.cpp:
2542         (JSC::iteratorClose):
2543         * runtime/JSObject.cpp:
2544         * runtime/JSPromiseConstructor.cpp:
2545         (JSC::constructPromise):
2546         * runtime/JSPromiseDeferred.cpp:
2547         (JSC::updateDeferredFromPotentialThenable):
2548         (JSC::abruptRejection):
2549         * runtime/JSPromiseReaction.cpp:
2550         (JSC::ExecutePromiseReactionMicrotask::run):
2551
2552         * runtime/VM.cpp:
2553         (JSC::VM::VM):
2554         (JSC::VM::releaseExecutableMemory):
2555         (JSC::VM::throwException):
2556         (JSC::VM::setStackPointerAtVMEntry):
2557         (JSC::VM::getExceptionInfo): Deleted.
2558         (JSC::VM::setExceptionInfo): Deleted.
2559         (JSC::VM::clearException): Deleted.
2560         (JSC::clearExceptionStack): Deleted.
2561         * runtime/VM.h:
2562         (JSC::VM::targetMachinePCForThrowOffset):
2563         (JSC::VM::clearException):
2564         (JSC::VM::setException):
2565         (JSC::VM::exception):
2566         (JSC::VM::addressOfException):
2567         (JSC::VM::exceptionStack): Deleted.
2568         * runtime/VMEntryScope.cpp:
2569         (JSC::VMEntryScope::VMEntryScope):
2570         (JSC::VMEntryScope::setEntryScopeDidPopListener):
2571
2572 2015-06-04  Benjamin Poulain  <bpoulain@apple.com>
2573
2574         [JSC] Always track out-of-bounds array access explicitly instead of relying on the slow case
2575         https://bugs.webkit.org/show_bug.cgi?id=145673
2576
2577         Reviewed by Geoffrey Garen.
2578
2579         Previously, we were deciding to use out-of-bounds speculation based on two informations:
2580         -Explicitly detected out-of-bounds accesses tracked on ArrayProfile.
2581         -The number of time we took the slow cases in the baseline JIT.
2582
2583         The heuristic based on slow cases was a little too fragile.
2584
2585         In some cases, we were running into that limit just because the indexing type changes between
2586         two values (typically Int32Array and DoubleArray). Sometimes we were just unlucky on what
2587         we used for the inline cache.
2588
2589         In Kraken, this was hurting us on "audio-beat-detection" and "audio-fft". The array types we see
2590         change between Int32 and Double. We run into the slow path a bit but never hit
2591         out-of-bounds.
2592
2593         By the time we compile in DFG, we have stable Double Arrays but we speculate out-of-bounds based
2594         on the number of slow cases we took. Because of that, we start boxing the double on GetByVal,
2595         using DoubleRep, etc. adding a ton of overhead over otherwise very simple operations.
2596
2597         WebXPRT was also suffering from this problem but the other way arround: we were missing
2598         the out-of-bounds accesses due to changes in indexing types, we were below the threshold
2599         of slow-path access, thus we predicted in-bounds accesses for code that was doing plenty
2600         of out-of-bands.
2601
2602
2603         This patch fixes the problem by tracking the out-of-bounds access explicitly any time we go
2604         into the slow path in baseline JIT. Since we no longer miss any out-of-bounds, we can remove
2605         the slow-path heuristic.
2606
2607         There is new additional special case in the C code regarding out-of-bounds: Arguments access.
2608         Mispredicting out-of-bounds accesses on arguments is a disaster for performance, so those are
2609         tracked in the way DFG expect it.
2610
2611
2612         There are a few important cases that are still not covered optimally:
2613         -PutByVal on Arguments.
2614         -Get/Put ByVal on TypedArray.
2615         Those are simply not used by DFG in any way. TypedArrays should probably be looked at in the future.
2616
2617         * bytecode/ArrayProfile.cpp:
2618         (JSC::ArrayProfile::computeUpdatedPrediction):
2619         The inline-cache repatch cases now update the ArrayProfile information. This has no value in baseline
2620         JIT but it helps avoiding one recompile in DFG for the missing ArrayProfile information.
2621
2622         * bytecode/ArrayProfile.h:
2623         (JSC::ArrayProfile::setOutOfBounds):
2624         * dfg/DFGByteCodeParser.cpp:
2625         (JSC::DFG::ByteCodeParser::getArrayMode):
2626         (JSC::DFG::ByteCodeParser::parseBlock):
2627         (JSC::DFG::ByteCodeParser::getArrayModeConsideringSlowPath): Deleted.
2628         * jit/CCallHelpers.h:
2629         (JSC::CCallHelpers::setupArgumentsWithExecState):
2630         * jit/JIT.h:
2631         * jit/JITInlines.h:
2632         (JSC::JIT::callOperation):
2633         * jit/JITOpcodes.cpp:
2634         (JSC::JIT::emitSlow_op_has_indexed_property):
2635         * jit/JITOpcodes32_64.cpp:
2636         (JSC::JIT::emitSlow_op_has_indexed_property):
2637         * jit/JITOperations.cpp:
2638         (JSC::canUseFastArgumentAccess):
2639         This is not my favorite part of this patch.
2640
2641         I tried having JSObject::canGetIndexQuickly() handle arguments which would put everything
2642         on the generic path. Unfortunately, that code is very performance sensitive and some benchmarks were
2643         impacted by over 10%
2644
2645         I left JSObject::canGetIndexQuickly() alone, and I added the canUseFastArgumentAccess() mirroring
2646         how DFG uses out-of-bounds for Arguments.
2647
2648         (JSC::getByVal):
2649         * jit/JITOperations.h:
2650         * jit/JITPropertyAccess.cpp:
2651         (JSC::JIT::emitSlow_op_get_by_val):
2652         (JSC::JIT::emitSlow_op_put_by_val):
2653         * jit/JITPropertyAccess32_64.cpp:
2654         (JSC::JIT::emitSlow_op_get_by_val):
2655         (JSC::JIT::emitSlow_op_put_by_val):
2656         * runtime/JSPromiseFunctions.cpp:
2657         * tests/stress/get-by-val-out-of-bounds-basics.js: Added.
2658         (opaqueGetByValOnInt32ArrayEarlyOutOfBounds):
2659         (testInt32ArrayEarlyOutOfBounds):
2660         (testIndexingTypeChangesOnInt32Array):
2661         (opaqueGetByValOnStringArrayHotOutOfBounds):
2662         (testStringArrayHotOutOfBounds):
2663         (testIndexingTypeChangesOnStringArray):
2664         (opaqueGetByValOnStringAndInt32ArrayHotOutOfBounds):
2665         (testStringAndInt32ArrayHotOutOfBounds):
2666         (opaqueGetByValOnDoubleArrayHotOutOfBounds):
2667         * tests/stress/put-by-val-out-of-bounds-basics.js: Added.
2668         (opaquePutByValOnInt32ArrayEarlyOutOfBounds):
2669         (testInt32ArrayEarlyOutOfBounds):
2670         (opaquePutByValOnStringArrayHotOutOfBounds):
2671         (testStringArrayHotOutOfBounds):
2672
2673 2015-06-03  Filip Pizlo  <fpizlo@apple.com>
2674
2675         Simplify unboxing of double JSValues known to be not NaN and not Int32
2676         https://bugs.webkit.org/show_bug.cgi?id=145618
2677
2678         Reviewed by Geoffrey Garen.
2679         
2680         In many cases we know that we most likely loaded a non-NaN double value from the heap.
2681         Prior to this patch, we would do two branches before unboxing the double. This patch
2682         reduces this to one branch in the common case. Before:
2683         
2684             if (is int32)
2685                 unbox int32 and convert to double
2686             else if (is number)
2687                 unbox double
2688             else
2689                 exit
2690         
2691         After:
2692
2693             tmp = unbox double
2694             if (tmp == tmp)
2695                 done
2696             else if (is int32)
2697                 unbox int32 and convert to double
2698             else
2699                 exit
2700         
2701         We only use the new style if we have profiling that tells us that we are unlikely to see
2702         either Int32 or NaN - since we will now exit on NaN and int32 requires an extra branch.
2703         
2704         This is a 8% speed-up on Octane/box2d. On one microbenchmark this is a 25% speed-up.
2705         
2706         Rolling this back in after I made DFG::SpeculativeJIT call a new version of unboxDouble()
2707         that doesn't assert that the JSValue is a double, since we are intentionally using it
2708         before doing the "is a double" test. This wasn't a problem on 32-bit since unboxDouble()
2709         does no such assertion on 32-bit.
2710
2711         * dfg/DFGAbstractInterpreterInlines.h:
2712         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2713         * dfg/DFGFixupPhase.cpp:
2714         (JSC::DFG::FixupPhase::observeUseKindOnNode):
2715         (JSC::DFG::FixupPhase::fixEdgeRepresentation):
2716         (JSC::DFG::FixupPhase::injectTypeConversionsForEdge):
2717         * dfg/DFGNode.h:
2718         (JSC::DFG::Node::shouldSpeculateDouble):
2719         (JSC::DFG::Node::shouldSpeculateDoubleReal):
2720         (JSC::DFG::Node::shouldSpeculateNumber):
2721         * dfg/DFGSafeToExecute.h:
2722         (JSC::DFG::SafeToExecuteEdge::operator()):
2723         * dfg/DFGSpeculativeJIT.cpp:
2724         (JSC::DFG::SpeculativeJIT::compileDoubleRep):
2725         (JSC::DFG::SpeculativeJIT::speculateNumber):
2726         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
2727         (JSC::DFG::SpeculativeJIT::speculateDoubleRepReal):
2728         (JSC::DFG::SpeculativeJIT::speculate):
2729         (JSC::DFG::SpeculativeJIT::speculateDoubleReal): Deleted.
2730         * dfg/DFGSpeculativeJIT.h:
2731         * dfg/DFGUseKind.cpp:
2732         (WTF::printInternal):
2733         * dfg/DFGUseKind.h:
2734         (JSC::DFG::typeFilterFor):
2735         (JSC::DFG::isNumerical):
2736         * ftl/FTLCapabilities.cpp:
2737         (JSC::FTL::canCompile):
2738         * ftl/FTLLowerDFGToLLVM.cpp:
2739         (JSC::FTL::LowerDFGToLLVM::compileDoubleRep):
2740         (JSC::FTL::LowerDFGToLLVM::boxDouble):
2741         (JSC::FTL::LowerDFGToLLVM::jsValueToStrictInt52):
2742         (JSC::FTL::LowerDFGToLLVM::speculate):
2743         (JSC::FTL::LowerDFGToLLVM::speculateNumber):
2744         (JSC::FTL::LowerDFGToLLVM::speculateRealNumber):
2745         (JSC::FTL::LowerDFGToLLVM::speculateDoubleRepReal):
2746         (JSC::FTL::LowerDFGToLLVM::jsValueToDouble): Deleted.
2747         (JSC::FTL::LowerDFGToLLVM::speculateDoubleReal): Deleted.
2748         * jit/AssemblyHelpers.h:
2749         (JSC::AssemblyHelpers::branchIfNotOther):
2750         (JSC::AssemblyHelpers::branchIfInt32):
2751         (JSC::AssemblyHelpers::branchIfNotInt32):
2752         (JSC::AssemblyHelpers::branchIfNumber):
2753
2754 2015-06-04  Joseph Pecoraro  <pecoraro@apple.com>
2755
2756         Web Inspector: Class constructor appearing as Object Tree property does not include parameters
2757         https://bugs.webkit.org/show_bug.cgi?id=145661
2758
2759         Reviewed by Timothy Hatcher.
2760
2761         * inspector/InjectedScriptSource.js:
2762         (InjectedScript.prototype._classPreview):
2763         (InjectedScript.RemoteObject.prototype._appendPropertyPreviews):
2764         The string we will return for previews of class constructor functions.
2765
2766         (InjectedScript.RemoteObject):
2767         (InjectedScript.RemoteObject.prototype._describe):
2768         No longer return the class name as the description string.
2769         Instead return the class name for the RemoteObject.className.
2770
2771 2015-06-04  Commit Queue  <commit-queue@webkit.org>
2772
2773         Unreviewed, rolling out r185216.
2774         https://bugs.webkit.org/show_bug.cgi?id=145666
2775
2776         it caused a bunch of debug crashes (Requested by pizlo on
2777         #webkit).
2778
2779         Reverted changeset:
2780
2781         "Simplify unboxing of double JSValues known to be not NaN and
2782         not Int32"
2783         https://bugs.webkit.org/show_bug.cgi?id=145618
2784         http://trac.webkit.org/changeset/185216
2785
2786 2015-06-03  Filip Pizlo  <fpizlo@apple.com>
2787
2788         Simplify unboxing of double JSValues known to be not NaN and not Int32
2789         https://bugs.webkit.org/show_bug.cgi?id=145618
2790
2791         Reviewed by Geoffrey Garen.
2792         
2793         In many cases we know that we most likely loaded a non-NaN double value from the heap.
2794         Prior to this patch, we would do two branches before unboxing the double. This patch
2795         reduces this to one branch in the common case. Before:
2796         
2797             if (is int32)
2798                 unbox int32 and convert to double
2799             else if (is number)
2800                 unbox double
2801             else
2802                 exit
2803         
2804         After:
2805
2806             tmp = unbox double
2807             if (tmp == tmp)
2808                 done
2809             else if (is int32)
2810                 unbox int32 and convert to double
2811             else
2812                 exit
2813         
2814         We only use the new style if we have profiling that tells us that we are unlikely to see
2815         either Int32 or NaN - since we will now exit on NaN and int32 requires an extra branch.
2816         
2817         This is a 8% speed-up on Octane/box2d. On one microbenchmark this is a 25% speed-up.
2818
2819         * dfg/DFGAbstractInterpreterInlines.h:
2820         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2821         * dfg/DFGFixupPhase.cpp:
2822         (JSC::DFG::FixupPhase::observeUseKindOnNode):
2823         (JSC::DFG::FixupPhase::fixEdgeRepresentation):
2824         (JSC::DFG::FixupPhase::injectTypeConversionsForEdge):
2825         * dfg/DFGNode.h:
2826         (JSC::DFG::Node::shouldSpeculateDouble):
2827         (JSC::DFG::Node::shouldSpeculateDoubleReal):
2828         (JSC::DFG::Node::shouldSpeculateNumber):
2829         * dfg/DFGSafeToExecute.h:
2830         (JSC::DFG::SafeToExecuteEdge::operator()):
2831         * dfg/DFGSpeculativeJIT.cpp:
2832         (JSC::DFG::SpeculativeJIT::compileDoubleRep):
2833         (JSC::DFG::SpeculativeJIT::speculateNumber):
2834         (JSC::DFG::SpeculativeJIT::speculateRealNumber):
2835         (JSC::DFG::SpeculativeJIT::speculateDoubleRepReal):
2836         (JSC::DFG::SpeculativeJIT::speculate):
2837         (JSC::DFG::SpeculativeJIT::speculateDoubleReal): Deleted.
2838         * dfg/DFGSpeculativeJIT.h:
2839         * dfg/DFGUseKind.cpp:
2840         (WTF::printInternal):
2841         * dfg/DFGUseKind.h:
2842         (JSC::DFG::typeFilterFor):
2843         (JSC::DFG::isNumerical):
2844         * ftl/FTLCapabilities.cpp:
2845         (JSC::FTL::canCompile):
2846         * ftl/FTLLowerDFGToLLVM.cpp:
2847         (JSC::FTL::LowerDFGToLLVM::compileDoubleRep):
2848         (JSC::FTL::LowerDFGToLLVM::boxDouble):
2849         (JSC::FTL::LowerDFGToLLVM::jsValueToStrictInt52):
2850         (JSC::FTL::LowerDFGToLLVM::speculate):
2851         (JSC::FTL::LowerDFGToLLVM::speculateNumber):
2852         (JSC::FTL::LowerDFGToLLVM::speculateRealNumber):
2853         (JSC::FTL::LowerDFGToLLVM::speculateDoubleRepReal):
2854         (JSC::FTL::LowerDFGToLLVM::jsValueToDouble): Deleted.
2855         (JSC::FTL::LowerDFGToLLVM::speculateDoubleReal): Deleted.
2856         * jit/AssemblyHelpers.h:
2857         (JSC::AssemblyHelpers::branchIfNotOther):
2858         (JSC::AssemblyHelpers::branchIfInt32):
2859         (JSC::AssemblyHelpers::branchIfNotInt32):
2860         (JSC::AssemblyHelpers::branchIfNumber):
2861
2862 2015-06-04  Filip Pizlo  <fpizlo@apple.com>
2863
2864         SideState should be a distinct abstract heap from Heap and Stack
2865         https://bugs.webkit.org/show_bug.cgi?id=145653
2866
2867         Reviewed by Geoffrey Garen.
2868         
2869         Before, SideState fit into the hierarchy like so:
2870         
2871         World
2872            |
2873            +-- Stack
2874            |
2875            +-- Heap
2876                  |
2877                  +-- SideState
2878         
2879         Now we will have:
2880         
2881         World
2882            |
2883            +-- Stack
2884            |
2885            +-- Heap
2886            |
2887            +-- SideState
2888         
2889         This makes it easy to ask if a writing operation wrote to anything that is observable even
2890         if we don't exit. SideState is only observable if we exit.
2891
2892         * dfg/DFGAbstractHeap.h:
2893         (JSC::DFG::AbstractHeap::AbstractHeap):
2894         (JSC::DFG::AbstractHeap::supertype):
2895
2896 2015-06-04  Chris Dumez  <cdumez@apple.com>
2897
2898         [WK2] Prune more resources from the MemoryCache before process suspension
2899         https://bugs.webkit.org/show_bug.cgi?id=145633
2900
2901         Reviewed by Andreas Kling.
2902
2903         No longer move protect IncrementalSweeper::fullSweep() behind
2904         USE(CF) so we don't need #ifdefs at call sites, similarly to what is
2905         done for the rest of the IncrementalSweeper API.
2906
2907         * heap/IncrementalSweeper.cpp:
2908         (JSC::IncrementalSweeper::fullSweep):
2909         * heap/IncrementalSweeper.h:
2910
2911 2015-06-01  Filip Pizlo  <fpizlo@apple.com>
2912
2913         CallLinkStatus should return takesSlowPath if the GC often cleared the IC
2914         https://bugs.webkit.org/show_bug.cgi?id=145502
2915
2916         Reviewed by Geoffrey Garen.
2917         
2918         CallLinkInfo now remembers when it has been cleared by GC. This has some safeguards for when
2919         a call gets cleared by GC only because we hadn't converted it into a closure call; in that
2920         case the GC will just tell us that it should be a closure call. The DFG will not optimize
2921         a call that was cleared by GC, and the DFG will always prefer a closure call if the GC told
2922         us that the specific callee was dead but the executable wasn't.
2923         
2924         This guards us from some scenarios that came up in Speedometer. It's neutral on the pure JS
2925         benchmarks, most likely just because those benchmarks aren't real enough to have interesting
2926         GC of code.
2927
2928         * bytecode/CallLinkInfo.cpp:
2929         (JSC::CallLinkInfo::visitWeak):
2930         (JSC::CallLinkInfo::dummy):
2931         * bytecode/CallLinkInfo.h:
2932         (JSC::CallLinkInfo::CallLinkInfo):
2933         * bytecode/CallLinkStatus.cpp:
2934         (JSC::CallLinkStatus::computeFromCallLinkInfo):
2935
2936 2015-06-02  Filip Pizlo  <fpizlo@apple.com>
2937
2938         GetById and PutById profiling should be more precise about it takes slow path
2939         https://bugs.webkit.org/show_bug.cgi?id=145590
2940
2941         Reviewed by Geoffrey Garen.
2942         
2943         If a ById access ever takes slow path, we want the DFG and FTL to know this. Previously we
2944         were relying on slow path counts, which conflate slow paths taken due to a megamorphic
2945         access and slow paths taken due to IC building.
2946
2947         * bytecode/GetByIdStatus.cpp:
2948         (JSC::GetByIdStatus::computeFor):
2949         (JSC::GetByIdStatus::computeForStubInfo):
2950         * bytecode/PutByIdStatus.cpp:
2951         (JSC::PutByIdStatus::computeFor):
2952         (JSC::PutByIdStatus::computeForStubInfo):
2953         * bytecode/StructureStubInfo.h:
2954         (JSC::StructureStubInfo::StructureStubInfo):
2955         * ftl/FTLIntrinsicRepository.h:
2956         * ftl/FTLLowerDFGToLLVM.cpp:
2957         (JSC::FTL::LowerDFGToLLVM::compileGetById):
2958         * jit/JITOperations.cpp:
2959         * jit/JITOperations.h:
2960
2961 2015-06-03  Michael Saboff  <msaboff@apple.com>
2962
2963         Improve test coverage for changes made in 145527
2964         https://bugs.webkit.org/show_bug.cgi?id=145578
2965
2966         Reviewed by Geoffrey Garen.
2967
2968         Added more complexity to poly-setter-combo.js stress test to create more turmoil in the
2969         polymorphic get-by-id / put-by-id with getters and setters to exercise the code change in
2970         https://bugs.webkit.org/show_bug.cgi?id=145527.  By changing the objects that the main test
2971         function sees, we are able to test those paths.  Verified with temporary logging code.
2972
2973         * tests/stress/poly-setter-combo.js:
2974         (Cons2):
2975         (Cons3):
2976         (Cons4):
2977         (foo):
2978         (test):
2979         (runTestWithConstructors):
2980
2981 2015-06-02  Mark Lam  <mark.lam@apple.com>
2982
2983         Gardening: fix broken CLoop build.
2984
2985         Not reviewed.
2986
2987         * bytecode/CallLinkStatus.cpp:
2988         (JSC::CallLinkStatus::computeExitSiteData):
2989
2990 2015-06-02  Keith Miller  <keith_miller@apple.com>
2991
2992         JavaScriptCore: JSExport protocol with an NSInteger property converts negative values to 18446744073709552000
2993         https://bugs.webkit.org/show_bug.cgi?id=145563
2994
2995         Reviewed by Darin Adler.
2996
2997         The Objective-C bindings were improperly converting negative
2998         long long/NSIntegers to 18446744073709552000 because they
2999         were converted to unsigned numbers.
3000
3001         * API/ObjcRuntimeExtras.h:
3002         (parseObjCType):
3003         * API/tests/testapi.mm:
3004         (testObjectiveCAPIMain):
3005         (checkNegativeNSIntegers):
3006         (testObjectiveCAPI):
3007
3008 2015-06-02  Yusuke Suzuki  <utatane.tea@gmail.com>
3009
3010         Heap-use-after-free read of size 4 in JavaScriptCore: WTF::StringImpl::isSymbol() (StringImpl.h:496)
3011         https://bugs.webkit.org/show_bug.cgi?id=145532
3012
3013         Reviewed by Geoffrey Garen.
3014
3015         AtomicStringImpl::lookUp returns AtomicStringImpl*,
3016         it doesn't give any ownership to the caller.
3017         Originally, this is ok because the ownership is taken
3018         by AtomicStringImpl's table (& the register side).
3019
3020         But if we would like to use this returned AtomicStringImpl*,
3021         we should take its ownership immediately.
3022         Because if the register side releases its ownership (ref count),
3023         it will be destroyed.
3024
3025         In JSString::toExistingAtomicString, it returns AtomicStringImpl*.
3026         But it's not appropriate.
3027         If the owner of AtomicStringImpl* is always JSString*, it is ok.
3028         But it looks up the table-registered AtomicStringImpl* from
3029         the AtomicStringImpl table. So JSString* may not have the ownership
3030         of the returned AtomicStringImpl*.
3031
3032         The failure situation is the following.
3033
3034         1. A creates AtomicStringImpl. A has its ownership.
3035            And A registers it to AtomicStringImpl table.
3036         2. JSString looks up the AtomicStringImpl from the table.
3037            It gets AtomicStringImpl*. And JSString doesn't have its ownership.
3038            It returns the raw pointer immediately to the users
3039         3. A is released. There's no owner for AtomicStringImpl*.
3040            So it's also destroyed.
3041         4. Use looked up AtomicStringImpl in (2). It becomes use-after-free.
3042
3043         This patch fixes it by the following changes.
3044
3045         1. Change the signature of `AtomicStringImpl* AtomicStringImpl::lookUp(...)`
3046            to `RefPtr<AtomicStringImpl> AtomicStringImpl::lookUp(..)`.
3047            Use `RefPtr` because it may return `nullptr`.
3048         2. Change the signature of `AtomicStringImpl* JSString::toExistingAtomicString(...)`
3049            to `RefPtr<AtomicStringImpl> JSString::toExistingAtomicString(...)`.
3050            Using `RefPtr` is the same reason.
3051         3. Receive the result with `RefPtr<AtomicStringImpl>` in the caller side.
3052
3053         * dfg/DFGOperations.cpp:
3054         * jit/JITOperations.cpp:
3055         (JSC::getByVal):
3056         * llint/LLIntSlowPaths.cpp:
3057         (JSC::LLInt::getByVal):
3058         * runtime/JSString.cpp:
3059         (JSC::JSRopeString::resolveRopeToExistingAtomicString):
3060         * runtime/JSString.h:
3061         (JSC::JSString::toExistingAtomicString):
3062
3063 2015-05-30  Filip Pizlo  <fpizlo@apple.com>
3064
3065         Any exit from any JIT due to profiling for an inline cache should force all future compilations to be wary
3066         https://bugs.webkit.org/show_bug.cgi?id=145496
3067
3068         Reviewed by Geoffrey Garen.
3069         
3070         This pessimizes compilation a bit, but it reduces the likelihood of exiting from FTL. I
3071         couldn't find any convincing reason not to do this, and we know from Speedometer that this
3072         change is necessary for weirder code.
3073
3074         * bytecode/CallLinkStatus.cpp:
3075         (JSC::CallLinkStatus::computeFor):
3076         (JSC::CallLinkStatus::computeExitSiteData):
3077         (JSC::CallLinkStatus::computeDFGStatuses):
3078         * bytecode/CallLinkStatus.h:
3079         * bytecode/GetByIdStatus.cpp:
3080         (JSC::GetByIdStatus::appendVariant):
3081         (JSC::GetByIdStatus::hasExitSite):
3082         (JSC::GetByIdStatus::computeFor):
3083         * bytecode/GetByIdStatus.h:
3084         * bytecode/PutByIdStatus.cpp:
3085         (JSC::PutByIdStatus::appendVariant):
3086         (JSC::PutByIdStatus::hasExitSite):
3087         (JSC::PutByIdStatus::computeFor):
3088         * bytecode/PutByIdStatus.h:
3089
3090 2015-05-31  Filip Pizlo  <fpizlo@apple.com>
3091
3092         If a call has ever taken the virtual slow path, make sure that the DFG knows this
3093         https://bugs.webkit.org/show_bug.cgi?id=145501
3094
3095         Reviewed by Geoffrey Garen.
3096         
3097         Now now return higher fidelity information in the case of no polymorphic call stub. If the
3098         virtual slow path was ever taken, we note this, and we note either zero or one call variant
3099         based on the IC's last callee.
3100
3101         * bytecode/CallLinkStatus.cpp:
3102         (JSC::CallLinkStatus::computeFromCallLinkInfo):
3103         (JSC::CallLinkStatus::computeFor):
3104
3105 2015-06-01  Michael Saboff  <msaboff@apple.com>
3106
3107         Crash in com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::revertCall + 24
3108         https://bugs.webkit.org/show_bug.cgi?id=145527
3109
3110         Reviewed by Filip Pizlo.
3111
3112         If a CallLinkInfo is GC'ed, we need to notify any PolymorphicCallNode's that reference it.
3113         Added plumbling to clear the m_callLinkInfo of a PolymorphicCallNode when that CallLinkInfo
3114         is going away.
3115
3116         * bytecode/CallLinkInfo.h:
3117         (JSC::CallLinkInfo::~CallLinkInfo):
3118         * jit/PolymorphicCallStubRoutine.cpp:
3119         (JSC::PolymorphicCallNode::unlink):
3120         (JSC::PolymorphicCallNode::clearCallLinkInfo):
3121         (JSC::PolymorphicCallCase::dump):
3122         (JSC::PolymorphicCallStubRoutine::edges):
3123         (JSC::PolymorphicCallStubRoutine::clearCallNodesFor):
3124         (JSC::PolymorphicCallStubRoutine::visitWeak):
3125         * jit/PolymorphicCallStubRoutine.h:
3126         (JSC::PolymorphicCallNode::hasCallLinkInfo):
3127
3128 2015-06-01  Mark Lam  <mark.lam@apple.com>
3129
3130         Add the ability to tell between Catch and Finally blocks.
3131         https://bugs.webkit.org/show_bug.cgi?id=145524 
3132
3133         Reviewed by Michael Saboff.
3134
3135         ... and also SynthesizedFinally blocks too.  A SynthesizedFinally block
3136         is a finally block that is synthesized by the bytecode generator but
3137         does not actually correspond to any exception handling construct at the
3138         JS source code level.  An example of this is the "for ... of" statement
3139         where it needs to do some "final" clean up before passing on the
3140         exception.
3141
3142         Manually tested by inspecting the bytecode dump of functions with
3143         try-catch-finally blocks as well as for of statements which have
3144         synthesized finally blocks.  The bytecode dumps contains the exception
3145         handlers table which has these blocks labelled with their newly added
3146         types.  No automatic test because this type info is not visible to JS
3147         code.
3148
3149         * bytecode/CodeBlock.cpp:
3150         (JSC::CodeBlock::dumpBytecode):
3151         * bytecode/HandlerInfo.h:
3152         (JSC::HandlerInfoBase::type):
3153         (JSC::HandlerInfoBase::setType):
3154         (JSC::HandlerInfoBase::typeName):
3155         (JSC::HandlerInfoBase::isCatchHandler):
3156         (JSC::UnlinkedHandlerInfo::UnlinkedHandlerInfo):
3157         (JSC::HandlerInfo::initialize):
3158         * bytecompiler/BytecodeGenerator.cpp:
3159         (JSC::BytecodeGenerator::generate):
3160         (JSC::BytecodeGenerator::pushTry):
3161         (JSC::BytecodeGenerator::popTryAndEmitCatch):
3162         (JSC::BytecodeGenerator::emitEnumeration):
3163         * bytecompiler/BytecodeGenerator.h:
3164         (JSC::BytecodeGenerator::emitThrow):
3165         * bytecompiler/NodesCodegen.cpp:
3166         (JSC::TryNode::emitBytecode):
3167
3168 2015-05-29  Geoffrey Garen  <ggaren@apple.com>
3169
3170         REGRESSION: These sorting idioms used by Peacekeeper and Browsermark are ~20X slower
3171         https://bugs.webkit.org/show_bug.cgi?id=145412
3172
3173         Reviewed by Darin Adler.
3174
3175         Moar speedup.
3176
3177         Added a bucket sort for string sorting.
3178
3179         * builtins/Array.prototype.js:
3180         (sort.compactSparse):
3181         (sort.compactSlow):
3182         (sort.compact): Split out a compaction fast path for dense arrays. Without
3183         it, compaction can increase sort time by 2X for simple sorts.
3184
3185         (sort.bucketSort):
3186         (sort.stringSort): Use a bucket sorting algorithm if we know we're sorting
3187         strings. This makes average case string sorting O(N) with O(N) additional
3188         memory use.
3189
3190         The worst case bucket sort can require O(M * N) additional
3191         space. We avoid this by falling back to merge sort when things are
3192         simple or overly duplicative. These are the two cases that accumulate
3193         excessive -- and potentially pathological -- bucketing overhead.
3194
3195 2015-06-01  Mark Lam  <mark.lam@apple.com>
3196
3197         HandlerInfo::initialize() should not assume that CodeLocationLabel is available.
3198         https://bugs.webkit.org/show_bug.cgi?id=145515
3199
3200         Reviewed by Csaba Osztrogonác.
3201
3202         CodeLocationLabel is only defined for ENABLE(ASSEMBLER) builds.  r185022's
3203         attempt at simplifying code to increase readability failed to take this into
3204         account.  This patch fixes it.
3205
3206         * bytecode/CodeBlock.cpp:
3207         (JSC::CodeBlock::CodeBlock):
3208         * bytecode/HandlerInfo.h:
3209         (JSC::HandlerInfo::initialize):
3210
3211 2015-05-31  Filip Pizlo  <fpizlo@apple.com>
3212
3213         Unreviewed, add a FIXME referencing https://bugs.webkit.org/show_bug.cgi?id=145503.
3214
3215         * dfg/DFGByteCodeParser.cpp:
3216         (JSC::DFG::ByteCodeParser::inliningCost):
3217
3218 2015-05-31  Yusuke Suzuki  <utatane.tea@gmail.com>
3219
3220         [ES6] Drop WeakMap#clear
3221         https://bugs.webkit.org/show_bug.cgi?id=145489
3222
3223         Reviewed by Mark Lam.
3224
3225         ES6 spec intentionally drops the WeakMap#clear
3226         to allow engine to implement WeakMap as a per-object table.
3227
3228         This patch drops WeakMap.prototype.clear.
3229
3230         * runtime/WeakMapPrototype.cpp:
3231         (JSC::WeakMapPrototype::finishCreation): Deleted.
3232         (JSC::protoFuncWeakMapClear): Deleted.
3233
3234 2015-05-31  Jordan Harband  <ljharb@gmail.com>
3235
3236         Array#reduce and reduceRight don't follow ToLength
3237         https://bugs.webkit.org/show_bug.cgi?id=145364
3238         Per https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
3239
3240         Reviewed by Yusuke Suzuki.
3241
3242         * builtins/Array.prototype.js:
3243         (reduce):
3244         (reduceRight):
3245         * runtime/ArrayPrototype.cpp:
3246         (JSC::ArrayPrototype::finishCreation):
3247         (JSC::arrayProtoFuncReduce): Deleted.
3248         (JSC::arrayProtoFuncReduceRight): Deleted.
3249
3250 2015-05-29  Filip Pizlo  <fpizlo@apple.com>
3251
3252         FTL codegen for MultiGetByOffset and MultiPutByOffset where the structure set is already proved should have an unreachable default case instead of an exit
3253         https://bugs.webkit.org/show_bug.cgi?id=145469
3254
3255         Reviewed by Geoffrey Garen.
3256         
3257         Omitting the speculation on the fail path when the speculation is guaranteed not to be
3258         taken hints to LLVM that the default case is impossible. This enables some useful
3259         optimizations.
3260
3261         * ftl/FTLLowerDFGToLLVM.cpp:
3262         (JSC::FTL::LowerDFGToLLVM::compileMultiGetByOffset):
3263         (JSC::FTL::LowerDFGToLLVM::compileMultiPutByOffset):
3264
3265 2015-05-29  Mark Lam  <mark.lam@apple.com>
3266
3267         Refactoring HandlerInfo and UnlinkedHandlerInfo.
3268         https://bugs.webkit.org/show_bug.cgi?id=145480
3269
3270         Reviewed by Benjamin Poulain.
3271
3272         HandlerInfo and UnlinkedHandlerInfo have common parts, but are not currently
3273         expressed as 2 unrelated structs that happen to have near identical fields.
3274         We can refactor them to better express their relationship.  We can also add
3275         some convenience functions to make the code that uses them a little more
3276         readable.
3277
3278         * bytecode/CodeBlock.cpp:
3279         (JSC::CodeBlock::dumpBytecode):
3280         (JSC::CodeBlock::CodeBlock):
3281         (JSC::CodeBlock::handlerForBytecodeOffset):
3282         * bytecode/HandlerInfo.h:
3283         (JSC::UnlinkedHandlerInfo::UnlinkedHandlerInfo):
3284         (JSC::HandlerInfo::initialize):
3285         - I chose to include CodeLocationLabel arg even though it is unused by
3286           by non-JIT builds.  This makes the call site cleaner to read.
3287
3288         * bytecode/UnlinkedCodeBlock.h:
3289         (JSC::UnlinkedSimpleJumpTable::add):
3290         (JSC::UnlinkedInstruction::UnlinkedInstruction):
3291         (JSC::UnlinkedCodeBlock::numberOfExceptionHandlers):
3292         (JSC::UnlinkedCodeBlock::addExceptionHandler):
3293         (JSC::UnlinkedCodeBlock::exceptionHandler):
3294         (JSC::UnlinkedCodeBlock::symbolTable):
3295         * bytecompiler/BytecodeGenerator.cpp:
3296         (JSC::BytecodeGenerator::generate):
3297
3298 2015-05-28  Filip Pizlo  <fpizlo@apple.com>
3299
3300         Non-speculative Branch should be fast in the FTL
3301         https://bugs.webkit.org/show_bug.cgi?id=145452
3302
3303         Reviewed by Andreas Kling.
3304         
3305         Inlines the code for convertJSValueToBoolean into the FTL. This also includes some other
3306         clean-ups that I found along the way.
3307         
3308         I found this by looking at the hottest functions in DeltaBlue. Despite having so many
3309         Branch specializations, apparently there was still a hot one that we missed that was going
3310         down the untyped path. It was either Int32 or Other. Maybe we could specialize for that
3311         combo, but it makes so much sense to just make all of this nonsense fast.
3312
3313         * dfg/DFGWatchpointCollectionPhase.cpp:
3314         (JSC::DFG::WatchpointCollectionPhase::handle): Need to watch the masquerades watchpoint on UntypedUse: forms of Branch now.
3315         * ftl/FTLLowerDFGToLLVM.cpp:
3316         (JSC::FTL::LowerDFGToLLVM::boolify): The actual fix.
3317         (JSC::FTL::LowerDFGToLLVM::int52ToStrictInt52):
3318         (JSC::FTL::LowerDFGToLLVM::isInt32):
3319         (JSC::FTL::LowerDFGToLLVM::isNotInt32):
3320         (JSC::FTL::LowerDFGToLLVM::unboxInt32):
3321         * runtime/JSCellInlines.h:
3322         (JSC::JSCell::toBoolean): Symbol is always true.
3323         (JSC::JSCell::pureToBoolean): Symbol is always true.
3324         * runtime/JSString.cpp:
3325         (JSC::JSString::getPrimitiveNumber):
3326         (JSC::JSString::toNumber):
3327         (JSC::JSString::toBoolean): Deleted. This is a tiny method. It doesn't need to be out-of-line.
3328         * runtime/JSString.h:
3329         (JSC::JSString::length):
3330         (JSC::JSString::toBoolean): This method shouldbe inline.
3331         * runtime/Symbol.cpp:
3332         (JSC::Symbol::toPrimitive):
3333         (JSC::Symbol::getPrimitiveNumber):
3334         (JSC::Symbol::toBoolean): Deleted. A Symbol is always true, so we don't need a method for this.
3335         * runtime/Symbol.h:
3336
3337 2015-05-29  Commit Queue  <commit-queue@webkit.org>
3338
3339         Unreviewed, rolling out r184860.
3340         https://bugs.webkit.org/show_bug.cgi?id=145456
3341
3342         May have caused ~1% Octane regression (Requested by kling on
3343         #webkit).
3344
3345         Reverted changeset:
3346
3347         "Try to use StringView when comparing JSStrings for equality."
3348         https://bugs.webkit.org/show_bug.cgi?id=145379
3349         http://trac.webkit.org/changeset/184860
3350
3351 2015-05-28  Michael Saboff  <msaboff@apple.com>
3352
3353         mozilla/js1_5/Array/regress-154338.js test causes ARM 32 bit iOS devices to run out of memory
3354         https://bugs.webkit.org/show_bug.cgi?id=145444
3355
3356 &