Remove remaining references to LLVM, and make sure comments refer to the backend...
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2016-02-17  Filip Pizlo  <fpizlo@apple.com>
2
3         Remove remaining references to LLVM, and make sure comments refer to the backend as "B3" not "LLVM"
4         https://bugs.webkit.org/show_bug.cgi?id=154383
5
6         Reviewed by Saam Barati.
7
8         I did a grep -i llvm of all of our code and did one of the following for each occurence:
9
10         - Renamed it to B3. This is appropriate when we were using "LLVM" to mean "the FTL
11           backend".
12
13         - Removed the reference because I found it to be dead. In some cases it was a dead
14           comment: it was telling us things about what LLVM did and that's just not relevant
15           anymore. In other cases it was dead code that I forgot to delete in a previous patch.
16
17         - Edited the comment in some smart way. There were comments talking about what LLVM did
18           that were still of interest. In some cases, I added a FIXME to consider changing the
19           code below the comment on the grounds that it was written in a weird way to placate
20           LLVM and so we can do it better now.
21
22         * CMakeLists.txt:
23         * JavaScriptCore.xcodeproj/project.pbxproj:
24         * dfg/DFGArgumentsEliminationPhase.cpp:
25         * dfg/DFGOSRAvailabilityAnalysisPhase.h:
26         * dfg/DFGPlan.cpp:
27         (JSC::DFG::Plan::compileInThread):
28         (JSC::DFG::Plan::compileInThreadImpl):
29         (JSC::DFG::Plan::compileTimeStats):
30         * dfg/DFGPutStackSinkingPhase.cpp:
31         * dfg/DFGSSAConversionPhase.h:
32         * dfg/DFGStaticExecutionCountEstimationPhase.h:
33         * dfg/DFGUnificationPhase.cpp:
34         (JSC::DFG::UnificationPhase::run):
35         * disassembler/ARM64Disassembler.cpp:
36         (JSC::tryToDisassemble): Deleted.
37         * disassembler/X86Disassembler.cpp:
38         (JSC::tryToDisassemble):
39         * ftl/FTLAbstractHeap.cpp:
40         (JSC::FTL::IndexedAbstractHeap::initialize):
41         * ftl/FTLAbstractHeap.h:
42         * ftl/FTLFormattedValue.h:
43         * ftl/FTLJITFinalizer.cpp:
44         (JSC::FTL::JITFinalizer::finalizeFunction):
45         * ftl/FTLLink.cpp:
46         (JSC::FTL::link):
47         * ftl/FTLLocation.cpp:
48         (JSC::FTL::Location::restoreInto):
49         * ftl/FTLLowerDFGToB3.cpp: Copied from Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp.
50         (JSC::FTL::DFG::ftlUnreachable):
51         (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3):
52         (JSC::FTL::DFG::LowerDFGToB3::compileBlock):
53         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate):
54         (JSC::FTL::DFG::LowerDFGToB3::compileMultiGetByOffset):
55         (JSC::FTL::DFG::LowerDFGToB3::compileOverridesHasInstance):
56         (JSC::FTL::DFG::LowerDFGToB3::isBoolean):
57         (JSC::FTL::DFG::LowerDFGToB3::unboxBoolean):
58         (JSC::FTL::DFG::LowerDFGToB3::emitStoreBarrier):
59         (JSC::FTL::lowerDFGToB3):
60         (JSC::FTL::DFG::LowerDFGToLLVM::LowerDFGToLLVM): Deleted.
61         (JSC::FTL::DFG::LowerDFGToLLVM::compileBlock): Deleted.
62         (JSC::FTL::DFG::LowerDFGToLLVM::compileArithNegate): Deleted.
63         (JSC::FTL::DFG::LowerDFGToLLVM::compileMultiGetByOffset): Deleted.
64         (JSC::FTL::DFG::LowerDFGToLLVM::compileOverridesHasInstance): Deleted.
65         (JSC::FTL::DFG::LowerDFGToLLVM::isBoolean): Deleted.
66         (JSC::FTL::DFG::LowerDFGToLLVM::unboxBoolean): Deleted.
67         (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): Deleted.
68         (JSC::FTL::lowerDFGToLLVM): Deleted.
69         * ftl/FTLLowerDFGToB3.h: Copied from Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.h.
70         * ftl/FTLLowerDFGToLLVM.cpp: Removed.
71         * ftl/FTLLowerDFGToLLVM.h: Removed.
72         * ftl/FTLOSRExitCompiler.cpp:
73         (JSC::FTL::compileStub):
74         * ftl/FTLWeight.h:
75         (JSC::FTL::Weight::frequencyClass):
76         (JSC::FTL::Weight::inverse):
77         (JSC::FTL::Weight::scaleToTotal): Deleted.
78         * ftl/FTLWeightedTarget.h:
79         (JSC::FTL::rarely):
80         (JSC::FTL::unsure):
81         * jit/CallFrameShuffler64.cpp:
82         (JSC::CallFrameShuffler::emitDisplace):
83         * jit/RegisterSet.cpp:
84         (JSC::RegisterSet::ftlCalleeSaveRegisters):
85         * llvm: Removed.
86         * llvm/InitializeLLVMLinux.cpp: Removed.
87         * llvm/InitializeLLVMWin.cpp: Removed.
88         * llvm/library: Removed.
89         * llvm/library/LLVMTrapCallback.h: Removed.
90         * llvm/library/libllvmForJSC.version: Removed.
91         * runtime/Options.cpp:
92         (JSC::recomputeDependentOptions):
93         (JSC::Options::initialize):
94         * runtime/Options.h:
95         * wasm/WASMFunctionB3IRGenerator.h: Copied from Source/JavaScriptCore/wasm/WASMFunctionLLVMIRGenerator.h.
96         * wasm/WASMFunctionLLVMIRGenerator.h: Removed.
97         * wasm/WASMFunctionParser.cpp:
98
99 2016-02-18  Csaba Osztrogonác  <ossy@webkit.org>
100
101         [cmake] Build system cleanup
102         https://bugs.webkit.org/show_bug.cgi?id=154337
103
104         Reviewed by Žan Doberšek.
105
106         * CMakeLists.txt:
107
108 2016-02-17  Mark Lam  <mark.lam@apple.com>
109
110         Callers of JSString::value() should check for exceptions thereafter.
111         https://bugs.webkit.org/show_bug.cgi?id=154346
112
113         Reviewed by Geoffrey Garen.
114
115         JSString::value() can throw an exception if the JS string is a rope and value() 
116         needs to resolve the rope but encounters an OutOfMemory error.  If value() is not
117         able to resolve the rope, it will return a null string (in addition to throwing
118         the exception).  If a caller does not check for exceptions after calling
119         JSString::value(), they may eventually use the returned null string and crash the
120         VM.
121
122         The fix is to add all the necessary exception checks, and do the appropriate
123         handling if needed.
124
125         * jsc.cpp:
126         (functionRun):
127         (functionLoad):
128         (functionReadFile):
129         (functionCheckSyntax):
130         (functionLoadWebAssembly):
131         (functionLoadModule):
132         (functionCheckModuleSyntax):
133         * runtime/DateConstructor.cpp:
134         (JSC::dateParse):
135         (JSC::dateNow):
136         * runtime/JSGlobalObjectFunctions.cpp:
137         (JSC::globalFuncEval):
138         * tools/JSDollarVMPrototype.cpp:
139         (JSC::functionPrint):
140
141 2016-02-17  Benjamin Poulain  <bpoulain@apple.com>
142
143         [JSC] ARM64: Support the immediate format used for bit operations in Air
144         https://bugs.webkit.org/show_bug.cgi?id=154327
145
146         Reviewed by Filip Pizlo.
147
148         ARM64 supports a pretty rich form of immediates for bit operation.
149         There are two formats used to encode repeating patterns and common
150         input in a dense form.
151
152         In this patch, I add 2 new type of Arg: BitImm32 and BitImm64.
153         Those represents the valid immediate forms for bit operation.
154         On x86, any 32bits value is valid. On ARM64, all the encoding
155         form are tried and the immediate is used when possible.
156
157         The arg type Imm64 is renamed to BigImm to better represent what
158         it is: an immediate that does not fit into Imm.
159
160         * assembler/ARM64Assembler.h:
161         (JSC::LogicalImmediate::create32): Deleted.
162         (JSC::LogicalImmediate::create64): Deleted.
163         (JSC::LogicalImmediate::value): Deleted.
164         (JSC::LogicalImmediate::isValid): Deleted.
165         (JSC::LogicalImmediate::is64bit): Deleted.
166         (JSC::LogicalImmediate::LogicalImmediate): Deleted.
167         (JSC::LogicalImmediate::mask): Deleted.
168         (JSC::LogicalImmediate::partialHSB): Deleted.
169         (JSC::LogicalImmediate::highestSetBit): Deleted.
170         (JSC::LogicalImmediate::findBitRange): Deleted.
171         (JSC::LogicalImmediate::encodeLogicalImmediate): Deleted.
172         * assembler/AssemblerCommon.h:
173         (JSC::ARM64LogicalImmediate::create32):
174         (JSC::ARM64LogicalImmediate::create64):
175         (JSC::ARM64LogicalImmediate::value):
176         (JSC::ARM64LogicalImmediate::isValid):
177         (JSC::ARM64LogicalImmediate::is64bit):
178         (JSC::ARM64LogicalImmediate::ARM64LogicalImmediate):
179         (JSC::ARM64LogicalImmediate::mask):
180         (JSC::ARM64LogicalImmediate::partialHSB):
181         (JSC::ARM64LogicalImmediate::highestSetBit):
182         (JSC::ARM64LogicalImmediate::findBitRange):
183         (JSC::ARM64LogicalImmediate::encodeLogicalImmediate):
184         * assembler/MacroAssemblerARM64.h:
185         (JSC::MacroAssemblerARM64::and64):
186         (JSC::MacroAssemblerARM64::or64):
187         (JSC::MacroAssemblerARM64::xor64):
188         * b3/B3LowerToAir.cpp:
189         (JSC::B3::Air::LowerToAir::bitImm):
190         (JSC::B3::Air::LowerToAir::bitImm64):
191         (JSC::B3::Air::LowerToAir::appendBinOp):
192         * b3/air/AirArg.cpp:
193         (JSC::B3::Air::Arg::dump):
194         (WTF::printInternal):
195         * b3/air/AirArg.h:
196         (JSC::B3::Air::Arg::bitImm):
197         (JSC::B3::Air::Arg::bitImm64):
198         (JSC::B3::Air::Arg::isBitImm):
199         (JSC::B3::Air::Arg::isBitImm64):
200         (JSC::B3::Air::Arg::isSomeImm):
201         (JSC::B3::Air::Arg::value):
202         (JSC::B3::Air::Arg::isGP):
203         (JSC::B3::Air::Arg::isFP):
204         (JSC::B3::Air::Arg::hasType):
205         (JSC::B3::Air::Arg::isValidBitImmForm):
206         (JSC::B3::Air::Arg::isValidBitImm64Form):
207         (JSC::B3::Air::Arg::isValidForm):
208         (JSC::B3::Air::Arg::asTrustedImm32):
209         (JSC::B3::Air::Arg::asTrustedImm64):
210         * b3/air/AirOpcode.opcodes:
211         * b3/air/opcode_generator.rb:
212
213 2016-02-17  Keith Miller  <keith_miller@apple.com>
214
215         Spread operator should be allowed when not the first argument of parameter list
216         https://bugs.webkit.org/show_bug.cgi?id=152721
217
218         Reviewed by Saam Barati.
219
220         Spread arguments to functions should now be ES6 compliant. Before we
221         would only take a spread operator if it was the sole argument to a
222         function. Additionally, we would not use the Symbol.iterator on the
223         object to generate the arguments. Instead we would do a loop up to the
224         length mapping indexed properties to the corresponding argument. We fix
225         both these issues by doing an AST transformation from foo(...a, b, ...c, d)
226         to foo(...[...a, b, ...c, d]) (where the spread on the rhs uses the
227         old spread semantics). This solution has the downside of requiring the
228         allocation of another object and copying each element twice but avoids a
229         large change to the vm calling convention.
230
231         * interpreter/Interpreter.cpp:
232         (JSC::loadVarargs):
233         * parser/ASTBuilder.h:
234         (JSC::ASTBuilder::createElementList):
235         * parser/Parser.cpp:
236         (JSC::Parser<LexerType>::parseArguments):
237         (JSC::Parser<LexerType>::parseArgument):
238         (JSC::Parser<LexerType>::parseMemberExpression):
239         * parser/Parser.h:
240         * parser/SyntaxChecker.h:
241         (JSC::SyntaxChecker::createElementList):
242         * tests/es6.yaml:
243         * tests/stress/spread-calling.js: Added.
244         (testFunction):
245         (testEmpty):
246         (makeObject):
247         (otherIterator.return.next):
248         (otherIterator):
249         (totalIter):
250         (throwingIter.return.next):
251         (throwingIter):
252         (i.catch):
253
254 2016-02-17  Brian Burg  <bburg@apple.com>
255
256         Remove a wrong cast in RemoteInspector::receivedSetupMessage
257         https://bugs.webkit.org/show_bug.cgi?id=154361
258         <rdar://problem/24709281>
259
260         Reviewed by Joseph Pecoraro.
261
262         * inspector/remote/RemoteInspector.mm:
263         (Inspector::RemoteInspector::receivedSetupMessage):
264         Not only is this cast unnecessary (the constructor accepts the base class),
265         but it is wrong since the target could be an automation target. Remove it.
266
267 2016-02-17  Filip Pizlo  <fpizlo@apple.com>
268
269         Rename FTLB3Blah to FTLBlah
270         https://bugs.webkit.org/show_bug.cgi?id=154365
271
272         Rubber stamped by Geoffrey Garen, Benjamin Poulain, Awesome Kling, and Saam Barati.
273
274         * CMakeLists.txt:
275         * JavaScriptCore.xcodeproj/project.pbxproj:
276         * ftl/FTLB3Compile.cpp: Removed.
277         * ftl/FTLB3Output.cpp: Removed.
278         * ftl/FTLB3Output.h: Removed.
279         * ftl/FTLCompile.cpp: Copied from Source/JavaScriptCore/ftl/FTLB3Compile.cpp.
280         * ftl/FTLOutput.cpp: Copied from Source/JavaScriptCore/ftl/FTLB3Output.cpp.
281         * ftl/FTLOutput.h: Copied from Source/JavaScriptCore/ftl/FTLB3Output.h.
282
283 2016-02-17  Filip Pizlo  <fpizlo@apple.com>
284
285         Remove LLVM dependencies from WebKit
286         https://bugs.webkit.org/show_bug.cgi?id=154323
287
288         Reviewed by Antti Koivisto and Benjamin Poulain.
289
290         We have switched all ports that use the FTL JIT to using B3 as the backend. This renders all
291         LLVM-related code dead, including the disassembler, which was only reachable when you were on
292         a platform that already had an in-tree disassembler.
293
294         * CMakeLists.txt:
295         * JavaScriptCore.xcodeproj/project.pbxproj:
296         * dfg/DFGCommon.h:
297         * dfg/DFGPlan.cpp:
298         (JSC::DFG::Plan::compileInThread):
299         (JSC::DFG::Plan::compileInThreadImpl):
300         (JSC::DFG::Plan::compileTimeStats):
301         * disassembler/ARM64Disassembler.cpp:
302         (JSC::tryToDisassemble):
303         * disassembler/ARMv7Disassembler.cpp:
304         (JSC::tryToDisassemble):
305         * disassembler/Disassembler.cpp:
306         (JSC::disassemble):
307         (JSC::disassembleAsynchronously):
308         * disassembler/Disassembler.h:
309         (JSC::tryToDisassemble):
310         * disassembler/LLVMDisassembler.cpp: Removed.
311         * disassembler/LLVMDisassembler.h: Removed.
312         * disassembler/UDis86Disassembler.cpp:
313         (JSC::tryToDisassembleWithUDis86):
314         * disassembler/UDis86Disassembler.h:
315         (JSC::tryToDisassembleWithUDis86):
316         * disassembler/X86Disassembler.cpp:
317         (JSC::tryToDisassemble):
318         * ftl/FTLAbbreviatedTypes.h:
319         * ftl/FTLAbbreviations.h: Removed.
320         * ftl/FTLAbstractHeap.cpp:
321         (JSC::FTL::AbstractHeap::decorateInstruction):
322         (JSC::FTL::AbstractHeap::dump):
323         (JSC::FTL::AbstractField::dump):
324         (JSC::FTL::IndexedAbstractHeap::IndexedAbstractHeap):
325         (JSC::FTL::IndexedAbstractHeap::~IndexedAbstractHeap):
326         (JSC::FTL::IndexedAbstractHeap::baseIndex):
327         (JSC::FTL::IndexedAbstractHeap::dump):
328         (JSC::FTL::NumberedAbstractHeap::NumberedAbstractHeap):
329         (JSC::FTL::NumberedAbstractHeap::dump):
330         (JSC::FTL::AbsoluteAbstractHeap::AbsoluteAbstractHeap):
331         (JSC::FTL::AbstractHeap::tbaaMetadataSlow): Deleted.
332         * ftl/FTLAbstractHeap.h:
333         (JSC::FTL::AbstractHeap::AbstractHeap):
334         (JSC::FTL::AbstractHeap::heapName):
335         (JSC::FTL::IndexedAbstractHeap::atAnyIndex):
336         (JSC::FTL::NumberedAbstractHeap::atAnyNumber):
337         (JSC::FTL::AbsoluteAbstractHeap::atAnyAddress):
338         (JSC::FTL::AbstractHeap::tbaaMetadata): Deleted.
339         * ftl/FTLAbstractHeapRepository.cpp:
340         (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
341         * ftl/FTLAbstractHeapRepository.h:
342         * ftl/FTLB3Compile.cpp:
343         * ftl/FTLB3Output.cpp:
344         (JSC::FTL::Output::Output):
345         (JSC::FTL::Output::check):
346         (JSC::FTL::Output::load):
347         (JSC::FTL::Output::store):
348         * ftl/FTLB3Output.h:
349         * ftl/FTLCommonValues.cpp:
350         (JSC::FTL::CommonValues::CommonValues):
351         (JSC::FTL::CommonValues::initializeConstants):
352         * ftl/FTLCommonValues.h:
353         (JSC::FTL::CommonValues::initialize): Deleted.
354         * ftl/FTLCompile.cpp: Removed.
355         * ftl/FTLCompileBinaryOp.cpp: Removed.
356         * ftl/FTLCompileBinaryOp.h: Removed.
357         * ftl/FTLDWARFDebugLineInfo.cpp: Removed.
358         * ftl/FTLDWARFDebugLineInfo.h: Removed.
359         * ftl/FTLDWARFRegister.cpp: Removed.
360         * ftl/FTLDWARFRegister.h: Removed.
361         * ftl/FTLDataSection.cpp: Removed.
362         * ftl/FTLDataSection.h: Removed.
363         * ftl/FTLExceptionHandlerManager.cpp: Removed.
364         * ftl/FTLExceptionHandlerManager.h: Removed.
365         * ftl/FTLExceptionTarget.cpp:
366         * ftl/FTLExceptionTarget.h:
367         * ftl/FTLExitThunkGenerator.cpp: Removed.
368         * ftl/FTLExitThunkGenerator.h: Removed.
369         * ftl/FTLFail.cpp:
370         (JSC::FTL::fail):
371         * ftl/FTLInlineCacheDescriptor.h: Removed.
372         * ftl/FTLInlineCacheSize.cpp: Removed.
373         * ftl/FTLInlineCacheSize.h: Removed.
374         * ftl/FTLIntrinsicRepository.cpp: Removed.
375         * ftl/FTLIntrinsicRepository.h: Removed.
376         * ftl/FTLJITCode.cpp:
377         (JSC::FTL::JITCode::~JITCode):
378         (JSC::FTL::JITCode::initializeB3Code):
379         (JSC::FTL::JITCode::initializeB3Byproducts):
380         (JSC::FTL::JITCode::initializeAddressForCall):
381         (JSC::FTL::JITCode::contains):
382         (JSC::FTL::JITCode::ftl):
383         (JSC::FTL::JITCode::liveRegistersToPreserveAtExceptionHandlingCallSite):
384         (JSC::FTL::JITCode::initializeExitThunks): Deleted.
385         (JSC::FTL::JITCode::addHandle): Deleted.
386         (JSC::FTL::JITCode::addDataSection): Deleted.
387         (JSC::FTL::JITCode::exitThunks): Deleted.
388         * ftl/FTLJITCode.h:
389         (JSC::FTL::JITCode::b3Code):
390         (JSC::FTL::JITCode::handles): Deleted.
391         (JSC::FTL::JITCode::dataSections): Deleted.
392         * ftl/FTLJITFinalizer.cpp:
393         (JSC::FTL::JITFinalizer::codeSize):
394         (JSC::FTL::JITFinalizer::finalizeFunction):
395         * ftl/FTLJITFinalizer.h:
396         * ftl/FTLJSCall.cpp: Removed.
397         * ftl/FTLJSCall.h: Removed.
398         * ftl/FTLJSCallBase.cpp: Removed.
399         * ftl/FTLJSCallBase.h: Removed.
400         * ftl/FTLJSCallVarargs.cpp: Removed.
401         * ftl/FTLJSCallVarargs.h: Removed.
402         * ftl/FTLJSTailCall.cpp: Removed.
403         * ftl/FTLJSTailCall.h: Removed.
404         * ftl/FTLLazySlowPath.cpp:
405         (JSC::FTL::LazySlowPath::LazySlowPath):
406         (JSC::FTL::LazySlowPath::generate):
407         * ftl/FTLLazySlowPath.h:
408         (JSC::FTL::LazySlowPath::createGenerator):
409         (JSC::FTL::LazySlowPath::patchableJump):
410         (JSC::FTL::LazySlowPath::done):
411         (JSC::FTL::LazySlowPath::usedRegisters):
412         (JSC::FTL::LazySlowPath::callSiteIndex):
413         (JSC::FTL::LazySlowPath::stub):
414         (JSC::FTL::LazySlowPath::patchpoint): Deleted.
415         * ftl/FTLLink.cpp:
416         (JSC::FTL::link):
417         * ftl/FTLLocation.cpp:
418         (JSC::FTL::Location::forValueRep):
419         (JSC::FTL::Location::dump):
420         (JSC::FTL::Location::forStackmaps): Deleted.
421         * ftl/FTLLocation.h:
422         (JSC::FTL::Location::forRegister):
423         (JSC::FTL::Location::forIndirect):
424         (JSC::FTL::Location::forConstant):
425         (JSC::FTL::Location::kind):
426         (JSC::FTL::Location::hasReg):
427         * ftl/FTLLowerDFGToLLVM.cpp:
428         (JSC::FTL::DFG::LowerDFGToLLVM::LowerDFGToLLVM):
429         (JSC::FTL::DFG::LowerDFGToLLVM::lower):
430         (JSC::FTL::DFG::LowerDFGToLLVM::createPhiVariables):
431         (JSC::FTL::DFG::LowerDFGToLLVM::compileNode):
432         (JSC::FTL::DFG::LowerDFGToLLVM::compileUpsilon):
433         (JSC::FTL::DFG::LowerDFGToLLVM::compilePhi):
434         (JSC::FTL::DFG::LowerDFGToLLVM::compileDoubleConstant):
435         (JSC::FTL::DFG::LowerDFGToLLVM::compileValueAdd):
436         (JSC::FTL::DFG::LowerDFGToLLVM::compileStrCat):
437         (JSC::FTL::DFG::LowerDFGToLLVM::compileArithAddOrSub):
438         (JSC::FTL::DFG::LowerDFGToLLVM::compileArithMul):
439         (JSC::FTL::DFG::LowerDFGToLLVM::compileArithDiv):
440         (JSC::FTL::DFG::LowerDFGToLLVM::compileArithNegate):
441         (JSC::FTL::DFG::LowerDFGToLLVM::compileBitAnd):
442         (JSC::FTL::DFG::LowerDFGToLLVM::compileBitOr):
443         (JSC::FTL::DFG::LowerDFGToLLVM::compileBitXor):
444         (JSC::FTL::DFG::LowerDFGToLLVM::compileBitRShift):
445         (JSC::FTL::DFG::LowerDFGToLLVM::compileBitLShift):
446         (JSC::FTL::DFG::LowerDFGToLLVM::compileBitURShift):
447         (JSC::FTL::DFG::LowerDFGToLLVM::compilePutById):
448         (JSC::FTL::DFG::LowerDFGToLLVM::compileGetButterfly):
449         (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope):
450         (JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstruct):
451         (JSC::FTL::DFG::LowerDFGToLLVM::compileTailCall):
452         (JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstructVarargs):
453         (JSC::FTL::DFG::LowerDFGToLLVM::compileLoadVarargs):
454         (JSC::FTL::DFG::LowerDFGToLLVM::compileInvalidationPoint):
455         (JSC::FTL::DFG::LowerDFGToLLVM::compileIsUndefined):
456         (JSC::FTL::DFG::LowerDFGToLLVM::compileIn):
457         (JSC::FTL::DFG::LowerDFGToLLVM::getById):
458         (JSC::FTL::DFG::LowerDFGToLLVM::loadButterflyWithBarrier):
459         (JSC::FTL::DFG::LowerDFGToLLVM::stringsEqual):
460         (JSC::FTL::DFG::LowerDFGToLLVM::emitRightShiftSnippet):
461         (JSC::FTL::DFG::LowerDFGToLLVM::allocateCell):
462         (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath):
463         (JSC::FTL::DFG::LowerDFGToLLVM::speculate):
464         (JSC::FTL::DFG::LowerDFGToLLVM::callCheck):
465         (JSC::FTL::DFG::LowerDFGToLLVM::preparePatchpointForExceptions):
466         (JSC::FTL::DFG::LowerDFGToLLVM::lowBlock):
467         (JSC::FTL::DFG::LowerDFGToLLVM::appendOSRExitDescriptor):
468         (JSC::FTL::DFG::LowerDFGToLLVM::appendOSRExit):
469         (JSC::FTL::DFG::LowerDFGToLLVM::blessSpeculation):
470         (JSC::FTL::DFG::LowerDFGToLLVM::buildExitArguments):
471         (JSC::FTL::DFG::LowerDFGToLLVM::exitValueForAvailability):
472         (JSC::FTL::DFG::LowerDFGToLLVM::exitValueForNode):
473         (JSC::FTL::DFG::LowerDFGToLLVM::probe):
474         (JSC::FTL::DFG::LowerDFGToLLVM::crash):
475         (JSC::FTL::DFG::LowerDFGToLLVM::compileUntypedBinaryOp): Deleted.
476         (JSC::FTL::DFG::LowerDFGToLLVM::appendOSRExitArgumentsForPatchpointIfWillCatchException): Deleted.
477         (JSC::FTL::DFG::LowerDFGToLLVM::emitOSRExitCall): Deleted.
478         (JSC::FTL::DFG::LowerDFGToLLVM::callStackmap): Deleted.
479         * ftl/FTLOSRExit.cpp:
480         (JSC::FTL::OSRExitDescriptor::OSRExitDescriptor):
481         (JSC::FTL::OSRExitDescriptor::validateReferences):
482         (JSC::FTL::OSRExitDescriptor::emitOSRExit):
483         (JSC::FTL::OSRExitDescriptor::prepareOSRExitHandle):
484         (JSC::FTL::OSRExit::OSRExit):
485         (JSC::FTL::OSRExit::codeLocationForRepatch):
486         (JSC::FTL::OSRExit::gatherRegistersToSpillForCallIfException): Deleted.
487         (JSC::FTL::OSRExit::spillRegistersToSpillSlot): Deleted.
488         (JSC::FTL::OSRExit::recoverRegistersFromSpillSlot): Deleted.
489         (JSC::FTL::OSRExit::willArriveAtExitFromIndirectExceptionCheck): Deleted.
490         (JSC::FTL::OSRExit::willArriveAtOSRExitFromCallOperation): Deleted.
491         (JSC::FTL::OSRExit::needsRegisterRecoveryOnGenericUnwindOSRExitPath): Deleted.
492         * ftl/FTLOSRExit.h:
493         (JSC::FTL::OSRExit::considerAddingAsFrequentExitSite):
494         (JSC::FTL::OSRExitDescriptorImpl::OSRExitDescriptorImpl): Deleted.
495         * ftl/FTLOSRExitCompilationInfo.h: Removed.
496         * ftl/FTLOSRExitCompiler.cpp:
497         (JSC::FTL::compileRecovery):
498         (JSC::FTL::compileStub):
499         (JSC::FTL::compileFTLOSRExit):
500         * ftl/FTLOSRExitHandle.cpp:
501         * ftl/FTLOSRExitHandle.h:
502         * ftl/FTLOutput.cpp: Removed.
503         * ftl/FTLOutput.h: Removed.
504         * ftl/FTLPatchpointExceptionHandle.cpp:
505         * ftl/FTLPatchpointExceptionHandle.h:
506         * ftl/FTLStackMaps.cpp: Removed.
507         * ftl/FTLStackMaps.h: Removed.
508         * ftl/FTLState.cpp:
509         (JSC::FTL::State::State):
510         (JSC::FTL::State::~State):
511         (JSC::FTL::State::dumpState): Deleted.
512         * ftl/FTLState.h:
513         * ftl/FTLUnwindInfo.cpp: Removed.
514         * ftl/FTLUnwindInfo.h: Removed.
515         * ftl/FTLValueRange.cpp:
516         (JSC::FTL::ValueRange::decorateInstruction):
517         * ftl/FTLValueRange.h:
518         (JSC::FTL::ValueRange::ValueRange):
519         (JSC::FTL::ValueRange::begin):
520         (JSC::FTL::ValueRange::end):
521         * ftl/FTLWeight.h:
522         (JSC::FTL::Weight::value):
523         (JSC::FTL::Weight::frequencyClass):
524         (JSC::FTL::Weight::scaleToTotal):
525         * llvm/InitializeLLVM.cpp: Removed.
526         * llvm/InitializeLLVM.h: Removed.
527         * llvm/InitializeLLVMMac.cpp: Removed.
528         * llvm/InitializeLLVMPOSIX.cpp: Removed.
529         * llvm/InitializeLLVMPOSIX.h: Removed.
530         * llvm/LLVMAPI.cpp: Removed.
531         * llvm/LLVMAPI.h: Removed.
532         * llvm/LLVMAPIFunctions.h: Removed.
533         * llvm/LLVMHeaders.h: Removed.
534         * llvm/library/LLVMAnchor.cpp: Removed.
535         * llvm/library/LLVMExports.cpp: Removed.
536         * llvm/library/LLVMOverrides.cpp: Removed.
537         * llvm/library/config_llvm.h: Removed.
538
539 2016-02-17  Benjamin Poulain  <bpoulain@apple.com>
540
541         [JSC] Remove the overflow check on ArithAbs when possible
542         https://bugs.webkit.org/show_bug.cgi?id=154325
543
544         Reviewed by Filip Pizlo.
545
546         This patch adds support for ArithMode for ArithAbs.
547
548         It is useful for kraken tests where Math.abs() is used
549         on values for which the range is known.
550
551         For example, imaging-gaussian-blur has two Math.abs() with
552         integers that are always in a small range around zero.
553         The IntegerRangeOptimizationPhase detects the range correctly
554         so we can just update the ArithMode depending on the input.
555
556         * dfg/DFGFixupPhase.cpp:
557         (JSC::DFG::FixupPhase::fixupNode):
558         * dfg/DFGIntegerRangeOptimizationPhase.cpp:
559         * dfg/DFGNode.h:
560         (JSC::DFG::Node::convertToArithNegate):
561         (JSC::DFG::Node::hasArithMode):
562         * dfg/DFGSpeculativeJIT64.cpp:
563         (JSC::DFG::SpeculativeJIT::compile):
564         * ftl/FTLLowerDFGToLLVM.cpp:
565         (JSC::FTL::DFG::LowerDFGToLLVM::compileArithAbs):
566         * tests/stress/arith-abs-integer-range-optimization.js: Added.
567         (negativeRange):
568         (negativeRangeIncludingZero):
569         (negativeRangeWithOverflow):
570         (positiveRange):
571         (positiveRangeIncludingZero):
572         (rangeWithoutOverflow):
573         * tests/stress/arith-abs-with-bitwise-or-zero.js: Added.
574         (opaqueAbs):
575
576 2016-02-17  Chris Dumez  <cdumez@apple.com>
577
578         SES selftest page crashes on nightly r196694
579         https://bugs.webkit.org/show_bug.cgi?id=154350
580         <rdar://problem/24704334>
581
582         Reviewed by Mark Lam.
583
584         SES selftest page crashes after r196001 / r196145 when calling
585         Object.getOwnPropertyDescriptor(window, "length") after the window
586         has been reified and "length" has been shadowed by a value property.
587
588         It was crashing in JSObject::getOwnPropertyDescriptor() because
589         we are getting a slot that has attribute "CustomAccessor" but
590         the property is not a CustomGetterSetter. In this case, since
591         window.length is [Replaceable] and has been set to a numeric value,
592         it makes that the property is not a CustomGetterSetter. However,
593         the "CustomAccessor" attribute should have been dropped from the
594         slot when window.length was shadowed. Therefore, this code path
595         should not be exercised at all when calling
596         getOwnPropertyDescriptor().
597
598         The issue was that putDirectInternal() was updating the slot
599         attributes only if the "Accessor" flag has changed, but not
600         the "customAccessor" flag. This patch fixes the issue.
601
602         * runtime/JSObject.h:
603         (JSC::JSObject::putDirectInternal):
604
605 2016-02-17  Saam barati  <sbarati@apple.com>
606
607         Implement Proxy [[Get]]
608         https://bugs.webkit.org/show_bug.cgi?id=154081
609
610         Reviewed by Michael Saboff.
611
612         This patch implements ProxyObject and ProxyConstructor. Their
613         implementations are straight forward and follow the spec.
614         The largest change in this patch is adding a second parameter
615         to PropertySlot's constructor that specifies the internal method type of
616         the getOwnPropertySlot inquiry. We use getOwnPropertySlot to 
617         implement more than one Internal Method in the spec. Because 
618         of this, we need InternalMethodType to give us context about 
619         which Internal Method we're executing. Specifically, Proxy will 
620         call into different handlers based on this information.
621
622         InternalMethodType is an enum with the following values:
623         - Get
624           This corresponds to [[Get]] internal method in the spec.
625         - GetOwnProperty
626           This corresponds to [[GetOwnProperty]] internal method in the spec.
627         - HasProperty
628           This corresponds to [[HasProperty]] internal method in the spec.
629         - VMInquiry
630           This is basically everything else that isn't one of the above
631           types. This value also mandates that getOwnPropertySlot does
632           not perform any user observable effects. I.e, it can't call
633           a JS function.
634
635         The other non-VMInquiry InternalMethodTypes are allowed to perform user
636         observable effects. I.e, in future patches, ProxyObject will implement
637         InternalMethodType::HasProperty and InternalMethodType::GetOwnProperty, which will both be defined
638         to call user defined JS functions, which clearly have the right to perform
639         user observable effects.
640
641         This patch implements getOwnPropertySlot of ProxyObject under
642         InternalMethodType::Get. 
643
644         * API/JSCallbackObjectFunctions.h:
645         (JSC::JSCallbackObject<Parent>::put):
646         (JSC::JSCallbackObject<Parent>::staticFunctionGetter):
647         * CMakeLists.txt:
648         * JavaScriptCore.xcodeproj/project.pbxproj:
649         * debugger/DebuggerScope.cpp:
650         (JSC::DebuggerScope::caughtValue):
651         * interpreter/Interpreter.cpp:
652         (JSC::Interpreter::execute):
653         * jit/JITOperations.cpp:
654         * llint/LLIntSlowPaths.cpp:
655         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
656         * runtime/ArrayPrototype.cpp:
657         (JSC::getProperty):
658         * runtime/CommonIdentifiers.h:
659         * runtime/JSCJSValueInlines.h:
660         (JSC::JSValue::get):
661         * runtime/JSFunction.cpp:
662         (JSC::JSFunction::getOwnNonIndexPropertyNames):
663         (JSC::JSFunction::put):
664         (JSC::JSFunction::defineOwnProperty):
665         * runtime/JSGenericTypedArrayViewConstructorInlines.h:
666         (JSC::constructGenericTypedArrayViewWithArguments):
667         * runtime/JSGlobalObject.cpp:
668         (JSC::JSGlobalObject::init):
669         (JSC::JSGlobalObject::defineOwnProperty):
670         * runtime/JSGlobalObject.h:
671         (JSC::JSGlobalObject::regExpMatchesArrayStructure):
672         (JSC::JSGlobalObject::moduleRecordStructure):
673         (JSC::JSGlobalObject::moduleNamespaceObjectStructure):
674         (JSC::JSGlobalObject::proxyObjectStructure):
675         (JSC::JSGlobalObject::wasmModuleStructure):
676         * runtime/JSModuleEnvironment.cpp:
677         (JSC::JSModuleEnvironment::getOwnPropertySlot):
678         * runtime/JSModuleNamespaceObject.cpp:
679         (JSC::callbackGetter):
680         * runtime/JSONObject.cpp:
681         (JSC::Stringifier::Holder::appendNextProperty):
682         (JSC::Walker::walk):
683         * runtime/JSObject.cpp:
684         (JSC::JSObject::calculatedClassName):
685         (JSC::JSObject::putDirectNonIndexAccessor):
686         (JSC::JSObject::hasProperty):
687         (JSC::JSObject::deleteProperty):
688         (JSC::JSObject::hasOwnProperty):
689         (JSC::JSObject::getOwnPropertyDescriptor):
690         * runtime/JSObject.h:
691         (JSC::JSObject::getDirectIndex):
692         (JSC::JSObject::get):
693         * runtime/JSScope.cpp:
694         (JSC::abstractAccess):
695         * runtime/ObjectConstructor.cpp:
696         (JSC::toPropertyDescriptor):
697         * runtime/ObjectPrototype.cpp:
698         (JSC::objectProtoFuncLookupGetter):
699         (JSC::objectProtoFuncLookupSetter):
700         (JSC::objectProtoFuncToString):
701         * runtime/PropertySlot.h:
702         (JSC::attributesForStructure):
703         (JSC::PropertySlot::PropertySlot):
704         (JSC::PropertySlot::isCacheableGetter):
705         (JSC::PropertySlot::isCacheableCustom):
706         (JSC::PropertySlot::internalMethodType):
707         (JSC::PropertySlot::disableCaching):
708         (JSC::PropertySlot::getValue):
709         * runtime/ProxyConstructor.cpp: Added.
710         (JSC::ProxyConstructor::create):
711         (JSC::ProxyConstructor::ProxyConstructor):
712         (JSC::ProxyConstructor::finishCreation):
713         (JSC::constructProxyObject):
714         (JSC::ProxyConstructor::getConstructData):
715         (JSC::ProxyConstructor::getCallData):
716         * runtime/ProxyConstructor.h: Added.
717         (JSC::ProxyConstructor::createStructure):
718         * runtime/ProxyObject.cpp: Added.
719         (JSC::ProxyObject::ProxyObject):
720         (JSC::ProxyObject::finishCreation):
721         (JSC::performProxyGet):
722         (JSC::ProxyObject::getOwnPropertySlotCommon):
723         (JSC::ProxyObject::getOwnPropertySlot):
724         (JSC::ProxyObject::getOwnPropertySlotByIndex):
725         (JSC::ProxyObject::visitChildren):
726         * runtime/ProxyObject.h: Added.
727         (JSC::ProxyObject::create):
728         (JSC::ProxyObject::createStructure):
729         (JSC::ProxyObject::target):
730         (JSC::ProxyObject::handler):
731         * runtime/ReflectObject.cpp:
732         (JSC::reflectObjectGet):
733         * runtime/SamplingProfiler.cpp:
734         (JSC::SamplingProfiler::StackFrame::nameFromCallee):
735         * tests/es6.yaml:
736         * tests/stress/proxy-basic.js: Added.
737         (assert):
738         (let.handler.get null):
739         (get let):
740         (let.handler.get switch):
741         (let.handler):
742         (let.theTarget.get x):
743         * tests/stress/proxy-in-proto-chain.js: Added.
744         (assert):
745         * tests/stress/proxy-of-a-proxy.js: Added.
746         (assert):
747         (throw.new.Error.):
748         * tests/stress/proxy-property-descriptor.js: Added.
749         (assert):
750         (set Object):
751         * wasm/WASMModuleParser.cpp:
752         (JSC::WASMModuleParser::getImportedValue):
753
754 2016-02-17  Mark Lam  <mark.lam@apple.com>
755
756         StringPrototype functions should check for exceptions after calling JSString::value().
757         https://bugs.webkit.org/show_bug.cgi?id=154340
758
759         Reviewed by Filip Pizlo.
760
761         JSString::value() can throw an exception if the JS string is a rope and value()
762         needs to resolve the rope but encounters an OutOfMemory error.  If value() is not
763         able to resolve the rope, it will return a null string (in addition to throwing
764         the exception).  If StringPrototype functions do not check for exceptions after
765         calling JSString::value(), they may eventually use the returned null string and
766         crash the VM.
767
768         The fix is to add all the necessary exception checks, and do the appropriate
769         handling if needed.
770
771         Also in a few place where when an exception is detected, we return JSValue(), I
772         changed it to return jsUndefined() instead to be consistent with the rest of the
773         file.
774
775         * runtime/StringPrototype.cpp:
776         (JSC::replaceUsingRegExpSearch):
777         (JSC::stringProtoFuncMatch):
778         (JSC::stringProtoFuncSlice):
779         (JSC::stringProtoFuncSplit):
780         (JSC::stringProtoFuncLocaleCompare):
781         (JSC::stringProtoFuncBig):
782         (JSC::stringProtoFuncSmall):
783         (JSC::stringProtoFuncBlink):
784         (JSC::stringProtoFuncBold):
785         (JSC::stringProtoFuncFixed):
786         (JSC::stringProtoFuncItalics):
787         (JSC::stringProtoFuncStrike):
788         (JSC::stringProtoFuncSub):
789         (JSC::stringProtoFuncSup):
790         (JSC::stringProtoFuncFontcolor):
791         (JSC::stringProtoFuncFontsize):
792         (JSC::stringProtoFuncAnchor):
793         (JSC::stringProtoFuncLink):
794         (JSC::trimString):
795
796 2016-02-17  Commit Queue  <commit-queue@webkit.org>
797
798         Unreviewed, rolling out r196675.
799         https://bugs.webkit.org/show_bug.cgi?id=154344
800
801          "Causes major slowdowns on deltablue-varargs" (Requested by
802         keith_miller on #webkit).
803
804         Reverted changeset:
805
806         "Spread operator should be allowed when not the first argument
807         of parameter list"
808         https://bugs.webkit.org/show_bug.cgi?id=152721
809         http://trac.webkit.org/changeset/196675
810
811 2016-02-17  Gavin Barraclough  <barraclough@apple.com>
812
813         JSDOMWindow::put should not do the same thing twice
814         https://bugs.webkit.org/show_bug.cgi?id=154334
815
816         Reviewed by Chris Dumez.
817
818         It either calls JSGlobalObject::put or Base::put. Hint: these are basically the same thing.
819         In the latter case it might call lookupPut. That's redundant; JSObject::put handles static
820         table entries.
821
822         * runtime/JSGlobalObject.h:
823         (JSC::JSGlobalObject::hasOwnPropertyForWrite): Deleted.
824             - no longer needed.
825
826 2016-02-16  Filip Pizlo  <fpizlo@apple.com>
827
828         FTL_USES_B3 should be unconditionally true
829         https://bugs.webkit.org/show_bug.cgi?id=154324
830
831         Reviewed by Benjamin Poulain.
832
833         * dfg/DFGCommon.h:
834
835 2016-02-16  Filip Pizlo  <fpizlo@apple.com>
836
837         FTL should support CompareEq(String:, String:)
838         https://bugs.webkit.org/show_bug.cgi?id=154269
839         rdar://problem/24499921
840
841         Reviewed by Benjamin Poulain.
842
843         Looks like a slight pdfjs slow-down, probably because we're having some recompilations. I
844         think we should land the increased coverage first and fix the issues after, especially since
845         the regression is so small and doesn't have a statistically significant effect on the overall
846         score.
847
848         * ftl/FTLCapabilities.cpp:
849         (JSC::FTL::canCompile):
850         * ftl/FTLLowerDFGToLLVM.cpp:
851         (JSC::FTL::DFG::LowerDFGToLLVM::compileCompareEq):
852         (JSC::FTL::DFG::LowerDFGToLLVM::compileCompareStrictEq):
853         (JSC::FTL::DFG::LowerDFGToLLVM::nonSpeculativeCompare):
854         (JSC::FTL::DFG::LowerDFGToLLVM::stringsEqual):
855         * tests/stress/ftl-string-equality.js: Added.
856         * tests/stress/ftl-string-ident-equality.js: Added.
857         * tests/stress/ftl-string-strict-equality.js: Added.
858
859 2016-02-16  Filip Pizlo  <fpizlo@apple.com>
860
861         FTL should support NewTypedArray
862         https://bugs.webkit.org/show_bug.cgi?id=154268
863
864         Reviewed by Saam Barati.
865
866         3% speed-up on pdfjs. This was already covered by many different tests.
867
868         Rolling this back in after fixing the butterfly argument.
869
870         * ftl/FTLCapabilities.cpp:
871         (JSC::FTL::canCompile):
872         * ftl/FTLLowerDFGToLLVM.cpp:
873         (JSC::FTL::DFG::LowerDFGToLLVM::compileNode):
874         (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize):
875         (JSC::FTL::DFG::LowerDFGToLLVM::compileNewTypedArray):
876         (JSC::FTL::DFG::LowerDFGToLLVM::compileAllocatePropertyStorage):
877         (JSC::FTL::DFG::LowerDFGToLLVM::allocateBasicStorageAndGetEnd):
878         (JSC::FTL::DFG::LowerDFGToLLVM::allocateBasicStorage):
879         (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject):
880
881 2016-02-16  Gavin Barraclough  <barraclough@apple.com>
882
883         JSDOMWindow::getOwnPropertySlot should just call getStaticPropertySlot
884         https://bugs.webkit.org/show_bug.cgi?id=154257
885
886         Reviewed by Chris Dumez.
887
888         * runtime/Lookup.h:
889         (JSC::getStaticPropertySlot):
890         (JSC::getStaticFunctionSlot):
891         (JSC::getStaticValueSlot):
892             - this could all do with a little more love.
893               But enforce the basic precedence:
894                 (1) regular storage properties always win over static table properties.
895                 (2) if properties have been reified, don't consult the static tables.
896                 (3) only if the property is not present on the object & not reified
897                     should the static hashtable be consulted.
898
899 2016-02-16  Gavin Barraclough  <barraclough@apple.com>
900
901         JSDOMWindow::getOwnPropertySlot should not search photo chain
902         https://bugs.webkit.org/show_bug.cgi?id=154102
903
904         Reviewed by Chris Dumez.
905
906         Should only return *own* properties.
907
908         * runtime/JSObject.cpp:
909         (JSC::JSObject::getOwnPropertyDescriptor):
910             - remove hack/special-case for DOMWindow; we no longer need this.
911
912 2016-02-16  Keith Miller  <keith_miller@apple.com>
913
914         Spread operator should be allowed when not the first argument of parameter list
915         https://bugs.webkit.org/show_bug.cgi?id=152721
916
917         Reviewed by Saam Barati.
918
919         Spread arguments to functions should now be ES6 compliant. Before we
920         would only take a spread operator if it was the sole argument to a
921         function. Additionally, we would not use the Symbol.iterator on the
922         object to generate the arguments. Instead we would do a loop up to the
923         length mapping indexed properties to the corresponding argument. We fix
924         both these issues by doing an AST transformation from foo(...a, b, ...c, d)
925         to foo(...[...a, b, ...c, d]) (where the spread on the rhs uses the
926         old spread semantics). This solution has the downside of requiring the
927         allocation of another object and copying each element twice but avoids a
928         large change to the vm calling convention.
929
930         * interpreter/Interpreter.cpp:
931         (JSC::loadVarargs):
932         * parser/ASTBuilder.h:
933         (JSC::ASTBuilder::createElementList):
934         * parser/Parser.cpp:
935         (JSC::Parser<LexerType>::parseArguments):
936         (JSC::Parser<LexerType>::parseArgument):
937         (JSC::Parser<LexerType>::parseMemberExpression):
938         * parser/Parser.h:
939         * parser/SyntaxChecker.h:
940         (JSC::SyntaxChecker::createElementList):
941         * tests/es6.yaml:
942         * tests/stress/spread-calling.js: Added.
943         (testFunction):
944         (testEmpty):
945         (makeObject):
946         (otherIterator.return.next):
947         (otherIterator):
948         (totalIter):
949         (throwingIter.return.next):
950         (throwingIter):
951         (i.catch):
952
953 2016-02-16  Benjamin Poulain  <bpoulain@apple.com>
954
955         [JSC] Enable B3 on ARM64
956         https://bugs.webkit.org/show_bug.cgi?id=154275
957
958         Reviewed by Mark Lam.
959
960         The port passes more tests than LLVM now, let's use it by default.
961
962         * dfg/DFGCommon.h:
963
964 2016-02-16  Commit Queue  <commit-queue@webkit.org>
965
966         Unreviewed, rolling out r196652.
967         https://bugs.webkit.org/show_bug.cgi?id=154315
968
969         This change caused LayoutTest crashes (Requested by ryanhaddad
970         on #webkit).
971
972         Reverted changeset:
973
974         "FTL should support NewTypedArray"
975         https://bugs.webkit.org/show_bug.cgi?id=154268
976         http://trac.webkit.org/changeset/196652
977
978 2016-02-16  Brian Burg  <bburg@apple.com>
979
980         RemoteInspector should forward new automation session requests to its client
981         https://bugs.webkit.org/show_bug.cgi?id=154260
982         <rdar://problem/24663313>
983
984         Reviewed by Timothy Hatcher.
985
986         * inspector/remote/RemoteInspector.h:
987         * inspector/remote/RemoteInspector.mm:
988         (Inspector::RemoteInspector::xpcConnectionReceivedMessage):
989         (Inspector::RemoteInspector::listingForAutomationTarget):
990         Use the correct key for the session identifier in the listing. The name()
991         override for RemoteAutomationTarget is actually the session identifier.
992
993         (Inspector::RemoteInspector::receivedAutomationSessionRequestMessage):
994         * inspector/remote/RemoteInspectorConstants.h: Add new constants.
995
996 2016-02-16  Saam barati  <sbarati@apple.com>
997
998         SamplingProfiler still fails with ASan enabled
999         https://bugs.webkit.org/show_bug.cgi?id=154301
1000         <rdar://problem/24679502>
1001
1002         Reviewed by Filip Pizlo.
1003
1004         To fix this issue, I've come up with unsafe versions
1005         of all operations that load memory from the thread's call
1006         frame. All these new unsafe methods are marked with SUPPRESS_ASAN.
1007
1008         * interpreter/CallFrame.cpp:
1009         (JSC::CallFrame::callSiteAsRawBits):
1010         (JSC::CallFrame::unsafeCallSiteAsRawBits):
1011         (JSC::CallFrame::callSiteIndex):
1012         (JSC::CallFrame::unsafeCallSiteIndex):
1013         (JSC::CallFrame::stack):
1014         (JSC::CallFrame::callerFrame):
1015         (JSC::CallFrame::unsafeCallerFrame):
1016         (JSC::CallFrame::friendlyFunctionName):
1017         * interpreter/CallFrame.h:
1018         (JSC::ExecState::calleeAsValue):
1019         (JSC::ExecState::callee):
1020         (JSC::ExecState::unsafeCallee):
1021         (JSC::ExecState::codeBlock):
1022         (JSC::ExecState::unsafeCodeBlock):
1023         (JSC::ExecState::scope):
1024         (JSC::ExecState::callerFrame):
1025         (JSC::ExecState::callerFrameOrVMEntryFrame):
1026         (JSC::ExecState::unsafeCallerFrameOrVMEntryFrame):
1027         (JSC::ExecState::callerFrameOffset):
1028         (JSC::ExecState::callerFrameAndPC):
1029         (JSC::ExecState::unsafeCallerFrameAndPC):
1030         * interpreter/Register.h:
1031         (JSC::Register::codeBlock):
1032         (JSC::Register::asanUnsafeCodeBlock):
1033         (JSC::Register::unboxedInt32):
1034         (JSC::Register::tag):
1035         (JSC::Register::unsafeTag):
1036         (JSC::Register::payload):
1037         * interpreter/VMEntryRecord.h:
1038         (JSC::VMEntryRecord::prevTopCallFrame):
1039         (JSC::VMEntryRecord::unsafePrevTopCallFrame):
1040         (JSC::VMEntryRecord::prevTopVMEntryFrame):
1041         (JSC::VMEntryRecord::unsafePrevTopVMEntryFrame):
1042         * runtime/SamplingProfiler.cpp:
1043         (JSC::FrameWalker::walk):
1044         (JSC::FrameWalker::advanceToParentFrame):
1045         (JSC::FrameWalker::isAtTop):
1046         (JSC::FrameWalker::resetAtMachineFrame):
1047
1048 2016-02-16  Filip Pizlo  <fpizlo@apple.com>
1049
1050         FTL should support NewTypedArray
1051         https://bugs.webkit.org/show_bug.cgi?id=154268
1052
1053         Reviewed by Saam Barati.
1054
1055         3% speed-up on pdfjs. This was already covered by many different tests.
1056
1057         * ftl/FTLCapabilities.cpp:
1058         (JSC::FTL::canCompile):
1059         * ftl/FTLLowerDFGToLLVM.cpp:
1060         (JSC::FTL::DFG::LowerDFGToLLVM::compileNode):
1061         (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize):
1062         (JSC::FTL::DFG::LowerDFGToLLVM::compileNewTypedArray):
1063         (JSC::FTL::DFG::LowerDFGToLLVM::compileAllocatePropertyStorage):
1064         (JSC::FTL::DFG::LowerDFGToLLVM::allocateBasicStorageAndGetEnd):
1065         (JSC::FTL::DFG::LowerDFGToLLVM::allocateBasicStorage):
1066         (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject):
1067
1068 2016-02-16  Saam barati  <sbarati@apple.com>
1069
1070         stress/sampling-profiler-deep-stack.js fails on ARM 32bit
1071         https://bugs.webkit.org/show_bug.cgi?id=154255
1072         <rdar://problem/24662996>
1073
1074         Reviewed by Mark Lam.
1075
1076         The bug here wasn't in the implementation of the sampling profiler 
1077         itself. Rather, it was a bug in the test. JSC wasn't spending a lot
1078         of time in a function that the test assumed a lot of time was spent in.
1079         That's because the DFG was doing a good job at optimizing the function
1080         at the leaf of the recursion. Because of that, we often wouldn't sample it.
1081         I fixed this by making the leaf function do more work.
1082
1083         * tests/stress/sampling-profiler-deep-stack.js:
1084         (platformSupportsSamplingProfiler.foo):
1085
1086 2016-02-16  Chris Dumez  <cdumez@apple.com>
1087
1088         [Web IDL] Operations should be on the instance for global objects or if [Unforgeable]
1089         https://bugs.webkit.org/show_bug.cgi?id=154120
1090         <rdar://problem/24613231>
1091
1092         Reviewed by Gavin Barraclough.
1093
1094         Have putEntry() take a thisValue parameter in addition to the base,
1095         instead of relying on PropertySlot::thisValue() because this did not
1096         always do the right thing. In particular, when JSDOMWindow::put() was
1097         called to set a function, it would end up setting the new value on the
1098         JSDOMWindowShell instead of the actual JSDOMWindow.
1099         JSDOMWindow::getOwnPropertySlot() would then not be able to find it.
1100         Therefore the following would fail:
1101         $ window.open = "test"
1102         $ console.log(window.open) // prints the native function instead of "test"
1103
1104         * runtime/JSObject.cpp:
1105         (JSC::JSObject::putInlineSlow):
1106         * runtime/Lookup.h:
1107         (JSC::putEntry):
1108         (JSC::lookupPut):
1109
1110 2016-02-16  Keith Miller  <keith_miller@apple.com>
1111
1112         ClonedArguments should not materialize its special properties unless they are being changed or deleted
1113         https://bugs.webkit.org/show_bug.cgi?id=154128
1114
1115         Reviewed by Filip Pizlo.
1116
1117         Before we would materialize ClonedArguments whenever they were being accessed.
1118         However this would cause the IC to miss every time as the structure for
1119         the arguments object would change as we went to IC it. Thus on the next
1120         function call we would miss the cache since the new arguments object
1121         would not have materialized the value.
1122
1123         * runtime/ClonedArguments.cpp:
1124         (JSC::ClonedArguments::getOwnPropertySlot):
1125         * tests/stress/cloned-arguments-modification.js: Added.
1126         (foo):
1127
1128 2016-02-16  Filip Pizlo  <fpizlo@apple.com>
1129
1130         FTL should support StringFromCharCode
1131         https://bugs.webkit.org/show_bug.cgi?id=154267
1132         rdar://problem/24192536
1133
1134         Reviewed by Mark Lam.
1135
1136         * dfg/DFGFixupPhase.cpp:
1137         (JSC::DFG::FixupPhase::fixupNode): Fix a bug preventing the UntypedUse from being effective.
1138         * ftl/FTLCapabilities.cpp:
1139         (JSC::FTL::canCompile):
1140         * ftl/FTLLowerDFGToLLVM.cpp:
1141         (JSC::FTL::DFG::LowerDFGToLLVM::compileNode):
1142         (JSC::FTL::DFG::LowerDFGToLLVM::compileStringFromCharCode): Implement the opcode.
1143         * tests/stress/string-from-char-code-slow.js: Added.
1144
1145 2016-02-15  Benjamin Poulain  <bpoulain@apple.com>
1146
1147         [JSC] BranchAdd can override arguments of its stackmap
1148         https://bugs.webkit.org/show_bug.cgi?id=154274
1149
1150         Reviewed by Filip Pizlo.
1151
1152         With the 3 operands BranchAdd added in r196513, we can run into
1153         a register allocation such that the destination register is also
1154         used by a value in the stack map.
1155
1156         It use to be that BranchAdd was a 2 operand instruction.
1157         In that form, the destination is also one of the source and
1158         can be recovered through Sub. There is no conflict between
1159         destination and the stackmap.
1160
1161         After r196513, the destination has its own value. It is uncommon
1162         on x86 because of the aggressive aliasing but that can happen.
1163         On ARM, that's a standard form since there is no need for aliasing.
1164
1165         Since the arguments of the stackmap are of type EarlyUse,
1166         they appeared as not interfering with the destination. When the register
1167         allocator gives the same register to the destination and something in
1168         the stack map, the result of BranchAdd destroys the value kept alive
1169         for the stackmap.
1170
1171         In this patch, I introduce a concept very similar to ForceLateUse
1172         to keep the argument of the stackmap live in CheckAdd. The new
1173         role is "ForceLateUseUnlessRecoverable".
1174
1175         In this mode, anything that is not also an input argument becomes
1176         LateUse. As such, it interferes with the destination of CheckAdd.
1177         The arguments are recovered by the slow patch of CheckAdd. They
1178         remain Early use.
1179
1180         This new modes ensure that destination can be aliased to the source
1181         when that's useful, while making sure it is not aliased with another
1182         value that needs to be live on exit.
1183
1184         * b3/B3CheckSpecial.cpp:
1185         (JSC::B3::CheckSpecial::forEachArg):
1186         * b3/B3LowerToAir.cpp:
1187         (JSC::B3::Air::LowerToAir::lower):
1188         * b3/B3PatchpointSpecial.cpp:
1189         (JSC::B3::PatchpointSpecial::forEachArg):
1190         * b3/B3StackmapSpecial.cpp:
1191         (JSC::B3::StackmapSpecial::forEachArgImpl):
1192         (WTF::printInternal):
1193         * b3/B3StackmapSpecial.h:
1194         * b3/B3StackmapValue.h:
1195
1196 2016-02-15  Joseph Pecoraro  <pecoraro@apple.com>
1197
1198         Web Inspector: Web Workers have no access to console for debugging
1199         https://bugs.webkit.org/show_bug.cgi?id=26237
1200
1201         Reviewed by Timothy Hatcher.
1202
1203         * inspector/ConsoleMessage.h:
1204         Add accessor for MessageLevel.
1205
1206 2016-02-15  Mark Lam  <mark.lam@apple.com>
1207
1208         [ARMv7] stress/op_rshift.js and stress/op_urshift.js are failing.
1209         https://bugs.webkit.org/show_bug.cgi?id=151514
1210
1211         Reviewed by Filip Pizlo.
1212
1213         The issue turns out to be trivial: on ARMv7 (and traditional ARM too), arithmetic
1214         shift right (ASR) and logical shift right (LSR) takes an immediate shift amount
1215         from 1-32.  See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjacbgca.html.
1216         An immediate shift amount of 0 is interpreted as a shift of 32 bits.
1217
1218         Meanwhile, our macro assembler is expecting the immediate shift value to be
1219         between 0-31.  As a result, a shift amount of 0 is being wrongly encoded with 0
1220         bits which means shift right by 32 bits.
1221
1222         The fix is to check if the shift amount is 0, and if so, emit a move.  Else,
1223         emit the right shift as usual.
1224
1225         This issue does not affect left shifts, as the immediate shift amount for left
1226         shifts is between 0-31 as our macro assembler expects.
1227
1228         * assembler/MacroAssemblerARM.h:
1229         (JSC::MacroAssemblerARM::rshift32):
1230         (JSC::MacroAssemblerARM::urshift32):
1231         (JSC::MacroAssemblerARM::sub32):
1232         * assembler/MacroAssemblerARMv7.h:
1233         (JSC::MacroAssemblerARMv7::rshift32):
1234         (JSC::MacroAssemblerARMv7::urshift32):
1235
1236         * tests/stress/op_rshift.js:
1237         * tests/stress/op_urshift.js:
1238         - Un-skip these tests.  They should always pass now.
1239
1240 2016-02-15  Filip Pizlo  <fpizlo@apple.com>
1241
1242         Parser::parseVariableDeclarationList should null check the node before attempting to create a new CommaExpr
1243         https://bugs.webkit.org/show_bug.cgi?id=154244
1244         rdar://problem/24290670
1245
1246         Reviewed by Michael Saboff.
1247
1248         * parser/ASTBuilder.h:
1249         (JSC::ASTBuilder::appendToCommaExpr): Catch the bug sooner in debug.
1250         * parser/Parser.cpp:
1251         (JSC::Parser<LexerType>::parseVariableDeclarationList): Fix the bug.
1252         * tests/stress/for-let-comma.js: Added. This used to crash in debug and release.
1253
1254 2016-02-15  Benjamin Poulain  <bpoulain@apple.com>
1255
1256         [JSC] Improve the interface of Inst::shouldTryAliasingDef()
1257         https://bugs.webkit.org/show_bug.cgi?id=154227
1258
1259         Reviewed by Andreas Kling.
1260
1261         Using Optional<> instead of a bool+reference looks cleaner
1262         at the call sites.
1263
1264         * b3/B3CheckSpecial.cpp:
1265         (JSC::B3::CheckSpecial::shouldTryAliasingDef):
1266         * b3/B3CheckSpecial.h:
1267         * b3/air/AirCustom.h:
1268         (JSC::B3::Air::PatchCustom::shouldTryAliasingDef):
1269         * b3/air/AirInst.h:
1270         * b3/air/AirInstInlines.h:
1271         (JSC::B3::Air::Inst::shouldTryAliasingDef):
1272         * b3/air/AirIteratedRegisterCoalescing.cpp:
1273         * b3/air/AirSpecial.cpp:
1274         (JSC::B3::Air::Special::shouldTryAliasingDef):
1275         * b3/air/AirSpecial.h:
1276
1277 2016-02-14  Brian Burg  <bburg@apple.com>
1278
1279         WKAutomationDelegate's requestAutomationSession should take a suggested session identifier
1280         https://bugs.webkit.org/show_bug.cgi?id=154012
1281         <rdar://problem/24557697>
1282
1283         Reviewed by Darin Adler.
1284
1285         Add a string parameter to the client method for requesting a new session.
1286
1287         * inspector/remote/RemoteInspector.h:
1288
1289 2016-02-13  Timothy Hatcher  <timothy@apple.com>
1290
1291         Fix WebAssembly bug URL in the feature list.
1292
1293         * features.json:
1294
1295 2016-02-12  Sukolsak Sakshuwong  <sukolsak@gmail.com>
1296
1297         Change the last RefPtr::get() to release() in String.prototype.normalize
1298         https://bugs.webkit.org/show_bug.cgi?id=154211
1299
1300         Reviewed by Ryosuke Niwa.
1301
1302         Change the last RefPtr::get() to release() in String.prototype.normalize.
1303
1304         * runtime/StringPrototype.cpp:
1305         (JSC::normalize):
1306
1307 2016-02-12  Saam barati  <sbarati@apple.com>
1308
1309         [ES6] we have an incorrect syntax error when a callee of a function expression has the same name as a top-level lexical declaration
1310         https://bugs.webkit.org/show_bug.cgi?id=154143
1311
1312         Reviewed by Benjamin Poulain.
1313
1314         We were raising syntax errors on the following type of programs when
1315         we shouldn't have been.
1316         ```
1317         (function foo() { const foo = 20; });
1318         ```
1319
1320         * parser/Parser.cpp:
1321         (JSC::Parser<LexerType>::parseFunctionInfo):
1322         * parser/Parser.h:
1323         (JSC::Scope::computeLexicallyCapturedVariablesAndPurgeCandidates):
1324         (JSC::Scope::declareCallee):
1325         (JSC::Scope::declareVariable):
1326         (JSC::Scope::hasDeclaredVariable):
1327         (JSC::Scope::hasLexicallyDeclaredVariable):
1328         (JSC::Scope::hasDeclaredParameter):
1329         (JSC::Scope::declareWrite):
1330         (JSC::Scope::getCapturedVars):
1331
1332 2016-02-12  Benjamin Poulain  <bpoulain@apple.com>
1333
1334         [JSC] ZeroExtend and SignExtend use incorrect addressing on ARM64
1335         https://bugs.webkit.org/show_bug.cgi?id=154208
1336
1337         Reviewed by Filip Pizlo.
1338
1339         When lowering:
1340             @1 = Load32(@x)
1341             @2 = SExt8(@1)
1342
1343         LowerToAir would see there is a form of SignExtend8To32 (an alias for Load8S)
1344         and use that.
1345
1346         There are two problems with that:
1347         1) If we have an Addr, it went through legalizeMemoryOffsets() for a 32bits
1348            load. If used on an other kind of load, there is no guarantee the addressing
1349            is still valid.
1350         2) If we have an Index, it is computed for the 32bits MemoryValue.
1351            The computed index is not valid for the 8bits load.
1352
1353         (2) could be fixed by changing LowerToAir to use the current instruction width
1354         instead of the B3ValueWidth but that's a bit tricky. We should just embrace
1355         that one of our target is a Load-Store architecture.
1356
1357         In this patch, I just disabled the faulty forms on ARM64. We still need those operations
1358         to be fast, this will be addressed in: https://bugs.webkit.org/show_bug.cgi?id=154207
1359
1360         I also strengthened the m_allowScratchRegister assertion. The instructions that do not
1361         invalidate the temporary did not run the assertion, making this harder to debug.
1362
1363         * assembler/MacroAssemblerARM64.h:
1364         (JSC::MacroAssemblerARM64::load8):
1365         (JSC::MacroAssemblerARM64::store64):
1366         (JSC::MacroAssemblerARM64::store32):
1367         (JSC::MacroAssemblerARM64::loadDouble):
1368         (JSC::MacroAssemblerARM64::storeDouble):
1369         (JSC::MacroAssemblerARM64::branch32):
1370         (JSC::MacroAssemblerARM64::branch64):
1371         (JSC::MacroAssemblerARM64::getCachedDataTempRegisterIDAndInvalidate):
1372         (JSC::MacroAssemblerARM64::getCachedMemoryTempRegisterIDAndInvalidate):
1373         (JSC::MacroAssemblerARM64::dataMemoryTempRegister):
1374         (JSC::MacroAssemblerARM64::cachedMemoryTempRegister):
1375         (JSC::MacroAssemblerARM64::load):
1376         (JSC::MacroAssemblerARM64::store):
1377         * b3/air/AirOpcode.opcodes:
1378
1379 2016-02-12  Michael Saboff  <msaboff@apple.com>
1380
1381         offlineasm: Emit Dwarf2 file and location directives to allow for debugging .asm files
1382         https://bugs.webkit.org/show_bug.cgi?id=152703
1383
1384         Reviewed by Mark Lam.
1385
1386         Added support to output Dwarf2 .file and .loc assembler directives to provide the debugging
1387         information needed to correlate the offline assembler generated code with the source lines 
1388         in the .asm files.
1389
1390         Changed the tracking of file data to include a file index that was provided to the .file
1391         directive.  That index is used when emitting the .loc directives.
1392
1393         * offlineasm/arm.rb:
1394         * offlineasm/arm64.rb:
1395         * offlineasm/asm.rb:
1396         * offlineasm/backends.rb:
1397         * offlineasm/config.rb:
1398         * offlineasm/parser.rb:
1399         * offlineasm/x86.rb:
1400
1401 2016-02-12  Saam barati  <sbarati@apple.com>
1402
1403         The parser doesn't properly protect against global variable references in builtins
1404         https://bugs.webkit.org/show_bug.cgi?id=154144
1405
1406         Reviewed by Geoffrey Garen.
1407
1408         This patch fixes our global variable reference detection
1409         algorithm that was broken. After fixing the algorithm, I
1410         detected many places where we were incorrectly using global
1411         variables. I've fixed all those.
1412
1413         * builtins/BuiltinExecutables.cpp:
1414         (JSC::createExecutableInternal):
1415         * builtins/NumberPrototype.js:
1416         (toLocaleString):
1417         * builtins/PromiseConstructor.js:
1418         (race):
1419         (reject):
1420         (resolve):
1421         * parser/Nodes.cpp:
1422         (JSC::ProgramNode::ProgramNode):
1423         (JSC::ModuleProgramNode::ModuleProgramNode):
1424         (JSC::ProgramNode::setClosedVariables): Deleted.
1425         * parser/Nodes.h:
1426         (JSC::ScopeNode::setClosedVariables): Deleted.
1427         (JSC::ProgramNode::closedVariables): Deleted.
1428         * parser/Parser.cpp:
1429         (JSC::Parser<LexerType>::parseInner):
1430         (JSC::Parser<LexerType>::didFinishParsing):
1431         * parser/Parser.h:
1432         (JSC::Scope::setIsLexicalScope):
1433         (JSC::Scope::isLexicalScope):
1434         (JSC::Scope::closedVariableCandidates):
1435         (JSC::Scope::declaredVariables):
1436         (JSC::Scope::lexicalVariables):
1437         (JSC::Scope::finalizeLexicalEnvironment):
1438         (JSC::Parser::positionBeforeLastNewline):
1439         (JSC::Parser::locationBeforeLastToken):
1440         (JSC::Parser::isFunctionMetadataNode):
1441         (JSC::parse):
1442         (JSC::Parser::closedVariables): Deleted.
1443
1444 2016-02-12  Filip Pizlo  <fpizlo@apple.com>
1445
1446         JSObject::putByIndexBeyondVectorLengthWithoutAttributes needs to go to the sparse map based on MAX_STORAGE_VECTOR_INDEX
1447         https://bugs.webkit.org/show_bug.cgi?id=154201
1448         rdar://problem/24291387
1449
1450         Reviewed by Saam Barati.
1451
1452         I decided against adding a test for this, because it runs for a very long time.
1453
1454         * runtime/JSObject.cpp:
1455         (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes): Fix the bug.
1456         * runtime/StringPrototype.cpp:
1457         (JSC::stringProtoFuncSplit): Fix a related bug: if this code creates an array that would have
1458             hit the above bug, then it would probably manifest as a spin or as swapping.
1459
1460 2016-02-12  Jonathan Davis  <jond@apple.com>
1461
1462         Add WebAssembly to the status page
1463         https://bugs.webkit.org/show_bug.cgi?id=154199
1464
1465         Reviewed by Timothy Hatcher.
1466
1467         * features.json:
1468
1469 2016-02-12  Brian Burg  <bburg@apple.com>
1470
1471         Web Inspector: disambiguate the various identifier and connection types in RemoteInspector
1472         https://bugs.webkit.org/show_bug.cgi?id=154130
1473
1474         Reviewed by Joseph Pecoraro.
1475
1476         There are multiple identifier types:
1477             - connection identifier, a string UUID for a remote debugger process.
1478             - session identifier, a string UUID for a remote driver/debugger instance.
1479             - page/target identifier, a number unique within a single process.
1480
1481         There are multiple connection types:
1482             - RemoteInspectorXPCConnection, a connection from RemoteInspectorXPCConnectionor to a relay.
1483             - RemoteConnectionToTarget, a class that bridges to targets' dispatch queues.
1484
1485         Use consistent variable and getter names so that these don't get confused and
1486         so that the code is easier to read. This is especially an improvement when working
1487         with multiple target types or connection types within the same function.
1488
1489         * inspector/remote/RemoteConnectionToTarget.h:
1490         * inspector/remote/RemoteConnectionToTarget.mm:
1491         Remove the member for m_identifier since we can ask the target for its target identifier
1492         or use a default value via WTF::Optional. There's no reason to cache the value.
1493
1494         (Inspector::RemoteTargetHandleRunSourceWithInfo):
1495         (Inspector::RemoteConnectionToTarget::targetIdentifier):
1496         (Inspector::RemoteConnectionToTarget::destination):
1497         (Inspector::RemoteConnectionToTarget::setup):
1498         (Inspector::RemoteConnectionToTarget::sendMessageToFrontend):
1499         Bail out if the target pointer was somehow cleared and we can't get a useful target identifier.
1500
1501         (Inspector::RemoteConnectionToTarget::RemoteConnectionToTarget): Deleted.
1502         * inspector/remote/RemoteControllableTarget.h:
1503         * inspector/remote/RemoteInspectionTarget.cpp:
1504         (Inspector::RemoteInspectionTarget::pauseWaitingForAutomaticInspection):
1505         (Inspector::RemoteInspectionTarget::unpauseForInitializedInspector):
1506         * inspector/remote/RemoteInspector.h:
1507         * inspector/remote/RemoteInspector.mm:
1508         (Inspector::RemoteInspector::nextAvailableTargetIdentifier):
1509         (Inspector::RemoteInspector::registerTarget):
1510         (Inspector::RemoteInspector::unregisterTarget):
1511         (Inspector::RemoteInspector::updateTarget):
1512         (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
1513         (Inspector::RemoteInspector::sendAutomaticInspectionCandidateMessage):
1514         (Inspector::RemoteInspector::sendMessageToRemote):
1515         (Inspector::RemoteInspector::setupFailed):
1516         (Inspector::RemoteInspector::setupCompleted):
1517         (Inspector::RemoteInspector::stopInternal):
1518         (Inspector::RemoteInspector::setupXPCConnectionIfNeeded):
1519         (Inspector::RemoteInspector::xpcConnectionFailed):
1520         (Inspector::RemoteInspector::listingForInspectionTarget):
1521         (Inspector::RemoteInspector::listingForAutomationTarget):
1522         (Inspector::RemoteInspector::pushListingsNow):
1523         (Inspector::RemoteInspector::pushListingsSoon):
1524         (Inspector::RemoteInspector::updateHasActiveDebugSession):
1525         (Inspector::RemoteInspector::receivedSetupMessage):
1526         (Inspector::RemoteInspector::receivedDataMessage):
1527         (Inspector::RemoteInspector::receivedDidCloseMessage):
1528         (Inspector::RemoteInspector::receivedIndicateMessage):
1529         (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage):
1530         (Inspector::RemoteInspector::receivedConnectionDiedMessage):
1531         (Inspector::RemoteInspector::receivedAutomaticInspectionRejectMessage):
1532         (Inspector::RemoteInspector::nextAvailableIdentifier): Deleted.
1533         * inspector/remote/RemoteInspectorConstants.h:
1534
1535 2016-02-12  Benjamin Poulain  <benjamin@webkit.org>
1536
1537         [JSC] On x86, improve the selection of which value are selected for the UseDef part of commutative operations
1538         https://bugs.webkit.org/show_bug.cgi?id=154151
1539
1540         Reviewed by Filip Pizlo.
1541
1542         Previously, when an instruction destroy an argument with
1543         a UseDef use, we would try to pick a good target for the UseDef
1544         while doing instruction selection.
1545
1546         For example:
1547             @x = Add(@1, @2)
1548
1549         can be lowered to:
1550             Move @1 Tmp3
1551             Add @2 Tmp3
1552         or
1553             Move @2 Tmp3
1554             Add @1 Tmp3
1555
1556         The choice of which value ends up copied is done by preferRightForResult()
1557         at lowering time.
1558
1559         There are two common problems with the code we generate:
1560         1) It is based on UseCount. If a value is at its last use,
1561            it is a good target for coalescing even with a use-count > 1.
1562         2) When both values are at their last use, the best choice
1563            depends on the register pressure of each. We don't have that information
1564            until we do register allocation.
1565
1566         This patch implements a simple idea to minimize how many of those Moves are needed.
1567         Each commutative operation gets a 3 op variant. The register allocator then attempts
1568         to alias *both* of them to the destination.
1569         Since our aliasing is conservative, it removes as many copy as possible without causing
1570         spilling.
1571
1572         There was an unexpected cool impovement too. If you have:
1573             Move Tmp1, Tmp2
1574             BranchAdd32 Tmp3, Tmp2
1575         we would previously restore Tmp2 by substracting Tmp3 from the result.
1576         We can now just use Tmp1. That removes quite a few Sub from the slow paths.
1577
1578         The problem is that simple idea uncoverred a bunch of issues that had to be fixed too.
1579         I detail them inline below.
1580
1581         * assembler/MacroAssemblerARM64.h:
1582         (JSC::MacroAssemblerARM64::and64):
1583         * assembler/MacroAssemblerX86Common.h:
1584         Most addition are adding an Address version of the 3 operands opcodes.
1585         The reason for this is allow the complex addressing forms of instructions
1586         when spilling.
1587
1588         (JSC::MacroAssemblerX86Common::and32):
1589         (JSC::MacroAssemblerX86Common::mul32):
1590         (JSC::MacroAssemblerX86Common::or32):
1591         (JSC::MacroAssemblerX86Common::xor32):
1592         (JSC::MacroAssemblerX86Common::moveDouble):
1593         This was an unexpected discovery: removing tons of Move32 made floating-point heavy
1594         code much slower.
1595
1596         It turns out the MoveDouble we were using has partial register dependencies.
1597
1598         The x86 optimization manual, Chapter 3, section 3.4.1.13 lists the move instructions executed
1599         directly on the frontend. That's what we use now.
1600
1601         (JSC::MacroAssemblerX86Common::addDouble):
1602         (JSC::MacroAssemblerX86Common::addFloat):
1603         (JSC::MacroAssemblerX86Common::mulDouble):
1604         (JSC::MacroAssemblerX86Common::mulFloat):
1605         (JSC::MacroAssemblerX86Common::andDouble):
1606         (JSC::MacroAssemblerX86Common::andFloat):
1607         (JSC::MacroAssemblerX86Common::xorDouble):
1608         (JSC::MacroAssemblerX86Common::xorFloat):
1609         If the destination is not aliased, the version taking an address
1610         use LoadFloat/LoadDouble instead of direct addressing.
1611
1612         That is because this:
1613             Move Tmp1, Tmp2
1614             Op [Tmp3], Tmp2
1615         is slower than
1616             Move [Tmp3] Tmp2
1617             Op Tmp1, Tmp2
1618         (sometimes significantly).
1619
1620         I am not exactly sure why.
1621
1622         (JSC::MacroAssemblerX86Common::branchAdd32):
1623         * assembler/MacroAssemblerX86_64.h:
1624         (JSC::MacroAssemblerX86_64::and64):
1625         * assembler/MacroAssemblerARM64.h:
1626         (JSC::MacroAssemblerARM64::and64):
1627         * assembler/MacroAssemblerX86Common.h:
1628         (JSC::MacroAssemblerX86Common::and32):
1629         (JSC::MacroAssemblerX86Common::mul32):
1630         (JSC::MacroAssemblerX86Common::or32):
1631         (JSC::MacroAssemblerX86Common::xor32):
1632         (JSC::MacroAssemblerX86Common::moveDouble):
1633         (JSC::MacroAssemblerX86Common::addDouble):
1634         (JSC::MacroAssemblerX86Common::addFloat):
1635         (JSC::MacroAssemblerX86Common::mulDouble):
1636         (JSC::MacroAssemblerX86Common::mulFloat):
1637         (JSC::MacroAssemblerX86Common::andDouble):
1638         (JSC::MacroAssemblerX86Common::andFloat):
1639         (JSC::MacroAssemblerX86Common::xorDouble):
1640         (JSC::MacroAssemblerX86Common::xorFloat):
1641         (JSC::MacroAssemblerX86Common::branchAdd32):
1642         * assembler/MacroAssemblerX86_64.h:
1643         (JSC::MacroAssemblerX86_64::and64):
1644         (JSC::MacroAssemblerX86_64::mul64):
1645         (JSC::MacroAssemblerX86_64::xor64):
1646         (JSC::MacroAssemblerX86_64::branchAdd64):
1647         * assembler/X86Assembler.h:
1648         (JSC::X86Assembler::movapd_rr):
1649         (JSC::X86Assembler::movaps_rr):
1650         * b3/B3CheckSpecial.cpp:
1651         (JSC::B3::CheckSpecial::shouldTryAliasingDef):
1652         (JSC::B3::CheckSpecial::generate):
1653         * b3/B3CheckSpecial.h:
1654         * b3/B3LowerToAir.cpp:
1655         (JSC::B3::Air::LowerToAir::lower):
1656         * b3/air/AirCustom.h:
1657         (JSC::B3::Air::PatchCustom::shouldTryAliasingDef):
1658         * b3/air/AirInst.h:
1659         * b3/air/AirInstInlines.h:
1660         (JSC::B3::Air::Inst::shouldTryAliasingDef):
1661         * b3/air/AirIteratedRegisterCoalescing.cpp:
1662         Aliasing the operands is done the same way as any coalescing.
1663
1664         There were problem with considering all those coalescing
1665         as equivalent for the result.
1666
1667         Moves are mostly generated for Upsilon-Phis. Getting rid of
1668         those tends to give better loops.
1669
1670         Sometimes, blocks have only Phis and a Jump. Coalescing
1671         those moves gets rids of the block entirely.
1672
1673         Where it go interesting was that something like:
1674             Move Tmp1, Tmp2
1675             Op Tmp3, Tmp2
1676         was significantly better than:
1677             Op Tmp1, Tmp3
1678             Move Tmp1, Tmp4
1679         even in the same basic block.
1680
1681         To get back to the same performance when, I had to prioritize
1682         regular Moves operations over argument coalescing.
1683
1684         Another argument for doing this is that the alias has a shorter
1685         life in the hardware because the operation itself gets a new
1686         virtual register from the bank.
1687
1688         * b3/air/AirOpcode.opcodes:
1689         * b3/air/AirSpecial.cpp:
1690         (JSC::B3::Air::Special::shouldTryAliasingDef):
1691         * b3/air/AirSpecial.h:
1692         * b3/testb3.cpp:
1693         (JSC::B3::testCheckAddArgumentAliasing64):
1694         (JSC::B3::testCheckAddArgumentAliasing32):
1695         (JSC::B3::testCheckAddSelfOverflow64):
1696         (JSC::B3::testCheckAddSelfOverflow32):
1697         (JSC::B3::testCheckMulArgumentAliasing64):
1698         (JSC::B3::testCheckMulArgumentAliasing32):
1699         (JSC::B3::run):
1700
1701         * dfg/DFGOSRExitCompilerCommon.cpp:
1702         (JSC::DFG::reifyInlinedCallFrames):
1703         * jit/AssemblyHelpers.h:
1704         (JSC::AssemblyHelpers::emitSaveOrCopyCalleeSavesFor):
1705         This ruined my week.
1706
1707         When regenerating the frame of an inlined function that
1708         was called through a tail call, we were ignoring r13 for some reason.
1709
1710         Since this patch makes it more likely to increase the degree
1711         of each Tmp, the number of register used increased and r13 was more
1712         commonly used.
1713
1714         When getting out of OSRExit, we would have that value trashed :(
1715
1716         The fix is simply to restore it like the other two Baseline callee saved
1717         register.
1718
1719 2016-02-12  Yusuke Suzuki  <utatane.tea@gmail.com>
1720
1721         [ES6] Implement @@search
1722         https://bugs.webkit.org/show_bug.cgi?id=143889
1723
1724         Reviewed by Darin Adler.
1725
1726         Implement RegExp.prototype[@@search].
1727         In ES6, String.prototype.search delegates the actual matching to it
1728         instead of executing RegExp matching inside String.prototype.search method itself.
1729         By customizing @@search method, we can change the behavior of String.prototype.search for
1730         derived / customized RegExp object.
1731
1732         * CMakeLists.txt:
1733         * DerivedSources.make:
1734         * builtins/BuiltinNames.h:
1735         (JSC::BuiltinNames::BuiltinNames): Deleted.
1736         * builtins/BuiltinUtils.h:
1737         * builtins/StringPrototype.js:
1738         (search):
1739         * bytecode/BytecodeIntrinsicRegistry.cpp:
1740         (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
1741         * bytecode/BytecodeIntrinsicRegistry.h:
1742         * runtime/CommonIdentifiers.h:
1743         * runtime/JSGlobalObject.cpp:
1744         (JSC::JSGlobalObject::init):
1745         * runtime/RegExpPrototype.cpp:
1746         (JSC::RegExpPrototype::finishCreation):
1747         (JSC::regExpProtoFuncSearch):
1748         * runtime/RegExpPrototype.h:
1749         (JSC::RegExpPrototype::create):
1750         * runtime/StringPrototype.cpp:
1751         (JSC::StringPrototype::getOwnPropertySlot):
1752         (JSC::StringPrototype::finishCreation): Deleted.
1753         (JSC::stringProtoFuncSearch): Deleted.
1754         * runtime/StringPrototype.h:
1755         * tests/es6.yaml:
1756         * tests/stress/regexp-search.js: Added.
1757         (shouldBe):
1758         (shouldThrow):
1759         (errorKey.toString):
1760         (primitive.of.primitives.shouldThrow):
1761         (testRegExpSearch):
1762         (testSearch):
1763         (testBoth):
1764         (alwaysUnmatch):
1765
1766 2016-02-12  Keith Miller  <keith_miller@apple.com>
1767
1768         AdaptiveInferredPropertyValueWatchpoint can trigger a GC that frees its CodeBlock and thus itself
1769         https://bugs.webkit.org/show_bug.cgi?id=154146
1770
1771         Reviewed by Filip Pizlo.
1772
1773         Consider the following: there is some CodeBlock, C, that is watching some object, O, with a
1774         structure, S, for replacements. Also, suppose that C has no references anymore and is due to
1775         be GCed. Now, when some new property is added to O, S will create a new structure S' and
1776         fire its transition watchpoints. Since C is watching S for replacements it will attempt to
1777         have its AdaptiveInferredPropertyValueWatchpoint relocate itself to S'. To do so, it needs
1778         it allocate RareData on S'. This allocation may cause a GC, which frees C while still
1779         executing its watchpoint handler. The solution to this is to defer GC while running
1780         AdaptiveInferredPropertyValueWatchpointBase handlers.
1781
1782         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:
1783         (JSC::AdaptiveInferredPropertyValueWatchpointBase::fire):
1784
1785 2016-02-12  Gavin Barraclough  <barraclough@apple.com>
1786
1787         Separate out !allowsAccess path in JSDOMWindowCustom getOwnPropertySlot
1788         https://bugs.webkit.org/show_bug.cgi?id=154156
1789
1790         Reviewed by Chris Dumez.
1791
1792         * runtime/CommonIdentifiers.h:
1793             - added new property names, needed by jsDOMWindowGetOwnPropertySlotDisallowAccess.
1794
1795 2016-02-12  Sukolsak Sakshuwong  <sukolsak@gmail.com>
1796
1797         Update ICU header files to version 52
1798         https://bugs.webkit.org/show_bug.cgi?id=154160
1799
1800         Reviewed by Alex Christensen.
1801
1802         Update ICU header files to version 52 to allow the use of newer APIs.
1803
1804         * icu/unicode/localpointer.h:
1805         * icu/unicode/platform.h:
1806         * icu/unicode/ptypes.h:
1807         * icu/unicode/putil.h:
1808         * icu/unicode/ucal.h:
1809         * icu/unicode/uchar.h:
1810         * icu/unicode/ucnv.h:
1811         * icu/unicode/ucol.h:
1812         * icu/unicode/uconfig.h:
1813         * icu/unicode/udat.h:
1814         * icu/unicode/udatpg.h:
1815         * icu/unicode/udisplaycontext.h: Added.
1816         * icu/unicode/uenum.h:
1817         * icu/unicode/uformattable.h: Added.
1818         * icu/unicode/uiter.h:
1819         * icu/unicode/uloc.h:
1820         * icu/unicode/umachine.h:
1821         * icu/unicode/unorm2.h:
1822         * icu/unicode/unum.h:
1823         * icu/unicode/urename.h:
1824         * icu/unicode/uscript.h:
1825         * icu/unicode/uset.h:
1826         * icu/unicode/ustring.h:
1827         * icu/unicode/utf.h:
1828         * icu/unicode/utf16.h:
1829         * icu/unicode/utf8.h:
1830         * icu/unicode/utf_old.h:
1831         * icu/unicode/utypes.h:
1832         * icu/unicode/uvernum.h:
1833         * icu/unicode/uversion.h:
1834
1835 2016-02-12  Filip Pizlo  <fpizlo@apple.com>
1836
1837         Fast path in JSObject::defineOwnIndexedProperty() forgets to check for the posibility of a descriptor that doesn't have a value
1838         https://bugs.webkit.org/show_bug.cgi?id=154175
1839         rdar://problem/24291497
1840
1841         Reviewed by Geoffrey Garen.
1842
1843         * runtime/JSObject.cpp:
1844         (JSC::JSObject::defineOwnIndexedProperty): Fix the bug.
1845         * runtime/SparseArrayValueMap.cpp:
1846         (JSC::SparseArrayValueMap::putEntry): Catch the bug sooner in debug.
1847         (JSC::SparseArrayValueMap::putDirect):
1848         * tests/stress/sparse-define-empty-descriptor.js: Added. This used to crash in release.
1849
1850 2016-02-11  Brian Burg  <bburg@apple.com>
1851
1852         Web Inspector: RemoteInspector's listings should include whether an AutomationTarget is paired
1853         https://bugs.webkit.org/show_bug.cgi?id=154077
1854         <rdar://problem/24589133>
1855
1856         Reviewed by Joseph Pecoraro.
1857
1858         Instead of not generating a listing for the target when it is occupied,
1859         generate the listing with a 'paired' flag. The old flag was redundant
1860         because a _WKAutomationDelegate will not create a session if it doesn't
1861         support automation or it already has an active session.
1862
1863         * inspector/remote/RemoteAutomationTarget.cpp:
1864         (Inspector::RemoteAutomationTarget::setIsPaired):
1865         (Inspector::RemoteAutomationTarget::setAutomationAllowed): Deleted.
1866         * inspector/remote/RemoteAutomationTarget.h:
1867         Return false for remoteControlAllowed() if the target is already paired.
1868         This function is used by RemoteInspector to deny incoming connections.
1869
1870         * inspector/remote/RemoteInspector.mm:
1871         (Inspector::RemoteInspector::listingForAutomationTarget):
1872         * inspector/remote/RemoteInspectorConstants.h:
1873
1874 2016-02-11  Filip Pizlo  <fpizlo@apple.com>
1875
1876         DFG::ByteCodeParser needs to null check the result of presenceLike()
1877         https://bugs.webkit.org/show_bug.cgi?id=154135
1878         rdar://problem/24291586
1879
1880         Reviewed by Geoffrey Garen.
1881
1882         ByteCodeParser::presenceLike() could return a null object property condition if it detects a
1883         contradiction. That could happen due to bogus profiling. It's totally OK - we just need to
1884         bail from using a property condition when that happens.
1885
1886         * bytecode/ObjectPropertyCondition.h:
1887         (JSC::ObjectPropertyCondition::equivalence):
1888         (JSC::ObjectPropertyCondition::operator bool):
1889         (JSC::ObjectPropertyCondition::object):
1890         (JSC::ObjectPropertyCondition::condition):
1891         (JSC::ObjectPropertyCondition::operator!): Deleted.
1892         * bytecode/PropertyCondition.h:
1893         (JSC::PropertyCondition::equivalence):
1894         (JSC::PropertyCondition::operator bool):
1895         (JSC::PropertyCondition::kind):
1896         (JSC::PropertyCondition::uid):
1897         (JSC::PropertyCondition::operator!): Deleted.
1898         * dfg/DFGByteCodeParser.cpp:
1899         (JSC::DFG::ByteCodeParser::check):
1900         (JSC::DFG::ByteCodeParser::load):
1901
1902 2016-02-11  Benjamin Poulain  <benjamin@webkit.org>
1903
1904         [JSC] SqrtFloat and CeilFloat also suffer from partial register stalls
1905         https://bugs.webkit.org/show_bug.cgi?id=154131
1906
1907         Reviewed by Filip Pizlo.
1908
1909         Looks like I forgot to update this when adding Float support.
1910         Credit to Filip for finding this issue.
1911
1912         * b3/air/AirFixPartialRegisterStalls.cpp:
1913
1914 2016-02-11  Filip Pizlo  <fpizlo@apple.com>
1915
1916         Cannot call initializeIndex() if we didn't create the array using tryCreateUninitialized()
1917         https://bugs.webkit.org/show_bug.cgi?id=154126
1918
1919         Reviewed by Saam Barati.
1920
1921         * runtime/ArrayPrototype.cpp:
1922         (JSC::arrayProtoFuncSplice):
1923
1924 2016-02-11  Sukolsak Sakshuwong  <sukolsak@gmail.com>
1925
1926         [INTL] Implement Intl.NumberFormat.prototype.resolvedOptions ()
1927         https://bugs.webkit.org/show_bug.cgi?id=147602
1928
1929         Reviewed by Darin Adler.
1930
1931         This patch implements Intl.NumberFormat.prototype.resolvedOptions() according
1932         to the ECMAScript 2015 Internationalization API spec (ECMA-402 2nd edition.)
1933
1934         * runtime/IntlDateTimeFormat.cpp:
1935         (JSC::localeData):
1936         * runtime/IntlNumberFormat.cpp:
1937         (JSC::localeData):
1938         (JSC::computeCurrencySortKey):
1939         (JSC::extractCurrencySortKey):
1940         (JSC::computeCurrencyDigits):
1941         (JSC::IntlNumberFormat::initializeNumberFormat):
1942         (JSC::IntlNumberFormat::styleString):
1943         (JSC::IntlNumberFormat::currencyDisplayString):
1944         (JSC::IntlNumberFormat::resolvedOptions):
1945         (JSC::IntlNumberFormat::setBoundFormat):
1946         * runtime/IntlNumberFormat.h:
1947         * runtime/IntlNumberFormatConstructor.cpp:
1948         (JSC::constructIntlNumberFormat):
1949         (JSC::callIntlNumberFormat):
1950         * runtime/IntlNumberFormatPrototype.cpp:
1951         (JSC::IntlNumberFormatPrototypeFuncResolvedOptions):
1952         * runtime/IntlObject.cpp:
1953         (JSC::intlNumberOption):
1954         (JSC::numberingSystemsForLocale):
1955         (JSC::getNumberingSystemsForLocale): Deleted.
1956         * runtime/IntlObject.h:
1957
1958 2016-02-11  Filip Pizlo  <fpizlo@apple.com>
1959
1960         MacroAssemblerX86 should be happy with shift(cx, cx)
1961         https://bugs.webkit.org/show_bug.cgi?id=154124
1962
1963         Reviewed by Saam Barati.
1964
1965         Prior to this change the assembler asserted that shift_amount and dest cannot be the same.
1966         That's a good assertion for when shift_amount is not in cx. But if it's in cx already then
1967         it's OK for them to be the same. Air will sometimes do shift(cx, cx) if you do "x << x" and
1968         the coalescing got particularly clever.
1969
1970         * assembler/MacroAssemblerX86Common.h:
1971         (JSC::MacroAssemblerX86Common::lshift32):
1972         (JSC::MacroAssemblerX86Common::rshift32):
1973         (JSC::MacroAssemblerX86Common::urshift32):
1974         * assembler/MacroAssemblerX86_64.h:
1975         (JSC::MacroAssemblerX86_64::lshift64):
1976         (JSC::MacroAssemblerX86_64::rshift64):
1977         (JSC::MacroAssemblerX86_64::urshift64):
1978         * b3/testb3.cpp:
1979         (JSC::B3::testLShiftSelf32):
1980         (JSC::B3::testRShiftSelf32):
1981         (JSC::B3::testURShiftSelf32):
1982         (JSC::B3::testLShiftSelf64):
1983         (JSC::B3::testRShiftSelf64):
1984         (JSC::B3::testURShiftSelf64):
1985         (JSC::B3::run):
1986
1987 2016-02-11  Saam barati  <sbarati@apple.com>
1988
1989         The sampling profiler's stack walker methods should be marked with SUPPRESS_ASAN
1990         https://bugs.webkit.org/show_bug.cgi?id=154123
1991
1992         Reviewed by Mark Lam.
1993
1994         The entire premise of the sampling profiler is to load from
1995         another thread's memory. We should SUPPRESS_ASAN on the
1996         methods that do this.
1997
1998         * runtime/SamplingProfiler.cpp:
1999         (JSC::FrameWalker::FrameWalker):
2000         (JSC::FrameWalker::walk):
2001         (JSC::FrameWalker::advanceToParentFrame):
2002         (JSC::FrameWalker::isAtTop):
2003         (JSC::FrameWalker::resetAtMachineFrame):
2004
2005 2016-02-11  Csaba Osztrogonác  <ossy@webkit.org>
2006
2007         Unreviewed typo fix after r190063.
2008
2009         * dfg/DFGSpeculativeJIT.cpp: Removed property svn:executable.
2010         * dfg/DFGSpeculativeJIT.h: Removed property svn:executable.
2011         * jit/JIT.h: Removed property svn:executable.
2012         * jit/JITInlines.h: Removed property svn:executable.
2013         * jit/JITOpcodes.cpp: Removed property svn:executable.
2014
2015 2016-02-11  Csaba Osztrogonác  <ossy@webkit.org>
2016
2017         Unreviewed typo fix after r190063.
2018
2019         * dfg/DFGSpeculativeJIT.cpp: Removed property svn:executable.
2020         * dfg/DFGSpeculativeJIT.h: Removed property svn:executable.
2021         * jit/JIT.h: Removed property svn:executable.
2022         * jit/JITInlines.h: Removed property svn:executable.
2023         * jit/JITOpcodes.cpp: Removed property svn:executable.
2024
2025 2016-02-10  Keith Miller  <keith_miller@apple.com>
2026
2027         Symbol.species accessors on builtin constructors should be configurable
2028         https://bugs.webkit.org/show_bug.cgi?id=154097
2029
2030         Reviewed by Benjamin Poulain.
2031
2032         We did not have the Symbol.species accessors on our builtin constructors
2033         marked as configurable. This does not accurately follow the ES6 spec as
2034         the ES6 spec states that all default accessors on builtins should be
2035         configurable. This means that we need an additional watchpoint on
2036         ArrayConstructor to make sure that no users re-configures Symbol.species.
2037
2038         * runtime/ArrayConstructor.cpp:
2039         (JSC::ArrayConstructor::finishCreation):
2040         * runtime/ArrayPrototype.cpp:
2041         (JSC::speciesConstructArray):
2042         (JSC::ArrayPrototype::setConstructor):
2043         (JSC::ArrayPrototypeAdaptiveInferredPropertyWatchpoint::handleFire):
2044         * runtime/ArrayPrototype.h:
2045         (JSC::ArrayPrototype::didChangeConstructorOrSpeciesProperties):
2046         (JSC::ArrayPrototype::didChangeConstructorProperty): Deleted.
2047         * runtime/JSArrayBufferConstructor.cpp:
2048         (JSC::JSArrayBufferConstructor::finishCreation):
2049         * runtime/JSPromiseConstructor.cpp:
2050         (JSC::JSPromiseConstructor::finishCreation):
2051         * runtime/JSTypedArrayViewConstructor.cpp:
2052         (JSC::JSTypedArrayViewConstructor::finishCreation):
2053         * runtime/MapConstructor.cpp:
2054         (JSC::MapConstructor::finishCreation):
2055         * runtime/RegExpConstructor.cpp:
2056         (JSC::RegExpConstructor::finishCreation):
2057         * runtime/SetConstructor.cpp:
2058         (JSC::SetConstructor::finishCreation):
2059         * tests/stress/array-species-config-array-constructor.js: Added.
2060         (A):
2061         * tests/stress/symbol-species.js:
2062         (testSymbolSpeciesOnConstructor):
2063
2064 2016-02-10  Benjamin Poulain  <benjamin@webkit.org>
2065
2066         [JSC] The destination of Sqrt should be Def, not UseDef
2067         https://bugs.webkit.org/show_bug.cgi?id=154086
2068
2069         Reviewed by Geoffrey Garen.
2070
2071         An unfortunate copy-paste: the destination of SqrtDouble and SqrtFloat
2072         was defined as UseDef. As a result, the argument would be interfering
2073         with everything defined prior.
2074
2075         * b3/air/AirOpcode.opcodes:
2076
2077 2016-02-10  Chris Dumez  <cdumez@apple.com>
2078
2079         [Web IDL] interface objects should be Function objects
2080         https://bugs.webkit.org/show_bug.cgi?id=154038
2081         <rdar://problem/24569358>
2082
2083         Reviewed by Geoffrey Garen.
2084
2085         Update functionProtoFuncToString() to handle JSObjects that
2086         have the TypeOfShouldCallGetCallData flag and are callable,
2087         as these behave like functions and use ClassInfo::className()
2088         as function name in this case.
2089
2090         * runtime/FunctionPrototype.cpp:
2091         (JSC::functionProtoFuncToString):
2092
2093 2016-02-10  Chris Dumez  <cdumez@apple.com>
2094
2095         Attributes on the Window instance should be configurable unless [Unforgeable]
2096         https://bugs.webkit.org/show_bug.cgi?id=153920
2097         <rdar://problem/24563211>
2098
2099         Reviewed by Darin Adler.
2100
2101         Marking the Window instance attributes as configurable but cause
2102         getOwnPropertyDescriptor() to report them as configurable, as
2103         expected. However, trying to delete them would actually lead to
2104         unexpected behavior because:
2105         - We did not reify custom accessor properties (most of the Window
2106           properties are custom accessors) upon deletion.
2107         - For non-reified static properties marked as configurable,
2108           JSObject::deleteProperty() would attempt to call the property
2109           setter with undefined. As a result, calling delete window.name
2110           would cause window.name to become the string "undefined" instead
2111           of the undefined value.
2112
2113         * runtime/JSObject.cpp:
2114         (JSC::getClassPropertyNames):
2115         Now that we reify ALL properties, we only need to check the property table
2116         if we have not reified. As a result, I dropped the 'didReify' parameter for
2117         this function and instead only call this function if we have not yet reified.
2118
2119         (JSC::JSObject::putInlineSlow):
2120         Only call putEntry() if we have not reified: Drop the
2121         '|| !(entry->attributes() & BuiltinOrFunctionOrAccessor)'
2122         check as such properties now get reified as well.
2123
2124         (JSC::JSObject::deleteProperty):
2125         - Call reifyAllStaticProperties() instead of reifyStaticFunctionsForDelete()
2126           so that we now reify all properties upon deletion, including the custom
2127           accessors. reifyStaticFunctionsForDelete() is now removed and the same
2128           reification function is now used by: deletion, getOwnPropertyDescriptor()
2129           and eager reification of the prototype objects in the bindings.
2130         - Drop code that falls back to calling the static property setter with
2131           undefined if we cannot find the property in the property storage. As
2132           we now reify ALL properties, the code removing the property from the
2133           property storage should succeed, provided that the property actually
2134           exists.
2135
2136         (JSC::JSObject::getOwnNonIndexPropertyNames):
2137         Only call getClassPropertyNames() if we have not reified. We should no longer
2138         check the static property table after reifying now that we reify all
2139         properties.
2140
2141         (JSC::JSObject::reifyAllStaticProperties):
2142         Merge with reifyStaticFunctionsForDelete(). The only behavior change is the
2143         flattening to an uncacheable dictionary, like reifyStaticFunctionsForDelete()
2144         used to do.
2145
2146         * runtime/JSObject.h:
2147
2148 2016-02-10  Commit Queue  <commit-queue@webkit.org>
2149
2150         Unreviewed, rolling out r196251.
2151         https://bugs.webkit.org/show_bug.cgi?id=154078
2152
2153         Large regression on Dromaeo needs explanation (Requested by
2154         kling on #webkit).
2155
2156         Reverted changeset:
2157
2158         "Visiting a WeakBlock should report bytes visited, since we
2159         reported them allocated."
2160         https://bugs.webkit.org/show_bug.cgi?id=153978
2161         http://trac.webkit.org/changeset/196251
2162
2163 2016-02-10  Csaba Osztrogonác  <ossy@webkit.org>
2164
2165         REGRESSION(r196331): It made ~180 JSC tests crash on ARMv7 Linux
2166         https://bugs.webkit.org/show_bug.cgi?id=154064
2167
2168         Reviewed by Mark Lam.
2169
2170         * bytecode/PolymorphicAccess.cpp:
2171         (JSC::AccessCase::generate): Added EABI_32BIT_DUMMY_ARG where it is necessary.
2172         * dfg/DFGSpeculativeJIT.h: Fixed the comment.
2173         * jit/CCallHelpers.h:
2174         (JSC::CCallHelpers::setupArgumentsWithExecState): Added.
2175         * wasm/WASMFunctionCompiler.h: Fixed the comment.
2176
2177 2016-02-09  Keith Miller  <keith_miller@apple.com>
2178
2179         calling methods off super in a class constructor should check for TDZ
2180         https://bugs.webkit.org/show_bug.cgi?id=154060
2181
2182         Reviewed by Ryosuke Niwa.
2183
2184         In a class constructor we need to check for TDZ when calling a method
2185         off the super class. This is because, for super method calls, we use
2186         the derived class's newly constructed object as the super method's
2187         this value.
2188
2189         * bytecompiler/NodesCodegen.cpp:
2190         (JSC::FunctionCallDotNode::emitBytecode):
2191         * tests/stress/super-method-calls-check-tdz.js: Added.
2192         (Base):
2193         (Derived):
2194         (test):
2195
2196 2016-02-09  Filip Pizlo  <fpizlo@apple.com>
2197
2198         Don't crash if we fail to parse a builtin
2199         https://bugs.webkit.org/show_bug.cgi?id=154047
2200         rdar://problem/24300617
2201
2202         Reviewed by Mark Lam.
2203
2204         Crashing probably seemed like a good idea at the time, but we could get here in case of a
2205         near stack overflow, so that the parser bails because of recursion.
2206
2207         * parser/Parser.h:
2208         (JSC::parse):
2209
2210 2016-02-07  Gavin Barraclough  <barraclough@apple.com>
2211
2212         GetValueFunc/PutValueFunc should not take both slotBase and thisValue
2213         https://bugs.webkit.org/show_bug.cgi?id=154009
2214
2215         Reviewed by Geoff Garen.
2216
2217         In JavaScript there are two types of properties - regular value properties, and accessor properties.
2218         One difference between these is how they are reflected by getOwnPropertyDescriptor, and another is
2219         what object they operate on in the case of a prototype access. If you access a value property of a
2220         prototype object it return a value pertinent to the prototype, but in the case of a prototype object
2221         returning an accessor, then the accessor function is applied to the base object of the access.
2222
2223         JSC supports special 'custom' properties implemented as a c++ callback, and these custom properties
2224         can be used to implement either value- or accessor-like behavior. getOwnPropertyDescriptor behavior
2225         is selected via the CustomAccessor attribute. Value- or accessor-like object selection is current
2226         supported by passing both the slotBase and the thisValue to the callback,and hoping it uses the
2227         right one. This is probably inefficient, bug-prone, and leads to crazy like JSBoundSlotBaseFunction.
2228
2229         Instead, just pass one thisValue to the callback functions, consistent with CustomAccessor.
2230
2231         * API/JSCallbackObject.h:
2232         * API/JSCallbackObjectFunctions.h:
2233         (JSC::JSCallbackObject<Parent>::getStaticValue):
2234         (JSC::JSCallbackObject<Parent>::staticFunctionGetter):
2235         (JSC::JSCallbackObject<Parent>::callbackGetter):
2236             - Merged slotBase & thisValue to custom property callbacks.
2237         * bytecode/PolymorphicAccess.cpp:
2238         (JSC::AccessCase::generate):
2239             - Modified the call being JIT generated - GetValueFunc/PutValueFunc now only take 3,
2240               rather than 4 arguments. Selects which one to keep/drop based on access type.
2241         (WTF::printInternal):
2242         * bytecode/PolymorphicAccess.h:
2243         (JSC::AccessCase::isGet):
2244         (JSC::AccessCase::isPut):
2245         (JSC::AccessCase::isIn):
2246         (JSC::AccessCase::doesCalls):
2247         (JSC::AccessCase::isGetter):
2248         * bytecode/PutByIdStatus.cpp:
2249         (JSC::PutByIdStatus::computeForStubInfo):
2250         * jit/Repatch.cpp:
2251         (JSC::tryCacheGetByID):
2252         (JSC::tryCachePutByID):
2253             - Split the CustomGetter/Setter access types into Value/Accessor variants.
2254         * jsc.cpp:
2255         (WTF::CustomGetter::getOwnPropertySlot):
2256         (WTF::CustomGetter::customGetter):
2257         (WTF::RuntimeArray::RuntimeArray):
2258         (WTF::RuntimeArray::lengthGetter):
2259             - Merged slotBase & thisValue to custom property callbacks.
2260         * runtime/CustomGetterSetter.cpp:
2261         (JSC::callCustomSetter):
2262             - Pass 3 arguments when calling PutValueFunc.
2263         * runtime/CustomGetterSetter.h:
2264         * runtime/JSBoundSlotBaseFunction.cpp:
2265         (JSC::boundSlotBaseFunctionCall):
2266         (JSC::JSBoundSlotBaseFunction::JSBoundSlotBaseFunction):
2267         * runtime/JSCJSValue.cpp:
2268         (JSC::JSValue::putToPrimitive):
2269             - callCustomSetter currently takes a flag to distinguish value/accessor calls.
2270         * runtime/JSFunction.cpp:
2271         (JSC::retrieveArguments):
2272         (JSC::JSFunction::argumentsGetter):
2273         (JSC::retrieveCallerFunction):
2274         (JSC::JSFunction::callerGetter):
2275         (JSC::JSFunction::lengthGetter):
2276         (JSC::JSFunction::nameGetter):
2277         * runtime/JSFunction.h:
2278         * runtime/JSModuleNamespaceObject.cpp:
2279         (JSC::JSModuleNamespaceObject::visitChildren):
2280         (JSC::callbackGetter):
2281             - Merged slotBase & thisValue to custom property callbacks.
2282         * runtime/JSObject.cpp:
2283         (JSC::JSObject::putInlineSlow):
2284             - callCustomSetter currently takes a flag to distinguish value/accessor calls.
2285         * runtime/Lookup.h:
2286         (JSC::putEntry):
2287             - split PutPropertySlot setCustom into Value/Accessor variants.
2288         * runtime/PropertySlot.cpp:
2289         (JSC::PropertySlot::functionGetter):
2290         (JSC::PropertySlot::customGetter):
2291         * runtime/PropertySlot.h:
2292         (JSC::PropertySlot::PropertySlot):
2293         (JSC::PropertySlot::getValue):
2294             - added customGetter helper to call GetValueFunc.
2295         * runtime/PutPropertySlot.h:
2296         (JSC::PutPropertySlot::PutPropertySlot):
2297         (JSC::PutPropertySlot::setNewProperty):
2298         (JSC::PutPropertySlot::setCustomValue):
2299         (JSC::PutPropertySlot::setCustomAccessor):
2300         (JSC::PutPropertySlot::setThisValue):
2301         (JSC::PutPropertySlot::customSetter):
2302         (JSC::PutPropertySlot::context):
2303         (JSC::PutPropertySlot::isStrictMode):
2304         (JSC::PutPropertySlot::isCacheablePut):
2305         (JSC::PutPropertySlot::isCacheableSetter):
2306         (JSC::PutPropertySlot::isCacheableCustom):
2307         (JSC::PutPropertySlot::isCustomAccessor):
2308         (JSC::PutPropertySlot::isInitialization):
2309         (JSC::PutPropertySlot::cachedOffset):
2310         (JSC::PutPropertySlot::setCustomProperty): Deleted.
2311             - split PutPropertySlot setCustom into Value/Accessor variants.
2312         * runtime/RegExpConstructor.cpp:
2313         (JSC::RegExpConstructor::getOwnPropertySlot):
2314         (JSC::regExpConstructorDollar1):
2315         (JSC::regExpConstructorDollar2):
2316         (JSC::regExpConstructorDollar3):
2317         (JSC::regExpConstructorDollar4):
2318         (JSC::regExpConstructorDollar5):
2319         (JSC::regExpConstructorDollar6):
2320         (JSC::regExpConstructorDollar7):
2321         (JSC::regExpConstructorDollar8):
2322         (JSC::regExpConstructorDollar9):
2323         (JSC::regExpConstructorInput):
2324         (JSC::regExpConstructorMultiline):
2325         (JSC::regExpConstructorLastMatch):
2326         (JSC::regExpConstructorLastParen):
2327         (JSC::regExpConstructorLeftContext):
2328         (JSC::regExpConstructorRightContext):
2329         (JSC::setRegExpConstructorInput):
2330         (JSC::setRegExpConstructorMultiline):
2331         * runtime/RegExpObject.cpp:
2332         (JSC::RegExpObject::defineOwnProperty):
2333         (JSC::regExpObjectSetLastIndexStrict):
2334         (JSC::regExpObjectSetLastIndexNonStrict):
2335         (JSC::RegExpObject::put):
2336             - Merged slotBase & thisValue to custom property callbacks.
2337
2338 2016-02-09  Filip Pizlo  <fpizlo@apple.com>
2339
2340         Spread expressions are not fair game for direct binding
2341         https://bugs.webkit.org/show_bug.cgi?id=154042
2342         rdar://problem/24291413
2343
2344         Reviewed by Saam Barati.
2345
2346         Prior to this change we crashed on this:
2347
2348             var [x] = [...y];
2349
2350         Because NodesCodegen thinks that this is a direct binding.  It's not, because we cannot
2351         directly generate bytecode for "...y".  This is a unique property of spread expressions, so
2352         its sufficient to just bail out of direct binding if we see a spread expression. That's what
2353         this patch does.
2354
2355         * bytecompiler/NodesCodegen.cpp:
2356         (JSC::ArrayPatternNode::emitDirectBinding):
2357         * tests/stress/spread-in-tail.js: Added.
2358         (foo):
2359         (catch):
2360
2361 2016-02-09  Commit Queue  <commit-queue@webkit.org>
2362
2363         Unreviewed, rolling out r196286.
2364         https://bugs.webkit.org/show_bug.cgi?id=154026
2365
2366         Looks like 5% iOS PLT regression (Requested by kling on
2367         #webkit).
2368
2369         Reverted changeset:
2370
2371         "[iOS] Throw away some unlinked code when navigating to a new
2372         page."
2373         https://bugs.webkit.org/show_bug.cgi?id=154014
2374         http://trac.webkit.org/changeset/196286
2375
2376 2016-02-08  Keith Miller  <keith_miller@apple.com>
2377
2378         Error construction for inlined operations should not use the inliner's CodeBlock
2379         https://bugs.webkit.org/show_bug.cgi?id=154021
2380
2381         Reviewed by Mark Lam.
2382
2383         Previously, if one function, A, was inlined into another function, B, in the DFG/FTL
2384         we would use B's DFG/FTL CodeBlock to construct source information about the Error.
2385         We would correctly compute the bytecodeOffset in A for the an expression but we would
2386         not use one of A's CodeBlocks when looking up source. This caused crashes during
2387         operationIn as we expected to be able to find the text "in" in the source.
2388
2389         * runtime/ErrorInstance.cpp:
2390         (JSC::appendSourceToError):
2391         * tests/stress/inlined-error-gets-correct-codeblock-for-bytecodeoffset.js: Added.
2392         (map):
2393         (n):
2394         (one):
2395         (catch):
2396
2397 2016-02-08  Saam Barati  <sbarati@apple.com>
2398
2399         runtimeTypeForValue should protect against seeing TDZ value
2400         https://bugs.webkit.org/show_bug.cgi?id=154023
2401         rdar://problem/24291413
2402
2403         Reviewed by Michael Saboff.
2404
2405         There are a few back traces I've seen from crashes that bottom out
2406         inside runtimeTypeForValue. I haven't been able to reproduce
2407         any such crash, but it's likely that we're encountering the
2408         empty JSValue. It's better to just have this function protect
2409         against seeing the empty value instead of dereferencing a null
2410         pointer when it thinks the value is a cell.
2411
2412         * runtime/RuntimeType.cpp:
2413         (JSC::runtimeTypeForValue):
2414
2415 2016-02-08  Andreas Kling  <akling@apple.com>
2416
2417         [iOS] Throw away some unlinked code when navigating to a new page.
2418         <https://webkit.org/b/154014>
2419
2420         Reviewed by Gavin Barraclough.
2421
2422         * runtime/VM.cpp:
2423         (JSC::VM::deleteAllCodeExceptCaches):
2424         (JSC::VM::deleteAllLinkedCode): Deleted.
2425         * runtime/VM.h:
2426
2427 2016-02-08  Filip Pizlo  <fpizlo@apple.com>
2428
2429         B3::foldPathConstants() needs to execute its insertion set
2430         https://bugs.webkit.org/show_bug.cgi?id=154020
2431
2432         Reviewed by Saam Barati.
2433
2434         * b3/B3FoldPathConstants.cpp:
2435         * b3/testb3.cpp:
2436         (JSC::B3::testFoldPathEqual): Added this. It used to crash in validation.
2437         (JSC::B3::run):
2438
2439 2016-02-08  Yusuke Suzuki  <utatane.tea@gmail.com>
2440
2441         [JSC] Introduce @isObject bytecode intrinsic and use it instead of JS implemented one
2442         https://bugs.webkit.org/show_bug.cgi?id=153976
2443
2444         Reviewed by Darin Adler.
2445
2446         Use bytecode op_is_object directly.
2447
2448         * builtins/GlobalObject.js:
2449         (isObject): Deleted.
2450         * bytecode/BytecodeIntrinsicRegistry.h:
2451         * bytecompiler/NodesCodegen.cpp:
2452         (JSC::BytecodeIntrinsicNode::emit_intrinsic_toString):
2453         (JSC::BytecodeIntrinsicNode::emit_intrinsic_isObject):
2454         * runtime/JSGlobalObject.cpp:
2455         (JSC::JSGlobalObject::init): Deleted.
2456
2457 2016-02-08  Yusuke Suzuki  <utatane.tea@gmail.com>
2458
2459         {Map,Set}.prototype.forEach should be visible as own properties
2460         https://bugs.webkit.org/show_bug.cgi?id=153974
2461
2462         Reviewed by Darin Adler.
2463
2464         Now, Map and Set uses builtin tables. We should inlude it in class info.
2465
2466         * runtime/MapPrototype.cpp:
2467         * runtime/SetPrototype.cpp:
2468
2469 2016-02-08  Filip Pizlo  <fpizlo@apple.com>
2470
2471         Baseline JIT should not require its input to be constant-propagated
2472         https://bugs.webkit.org/show_bug.cgi?id=154011
2473         rdar://problem/24290933
2474
2475         Reviewed by Mark Lam.
2476
2477         * jit/JITArithmetic.cpp:
2478         (JSC::JIT::emitBitBinaryOpFastPath):
2479         (JSC::JIT::emitRightShiftFastPath):
2480         (JSC::JIT::emit_op_add):
2481         (JSC::JIT::emit_op_div):
2482         (JSC::JIT::emit_op_mul):
2483
2484 2016-02-08  Filip Pizlo  <fpizlo@apple.com>
2485
2486         CodeCache should give up on evals if there are variables under TDZ
2487         https://bugs.webkit.org/show_bug.cgi?id=154002
2488         rdar://problem/24300998
2489
2490         Reviewed by Mark Lam.
2491
2492         Disable the code cache optimization because our approach to TDZ for scoped variables - using
2493         a separate check_tdz opcode when logically it's the get_from_scope's job to do it - makes
2494         caching code impossible if there are any variables in TDZ.
2495
2496         We should do the right thing in the future, and fold the TDZ check into the get_from_scope.
2497         This is better not only because it will restore caching, but because our bytecode for heap
2498         accesses is usually at the highest practically doable level of abstraction, so that ICs,
2499         compilers and caches can see the intended meaning of the bytecode more easily.
2500
2501         This doesn't appear to slow anything down, but that's just because we don't have enough ES6
2502         benchmarks. I've filed: https://bugs.webkit.org/show_bug.cgi?id=154010
2503
2504         * runtime/CodeCache.cpp:
2505         (JSC::CodeCache::getGlobalCodeBlock):
2506
2507 2016-02-08  Skachkov Oleksandr  <gskachkov@gmail.com>
2508
2509         [ES6] Arrow function syntax. Using 'super' in arrow function that declared out of the class should lead to Syntax error
2510         https://bugs.webkit.org/show_bug.cgi?id=150893
2511
2512         Reviewed by Saam Barati.
2513
2514         'super' and 'super()' inside of the arrow function should lead to syntax error if they are used 
2515         out of the class context or they wrapped by ordinary function. Now JSC returns ReferenceError but 
2516         should return SyntaxError according to the following specs:
2517         http://www.ecma-international.org/ecma-262/6.0/#sec-function-definitions-static-semantics-early-errors
2518         and http://www.ecma-international.org/ecma-262/6.0/#sec-arrow-function-definitions-runtime-semantics-evaluation 
2519         Curren patch implemented only one case when super/super() are used inside of the arrow function
2520         Case when super/super() are used within the eval:
2521            class A {} 
2522            class B extends A { 
2523                costructor() { eval("super()");} 
2524            }
2525         is not part of this patch and will be implemented in this issue https://bugs.webkit.org/show_bug.cgi?id=153864. 
2526         The same for case when eval with super/super() is invoked in arrow function will be 
2527         implemented in issue https://bugs.webkit.org/show_bug.cgi?id=153977. 
2528  
2529         * parser/Parser.cpp:
2530         (JSC::Parser<LexerType>::parseFunctionInfo):
2531         * parser/Parser.h:
2532         (JSC::Scope::Scope):
2533         (JSC::Scope::setExpectedSuperBinding):
2534         (JSC::Scope::expectedSuperBinding):
2535         (JSC::Scope::setConstructorKind):
2536         (JSC::Scope::constructorKind):
2537         (JSC::Parser::closestParentNonArrowFunctionNonLexicalScope):
2538         * tests/stress/arrowfunction-lexical-bind-supercall-4.js:
2539         * tests/stress/arrowfunction-lexical-bind-superproperty.js:
2540
2541 2016-02-08  Filip Pizlo  <fpizlo@apple.com>
2542
2543         Parser should detect error before calls to parseAssignmentExpression()
2544         https://bugs.webkit.org/show_bug.cgi?id=153975
2545         rdar://problem/24291231
2546
2547         Reviewed by Saam Barati.
2548
2549         Fixes a very hard-to-create situation that an internal test picked up.
2550
2551         * parser/Parser.cpp:
2552         (JSC::Parser<LexerType>::parseVariableDeclarationList):
2553         (JSC::Parser<LexerType>::parseAssignmentExpression):
2554
2555 2016-02-08  Andreas Kling  <akling@apple.com>
2556
2557         Visiting a WeakBlock should report bytes visited, since we reported them allocated.
2558         <https://webkit.org/b/153978>
2559
2560         Reviewed by Darin Adler.
2561
2562         When creating a WeakBlock, we tell Heap that we've allocated 1 KB (WeakBlock::blockSize)
2563         of memory. Consequently, when visiting a WeakBlock, we should also report 1 KB of memory
2564         visited. Otherwise Heap will think that those 1 KB already went away.
2565
2566         This was causing us to underestimate heap size, which affects collection scheduling.
2567
2568         * heap/SlotVisitor.h:
2569         (JSC::SlotVisitor::reportMemoryVisited):
2570         * heap/WeakBlock.cpp:
2571         (JSC::WeakBlock::visit):
2572
2573 2016-02-07  Saam barati  <sbarati@apple.com>
2574
2575         Follow up patch to: [ES6] bound functions .name property should be "bound " + the target function's name 
2576         https://bugs.webkit.org/show_bug.cgi?id=153796
2577
2578         Reviewed by Darin Adler.
2579
2580         This follow-up patch addresses some comments/suggestions by
2581         Ryosuke, Darin, and Joe. It simplifies JSBoundFunction::toStringName
2582         and adds some tests for bound names.
2583
2584         * runtime/JSBoundFunction.cpp:
2585         (JSC::hasInstanceBoundFunction):
2586         (JSC::JSBoundFunction::create):
2587         (JSC::JSBoundFunction::toStringName):
2588
2589 2016-02-07  Filip Pizlo  <fpizlo@apple.com>
2590
2591         String.match should defend against matches that would crash the VM
2592         https://bugs.webkit.org/show_bug.cgi?id=153964
2593         rdar://problem/24301119
2594
2595         Reviewed by Saam Barati.
2596
2597         This fixes a crash in an internal test case.
2598
2599         * runtime/ArgList.cpp:
2600         (JSC::MarkedArgumentBuffer::slowAppend): Use best practices to ensure that the size we
2601             compute makes sense. Crash if it stops making sense, since most users of this API assume
2602             that they are creating something small enough to fit on the stack.
2603         * runtime/ArgList.h:
2604         (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
2605         (JSC::MarkedArgumentBuffer::size):
2606         (JSC::MarkedArgumentBuffer::operator new): Deleted. These were ineffective. According to the
2607             debugger, we were still calling system malloc. So, I changed the code to use fastMalloc()
2608             directly.
2609         (JSC::MarkedArgumentBuffer::operator delete): Deleted.
2610         * runtime/StringPrototype.cpp:
2611         (JSC::stringProtoFuncMatch): Explicitly defend against absurd sizes. Of course, it's still
2612             possible to crash the VM on OOME. That's sort of always been the philosophy of JSC - we
2613             don't guarantee that you'll get a nice-looking error whenever you run out of memory,
2614             since in a GC'd environment you can't really guarantee those things. But, if you have a
2615             match that obvious won't fit in memory, then reporting an error is useful in case this is
2616             a developer experimenting with a buggy regexp.
2617
2618 2016-02-07  Dan Bernstein  <mitz@apple.com>
2619
2620         [Cocoa] Replace __has_include guards around inclusion of Apple-internal-SDK headers with USE(APPLE_INTERNAL_SDK)
2621         https://bugs.webkit.org/show_bug.cgi?id=153963
2622
2623         Reviewed by Sam Weinig.
2624
2625         * inspector/remote/RemoteInspectorXPCConnection.mm:
2626
2627 2016-02-06  Filip Pizlo  <fpizlo@apple.com>
2628
2629         FTL must store the call site index before runtime calls, even if it's the tail call slow path
2630         https://bugs.webkit.org/show_bug.cgi?id=153955
2631         rdar://problem/24290970
2632
2633         Reviewed by Saam Barati.
2634
2635         This is necessary because you could throw an exception in a host call on the tail call's slow
2636         path. That'll route us to lookupExceptionHandler(), which unwinds starting with the call site
2637         index of our frame. Bad things happen if it's not set. Prior to this patch it was possible
2638         for the call site index field to be uninitialized, which meant that the throwing machinery
2639         was making a wild guess about where we are.
2640
2641         * ftl/FTLLowerDFGToLLVM.cpp:
2642         (JSC::FTL::DFG::LowerDFGToLLVM::compileTailCall):
2643         * tests/stress/tail-call-host-call-throw.js: Added.
2644
2645 2016-02-06  Darin Adler  <darin@apple.com>
2646
2647         Finish auditing call sites of upper() and lower(), eliminate many, and rename the functions
2648         https://bugs.webkit.org/show_bug.cgi?id=153905
2649
2650         Reviewed by Sam Weinig.
2651
2652         * runtime/IntlObject.cpp:
2653         (JSC::canonicalLangTag): Use converToASCIIUppercase on the language tag.
2654
2655         * runtime/StringPrototype.cpp:
2656         (JSC::stringProtoFuncToLowerCase): Tweak style and update for name change.
2657         (JSC::stringProtoFuncToUpperCase): Ditto.
2658
2659 2016-02-06  Chris Dumez  <cdumez@apple.com>
2660
2661         Object.getOwnPropertyDescriptor() does not work on sub-frame's window
2662         https://bugs.webkit.org/show_bug.cgi?id=153925
2663
2664         Reviewed by Darin Adler.
2665
2666         Calling Object.getOwnPropertyDescriptor() on a sub-frame's window was
2667         returning undefined for that window's own properties. The reason was
2668         that the check getOwnPropertySlot() is using to make sure the
2669         PropertySlot is not for a property coming from the prototype was wrong.
2670
2671         The check was checking that 'this != slotBase' which works fine unless
2672         this is a JSProxy (e.g. JSDOMWindowShell). To handle proxies, the code
2673         was also checking that 'slotBase.toThis() != this', attempting to
2674         get the slotBase/Window's proxy. However, due to the implementation of
2675         toThis(), we were getting the lexical global object's proxy instead of
2676         slotBase's proxy. To avoid this issue, the new code explicitly checks
2677         if 'this' is a JSProxy and makes sure 'JSProxy::target() != slotBase',
2678         instead of using toThis().
2679
2680         * runtime/JSObject.cpp:
2681         (JSC::JSObject::getOwnPropertyDescriptor):
2682
2683 2016-02-06  Andreas Kling  <akling@apple.com>
2684
2685         [iOS] Throw away linked code when navigating to a new page.
2686         <https://webkit.org/b/153851>
2687
2688         Reviewed by Gavin Barraclough.
2689
2690         Add a VM API for throwing away linked code only.
2691
2692         * runtime/VM.cpp:
2693         (JSC::VM::deleteAllLinkedCode):
2694         * runtime/VM.h:
2695
2696 2016-02-06  Commit Queue  <commit-queue@webkit.org>
2697
2698         Unreviewed, rolling out r196104.
2699         https://bugs.webkit.org/show_bug.cgi?id=153940
2700
2701         Regressed Speedometer on iOS (Requested by kling on #webkit).
2702
2703         Reverted changeset:
2704
2705         "[iOS] Throw away linked code when navigating to a new page."
2706         https://bugs.webkit.org/show_bug.cgi?id=153851
2707         http://trac.webkit.org/changeset/196104
2708
2709 2016-02-05  Alex Christensen  <achristensen@webkit.org>
2710
2711         Fix internal Windows build
2712         https://bugs.webkit.org/show_bug.cgi?id=153930
2713         <rdar://problem/24534864>
2714
2715         Reviewed by Mark Lam.
2716
2717         * JavaScriptCore.vcxproj/JavaScriptCore.proj:
2718         I made a typo in r196144.
2719
2720 2016-02-05  Saam barati  <sbarati@apple.com>
2721
2722         Web Inspector: Include SamplingProfiler's expression-level data for stack frames in the protocol
2723         https://bugs.webkit.org/show_bug.cgi?id=153455
2724         <rdar://problem/24335884>
2725
2726         Reviewed by Joseph Pecoraro.
2727
2728         We now send the sampling profiler's expression-level
2729         line/column info in the inspector protocol.
2730
2731         * inspector/agents/InspectorScriptProfilerAgent.cpp:
2732         (Inspector::buildSamples):
2733         * inspector/protocol/ScriptProfiler.json:
2734         * runtime/SamplingProfiler.h:
2735         (JSC::SamplingProfiler::StackFrame::hasExpressionInfo):
2736
2737 2016-02-05  Saam barati  <sbarati@apple.com>
2738
2739         follow-up to: JSC Sampling Profiler: (host) is confusing in cases where I would expect to see JS name
2740         https://bugs.webkit.org/show_bug.cgi?id=153663
2741         <rdar://problem/24415092>
2742
2743         Rubber stamped by Joseph Pecoraro.
2744
2745         We were performing operations that required us to
2746         hold the VM lock even when we might not have been holding it.
2747         We now ensure we're holding it.
2748
2749         * inspector/agents/InspectorScriptProfilerAgent.cpp:
2750         (Inspector::InspectorScriptProfilerAgent::trackingComplete):
2751
2752 2016-02-05  Filip Pizlo  <fpizlo@apple.com>
2753
2754         Arrayify for a typed array shouldn't create a monster
2755         https://bugs.webkit.org/show_bug.cgi?id=153908
2756         rdar://problem/24290639
2757
2758         Reviewed by Mark Lam.
2759
2760         Previously if you convinced the DFG to emit an Arrayify to ArrayStorage and then gave it a
2761         typed array, you'd corrupt the object.
2762
2763         * runtime/JSArrayBufferView.cpp:
2764         (WTF::printInternal):
2765         * runtime/JSArrayBufferView.h:
2766         * runtime/JSGenericTypedArrayViewInlines.h:
2767         (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren):
2768         (JSC::JSGenericTypedArrayView<Adaptor>::slowDownAndWasteMemory):
2769         * runtime/JSObject.cpp:
2770         (JSC::JSObject::copyButterfly):
2771         (JSC::JSObject::enterDictionaryIndexingMode):
2772         (JSC::JSObject::ensureInt32Slow):
2773         (JSC::JSObject::ensureDoubleSlow):
2774         (JSC::JSObject::ensureContiguousSlow):
2775         (JSC::JSObject::ensureArrayStorageSlow):
2776         (JSC::JSObject::growOutOfLineStorage):
2777         (JSC::getBoundSlotBaseFunctionForGetterSetter):
2778         * runtime/Structure.h:
2779         * tests/stress/arrayify-array-storage-typed-array.js: Added. This test failed.
2780         * tests/stress/arrayify-int32-typed-array.js: Added. This test case already had other protections, but we beefed them up.
2781
2782 2016-02-04  Joseph Pecoraro  <pecoraro@apple.com>
2783
2784         Web Inspector: InspectorTimelineAgent doesn't need to recompile functions because it now uses the sampling profiler
2785         https://bugs.webkit.org/show_bug.cgi?id=153500
2786         <rdar://problem/24352458>
2787
2788         Reviewed by Timothy Hatcher.
2789
2790         Be more explicit about enabling legacy profiling.
2791
2792         * jsc.cpp:
2793         * runtime/Executable.cpp:
2794         (JSC::ScriptExecutable::newCodeBlockFor):
2795         * runtime/JSGlobalObject.cpp:
2796         (JSC::JSGlobalObject::hasLegacyProfiler):
2797         (JSC::JSGlobalObject::createProgramCodeBlock):
2798         (JSC::JSGlobalObject::createEvalCodeBlock):
2799         (JSC::JSGlobalObject::createModuleProgramCodeBlock):
2800         (JSC::JSGlobalObject::hasProfiler): Deleted.
2801         * runtime/JSGlobalObject.h:
2802         (JSC::JSGlobalObject::supportsLegacyProfiling):
2803         (JSC::JSGlobalObject::supportsProfiling): Deleted.
2804
2805 2016-02-04  Keith Miller  <keith_miller@apple.com>
2806
2807         ArrayPrototype should have a destroy function
2808         https://bugs.webkit.org/show_bug.cgi?id=153847
2809
2810         Reviewed by Filip Pizlo.
2811
2812         ArrayPrototype should have an destroy function as it now has a unique_ptr member that
2813         needs to be freed at the end of the object's life cycle. Also, this patch adds an
2814         option, gcAtEnd, that will cause jsc.cpp to do a garbage collection before exiting.
2815
2816         * jsc.cpp:
2817         (runJSC):
2818         (jscmain):
2819         * runtime/ArrayPrototype.cpp:
2820         (JSC::ArrayPrototype::create):
2821         (JSC::ArrayPrototype::destroy):
2822         * runtime/ArrayPrototype.h:
2823         * runtime/Options.h:
2824
2825 2016-02-04  Filip Pizlo  <fpizlo@apple.com>
2826
2827         REGRESSION(192409): Cannot rely on add32() to zero-extend
2828         https://bugs.webkit.org/show_bug.cgi?id=153897
2829
2830         Unreviewed rollout of r192409.
2831
2832         * assembler/MacroAssemblerARM64.h:
2833         (JSC::MacroAssemblerARM64::add32):
2834         (JSC::MacroAssemblerARM64::add64):
2835         * assembler/MacroAssemblerARMv7.h:
2836         (JSC::MacroAssemblerARMv7::add32):
2837         * assembler/MacroAssemblerX86.h:
2838         (JSC::MacroAssemblerX86::add32):
2839         * assembler/MacroAssemblerX86Common.h:
2840         (JSC::MacroAssemblerX86Common::add32):
2841         (JSC::MacroAssemblerX86Common::add8):
2842         (JSC::MacroAssemblerX86Common::branchAdd32):
2843         (JSC::MacroAssemblerX86Common::generateTest32):
2844         (JSC::MacroAssemblerX86Common::clz32AfterBsr):
2845         (JSC::MacroAssemblerX86Common::add32AndSetFlags): Deleted.
2846         * assembler/MacroAssemblerX86_64.h:
2847         (JSC::MacroAssemblerX86_64::add32):
2848         (JSC::MacroAssemblerX86_64::add64):
2849         (JSC::MacroAssemblerX86_64::branchAdd64):
2850         (JSC::MacroAssemblerX86_64::repatchCall):
2851         (JSC::MacroAssemblerX86_64::clz64AfterBsr):
2852         (JSC::MacroAssemblerX86_64::add64AndSetFlags): Deleted.
2853
2854 2016-02-04  Andreas Kling  <akling@apple.com>
2855
2856         Remove dead ENABLE(BYTECODE_COMMENTS) cruft.
2857         <https://webkit.org/b/153888>
2858
2859         Reviewed by Antti Koivisto.
2860
2861         * bytecode/UnlinkedCodeBlock.cpp:
2862         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): Deleted.
2863         * bytecode/UnlinkedCodeBlock.h:
2864         (JSC::UnlinkedCodeBlock::shrinkToFit): Deleted.
2865
2866 2016-02-04  Saam barati  <sbarati@apple.com>
2867
2868         JSC Sampling Profiler: (host) is confusing in cases where I would expect to see JS name
2869         https://bugs.webkit.org/show_bug.cgi?id=153663
2870         <rdar://problem/24415092>
2871
2872         Reviewed by Geoffrey Garen.
2873
2874         We now collect the Callee in the processed StackFrame
2875         when the Callee is a valid GC object. We later ask
2876         the Callee for it's .displayName or .name property.
2877         When we don't have a valid callee, we will still
2878         use the Executable for this information.
2879
2880         This helps us come up with good names for frames where 
2881         the Callee object is a bound function or an InternalFunction.
2882
2883         * inspector/agents/InspectorScriptProfilerAgent.cpp:
2884         (Inspector::InspectorScriptProfilerAgent::addEvent):
2885         (Inspector::buildSamples):
2886         (Inspector::InspectorScriptProfilerAgent::trackingComplete):
2887         * runtime/SamplingProfiler.cpp:
2888         (JSC::reportStats):
2889         (JSC::FrameWalker::walk):
2890         (JSC::SamplingProfiler::processUnverifiedStackTraces):
2891         (JSC::SamplingProfiler::visit):
2892         (JSC::SamplingProfiler::shutdown):
2893         (JSC::SamplingProfiler::clearData):
2894         (JSC::SamplingProfiler::StackFrame::nameFromCallee):
2895         (JSC::SamplingProfiler::StackFrame::displayName):
2896         (JSC::SamplingProfiler::StackFrame::displayNameForJSONTests):
2897         (JSC::SamplingProfiler::stackTracesAsJSON):
2898         * runtime/SamplingProfiler.h:
2899         (JSC::SamplingProfiler::UnprocessedStackFrame::UnprocessedStackFrame):
2900         (JSC::SamplingProfiler::StackFrame::StackFrame):
2901         * tests/stress/sampling-profiler-basic.js:
2902         (platformSupportsSamplingProfiler.nothing):
2903         (platformSupportsSamplingProfiler.top):
2904         * tests/stress/sampling-profiler-bound-function-name.js: Added.
2905         (platformSupportsSamplingProfiler.foo):
2906         (platformSupportsSamplingProfiler.bar):
2907         (platformSupportsSamplingProfiler.let.baz):
2908         (platformSupportsSamplingProfiler):
2909         * tests/stress/sampling-profiler-display-name.js: Added.
2910         (platformSupportsSamplingProfiler.foo):
2911         (platformSupportsSamplingProfiler.baz):
2912         (platformSupportsSamplingProfiler.):
2913         (platformSupportsSamplingProfiler.bar):
2914         (platformSupportsSamplingProfiler.jaz):
2915         (platformSupportsSamplingProfiler.makeFunction.let.result):
2916         (platformSupportsSamplingProfiler.makeFunction):
2917         * tests/stress/sampling-profiler-internal-function-name.js: Added.
2918         (platformSupportsSamplingProfiler.foo):
2919         (platformSupportsSamplingProfiler.bar):
2920         (platformSupportsSamplingProfiler):
2921
2922 2016-02-04  Chris Dumez  <cdumez@apple.com>
2923
2924         Object.getOwnPropertyDescriptor() returns incomplete descriptor for instance properties
2925         https://bugs.webkit.org/show_bug.cgi?id=153817
2926
2927         Reviewed by Geoffrey Garen.
2928
2929         Extend support for Object.getOwnPropertyDescriptor() on native bindings
2930         to instance properties (e.g. Unforgeable properties or Global object
2931         properties) so that the returned descriptor has getter / setter
2932         functions, as expected.
2933
2934         * runtime/JSObject.cpp:
2935         (JSC::JSObject::reifyAllStaticProperties):
2936         Add method that reifies all static properties, including the custom
2937         accessors. This is similar to what is done eagerly on the prototype
2938         objects in the bindings code.
2939
2940         (JSC::JSObject::getOwnPropertyDescriptor):
2941         getOwnPropertyDescriptor() would previously fails for custom accessors
2942         that are on the instance because getDirect() does not check the static
2943         property table and those custom accessors were not reified (We only
2944         reified all properties eagerly - including custom accessors - on
2945         prototype objects. To address this issue, we now call
2946         reifyAllStaticProperties() if the call to getDirect() fails and then
2947         call getDirect() again. This fix is however insufficient for Window
2948         properties because |this| is a JSDOMWindowShell / JSProxy in this case
2949         and getDirect() / reifyAllStaticProperties() would fail as the proxy
2950         does not actually have the properties. This issue was addressed by
2951         checking if |this| is a JSProxy and then using JSProxy::target() instead
2952         of |this| for the calls to getDirect() and for the reification.
2953
2954         * runtime/JSObject.h:
2955         * runtime/Lookup.h:
2956         (JSC::reifyStaticProperty):
2957         (JSC::reifyStaticProperties):
2958         Move most code in reifyStaticProperties() to a separate function so the
2959         code can be shared with JSObject::reifyAllStaticProperties().
2960         reifyStaticProperties() is currently called by the bindings on the
2961         prototype objects.
2962
2963 2016-02-04  Alex Christensen  <achristensen@webkit.org>
2964
2965         Fix internal Windows build
2966         https://bugs.webkit.org/show_bug.cgi?id=153886
2967         <rdar://problem/24499887>
2968
2969         Reviewed by Mark Lam.
2970
2971         * JavaScriptCore.vcxproj/JavaScriptCore.proj:
2972         In r190253 I changed the directory of the headers from AppleInternal/include/JavaScriptCore 
2973         to AppleInternal/include/private/JavaScriptCore.  This is ok for WebCore and WebKit, but not
2974         other projects, such as CFNetwork, which expect the public API headers to be in the old location.
2975         This used to be done by a combination of copy-files.cmd and the old JavaScriptCore.proj.
2976         This change copies all the API headers, which copies everything in copy-files.cmd except APIShims.h
2977         which does not exist any more.  It copies additional headers that were not copied before, but
2978         I think this is beneficial so we do not forget to add new public headers to a list of public headers
2979         to be copied in the internal build.  Having extra public headers in the internal Windows build is
2980         not a problem because only internal clients use the internal Windows build.
2981
2982 2016-02-03  Yusuke Suzuki  <utatane.tea@gmail.com>
2983
2984         [JSC] Make some classes non JSDestructibleObject
2985         https://bugs.webkit.org/show_bug.cgi?id=153838
2986
2987         Reviewed by Geoffrey Garen.
2988
2989         SymbolPrototype, JSMapIterator and JSSetIterator are trivially destructible.
2990         So there is no need to inherit JSDestructibleObject.
2991
2992         * runtime/JSMapIterator.cpp:
2993         (JSC::JSMapIterator::destroy): Deleted.
2994         * runtime/JSMapIterator.h:
2995         * runtime/JSSetIterator.cpp:
2996         (JSC::JSSetIterator::destroy): Deleted.
2997         * runtime/JSSetIterator.h:
2998         * runtime/MapData.h:
2999         * runtime/SymbolPrototype.h:
3000
3001 2016-02-03  Yusuke Suzuki  <utatane.tea@gmail.com>
3002
3003         [JSC] Symbol structure has unnecessary flags
3004         https://bugs.webkit.org/show_bug.cgi?id=153840
3005
3006         Reviewed by Saam Barati.
3007
3008         * runtime/Symbol.h:
3009         * tests/stress/symbol-get-own-property.js: Added.
3010         (shouldBe):
3011
3012 2016-02-03  Andreas Kling  <akling@apple.com>
3013
3014         [iOS] Throw away linked code when navigating to a new page.
3015         <https://webkit.org/b/153851>
3016
3017         Reviewed by Gavin Barraclough.
3018
3019         Add a VM API for throwing away linked code only.
3020
3021         * runtime/VM.cpp:
3022         (JSC::VM::deleteAllLinkedCode):
3023         * runtime/VM.h:
3024
3025 2016-02-03  Michael Catanzaro  <mcatanzaro@igalia.com>
3026
3027         [GTK][EFL] Switch FTL to B3
3028         https://bugs.webkit.org/show_bug.cgi?id=153478
3029
3030         Reviewed by Csaba Osztrogonác.
3031
3032         Conditionalize code to make it possible to build FTL completely without LLVM.
3033
3034         * CMakeLists.txt:
3035         * dfg/DFGCommon.h:
3036         * dfg/DFGPlan.cpp:
3037         (JSC::DFG::Plan::compileInThreadImpl):
3038         * ftl/FTLAbbreviatedTypes.h:
3039         * ftl/FTLFail.cpp:
3040         (JSC::FTL::fail):
3041         * ftl/FTLState.cpp:
3042         (JSC::FTL::State::State):
3043         (JSC::FTL::State::~State):
3044
3045 2016-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>
3046
3047         Unreviewed. Fix JavaScriptCore build with B3 enabled.
3048
3049         Include <limits.h> for UINT_MAX.
3050
3051         * b3/B3StackSlot.h:
3052         * b3/air/AirStackSlot.h:
3053
3054 2016-02-02  Caitlin Potter  <caitp@igalia.com>
3055
3056         JSSymbolTableObject::deleteProperty() crashes deleting Symbols
3057         https://bugs.webkit.org/show_bug.cgi?id=153816
3058
3059         Reviewed by Darin Adler.
3060
3061         Changes JSSymbolTableObject::deleteProperty() to check if its
3062         symbolTable() contains the property's uid() rather than publicName().
3063         This ensures that it will not crash in the case of Symbols.
3064
3065         * runtime/JSSymbolTableObject.cpp:
3066         (JSC::JSSymbolTableObject::deleteProperty):
3067         * tests/es6/Object_static_methods_Object.getOwnPropertyDescriptors.js:
3068         (testGlobalProxy):
3069         * tests/stress/regress-153816.js: Added.
3070         (deleteSymbolFromJSSymbolTableObject):
3071
3072 2016-02-02  Benjamin Poulain  <benjamin@webkit.org>
3073
3074         [JSC] Do not copy FP when lowering FramePointer
3075         https://bugs.webkit.org/show_bug.cgi?id=153769
3076
3077         Reviewed by Michael Saboff.
3078
3079         That extra move is just wasted time. The fewer Moves we have,
3080         the happier IRC is.
3081
3082         * b3/B3LowerToAir.cpp:
3083         (JSC::B3::Air::LowerToAir::tmp):
3084         (JSC::B3::Air::LowerToAir::lower):
3085
3086 2016-02-02  Keith Miller  <keith_miller@apple.com>
3087
3088         DFG, FTL, B3, and Air should all have a unique option for printing their graphs
3089         https://bugs.webkit.org/show_bug.cgi?id=153815
3090
3091         Reviewed by Benjamin Poulain.
3092
3093         This patch adds a new printing option for each of the DFG/FTL compilation phases.
3094
3095         * b3/B3Common.cpp:
3096         (JSC::B3::shouldDumpIR):
3097         (JSC::B3::shouldDumpIRAtEachPhase):
3098         * b3/B3Common.h:
3099         * b3/B3Generate.cpp:
3100         (JSC::B3::generateToAir):
3101         * b3/B3PhaseScope.cpp:
3102         (JSC::B3::PhaseScope::PhaseScope):
3103         * b3/air/AirGenerate.cpp:
3104         (JSC::B3::Air::prepareForGeneration):
3105         * b3/air/AirPhaseScope.cpp:
3106         (JSC::B3::Air::PhaseScope::PhaseScope):
3107         * dfg/DFGCFAPhase.cpp:
3108         (JSC::DFG::CFAPhase::run):
3109         * dfg/DFGCommon.h:
3110         (JSC::DFG::shouldDumpGraphAtEachPhase):
3111         * dfg/DFGPhase.cpp:
3112         (JSC::DFG::Phase::beginPhase):
3113         * runtime/Options.cpp:
3114         (JSC::recomputeDependentOptions):
3115         * runtime/Options.h:
3116
3117 2016-02-02  Caitlin Potter  <caitp@igalia.com>
3118
3119         [JSC] make Object.getOwnPropertyDescriptors() work with non-JSObject types
3120         https://bugs.webkit.org/show_bug.cgi?id=153814
3121
3122         Reviewed by Yusuke Suzuki.
3123
3124         * runtime/ObjectConstructor.cpp:
3125         (JSC::objectConstructorGetOwnPropertyDescriptors):
3126         * tests/es6/Object_static_methods_Object.getOwnPropertyDescriptors.js:
3127         (testGlobalProxy):
3128
3129 2016-02-02  Aakash Jain  <aakash_jain@apple.com>
3130
3131         Remove references to CallFrameInlines.h
3132         https://bugs.webkit.org/show_bug.cgi?id=153810
3133
3134         Reviewed by Mark Lam.
3135
3136         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
3137         * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
3138
3139 2016-02-02  Caitlin Potter  <caitp@igalia.com>
3140
3141         [JSC] Implement Object.getOwnPropertyDescriptors() proposal
3142         https://bugs.webkit.org/show_bug.cgi?id=153799
3143
3144         Reviewed by Darin Adler.
3145
3146         Implements the Object.getOwnPropertyDescriptors() proposal, which
3147         reached Stage 3 in the TC39 process in January 2016.
3148         https://github.com/tc39/proposal-object-getownpropertydescriptors
3149
3150         The method extracts a set of property descriptor objects, which can
3151         be safely used via `Object.create()`.
3152
3153         * runtime/ObjectConstructor.cpp:
3154         (JSC::objectConstructorGetOwnPropertyDescriptors):
3155
3156 2016-02-02  Filip Pizlo  <fpizlo@apple.com>
3157
3158         B3 should be able to compile trivial self-loops
3159         https://bugs.webkit.org/show_bug.cgi?id=153802
3160         rdar://problem/24465632
3161
3162         Reviewed by Michael Saboff.
3163
3164         Tail-duplicating a self-loop would mean doing a kind of loop unrolling. It wouldn't be
3165         profitable even if it did work. It turns out that it doesn't work, because we edit the target
3166         block before reading the source block, which breaks if the target and source block are the
3167         same.
3168
3169         This disables tail duplication of self-loops, adds a test, and adds better validation for this
3170         issue.
3171
3172         * b3/B3DuplicateTails.cpp:
3173         * b3/B3Procedure.cpp:
3174         (JSC::B3::Procedure::resetReachability):
3175         * b3/testb3.cpp:
3176         (JSC::B3::testComputeDivisionMagic):
3177         (JSC::B3::testTrivialInfiniteLoop):
3178         (JSC::B3::zero):
3179         (JSC::B3::run):
3180
3181 2016-02-02  Saam barati  <sbarati@apple.com>
3182
3183         [ES6] bound functions .name property should be "bound " + the target function's name
3184         https://bugs.webkit.org/show_bug.cgi?id=153796
3185
3186         Reviewed by Mark Lam.
3187
3188         See http://tc39.github.io/ecma262/#sec-function.prototype.bind for details.
3189         What the spec says:
3190         ```
3191         function foo() { }
3192         foo.bind(null).name === "bound foo"
3193
3194         (function bar() { }).bind(null).name === "bound bar"
3195         ```
3196
3197         * runtime/FunctionPrototype.cpp:
3198         (JSC::functionProtoFuncToString):
3199         * runtime/JSBoundFunction.cpp:
3200         (JSC::hasInstanceBoundFunction):
3201         (JSC::JSBoundFunction::create):
3202         (JSC::JSBoundFunction::visitChildren):
3203         (JSC::JSBoundFunction::toStringName):
3204         * runtime/JSBoundFunction.h:
3205         (JSC::JSBoundFunction::boundThis):
3206         (JSC::JSBoundFunction::boundArgs):
3207         (JSC::JSBoundFunction::createStructure):
3208         * tests/es6.yaml:
3209
3210 2016-02-02  Filip Pizlo  <fpizlo@apple.com>
3211
3212         Get rid of anonymous stack slots
3213         https://bugs.webkit.org/show_bug.cgi?id=151128
3214
3215         Reviewed by Mark Lam.
3216
3217         When I first designed stack slots, the idea was that an "anonymous" stack slot was one that
3218         behaved exactly like a C variable: if it never escaped, it would not need to get stack space
3219         for the entire lifetime of the function - it could get any slab of stack so long as it
3220         didn't interfere with other stack slots that would be live at the same time. The reason I
3221         called them "anonymous" is that external code could not get its address. This felt like it
3222         gave the stack slot anonymity. But it was never a good name for this concept.
3223
3224         Then I had the register allocator lower temporaries to anonymous stack slots when it spilled
3225         them. Spilling became the sole client of anonymous stack slots.
3226
3227         Then I realized that there was an aspect of how spill slots work that make them want
3228         slightly different semantics than a normal C variable. A C variable is a proper memory
3229         location - you could do a store to only some bytes in the variable, and it's reasonable to
3230         expect that this will not destroy the other bytes in the variable. But that means that to
3231         compute their liveness, you have to do something like a per-byte liveness. That's overkill
3232         for spill slots. You want any store to the spill slot to kill the whole slot even if it
3233         writes to just part of the slot. This matches how temporaries work. So rather than implement
3234         per-byte liveness, I decided to change the semantics of anonymous stack slots to make them
3235         work like how I wanted spill slots to work. This was quite dirty, and put B3 in the awkward
3236         situation that B3's anonymous stack slots behaved like spill slots. But it was OK since
3237         nobody used anonymous stack slots in B3.
3238
3239         Then I added tail duplication, which required having a mechanism for introducing non-SSA
3240         variables in B3. I decided to use anonymous stack slots for this purpose. All of a sudden
3241         this all felt like it made sense: anonymous stack slots were just like variables! Hooray for
3242         the amazing foresight of anonymous stack slots!
3243
3244         But then I realized that this was all very bad. We want B3 to be able to optimize Store and
3245         Load operations by reasoning about how they affect bytes in memory. For example, if you do
3246         a Load of a 64-bit value, and then you modify just the low 32 bits of that value, and then
3247         you do a 64-bit store back to the same location, then it would be better to transform this
3248         into 32-bit operations. We don't do this optimization yet, but it's the kind of thing that
3249         we want B3 to be able to do. To do it, we need Store to mean that it only affects N bytes
3250         starting at the pointer, where N is the size of the thing being stored. But that's not what
3251         Store means for anonymous stack slots. For anonymous slots, storing to any byte in the slot
3252         clobbers all bytes in the slot. We were never clear if you need to store directly to an
3253         anonymous slot to get this behavior, or if any pointer that points to an anoymous slot must
3254         exhibit this behavior when stored to. Neither kinds of semantics make sense to me.
3255
3256         This change fixes the problem by eradicating anonymous stack slots. In B3, they are replaced
3257         with Variables. In Air, they are replaced with a different stack slot kind, called Spill.
3258         There is no such thing as stack slot kinds in B3 anymore, all B3 stack slots are locked. In
3259         Air, there is still the concept of stack slot kind - Locked or Spill.
3260
3261         B3 Variables are awesome. They are exactly what they seem to be. They have a type. They are
3262         declared at the top level in the Procedure. You can access them with new opcodes, Get and
3263         Set. This greatly simplifies demoting SSA values to variables and promoting them back to
3264         SSA. I even made the instruction selector do the right things for variables, which means
3265         that introducing variables won't hurt instruction selection (there will be extra moves, but
3266         IRC will kill them). It's great to have non-SSA variables as an explicit concept in IR
3267         because it means that you don't have to do any magic to use them - they Just Work.
3268
3269         Air spill slots behave almost like anonymous stack slots, with one exception: you cannot
3270         escape them. We validate this by making it illegal to UseAddr on a spill slot. This removes
3271         the need to answer awkward questions like: does a 32-bit Def on a pointer that may point to
3272         a 64-bit spill slot do anything to the 32 bits above the pointer?  Does it write zero to it?
3273         Does it write zero to it just when the pointer actually points to a spill slot or always?
3274         These are silly questions, and we don't have to answer them because the only way to refer to
3275         a spill slot is directly. No escaping means no aliasing.
3276
3277         This doesn't affect performance. It just makes the compiler more fun to work with by
3278         removing some cognitive dissonance.
3279
3280         * CMakeLists.txt:
3281         * JavaScriptCore.xcodeproj/project.pbxproj:
3282         * b3/B3ArgumentRegValue.h:
3283         * b3/B3CCallValue.h:
3284         * b3/B3CheckValue.cpp:
3285         (JSC::B3::CheckValue::cloneImpl):
3286         (JSC::B3::CheckValue::CheckValue):
3287         * b3/B3CheckValue.h:
3288         * b3/B3Const32Value.h:
3289         * b3/B3Const64Value.h:
3290         * b3/B3ConstDoubleValue.h:
3291         * b3/B3ConstFloatValue.h:
3292         * b3/B3ConstPtrValue.h:
3293         (JSC::B3::ConstPtrValue::ConstPtrValue):
3294         * b3/B3ControlValue.cpp:
3295         (JSC::B3::ControlValue::convertToJump):
3296         (JSC::B3::ControlValue::convertToOops):
3297         (JSC::B3::ControlValue::dumpMeta):
3298         * b3/B3ControlValue.h:
3299         * b3/B3Effects.cpp:
3300         (JSC::B3::Effects::interferes):
3301         (JSC::B3::Effects::dump):
3302         * b3/B3Effects.h:
3303         (JSC::B3::Effects::mustExecute):
3304         * b3/B3EliminateCommonSubexpressions.cpp:
3305         * b3/B3FixSSA.cpp:
3306         (JSC::B3::demoteValues):
3307         (JSC::B3::fixSSA):
3308         * b3/B3FixSSA.h:
3309         * b3/B3IndexMap.h:
3310         (JSC::B3::IndexMap::resize):
3311         (JSC::B3::IndexMap::clear):
3312         (JSC::B3::IndexMap::size):
3313         (JSC::B3::IndexMap::operator[]):
3314         * b3/B3IndexSet.h:
3315         (JSC::B3::IndexSet::contains):
3316         (JSC::B3::IndexSet::size):
3317         (JSC::B3::IndexSet::isEmpty):
3318         * b3/B3LowerToAir.cpp:
3319         (JSC::B3::Air::LowerToAir::run):
3320         (JSC::B3::Air::LowerToAir::lower):
3321         * b3/B3MemoryValue.h:
3322         * b3/B3Opcode.cpp:
3323         (WTF::printInternal):
3324         * b3/B3Opcode.h:
3325         * b3/B3PatchpointValue.cpp:
3326         (JSC::B3::PatchpointValue::cloneImpl):
3327         (JSC::B3::PatchpointValue::PatchpointValue):
3328         * b3/B3PatchpointValue.h:
3329         * b3/B3Procedure.cpp:
3330         (JSC::B3::Procedure::Procedure):
3331         (JSC::B3::Procedure::addBlock):
3332         (JSC::B3::Procedure::addStackSlot):
3333         (JSC::B3::Procedure::addVariable):
3334         (JSC::B3::Procedure::clone):
3335         (JSC::B3::Procedure::addIntConstant):
3336         (JSC::B3::Procedure::dump):
3337         (JSC::B3::Procedure::deleteStackSlot):
3338         (JSC::B3::Procedure::deleteVariable):
3339         (JSC::B3::Procedure::deleteValue):
3340         (JSC::B3::Procedure::deleteOrphans):
3341         (JSC::B3::Procedure::calleeSaveRegisters):
3342         (JSC::B3::Procedure::addValueImpl):
3343         (JSC::B3::Procedure::setBlockOrderImpl):
3344         (JSC::B3::Procedure::addAnonymousStackSlot): Deleted.
3345         (JSC::B3::Procedure::addStackSlotIndex): Deleted.
3346         (JSC::B3::Procedure::addValueIndex): Deleted.
3347         * b3/B3Procedure.h:
3348         (JSC::B3::Procedure::setBlockOrder):
3349         (JSC::B3::Procedure::stackSlots):
3350         (JSC::B3::Procedure::variables):
3351         (JSC::B3::Procedure::values):
3352         (JSC::B3::Procedure::StackSlotsCollection::StackSlotsCollection): Deleted.
3353         (JSC::B3::Procedure::StackSlotsCollection::size): Deleted.
3354         (JSC::B3::Procedure::StackSlotsCollection::at): Deleted.
3355         (JSC::B3::Procedure::StackSlotsCollection::operator[]): Deleted.
3356         (JSC::B3::Procedure::StackSlotsCollection::iterator::iterator): Deleted.
3357         (JSC::B3::Procedure::StackSlotsCollection::iterator::operator*): Deleted.
3358         (JSC::B3::Procedure::StackSlotsCollection::iterator::operator++): Deleted.
3359         (JSC::B3::Procedure::StackSlotsCollection::iterator::operator==): Deleted.
3360         (JSC::B3::Procedure::StackSlotsCollection::iterator::operator!=): Deleted.
3361         (JSC::B3::Procedure::StackSlotsCollection::iterator::findNext): Deleted.
3362         (JSC::B3::Procedure::StackSlotsCollection::begin): Deleted.
3363         (JSC::B3::Procedure::StackSlotsCollection::end): Deleted.
3364         (JSC::B3::Procedure::ValuesCollection::ValuesCollection): Deleted.
3365         (JSC::B3::Procedure::ValuesCollection::iterator::iterator): Deleted.