c5e6323c9179d408f78caac208858d7d54c05032
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2012-02-02  Hajime Morrita  <morrita@chromium.org>
2
3         Unreviewed, removing an unnecessarily JS_PRIVATE_EXPORT annotation.
4
5         * interpreter/Interpreter.h:
6         (Interpreter):
7
8 2012-01-31  Hajime Morrita  <morrita@chromium.org>
9
10         [Mac] eliminate JavaScriptCore.exp
11         https://bugs.webkit.org/show_bug.cgi?id=72854
12
13         Reviewed by Darin Adler.
14
15         - Removed exp files and corresponding makefile entries.
16         - Changed the build configuration no to use exp file.
17
18         * Configurations/JavaScriptCore.xcconfig:
19         * DerivedSources.make:
20         * JavaScriptCore.JSVALUE32_64only.exp: Removed.
21         * JavaScriptCore.JSVALUE64only.exp: Removed.
22         * JavaScriptCore.exp: Removed.
23         * JavaScriptCore.xcodeproj/project.pbxproj:
24         * wtf/Platform.h:
25
26 2012-02-02  Benjamin Poulain  <bpoulain@apple.com>
27
28         Running a Web Worker on about:blank crashes the interpreter
29         https://bugs.webkit.org/show_bug.cgi?id=77593
30
31         Reviewed by Michael Saboff.
32
33         The method Interpreter::execute() was crashing on empty programs because
34         the assumption is made the source is not null.
35
36         This patch shortcut the execution when the String is null to avoid invalid
37         memory access.
38
39         * interpreter/Interpreter.cpp:
40         (JSC::Interpreter::execute):
41
42 2012-02-02  Kalev Lember  <kalevlember@gmail.com>
43
44         [GTK] Use win32 native threading
45         https://bugs.webkit.org/show_bug.cgi?id=77676
46
47         Reviewed by Martin Robinson.
48
49         r97269 switched from glib threading to pthreads, breaking win32 GTK+.
50         This is a follow up, removing some leftovers in ThreadSpecific.h and
51         switching win32 to use the native threading in ThreadingWin.cpp.
52
53         * GNUmakefile.list.am: Compile in win32 native threading support
54         * wtf/ThreadSpecific.h: Remove GTK+-specific definitions
55         (ThreadSpecific):
56         (WTF::::destroy):
57
58 2012-02-02  Filip Pizlo  <fpizlo@apple.com>
59
60         retrieveCallerFromVMCode should call trueCallerFrame
61         https://bugs.webkit.org/show_bug.cgi?id=77684
62
63         Reviewed by Oliver Hunt.
64
65         * interpreter/Interpreter.cpp:
66         (JSC::Interpreter::retrieveCallerFromVMCode):
67
68 2012-02-02  Kalev Lember  <kalevlember@gmail.com>
69
70         [GTK] Implement current executable path finding for win32
71         https://bugs.webkit.org/show_bug.cgi?id=77677
72
73         Reviewed by Martin Robinson.
74
75         The WTF helper for getting the binary path that was added in r101710
76         left out the win32 implementation. Fix this.
77
78         * wtf/gobject/GlibUtilities.cpp:
79         (getCurrentExecutablePath):
80
81 2012-02-02  Filip Pizlo  <fpizlo@apple.com>
82
83         Throwing away bytecode and then reparsing during DFG optimization is just
84         plain wrong and makes things crash
85         https://bugs.webkit.org/show_bug.cgi?id=77680
86         <rdar://problem/10798490>
87
88         Reviewed by Oliver Hunt.
89
90         This is the minimal surgical fix: it removes the code that triggered bytecode
91         throw-away. Once we're confident that this is a good idea, we can kill all of
92         the code that implements the feature.
93
94         * bytecode/CodeBlock.h:
95         (JSC::CodeBlock::discardBytecodeLater):
96         (JSC::CodeBlock::addValueProfile):
97         * jit/JITDriver.h:
98         (JSC::jitCompileIfAppropriate):
99         (JSC::jitCompileFunctionIfAppropriate):
100
101 2012-02-02  Filip Pizlo  <fpizlo@apple.com>
102
103         Release build debugging should be easier
104         https://bugs.webkit.org/show_bug.cgi?id=77669
105
106         Reviewed by Gavin Barraclough.
107
108         * assembler/ARMAssembler.h:
109         (ARMAssembler):
110         (JSC::ARMAssembler::debugOffset):
111         * assembler/ARMv7Assembler.h:
112         (ARMv7Assembler):
113         (JSC::ARMv7Assembler::debugOffset):
114         (ARMInstructionFormatter):
115         (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
116         * assembler/AbstractMacroAssembler.h:
117         (AbstractMacroAssembler):
118         (JSC::AbstractMacroAssembler::debugOffset):
119         * assembler/AssemblerBuffer.h:
120         (AssemblerBuffer):
121         (JSC::AssemblerBuffer::debugOffset):
122         * assembler/LinkBuffer.h:
123         (LinkBuffer):
124         (JSC::LinkBuffer::debugSize):
125         * assembler/MIPSAssembler.h:
126         (MIPSAssembler):
127         (JSC::MIPSAssembler::debugOffset):
128         * assembler/X86Assembler.h:
129         (X86Assembler):
130         (JSC::X86Assembler::debugOffset):
131         (X86InstructionFormatter):
132         (JSC::X86Assembler::X86InstructionFormatter::debugOffset):
133         * bytecode/CodeBlock.cpp:
134         (JSC):
135         * bytecode/CodeBlock.h:
136         (CodeBlock):
137         * bytecode/CodeOrigin.h:
138         (CodeOrigin):
139         (JSC):
140         (JSC::CodeOrigin::inlineStack):
141         * bytecode/DFGExitProfile.h:
142         (JSC::DFG::exitKindToString):
143         * bytecode/DataFormat.h:
144         (JSC::dataFormatToString):
145         * bytecode/PredictedType.cpp:
146         (JSC):
147         (JSC::predictionToString):
148         * bytecode/PredictedType.h:
149         (JSC):
150         * bytecode/ValueRecovery.h:
151         (ValueRecovery):
152         (JSC::ValueRecovery::dump):
153         * bytecompiler/BytecodeGenerator.cpp:
154         (JSC):
155         (JSC::BytecodeGenerator::setDumpsGeneratedCode):
156         (JSC::BytecodeGenerator::dumpsGeneratedCode):
157         (JSC::BytecodeGenerator::generate):
158         * dfg/DFGAbstractValue.h:
159         (StructureAbstractValue):
160         (JSC::DFG::StructureAbstractValue::dump):
161         (AbstractValue):
162         (JSC::DFG::AbstractValue::dump):
163         * dfg/DFGAssemblyHelpers.h:
164         (DFG):
165         (AssemblyHelpers):
166         (JSC::DFG::AssemblyHelpers::debugCall):
167         * dfg/DFGFPRInfo.h:
168         (FPRInfo):
169         (JSC::DFG::FPRInfo::debugName):
170         * dfg/DFGGPRInfo.h:
171         (GPRInfo):
172         (JSC::DFG::GPRInfo::debugName):
173         * dfg/DFGGraph.cpp:
174         (DFG):
175         * dfg/DFGGraph.h:
176         (Graph):
177         * dfg/DFGNode.h:
178         (DFG):
179         (JSC::DFG::arithNodeFlagsAsString):
180         (Node):
181         (JSC::DFG::Node::hasIdentifier):
182         (JSC::DFG::Node::dumpChildren):
183         * dfg/DFGOSRExit.cpp:
184         (DFG):
185         (JSC::DFG::OSRExit::dump):
186         * dfg/DFGOSRExit.h:
187         (OSRExit):
188         * runtime/JSValue.cpp:
189         (JSC):
190         (JSC::JSValue::description):
191         * runtime/JSValue.h:
192         (JSValue):
193         * wtf/BitVector.cpp:
194         (WTF):
195         (WTF::BitVector::dump):
196         * wtf/BitVector.h:
197         (BitVector):
198
199 2012-02-02  Oliver Hunt  <oliver@apple.com>
200
201         Getters and setters cause line numbers in errors/console.log to be offset for the whole file
202         https://bugs.webkit.org/show_bug.cgi?id=77675
203
204         Reviewed by Timothy Hatcher.
205
206         Our default literal parsing logic doesn't handle the extra work required for
207         getters and setters.  When it encounters one, it rolls back the lexer and 
208         then switches to a more complete parsing function.  Unfortunately it was only
209         winding back the character position, and was ignoring the line number and
210         other lexer data.  This led to every getter and setter causing the line number
211         to be incorrectly incremented leading to increasingly incorrect numbers for
212         the rest of the file.
213
214         * parser/Parser.cpp:
215         (JSC::::parseObjectLiteral):
216
217 2012-02-02  Andy Wingo  <wingo@igalia.com>
218
219         Fix type punning warning in HashTable.h debug builds
220         https://bugs.webkit.org/show_bug.cgi?id=77422
221
222         Reviewed by Gavin Barraclough.
223
224         * wtf/HashTable.h (WTF::HashTable::checkKey): Fix type punning
225         warning appearing in debug builds with gcc-4.6.2 on GNU/Linux.
226
227 2012-02-01  Michael Saboff  <msaboff@apple.com>
228
229         Yarr crash with regexp replace
230         https://bugs.webkit.org/show_bug.cgi?id=67454
231
232         Reviewed by Gavin Barraclough.
233
234         Properly handle the case of a back reference to an unmatched
235         subpattern by always matching without consuming any characters.
236
237         * yarr/YarrInterpreter.cpp:
238         (JSC::Yarr::Interpreter::matchBackReference):
239         (JSC::Yarr::Interpreter::backtrackBackReference):
240
241 2012-02-01  Gavin Barraclough  <barraclough@apple.com>
242
243         calling function on catch block scope containing an eval result in wrong this value being passed
244         https://bugs.webkit.org/show_bug.cgi?id=77581
245
246         Reviewed by Oliver Hunt.
247
248         javascript:function F(){ return 'F' in this; }; try { throw F; } catch (e) { eval(""); alert(e()); }
249
250         * bytecompiler/NodesCodegen.cpp:
251         (JSC::TryNode::emitBytecode):
252         * interpreter/Interpreter.cpp:
253         (JSC::Interpreter::execute):
254         * parser/ASTBuilder.h:
255         (JSC::ASTBuilder::createTryStatement):
256         * parser/NodeConstructors.h:
257         (JSC::TryNode::TryNode):
258         * parser/Nodes.h:
259         (TryNode):
260         * parser/Parser.cpp:
261         (JSC::::parseTryStatement):
262         * parser/SyntaxChecker.h:
263         (JSC::SyntaxChecker::createTryStatement):
264         * runtime/JSObject.h:
265         (JSObject):
266         (JSC::JSObject::isStaticScopeObject):
267         (JSC):
268
269 2012-02-01  Oliver Hunt  <oliver@apple.com>
270
271         Add support for inferred function names
272         https://bugs.webkit.org/show_bug.cgi?id=77579
273
274         Reviewed by Gavin Barraclough.
275
276         Add new "inferred" names to function expressions, getters, and setters.
277         This property is not exposed to JS, so is only visible in the debugger
278         and profiler.
279
280         * JavaScriptCore.exp:
281         * bytecompiler/BytecodeGenerator.h:
282         (JSC::BytecodeGenerator::makeFunction):
283         * debugger/DebuggerCallFrame.cpp:
284         (JSC::DebuggerCallFrame::calculatedFunctionName):
285         * parser/ASTBuilder.h:
286         (JSC::ASTBuilder::createAssignResolve):
287         (JSC::ASTBuilder::createGetterOrSetterProperty):
288         (JSC::ASTBuilder::createProperty):
289         (JSC::ASTBuilder::makeAssignNode):
290         * parser/Nodes.h:
291         (JSC::FunctionBodyNode::setInferredName):
292         (JSC::FunctionBodyNode::inferredName):
293         (FunctionBodyNode):
294         * profiler/Profiler.cpp:
295         (JSC):
296         (JSC::Profiler::createCallIdentifier):
297         (JSC::createCallIdentifierFromFunctionImp):
298         * runtime/Executable.cpp:
299         (JSC::FunctionExecutable::FunctionExecutable):
300         (JSC::FunctionExecutable::fromGlobalCode):
301         * runtime/Executable.h:
302         (JSC::FunctionExecutable::create):
303         (JSC::FunctionExecutable::inferredName):
304         (FunctionExecutable):
305         * runtime/JSFunction.cpp:
306         (JSC::JSFunction::calculatedDisplayName):
307         (JSC):
308         (JSC::getCalculatedDisplayName):
309         * runtime/JSFunction.h:
310         (JSC):
311
312 2012-02-01  Filip Pizlo  <fpizlo@apple.com>
313
314         DFG should fold double-to-int conversions
315         https://bugs.webkit.org/show_bug.cgi?id=77532
316
317         Reviewed by Oliver Hunt.
318         
319         Performance neutral on major benchmarks. But it makes calling V8's
320         Math.random() 4x faster.
321
322         * bytecode/CodeBlock.cpp:
323         (JSC):
324         (JSC::CodeBlock::addOrFindConstant):
325         * bytecode/CodeBlock.h:
326         (JSC::CodeBlock::addConstant):
327         (CodeBlock):
328         * dfg/DFGAbstractState.cpp:
329         (JSC::DFG::AbstractState::execute):
330         * dfg/DFGByteCodeParser.cpp:
331         (JSC::DFG::ByteCodeParser::toInt32):
332         (ByteCodeParser):
333         (JSC::DFG::ByteCodeParser::getJSConstantForValue):
334         (JSC::DFG::ByteCodeParser::isInt32Constant):
335         * dfg/DFGGraph.h:
336         (JSC::DFG::Graph::addShouldSpeculateInteger):
337         (Graph):
338         (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
339         * dfg/DFGPropagator.cpp:
340         (JSC::DFG::Propagator::propagateNodePredictions):
341         (JSC::DFG::Propagator::doRoundOfDoubleVoting):
342         (JSC::DFG::Propagator::fixupNode):
343         * dfg/DFGSpeculativeJIT.cpp:
344         (JSC::DFG::SpeculativeJIT::compileAdd):
345         (DFG):
346         (JSC::DFG::SpeculativeJIT::compileArithSub):
347         * dfg/DFGSpeculativeJIT.h:
348         (JSC::DFG::SpeculativeJIT::valueOfNumberConstantAsInt32):
349         (SpeculativeJIT):
350         * dfg/DFGSpeculativeJIT32_64.cpp:
351         (JSC::DFG::SpeculativeJIT::compile):
352         * dfg/DFGSpeculativeJIT64.cpp:
353         (JSC::DFG::SpeculativeJIT::compile):
354         * runtime/JSValueInlineMethods.h:
355         (JSC::JSValue::asDouble):
356
357 2012-02-01  Filip Pizlo  <fpizlo@apple.com>
358
359         DFG graph dump for GetScopedVar should show the correct prediction
360         https://bugs.webkit.org/show_bug.cgi?id=77530
361
362         Reviewed by Geoff Garen.
363         
364         GetScopedVar has a heap prediction, not a variable prediction. But it does
365         have a variable. Hence we need to check for heap predictions before checking
366         for variable predictions.
367
368         * dfg/DFGGraph.cpp:
369         (JSC::DFG::Graph::dump):
370
371 2012-02-01  Mark Hahnenberg  <mhahnenberg@apple.com>
372
373         Replace JSArray destructor with finalizer
374         https://bugs.webkit.org/show_bug.cgi?id=77488
375
376         Reviewed by Geoffrey Garen.
377
378         * JavaScriptCore.exp:
379         * runtime/JSArray.cpp:
380         (JSC::JSArray::finalize): Added finalizer.
381         (JSC::JSArray::allocateSparseMap): Factored out code for allocating new sparse maps.
382         (JSC):
383         (JSC::JSArray::deallocateSparseMap): Factored out code for deallocating sparse maps.
384         (JSC::JSArray::enterDictionaryMode): Renamed enterSparseMode to enterDictionaryMode 
385         because the old name was confusing because we could have a sparse array that never 
386         called enterSparseMode.
387         (JSC::JSArray::defineOwnNumericProperty):
388         (JSC::JSArray::setLengthWritable):
389         (JSC::JSArray::putByIndexBeyondVectorLength):
390         (JSC::JSArray::setLength):
391         (JSC::JSArray::pop):
392         (JSC::JSArray::sort):
393         (JSC::JSArray::compactForSorting):
394         * runtime/JSArray.h:
395         (JSArray):
396
397 2012-02-01  Andy Wingo  <wingo@igalia.com>
398
399         Refactor identifier resolution in BytecodeGenerator
400         https://bugs.webkit.org/show_bug.cgi?id=76285
401
402         Reviewed by Geoffrey Garen.
403
404         * bytecompiler/BytecodeGenerator.h:
405         (JSC::ResolveResult): New class, to describe the storage
406         location corresponding to an identifier in a program.
407         * bytecompiler/BytecodeGenerator.cpp:
408         (JSC::BytecodeGenerator::resolve): New function, replacing
409         findScopedProperty.
410         (JSC::BytecodeGenerator::resolveConstDecl): New function,
411         encapsulating what ConstDeclNode::emitBytecode used to do.
412         (JSC::BytecodeGenerator::emitGetStaticVar):
413         (JSC::BytecodeGenerator::emitPutStaticVar): New functions,
414         corresponding to the old emitGetScopedVar and emitPutScopedVar.
415         (JSC::BytecodeGenerator::registerFor): Remove version that took an
416         Identifier&; replaced by ResolveResult::local().
417         (JSC::BytecodeGenerator::emitResolve):
418         (JSC::BytecodeGenerator::emitResolveBase):
419         (JSC::BytecodeGenerator::emitResolveBaseForPut):
420         (JSC::BytecodeGenerator::emitResolveWithBase):
421         (JSC::BytecodeGenerator::emitResolveWithThis): Change to accept a
422         "resolveResult" argument.  This is more clear, and reduces the
423         amount of double analysis happening at compile-time.
424         * bytecompiler/NodesCodegen.cpp:
425         (JSC::ResolveNode::emitBytecode):
426         (JSC::EvalFunctionCallNode::emitBytecode):
427         (JSC::FunctionCallResolveNode::emitBytecode):
428         (JSC::PostfixResolveNode::emitBytecode):
429         (JSC::DeleteResolveNode::emitBytecode):
430         (JSC::TypeOfResolveNode::emitBytecode):
431         (JSC::PrefixResolveNode::emitBytecode):
432         (JSC::ReadModifyResolveNode::emitBytecode):
433         (JSC::AssignResolveNode::emitBytecode):
434         (JSC::ConstDeclNode::emitCodeSingle):
435         (JSC::ForInNode::emitBytecode): Refactor to use the new
436         ResolveResult structure.
437
438 2012-02-01  Csaba Osztrogonác  <ossy@webkit.org>
439
440         Implement Error.stack
441         https://bugs.webkit.org/show_bug.cgi?id=66994
442
443         Unreviewed, rolling out r106407.
444
445         * JavaScriptCore.exp:
446         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
447         * interpreter/AbstractPC.cpp:
448         (JSC::AbstractPC::AbstractPC):
449         * interpreter/Interpreter.cpp:
450         (JSC::Interpreter::throwException):
451         * interpreter/Interpreter.h:
452         (JSC):
453         (Interpreter):
454         * jsc.cpp:
455         (GlobalObject::finishCreation):
456         * parser/Parser.h:
457         (JSC::::parse):
458         * runtime/CommonIdentifiers.h:
459         * runtime/Error.cpp:
460         (JSC::addErrorInfo):
461         * runtime/Error.h:
462         (JSC):
463
464 2012-01-31  Hajime Morrita  <morrita@chromium.org>
465
466         Add missing JS_PRIVATE_EXPORTs
467         https://bugs.webkit.org/show_bug.cgi?id=77507
468
469         Reviewed by Kevin Ollivier.
470
471         * heap/MarkedSpace.h:
472         (MarkedSpace):
473         * interpreter/Interpreter.h:
474         (Interpreter):
475         * runtime/JSValue.h:
476         (JSValue):
477         * wtf/text/AtomicString.h:
478         (WTF::AtomicString::add):
479         * wtf/text/WTFString.h:
480         (WTF):
481
482 2012-01-31  Geoffrey Garen  <ggaren@apple.com>
483
484         Stop using -fomit-frame-pointer
485         https://bugs.webkit.org/show_bug.cgi?id=77403
486
487         Reviewed by Filip Pizlo.
488         
489         JavaScriptCore is too fast. I'm just the man to fix it.
490
491         * Configurations/JavaScriptCore.xcconfig:
492
493 2012-01-31  Michael Saboff  <msaboff@apple.com>
494
495         StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
496         https://bugs.webkit.org/show_bug.cgi?id=76647
497
498         Reviewed by Darin Adler.
499
500         Changed stringProtoFuncToUpperCase to call StringImpl::upper() in a manor similar
501         to stringProtoFuncToLowerCase().  Fixed StringImpl::upper() to handle to special
502         cases.  One case is s-sharp (0xdf) which converts to "SS".  The other case is 
503         for characters which become 16 bit values when converted to upper case.  For
504         those, we up convert the the source string and use the 16 bit path.
505
506         * runtime/StringPrototype.cpp:
507         (JSC::stringProtoFuncToUpperCase):
508         * wtf/text/StringImpl.cpp:
509         (WTF::StringImpl::upper):
510         * wtf/unicode/CharacterNames.h:
511         (smallLetterSharpS): New constant
512
513 2012-01-31  Oliver Hunt  <oliver@apple.com>
514
515         Remove unneeded sourceId property
516         https://bugs.webkit.org/show_bug.cgi?id=77495
517
518         Reviewed by Filip Pizlo.
519
520         sourceId isn't used anymore, so we'll just remove it.
521
522         * runtime/Error.cpp:
523         (JSC):
524         (JSC::addErrorInfo):
525         (JSC::hasErrorInfo):
526
527 2012-01-31  Oliver Hunt  <oliver@apple.com>
528
529         Implement Error.stack
530         https://bugs.webkit.org/show_bug.cgi?id=66994
531
532         Reviewed by Gavin Barraclough.
533
534         Original patch by Juan Carlos Montemayor Elosua:
535             This patch utilizes topCallFrame to create a stack trace when
536             an error is thrown. Users will also be able to use the stack()
537             command in jsc to get arrays with stack trace information.
538
539         Modified to be correct on ToT, with a variety of correctness,
540         performance, and security improvements.
541
542         * JavaScriptCore.exp:
543         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
544         * interpreter/Interpreter.cpp:
545         (JSC::getCallerLine):
546         (JSC::getSourceURLFromCallFrame):
547         (JSC::getStackFrameCodeType):
548         (JSC::Interpreter::getStackTrace):
549         (JSC::Interpreter::throwException):
550         * interpreter/Interpreter.h:
551         (JSC::StackFrame::toString):
552         * jsc.cpp:
553         (GlobalObject::finishCreation):
554         (functionJSCStack):
555         * parser/Parser.h:
556         (JSC::Parser::parse):
557         * runtime/CommonIdentifiers.h:
558         * runtime/Error.cpp:
559         (JSC::addErrorInfo):
560         * runtime/Error.h:
561
562 2012-01-31  Scott Graham  <scottmg@chromium.org>
563
564         [Chromium] Remove references to gyp cygwin build target
565         https://bugs.webkit.org/show_bug.cgi?id=77253
566
567         Reviewed by Julien Chaffraix.
568
569         Target dependency is no longer required, it's done earlier in the
570         build process.
571
572         * JavaScriptCore.gyp/JavaScriptCore.gyp:
573
574 2012-01-31  Michael Saboff  <msaboff@apple.com>
575
576         ASSERT(m_jumpsToLink.isEmpty()) failing in ARMv7Assembler dtor
577         https://bugs.webkit.org/show_bug.cgi?id=77443
578
579         Reviewed by Gavin Barraclough.
580
581         Removed failing ASSERT() and thus destructor.  The ASSERT isn't needed.
582         We are hitting it in the YARR JIT case where we bail out and go to the
583         interpreter with a partially JIT'ed function.  Since we haven't linked
584         the JIT'ed code, there is likely to be some unresolved jumps in the vector
585         when the ARMv7Assembler destructor is called.  For the case where we
586         complete the JIT process, we clear the vector at the end of
587         LinkBuffer::linkCode (LinkBuffer.h:292).
588
589         * assembler/ARMv7Assembler.h:
590         (ARMv7Assembler):
591
592 2012-01-31  Anders Carlsson  <andersca@apple.com>
593
594         Vector<T>::operator== shouldn't require T to have operator!=
595         https://bugs.webkit.org/show_bug.cgi?id=77448
596
597         Reviewed by Andreas Kling.
598
599         Change VectorComparer::compare to use !(a == b) instead of a != b since
600         it makes more sense for Vector::operator== to use the element's operator==.
601
602         * wtf/Vector.h:
603
604 2012-01-30  Oliver Hunt  <oliver@apple.com>
605
606         get_by_val_arguments is broken in the interpreter
607         https://bugs.webkit.org/show_bug.cgi?id=77389
608
609         Reviewed by Gavin Barraclough.
610
611         When get_by_val had wad a value profile added, the same slot was not added to
612         get_by_val_arguments.  This broke the interpreter as the interpreter falls
613         back on its regular get_by_val implementation.
614
615         No tests are added as the interpreter is fairly broken in its
616         current state (multiple tests fail due to this bug).
617
618         * bytecode/CodeBlock.cpp:
619         (JSC::CodeBlock::dump):
620         * bytecode/Opcode.h:
621         (JSC):
622         ():
623         * bytecompiler/BytecodeGenerator.cpp:
624         (JSC::BytecodeGenerator::emitGetArgumentByVal):
625
626 2012-01-30  Oliver Hunt  <oliver@apple.com>
627
628         Unexpected syntax error
629         https://bugs.webkit.org/show_bug.cgi?id=77340
630
631         Reviewed by Gavin Barraclough.
632
633         Function calls and new expressions have the same semantics for
634         assignment, so should simply share their lhs handling.
635
636         * parser/Parser.cpp:
637         (JSC::::parseMemberExpression):
638
639 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
640
641         Unreviewed ARMv7 build fix.
642
643         * tools/CodeProfiling.cpp:
644         (JSC):
645         (JSC::setProfileTimer):
646         (JSC::CodeProfiling::begin):
647         (JSC::CodeProfiling::end):
648
649 2012-01-30  David Levin  <levin@chromium.org>
650
651         Using OS(WIN) or OS(MAC) should cause a build error.
652         https://bugs.webkit.org/show_bug.cgi?id=77162
653
654         Reviewed by Darin Adler.
655
656         * wtf/Platform.h: Expand them into something that will
657          cause a compile error.
658
659 2012-01-30  Yong Li  <yoli@rim.com>
660
661         [BlackBerry] OS(QNX) also has TM_GMTOFF, TM_ZONE, and TIMEGM
662         https://bugs.webkit.org/show_bug.cgi?id=77360
663
664         Reviewed by Rob Buis.
665
666         Turn on HAVE(TM_GMTOFF), HAVE(TM_ZONE), and HAVE(TIMEGM)
667         for OS(QNX).
668
669         * wtf/Platform.h:
670
671 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
672
673         Speculative Windows build fix.
674
675         * assembler/MacroAssemblerCodeRef.h:
676         (FunctionPtr):
677
678 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
679
680         https://bugs.webkit.org/show_bug.cgi?id=77163
681         MacroAssemblerCodeRef.h uses OS(WIN) instead of OS(WINDOWS)
682
683         Rubber stamped by Geoff Garen
684
685         * assembler/MacroAssemblerCodeRef.h:
686
687 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
688
689         Unreviewed build fix for interpreter builds.
690
691         * bytecode/CodeBlock.cpp:
692         (JSC::CodeBlock::CodeBlock):
693         * bytecode/CodeBlock.h:
694         (CodeBlock):
695         * interpreter/Interpreter.cpp:
696         (JSC::Interpreter::privateExecute):
697         * tools/CodeProfile.cpp:
698         (JSC::CodeProfile::sample):
699
700 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
701
702         Unreviewed build fix following bug#76855
703
704         * JavaScriptCore.exp:
705
706 2012-01-30  Michael Saboff  <msaboff@apple.com>
707
708         CaseFoldingHash::hash() doesn't handle 8 bit strings directly
709         https://bugs.webkit.org/show_bug.cgi?id=76652
710
711         Reviewed by Andreas Kling.
712
713         * wtf/text/StringHash.h:
714         (WTF::CaseFoldingHash::hash): Added 8 bit string code path.
715
716 2012-01-30  Michael Saboff  <msaboff@apple.com>
717
718         stringProtoFuncReplace converts 8 bit strings to 16 bit during replacement
719         https://bugs.webkit.org/show_bug.cgi?id=76651
720
721         Reviewed by Geoffrey Garen.
722
723         Made local function substituteBackreferencesSlow a template function
724         based on character width.  Cleaned up getCharacters() in both UString
725         and StringImpl.  Changed getCharacters<UChar> to up convert an 8 bit
726         string to 16 bits if necessary.
727
728         * runtime/StringPrototype.cpp:
729         (JSC::substituteBackreferencesSlow):
730         (JSC::substituteBackreferences):
731         * runtime/UString.h:
732         (JSC::LChar):
733         (JSC::UChar):
734         * wtf/text/StringImpl.h:
735         (WTF::UChar):
736
737 2012-01-30  Gavin Barraclough  <barraclough@apple.com>
738
739         Clean up putDirect
740         https://bugs.webkit.org/show_bug.cgi?id=76232
741
742         Reviewed by Sam Weinig.
743
744         Part 3 - merge op_put_getter & op_put_setter.
745
746         Putting these separately is inefficient (and makes future optimiation,
747         e.g. making GetterSetter immutable) harder. Change to emit a single
748         op_put_getter_setter bytecode op. Ultimately we should probably be
749         able to merge this with put direct, to create a common op to initialize
750         object literal properties.
751
752         * bytecode/CodeBlock.cpp:
753         (JSC::CodeBlock::dump):
754         * bytecode/Opcode.h:
755         (JSC):
756         ():
757         * bytecompiler/BytecodeGenerator.cpp:
758         (JSC::BytecodeGenerator::emitPutGetterSetter):
759         * bytecompiler/BytecodeGenerator.h:
760         (BytecodeGenerator):
761         * bytecompiler/NodesCodegen.cpp:
762         (JSC::PropertyListNode::emitBytecode):
763         * interpreter/Interpreter.cpp:
764         (JSC::Interpreter::privateExecute):
765         * jit/JIT.cpp:
766         (JSC::JIT::privateCompileMainPass):
767         * jit/JIT.h:
768         (JIT):
769         * jit/JITPropertyAccess.cpp:
770         (JSC::JIT::emit_op_put_getter_setter):
771         * jit/JITPropertyAccess32_64.cpp:
772         (JSC::JIT::emit_op_put_getter_setter):
773         * jit/JITStubs.cpp:
774         (JSC::DEFINE_STUB_FUNCTION):
775         * jit/JITStubs.h:
776         ():
777         * runtime/JSObject.cpp:
778         (JSC::JSObject::putDirectVirtual):
779         (JSC::JSObject::putDirectAccessor):
780         (JSC):
781         (JSC::putDescriptor):
782         (JSC::JSObject::defineOwnProperty):
783         * runtime/JSObject.h:
784         ():
785         (JSC::JSObject::putDirectInternal):
786         (JSC::JSObject::putDirect):
787         (JSC::JSObject::putDirectWithoutTransition):
788
789 2012-01-30  Michael Saboff  <msaboff@apple.com>
790
791         Dromaeo tests call parseSimpleLengthValue() on 8 bit strings
792         https://bugs.webkit.org/show_bug.cgi?id=76649
793
794         Reviewed by Geoffrey Garen.
795
796         * JavaScriptCore.exp: Added export for charactersToDouble.
797
798 2012-01-30  Michael Saboff  <msaboff@apple.com>
799
800         WebCore decodeEscapeSequences unnecessarily converts 8 bit strings to 16 bit when decoding.
801         https://bugs.webkit.org/show_bug.cgi?id=76648
802
803         Reviewed by Geoffrey Garen.
804
805         Added a new overloaded append member that takes a String& argument, an offest
806         and a length to do direct sub string appending to a StringBuilder.
807
808         * wtf/text/StringBuilder.h:
809         (WTF::StringBuilder::append):
810
811 2012-01-29  Zoltan Herczeg  <zherczeg@webkit.org>
812
813         Custom written CSS lexer
814         https://bugs.webkit.org/show_bug.cgi?id=70107
815
816         Reviewed by Antti Koivisto and Oliver Hunt.
817
818         Add new helper functions for the custom written CSS lexer.
819
820         * wtf/ASCIICType.h:
821         (WTF::toASCIILowerUnchecked):
822         (WTF):
823         (WTF::isASCIIAlphaCaselessEqual):
824
825 2012-01-29  Filip Pizlo  <fpizlo@apple.com>
826
827         REGRESSION (r105576-r105582): Web Inspector Crash in JSC::JSValue::toString(JSC::ExecState*) const
828         https://bugs.webkit.org/show_bug.cgi?id=77146
829         <rdar://problem/10770586>
830
831         Reviewed by Oliver Hunt.
832         
833         The old JIT expects that the result of the last operation is in the lastResultRegister.  The DFG JIT is
834         designed to correctly track the lastResultRegister by looking at SetLocal nodes.  However, when the DFG
835         JIT inlines a code block, it forgets that the inlined code block's result would have been placed in the
836         lastResultRegister.  Hence if we OSR exit on the first node following the end of an inlined code block
837         that had a return value, and that first node uses the return value, the old JIT will get massively
838         confused.  This patch takes a surgical approach: instead of making the DFG smarter, it makes the old
839         JIT slightly dumber.
840
841         * jit/JITCall.cpp:
842         (JSC::JIT::emit_op_call_put_result):
843
844 2012-01-29  Filip Pizlo  <fpizlo@apple.com>
845
846         Build fix for Mac non-x64 platforms.
847
848         * tools/CodeProfiling.cpp:
849         (JSC):
850
851 2012-01-28  Gavin Barraclough  <barraclough@apple.com>
852
853         Reserve 'let'
854         https://bugs.webkit.org/show_bug.cgi?id=77293
855
856         Rubber stamped by Oliver Hunt.
857
858         'let' may become a keyword in ES6.  We're going to try experimentally reserving it,
859         to see if this breaks the web.
860
861         * parser/Keywords.table:
862
863 2012-01-27  Gavin Barraclough  <barraclough@apple.com>
864
865         Implement a JIT-code aware sampling profiler for JSC
866         https://bugs.webkit.org/show_bug.cgi?id=76855
867
868         Reviewed by Oliver Hunt.
869
870         To enable the profiler, set the JSC_CODE_PROFILING environment variable to
871         1 (no tracing the C stack), 2 (trace one level of C code) or 3 (recursively
872         trace all samples).
873
874         The profiler requires -fomit-frame-pointer to be removed from the build flags.
875
876         * JavaScriptCore.exp:
877             - Removed an export.
878         * JavaScriptCore.xcodeproj/project.pbxproj:
879             - Added new files
880         * bytecode/CodeBlock.cpp:
881             - For baseline codeblocks, cache the result of canCompileWithDFG.
882         * bytecode/CodeBlock.h:
883             - For baseline codeblocks, cache the result of canCompileWithDFG.
884         * jit/ExecutableAllocator.cpp:
885         (JSC::ExecutableAllocator::initializeAllocator):
886             - Notify the profiler when the allocator is created.
887         (JSC::ExecutableAllocator::allocate):
888             - Inform the allocated of the ownerUID.
889         * jit/ExecutableAllocatorFixedVMPool.cpp:
890         (JSC::ExecutableAllocator::initializeAllocator):
891             - Notify the profiler when the allocator is created.
892         (JSC::ExecutableAllocator::allocate):
893             - Inform the allocated of the ownerUID.
894         * jit/JITStubs.cpp:
895             - If profiling, don't mask the return address in JIT code.
896               (We do so to provide nicer backtraces in debug builds).
897         * runtime/Completion.cpp:
898         (JSC::evaluate):
899             - Notify the profiler of script evaluations.
900         * tools: Added.
901         * tools/CodeProfile.cpp: Added.
902         (JSC::symbolName):
903             - Helper function to get the name of a symbol in the framework.
904         (JSC::truncateTrace):
905             - Helper to truncate traces into methods know to have uninformatively deep stacks.
906         (JSC::CodeProfile::sample):
907             - Record a stack trace classifying samples.
908         (JSC::CodeProfile::report):
909             - {Print profiler output.
910         * tools/CodeProfile.h: Added.
911             - new class, captures a set of samples associated with an evaluated script,
912               and nested to record samples from subscripts.
913         * tools/CodeProfiling.cpp: Added.
914         (JSC::CodeProfiling::profilingTimer):
915             - callback fired then a timer event occurs.
916         (JSC::CodeProfiling::notifyAllocator):
917             - called when the executable allocator is constructed.
918         (JSC::CodeProfiling::getOwnerUIDForPC):
919             - helper to lookup the codeblock from an address in JIT code
920         (JSC::CodeProfiling::begin):
921             - enter a profiling scope.
922         (JSC::CodeProfiling::end):
923             - exit a profiling scope.
924         * tools/CodeProfiling.h: Added.
925             - new class, instantialed from Completion to define a profiling scope.
926         * tools/ProfileTreeNode.h: Added.
927             - new class, used to construct a tree of samples.
928         * tools/TieredMMapArray.h: Added.
929             - new class, a malloc-free vector (can be used while the main thread is suspended,
930               possibly holding the malloc heap lock).
931         * wtf/MetaAllocator.cpp:
932         (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
933         (WTF::MetaAllocator::allocate):
934             - Allow allocation handles to track information about their owner.
935         * wtf/MetaAllocator.h:
936         (MetaAllocator):
937             - Allow allocation handles to track information about their owner.
938         * wtf/MetaAllocatorHandle.h:
939         (MetaAllocatorHandle):
940         (WTF::MetaAllocatorHandle::ownerUID):
941             - Allow allocation handles to track information about their owner.
942         * wtf/OSAllocator.h:
943         (WTF::OSAllocator::reallocateCommitted):
944             - reallocate an existing, committed memory allocation.
945
946 2012-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>
947
948         Unreviewed, rolling out r106187.
949         http://trac.webkit.org/changeset/106187
950         https://bugs.webkit.org/show_bug.cgi?id=77276
951
952         The last rollout was a false charge. (Requested by morrita on
953         #webkit).
954
955         * runtime/ExceptionHelpers.h:
956         (InterruptedExecutionError):
957         * runtime/JSBoundFunction.h:
958         (JSBoundFunction):
959         * runtime/RegExp.h:
960         (RegExp):
961         * runtime/RegExpMatchesArray.h:
962         (RegExpMatchesArray):
963
964 2012-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>
965
966         Unreviewed, rolling out r106151.
967         http://trac.webkit.org/changeset/106151
968         https://bugs.webkit.org/show_bug.cgi?id=77275
969
970         may break windows build (Requested by morrita on #webkit).
971
972         * runtime/ExceptionHelpers.h:
973         (InterruptedExecutionError):
974         * runtime/JSBoundFunction.h:
975         (JSBoundFunction):
976         * runtime/RegExp.h:
977         (RegExp):
978         * runtime/RegExpMatchesArray.h:
979         (RegExpMatchesArray):
980
981 2012-01-28  Filip Pizlo  <fpizlo@apple.com>
982
983         GC invoked while doing an old JIT property storage reallocation may lead
984         to an object that refers to a dead structure
985         https://bugs.webkit.org/show_bug.cgi?id=77273
986         <rdar://problem/10770565>
987
988         Reviewed by Gavin Barraclough.
989         
990         The put_by_id transition was already saving the old structure by virtue of
991         having the object on the stack, so that wasn't going to get deleted. But the
992         new structure was unprotected in the transition. I've now changed the
993         transition code to save the new structure, ensuring that the GC will know it
994         to be marked if invoked from within put_by_id_transition_realloc.
995
996         * jit/JITPropertyAccess.cpp:
997         (JSC::JIT::privateCompilePutByIdTransition):
998         * jit/JITPropertyAccess32_64.cpp:
999         (JSC::JIT::privateCompilePutByIdTransition):
1000         * jit/JITStubs.cpp:
1001         (JSC::DEFINE_STUB_FUNCTION):
1002         * jit/JITStubs.h:
1003         (JSC):
1004         ():
1005
1006 2012-01-27  Sheriff Bot  <webkit.review.bot@gmail.com>
1007
1008         Unreviewed, rolling out r106167.
1009         http://trac.webkit.org/changeset/106167
1010         https://bugs.webkit.org/show_bug.cgi?id=77264
1011
1012         broke LayoutTests/fast/js/string-capitalization.html
1013         (Requested by msaboff on #webkit).
1014
1015         * runtime/StringPrototype.cpp:
1016         (JSC::stringProtoFuncToLowerCase):
1017         (JSC::stringProtoFuncToUpperCase):
1018         * wtf/text/StringImpl.cpp:
1019         (WTF::StringImpl::upper):
1020
1021 2012-01-27  Filip Pizlo  <fpizlo@apple.com>
1022
1023         Build fix for interpreter platforms.
1024
1025         * interpreter/AbstractPC.cpp:
1026         (JSC::AbstractPC::AbstractPC):
1027
1028 2012-01-27  Michael Saboff  <msaboff@apple.com>
1029
1030         StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
1031         https://bugs.webkit.org/show_bug.cgi?id=76647
1032
1033         Reviewed by Geoffrey Garen.
1034
1035         Changed stringProtoFuncToUpperCase to call StringImpl::upper() is a manor similar
1036         to stringProtoFuncToLowerCase().  Fixed StringImpl::upper() to handle the two
1037         8 bit characters that when converted to upper case become 16 bit characters.
1038
1039         * runtime/StringPrototype.cpp:
1040         (JSC::stringProtoFuncToLowerCase): Removed extra trailing whitespace.
1041         (JSC::stringProtoFuncToUpperCase):
1042         * wtf/text/StringImpl.cpp:
1043         (WTF::StringImpl::upper):
1044
1045 2012-01-27  Hajime Morita  <morrita@google.com>
1046
1047         [JSC] ThunkGenerators.cpp should hide its asm-defined symbols
1048         https://bugs.webkit.org/show_bug.cgi?id=77244
1049
1050         Reviewed by Filip Pizlo.
1051
1052         * jit/ThunkGenerators.cpp: Added HIDE_SYMBOLS()
1053         * wtf/InlineASM.h: Moved some duplicated macros from ThunkGenerators.cpp
1054
1055 2012-01-27  Simon Hausmann  <simon.hausmann@nokia.com>
1056
1057         [JSC] Asm-originated symbols should be marked as hidden
1058         https://bugs.webkit.org/show_bug.cgi?id=77150
1059
1060         Reviewed by Filip Pizlo.
1061
1062         * dfg/DFGOperations.cpp: The HIDE_SYMBOLS macros were present in the CPU(ARM) preprocessor branches,
1063         but they were missing in the CPU(X86) and the CPU(X86_64) cases.
1064
1065 2012-01-27  MORITA Hajime  <morrita@google.com>
1066
1067         [JSC] Some JS_EXPORTDATA may not be necessary.
1068         https://bugs.webkit.org/show_bug.cgi?id=77145
1069
1070         Reviewed by Darin Adler.
1071
1072         Removed JS_EXPORTDATA attributes whose attributing symbols are
1073         not exported on Mac port.
1074         
1075         * runtime/ExceptionHelpers.h:
1076         (InterruptedExecutionError):
1077         * runtime/JSBoundFunction.h:
1078         (JSBoundFunction):
1079         * runtime/RegExp.h:
1080         (RegExp):
1081         * runtime/RegExpMatchesArray.h:
1082         (RegExpMatchesArray):
1083
1084 2012-01-27  MORITA Hajime  <morrita@google.com>
1085
1086         [WTF] WTFString.h has some extra JS_EXPORT_PRIVATEs
1087         https://bugs.webkit.org/show_bug.cgi?id=77113
1088
1089         Reviewed by Darin Adler.
1090
1091         * wtf/text/WTFString.h: Removed some WTF_EXPORT_PRIVATE attributes which we don't need to export.
1092
1093 2012-01-27  Zeno Albisser  <zeno@webkit.org>
1094
1095         [Qt][Mac] Build fails after adding ICU support (r105997).
1096         https://bugs.webkit.org/show_bug.cgi?id=77118
1097
1098         Use Apple code path for unicode date formats on mac.
1099
1100         Reviewed by Tor Arne Vestbø.
1101
1102         * runtime/DatePrototype.cpp:
1103         ():
1104
1105 2012-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>
1106
1107         [GTK] Add a GKeyFile especialization to GOwnPtr
1108         https://bugs.webkit.org/show_bug.cgi?id=77191
1109
1110         Reviewed by Martin Robinson.
1111
1112         * wtf/gobject/GOwnPtr.cpp:
1113         (WTF::GKeyFile): Implement freeOwnedGPtr for GKeyFile.
1114         * wtf/gobject/GOwnPtr.h: Add GKeyFile template.
1115         * wtf/gobject/GTypedefs.h: Add forward declaration for GKeyFile.
1116
1117 2012-01-25  Yury Semikhatsky  <yurys@chromium.org>
1118
1119         Web Inspector: should be possible to open function declaration from script popover
1120         https://bugs.webkit.org/show_bug.cgi?id=76913
1121
1122         Added display function name and source location to the popover in scripts panel.
1123         Now when a function is hovered user can navigate to its definition.
1124
1125         Reviewed by Pavel Feldman.
1126
1127         * JavaScriptCore/JavaScriptCore.exp
1128         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1129         * runtime/JSFunction.h:
1130         (JSFunction):
1131
1132 2012-01-26  Kevin Ollivier  <kevino@theolliviers.com>
1133
1134         [wx] Unreviewed. Build fix, wx uses the Mac ICU headers so we must match Mac behavior.
1135         
1136         * runtime/DatePrototype.cpp:
1137         ():
1138
1139 2012-01-26  Mark Hahnenberg  <mhahnenberg@apple.com>
1140
1141         Merge AllocationSpace into MarkedSpace
1142         https://bugs.webkit.org/show_bug.cgi?id=77116
1143
1144         Reviewed by Geoffrey Garen.
1145
1146         Merging AllocationSpace and MarkedSpace in preparation for future refactoring/enhancement to 
1147         MarkedSpace allocation.
1148
1149         * CMakeLists.txt:
1150         * GNUmakefile.list.am:
1151         * JavaScriptCore.exp:
1152         * JavaScriptCore.gypi:
1153         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1154         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1155         * JavaScriptCore.xcodeproj/project.pbxproj:
1156         * Target.pri:
1157         * heap/AllocationSpace.cpp: Removed.
1158         * heap/AllocationSpace.h: Removed.
1159         * heap/BumpSpace.h:
1160         (BumpSpace):
1161         * heap/Heap.h:
1162         (JSC::Heap::objectSpace):
1163         (Heap):
1164         ():
1165         * heap/HeapBlock.h:
1166         ():
1167         * heap/MarkedSpace.cpp:
1168         (JSC::MarkedSpace::tryAllocateHelper):
1169         (JSC):
1170         (JSC::MarkedSpace::tryAllocate):
1171         (JSC::MarkedSpace::allocateSlowCase):
1172         (JSC::MarkedSpace::allocateBlock):
1173         (JSC::MarkedSpace::freeBlocks):
1174         (TakeIfUnmarked):
1175         (JSC::TakeIfUnmarked::TakeIfUnmarked):
1176         (JSC::TakeIfUnmarked::operator()):
1177         (JSC::TakeIfUnmarked::returnValue):
1178         (JSC::MarkedSpace::shrink):
1179         (GatherDirtyCells):
1180         (JSC::GatherDirtyCells::returnValue):
1181         (JSC::GatherDirtyCells::GatherDirtyCells):
1182         (JSC::GatherDirtyCells::operator()):
1183         (JSC::MarkedSpace::gatherDirtyCells):
1184         * heap/MarkedSpace.h:
1185         (MarkedSpace):
1186         (JSC::MarkedSpace::blocks):
1187         (JSC::MarkedSpace::forEachCell):
1188         (JSC):
1189         (JSC::MarkedSpace::allocate):
1190
1191 2012-01-26  Oliver Hunt  <oliver@apple.com>
1192
1193         MSVC bug fix.
1194         <rdar://problem/10703671> MSVC generates bad code for enum compare.
1195
1196         RS=Geoff
1197
1198         Make bitfield large enough to work around MSVC's desire to make enums
1199         signed types.
1200
1201         * bytecode/CallLinkInfo.h:
1202         (CallLinkInfo):
1203
1204 2012-01-26  Filip Pizlo  <fpizlo@apple.com>
1205
1206         All DFG helpers that may call out to arbitrary JS code must know where they
1207         were called from due to inlining and call stack walking
1208         https://bugs.webkit.org/show_bug.cgi?id=77070
1209         <rdar://problem/10750834>
1210
1211         Reviewed by Geoff Garen.
1212         
1213         Changed the DFG to always record a code origin index in the tag of the argument
1214         count (which we previously left blank for the benefit of LLInt, but is still
1215         otherwise unused by the DFG), so that if we ever need to walk the stack accurately
1216         we know where to start. In particular, if the current ExecState* points several
1217         semantic call frames away from the true semantic call frame because we had
1218         performed inlining, having the code origin index recorded means that we can reify
1219         those call frames as necessary to give runtime/library code an accurate view of
1220         the current JS state.
1221         
1222         This required several large but mechanical changes:
1223         
1224         - Calling a function from the DFG now plants a store32 instruction to store the
1225           code origin index. But the indices of code origins were previously picked by
1226           the DFG::JITCompiler after code generation completed. I changed this somewhat;
1227           even though the code origins are put into the CodeBlock after code gen, the
1228           code gen now knows a priori what their indices will be. Extensive assertions
1229           are in place to ensure that the two don't get out of sync, in the form of the
1230           DFG::CallBeginToken. Note that this mechanism has almost no effect on JS calls;
1231           those don't need the code origin index set in the call frame because we can get
1232           it by doing a binary search on the return PC.
1233
1234         - Stack walking now always calls trueCallFrame() first before beginning the walk,
1235           since even the top call frame may be wrong. It still calls trueCallerFrame() as
1236           before to get to the next frame, though trueCallerFrame() is now mostly a
1237           wrapper around callerFrame()->trueCallFrame().
1238           
1239         - Because the mechanism for getting the code origin of a call frame is bimodal
1240           (either the call frame knows its code origin because the code origin index was
1241           set, or it's necessary to use the callee frame's return PC), I put in extra
1242           mechanisms to determine whether your caller, or your callee, corresponds to
1243           a call out of C++ code. Previously we just had the host call flag, but this is
1244           insufficient as it does not cover the case of someone calling JSC::call(). But
1245           luckily we can determine this just by looking at the return PC: if the return
1246           PC is in range of the ctiTrampiline, then two things are true: this call
1247           frame's PC will tell you nothing about where you came from in your caller, and
1248           the caller already knows where it's at because it must have set the code origin
1249           index (unless it's not DFG code, in which case we don't care because there is
1250           no inlining to worry about).
1251           
1252         - During testing this revealed a simple off-by-one goof in DFG::ByteCodeParser's
1253           inlining code, so I fixed it.
1254
1255         - Finally because I was tired of doing random #if's for checking if I should be
1256           passing around an Instruction* or a ReturnAddressPtr, I created a class called
1257           AbstractPC that holds whatever notion of a PC is appropriate for the current
1258           execution environment. It's designed to work gracefully even if both the
1259           interpreter and the JIT are compiled in, and should integrate nicely with the
1260           LLInt.
1261           
1262         This is neutral on all benchmarks and fixes some nasty corner-case regressions of
1263         evil code that uses combinations of getters/setters and function.arguments.
1264
1265         * CMakeLists.txt:
1266         * GNUmakefile.list.am:
1267         * JavaScriptCore.exp:
1268         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1269         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1270         * JavaScriptCore.xcodeproj/project.pbxproj:
1271         * Target.pri:
1272         * bytecode/CodeBlock.h:
1273         (JSC::CodeBlock::codeOrigin):
1274         (CodeBlock):
1275         * dfg/DFGByteCodeParser.cpp:
1276         (JSC::DFG::ByteCodeParser::handleInlining):
1277         * dfg/DFGJITCompiler.cpp:
1278         (JSC::DFG::JITCompiler::link):
1279         * dfg/DFGJITCompiler.h:
1280         (CallBeginToken):
1281         (JSC::DFG::CallBeginToken::CallBeginToken):
1282         (JSC::DFG::CallBeginToken::assertCodeOriginIndex):
1283         (JSC::DFG::CallBeginToken::assertNoCodeOriginIndex):
1284         (DFG):
1285         (JSC::DFG::CallExceptionRecord::CallExceptionRecord):
1286         (CallExceptionRecord):
1287         (JSC::DFG::JITCompiler::JITCompiler):
1288         (JITCompiler):
1289         (JSC::DFG::JITCompiler::nextCallBeginToken):
1290         (JSC::DFG::JITCompiler::beginCall):
1291         (JSC::DFG::JITCompiler::notifyCall):
1292         (JSC::DFG::JITCompiler::addExceptionCheck):
1293         (JSC::DFG::JITCompiler::addFastExceptionCheck):
1294         * dfg/DFGOperations.cpp:
1295         ():
1296         * dfg/DFGRepatch.cpp:
1297         (JSC::DFG::tryBuildGetByIDList):
1298         * dfg/DFGSpeculativeJIT.h:
1299         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
1300         * dfg/DFGSpeculativeJIT32_64.cpp:
1301         (JSC::DFG::SpeculativeJIT::emitCall):
1302         * dfg/DFGSpeculativeJIT64.cpp:
1303         (JSC::DFG::SpeculativeJIT::emitCall):
1304         * interpreter/AbstractPC.cpp: Added.
1305         (JSC):
1306         (JSC::AbstractPC::AbstractPC):
1307         * interpreter/AbstractPC.h: Added.
1308         (JSC):
1309         (AbstractPC):
1310         (JSC::AbstractPC::AbstractPC):
1311         (JSC::AbstractPC::hasJITReturnAddress):
1312         (JSC::AbstractPC::jitReturnAddress):
1313         (JSC::AbstractPC::hasInterpreterReturnAddress):
1314         (JSC::AbstractPC::interpreterReturnAddress):
1315         (JSC::AbstractPC::isSet):
1316         (JSC::AbstractPC::operator!):
1317         ():
1318         * interpreter/CallFrame.cpp:
1319         (JSC):
1320         (JSC::CallFrame::trueCallFrame):
1321         (JSC::CallFrame::trueCallerFrame):
1322         * interpreter/CallFrame.h:
1323         (JSC::ExecState::abstractReturnPC):
1324         (JSC::ExecState::codeOriginIndexForDFGWithInlining):
1325         (ExecState):
1326         (JSC::ExecState::trueCallFrame):
1327         (JSC::ExecState::trueCallFrameFromVMCode):
1328         * interpreter/Interpreter.cpp:
1329         (JSC::Interpreter::retrieveArgumentsFromVMCode):
1330         (JSC::Interpreter::retrieveCallerFromVMCode):
1331         (JSC::Interpreter::findFunctionCallFrameFromVMCode):
1332         * interpreter/Interpreter.h:
1333         (Interpreter):
1334         ():
1335         * jit/JITStubs.cpp:
1336         (JSC):
1337         ():
1338         * jit/JITStubs.h:
1339         (JSC):
1340         (JSC::returnAddressIsInCtiTrampoline):
1341         * runtime/JSFunction.cpp:
1342         (JSC::JSFunction::argumentsGetter):
1343         (JSC::JSFunction::callerGetter):
1344         (JSC::JSFunction::getOwnPropertyDescriptor):
1345
1346 2012-01-26  Peter Varga  <pvarga@webkit.org>
1347
1348         Fix build when VERBOSE_SPECULATION_FAILURE is enabled in DFG
1349         https://bugs.webkit.org/show_bug.cgi?id=77104
1350
1351         Reviewed by Filip Pizlo.
1352
1353         * dfg/DFGOperations.cpp:
1354         ():
1355
1356 2012-01-26  Michael Saboff  <msaboff@apple.com>
1357
1358         String::latin1() should take advantage of 8 bit strings
1359         https://bugs.webkit.org/show_bug.cgi?id=76646
1360
1361         Reviewed by Geoffrey Garen.
1362
1363         * wtf/text/WTFString.cpp:
1364         (WTF::String::latin1): For 8 bit strings, use existing buffer
1365         without conversion.
1366
1367 2012-01-26  Michael Saboff  <msaboff@apple.com>
1368
1369         Dromaeo tests usage of StringImpl find routines cause 8->16 bit conversions
1370         https://bugs.webkit.org/show_bug.cgi?id=76645
1371
1372         Reviewed by Geoffrey Garen.
1373
1374         * wtf/text/StringImpl.cpp:
1375         (WTF::equalIgnoringCase): New LChar version.
1376         (WTF::findInner): New helper function.
1377         (WTF::StringImpl::find): Added 8 bit path.
1378         (WTF::reverseFindInner): New helper funciton.
1379         (WTF::StringImpl::reverseFind): Added 8 bit path.
1380         (WTF::StringImpl::reverseFindIgnoringCase): Added 8 bit path.
1381         * wtf/text/StringImpl.h:
1382         (WTF):
1383
1384 2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>
1385
1386         [Qt][Win] One more speculative buildfix after r105970.
1387
1388         * JavaScriptCore.pri:
1389
1390 2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>
1391
1392         [Qt][Win] Speculative buildfix after r105970.
1393
1394         * JavaScriptCore.pri: Link lgdi for DeleteObject() and DeleteDC().
1395
1396 2012-01-26  Sheriff Bot  <webkit.review.bot@gmail.com>
1397
1398         Unreviewed, rolling out r105982.
1399         http://trac.webkit.org/changeset/105982
1400         https://bugs.webkit.org/show_bug.cgi?id=77090
1401
1402         breaks the world (Requested by WildFox on #webkit).
1403
1404         * wtf/MainThread.cpp:
1405         (WTF):
1406         * wtf/Platform.h:
1407         * wtf/mac/MainThreadMac.mm:
1408         (WTF):
1409         (WTF::registerGCThread):
1410         (WTF::isMainThreadOrGCThread):
1411
1412 2012-01-26  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
1413
1414         [Qt] GC should be parallel on Qt platform
1415         https://bugs.webkit.org/show_bug.cgi?id=73309
1416
1417         Reviewed by Zoltan Herczeg.
1418
1419         These changes made the parallel gc feature available for Qt port.
1420         The implementation of "registerGCThread" and "isMainThreadOrGCThread"
1421         is moved from MainThreadMac.mm to the common MainThread.cpp to make
1422         them available for other platforms.
1423
1424         Measurement results:
1425         V8           speed-up:  1.071x as fast  [From: 746.1ms  To: 696.4ms ]
1426         WindScorpion speed-up:  1.082x as fast  [From: 3490.4ms To: 3226.7ms]
1427         V8 Splay     speed-up:  1.158x as fast  [From: 145.8ms  To: 125.9ms ]
1428
1429         Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.
1430
1431         * wtf/MainThread.cpp:
1432         (WTF):
1433         (WTF::registerGCThread):
1434         (WTF::isMainThreadOrGCThread):
1435         * wtf/Platform.h:
1436         * wtf/mac/MainThreadMac.mm:
1437
1438 2012-01-26  Andy Estes  <aestes@apple.com>
1439
1440         REGRESSION (r105555): Incorrect use of OS() macro breaks OwnPtr when used with Win32 data types
1441         https://bugs.webkit.org/show_bug.cgi?id=77073
1442
1443         Reviewed by Ryosuke Niwa.
1444         
1445         r105555 changed PLATFORM(WIN) to OS(WIN), but WTF_OS_WIN isn't defined.
1446         This should have been changed to OS(WINDOWS). This causes the
1447         preprocessor to strip out Win32 data type overrides for deleteOwnedPtr,
1448         causing allocations made by Win32 to be deleted by fastmalloc.
1449
1450         * wtf/OwnPtrCommon.h:
1451         (WTF): Use OS(WINDOWS) instead of OS(WIN).
1452
1453 2012-01-25  Mark Rowe  <mrowe@apple.com>
1454
1455         Attempted Mac build fix after r105939.
1456
1457         * runtime/DatePrototype.cpp: Don't #include unicode/udat.h on Mac or iOS.
1458         It isn't used on these platforms and isn't available in the ICU headers
1459         for Mac.
1460
1461 2012-01-25  Mark Rowe  <mrowe@apple.com>
1462
1463         Build in to an alternate location when USE_STAGING_INSTALL_PATH is set.
1464
1465         <rdar://problem/10609417> Adopt USE_STAGING_INSTALL_PATH
1466
1467         Reviewed by David Kilzer.
1468
1469         * Configurations/Base.xcconfig: Define NORMAL_JAVASCRIPTCORE_FRAMEWORKS_DIR, which contains
1470         the path where JavaScriptCore is normally installed. Update JAVASCRIPTCORE_FRAMEWORKS_DIR
1471         to point to the staged frameworks directory when USE_STAGING_INSTALL_PATH is set.
1472         * Configurations/JavaScriptCore.xcconfig: Always set the framework's install name based on
1473         the normal framework location. This prevents an incorrect install name from being used when
1474         installing in to the staged frameworks directory.
1475
1476 2012-01-25  Eli Fidler  <efidler@rim.com>
1477
1478         Implement Date.toLocaleString() using ICU
1479         https://bugs.webkit.org/show_bug.cgi?id=76714
1480
1481         Reviewed by Darin Adler.
1482
1483         * runtime/DatePrototype.cpp:
1484         (JSC::formatLocaleDate):
1485
1486 2012-01-25  Hajime Morita  <morrita@google.com>
1487
1488         ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
1489         https://bugs.webkit.org/show_bug.cgi?id=76863
1490
1491         Reviewed by Dimitri Glazkov.
1492
1493         Added a feature flag.
1494
1495         * Configurations/FeatureDefines.xcconfig:
1496
1497 2012-01-25  Yong Li  <yoli@rim.com>
1498
1499         [BlackBerry] Implement OSAllocator::commit/decommit.
1500         BlackBerry port should support virtual memory decommiting.
1501         https://bugs.webkit.org/show_bug.cgi?id=77013
1502
1503         Reviewed by Rob Buis.
1504
1505         * wtf/OSAllocatorPosix.cpp:
1506         (WTF::OSAllocator::reserveUncommitted):
1507         (WTF::OSAllocator::commit):
1508         (WTF::OSAllocator::decommit):
1509         * wtf/Platform.h:
1510
1511 2012-01-24  Oliver Hunt  <oliver@apple.com>
1512
1513         Make DFG update topCallFrame
1514         https://bugs.webkit.org/show_bug.cgi?id=76969
1515
1516         Reviewed by Filip Pizlo.
1517
1518         Add NativeCallFrameTracer to manage topCallFrame assignment
1519         in the DFG operations, and make use of it.
1520
1521         * dfg/DFGOperations.cpp:
1522         (JSC::DFG::operationPutByValInternal):
1523         ():
1524         * interpreter/Interpreter.h:
1525         (JSC):
1526         (NativeCallFrameTracer):
1527         (JSC::NativeCallFrameTracer::NativeCallFrameTracer):
1528
1529 2012-01-24  Filip Pizlo  <fpizlo@apple.com>
1530
1531         Inlining breaks call frame walking when the walking is done from outside the inlinee,
1532         but inside a code block that had inlining
1533         https://bugs.webkit.org/show_bug.cgi?id=76978
1534         <rdar://problem/10720904>
1535
1536         Reviewed by Oliver Hunt.
1537
1538         * bytecode/CodeBlock.h:
1539         (JSC::CodeBlock::codeOriginForReturn):
1540         * interpreter/CallFrame.cpp:
1541         (JSC::CallFrame::trueCallerFrame):
1542
1543 2012-01-24  Gavin Barraclough  <barraclough@apple.com>
1544
1545         https://bugs.webkit.org/show_bug.cgi?id=76855
1546         Implement a JIT-code aware sampling profiler for JSC
1547
1548         Reviewed by Oliver Hunt.
1549
1550         Add support to MetaAllocator.cpp to track all live handles in a map,
1551         allowing lookup based on any address within the allocation.
1552
1553         * wtf/MetaAllocator.cpp:
1554         (WTF::MetaAllocatorTracker::notify):
1555         (WTF::MetaAllocatorTracker::release):
1556             - Track live handle objects in a map.
1557         (WTF::MetaAllocator::release):
1558             - Removed support for handles with null m_allocator (no longer used).
1559             - Notify the tracker of handles being released.
1560         (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
1561             - Moved functionality out into MetaAllocator::release.
1562         (WTF::MetaAllocatorHandle::shrink):
1563             - Removed support for handles with null m_allocator (no longer used).
1564         (WTF::MetaAllocator::MetaAllocator):
1565             - Initialize m_tracker.
1566         (WTF::MetaAllocator::allocate):
1567             - Notify the tracker of new allocations.
1568         * wtf/MetaAllocator.h:
1569         (WTF::MetaAllocatorTracker::find):
1570             - Lookup a MetaAllocatorHandle based on an address inside the allocation.
1571         (WTF::MetaAllocator::trackAllocations):
1572             - Register a callback object to track allocation state.
1573         * wtf/MetaAllocatorHandle.h:
1574             - Remove unused createSelfManagedHandle/constructor.
1575         (WTF::MetaAllocatorHandle::key):
1576             - Added, for use in RedBlackTree.
1577
1578 2012-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>
1579
1580         Use copying collector for out-of-line JSObject property storage
1581         https://bugs.webkit.org/show_bug.cgi?id=76665
1582
1583         Reviewed by Geoffrey Garen.
1584
1585         * runtime/JSObject.cpp:
1586         (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
1587         Also added a temporary variable to avoid warnings from GCC.
1588         (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
1589         operator new. Also added a temporary variable to avoid warnings from GCC.
1590         * runtime/JSObject.h:
1591
1592 2012-01-24  Geoffrey Garen  <ggaren@apple.com>
1593
1594         JSValue::toString() should return a JSString* instead of a UString
1595         https://bugs.webkit.org/show_bug.cgi?id=76861
1596
1597         Fixed two failing layout tests after my last patch.
1598
1599         Reviewed by Gavin Barraclough.
1600
1601         * runtime/ArrayPrototype.cpp:
1602         (JSC::arrayProtoFuncSort): Call value() after calling toString(), as
1603         in all other cases.
1604         
1605         I missed this case because the JSString* type has a valid operator<,
1606         so the compiler didn't complain.
1607
1608 2012-01-24  Kenichi Ishibashi  <bashi@chromium.org>
1609
1610         [V8] Add Uint8ClampedArray support
1611         https://bugs.webkit.org/show_bug.cgi?id=76803
1612
1613         Reviewed by Kenneth Russell.
1614
1615         * wtf/ArrayBufferView.h:
1616         (WTF::ArrayBufferView::isUnsignedByteClampedArray): Added.
1617         * wtf/Uint8ClampedArray.h:
1618         (WTF::Uint8ClampedArray::isUnsignedByteClampedArray): Overridden to return true.
1619
1620 2012-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>
1621
1622         [GTK] Add WebKitDownload to WebKit2 GTK+ API
1623         https://bugs.webkit.org/show_bug.cgi?id=72949
1624
1625         Reviewed by Martin Robinson.
1626
1627         * wtf/gobject/GOwnPtr.cpp:
1628         (WTF::GTimer): Use g_timer_destroy() to free a GTimer.
1629         * wtf/gobject/GOwnPtr.h: Add GTimer template.
1630         * wtf/gobject/GTypedefs.h: Add GTimer forward declaration.
1631
1632 2012-01-24  Ilya Tikhonovsky  <loislo@chromium.org>
1633
1634         Unreviewed build fix for Qt LinuxSH4 build after r105698.
1635
1636         * interpreter/Interpreter.cpp:
1637         (JSC::Interpreter::privateExecute):
1638
1639 2012-01-23  Geoffrey Garen  <ggaren@apple.com>
1640
1641         JSValue::toString() should return a JSString* instead of a UString
1642         https://bugs.webkit.org/show_bug.cgi?id=76861
1643
1644         Reviewed by Gavin Barraclough.
1645         
1646         This makes the common case -- toString() on a string -- faster and
1647         inline-able. (Not a measureable speedup, but we can now remove a bunch
1648         of duplicate hand-rolled code for this optimization.)
1649         
1650         This also clarifies the boundary between "C++ strings" and "JS strings".
1651         
1652         In all cases other than true, false, null, undefined, and multi-digit
1653         numbers, the JS runtime was just retrieving a UString from a JSString,
1654         so returning a JSString* is strictly better. In the other cases, we can
1655         optimize to avoid creating a new JSString if we care to, but it doesn't
1656         seem to be a big deal.
1657
1658         * JavaScriptCore.exp: Export!
1659         
1660         * jsc.cpp:
1661         (functionPrint):
1662         (functionDebug):
1663         (functionRun):
1664         (functionLoad):
1665         (functionCheckSyntax):
1666         (runWithScripts):
1667         (runInteractive):
1668         * API/JSValueRef.cpp:
1669         (JSValueToStringCopy):
1670         * bytecode/CodeBlock.cpp:
1671         (JSC::valueToSourceString): Call value() after calling toString(), to
1672         convert from "JS string" (JSString*) to "C++ string" (UString), since
1673         toString() no longer returns a "C++ string".
1674
1675         * dfg/DFGOperations.cpp:
1676         (JSC::DFG::operationValueAddNotNumber):
1677         * jit/JITStubs.cpp:
1678         (op_add): Updated for removal of toPrimitiveString():
1679         all '+' operands can use toString(), except for object operands, which
1680         need to take a slow path to call toPrimitive().
1681
1682         * runtime/ArrayPrototype.cpp:
1683         (JSC::arrayProtoFuncToString):
1684         (JSC::arrayProtoFuncToLocaleString):
1685         (JSC::arrayProtoFuncJoin):
1686         (JSC::arrayProtoFuncPush):
1687         * runtime/CommonSlowPaths.h:
1688         (JSC::CommonSlowPaths::opIn):
1689         * runtime/DateConstructor.cpp:
1690         (JSC::dateParse):
1691         * runtime/DatePrototype.cpp:
1692         (JSC::formatLocaleDate): Call value() after calling toString(), as above.
1693
1694         * runtime/ErrorInstance.h:
1695         (JSC::ErrorInstance::create): Simplified down to one canonical create()
1696         function, to make string handling easier.
1697
1698         * runtime/ErrorPrototype.cpp:
1699         (JSC::errorProtoFuncToString):
1700         * runtime/ExceptionHelpers.cpp:
1701         (JSC::createInvalidParamError):
1702         (JSC::createNotAConstructorError):
1703         (JSC::createNotAFunctionError):
1704         (JSC::createNotAnObjectError):
1705         * runtime/FunctionConstructor.cpp:
1706         (JSC::constructFunctionSkippingEvalEnabledCheck):
1707         * runtime/FunctionPrototype.cpp:
1708         (JSC::functionProtoFuncBind):
1709         * runtime/JSArray.cpp:
1710         (JSC::JSArray::sort): Call value() after calling toString(), as above.
1711
1712         * runtime/JSCell.cpp:
1713         * runtime/JSCell.h: Removed JSCell::toString() because JSValue does this
1714         job now. Doing it in JSCell is slower (requires extra type checking), and
1715         creates the misimpression that language-defined toString() behavior is
1716         an implementation detail of JSCell.
1717         
1718         * runtime/JSGlobalObjectFunctions.cpp:
1719         (JSC::encode):
1720         (JSC::decode):
1721         (JSC::globalFuncEval):
1722         (JSC::globalFuncParseInt):
1723         (JSC::globalFuncParseFloat):
1724         (JSC::globalFuncEscape):
1725         (JSC::globalFuncUnescape): Call value() after calling toString(), as above.
1726
1727         * runtime/JSONObject.cpp:
1728         (JSC::unwrapBoxedPrimitive):
1729         (JSC::Stringifier::Stringifier):
1730         (JSC::JSONProtoFuncParse): Removed some manual optimization that toString()
1731         takes care of.
1732
1733         * runtime/JSObject.cpp:
1734         (JSC::JSObject::toString):
1735         * runtime/JSObject.h: Updated to return JSString*.
1736
1737         * runtime/JSString.cpp:
1738         * runtime/JSString.h:
1739         (JSC::JSValue::toString): Removed, since I removed JSCell::toString().
1740
1741         * runtime/JSValue.cpp:
1742         (JSC::JSValue::toStringSlowCase): Removed toPrimitiveString(), and re-
1743         spawned toStringSlowCase() from its zombie corpse, since toPrimitiveString()
1744         basically did what we want all the time. (Note that the toPrimitive()
1745         preference changes from NoPreference to PreferString, because that's
1746         how ToString is defined in the language. op_add does not want this behavior.)
1747
1748         * runtime/NumberPrototype.cpp:
1749         (JSC::numberProtoFuncToString):
1750         (JSC::numberProtoFuncToLocaleString): A little simpler, now that toString()
1751         returns a JSString*.
1752
1753         * runtime/ObjectConstructor.cpp:
1754         (JSC::objectConstructorGetOwnPropertyDescriptor):
1755         (JSC::objectConstructorDefineProperty):
1756         * runtime/ObjectPrototype.cpp:
1757         (JSC::objectProtoFuncHasOwnProperty):
1758         (JSC::objectProtoFuncDefineGetter):
1759         (JSC::objectProtoFuncDefineSetter):
1760         (JSC::objectProtoFuncLookupGetter):
1761         (JSC::objectProtoFuncLookupSetter):
1762         (JSC::objectProtoFuncPropertyIsEnumerable): More calls to value(), as above.
1763
1764         * runtime/Operations.cpp:
1765         (JSC::jsAddSlowCase): Need to check for object before taking the toString()
1766         fast path becuase adding an object to a string requires calling toPrimitive()
1767         on the object, not toString(). (They differ in their preferred conversion
1768         type.)
1769
1770         * runtime/Operations.h:
1771         (JSC::jsString):
1772         (JSC::jsStringFromArguments): This code gets simpler, now that toString()
1773         does the right thing.
1774
1775         (JSC::jsAdd): Now checks for object, just like jsAddSlowCase().
1776
1777         * runtime/RegExpConstructor.cpp:
1778         (JSC::setRegExpConstructorInput):
1779         (JSC::constructRegExp):
1780         * runtime/RegExpObject.cpp:
1781         (JSC::RegExpObject::match):
1782         * runtime/RegExpPrototype.cpp:
1783         (JSC::regExpProtoFuncCompile):
1784         (JSC::regExpProtoFuncToString): More calls to value(), as above.
1785
1786         * runtime/StringConstructor.cpp:
1787         (JSC::constructWithStringConstructor):
1788         (JSC::callStringConstructor): This code gets simpler, now that toString()
1789         does the right thing.
1790
1791         * runtime/StringPrototype.cpp:
1792         (JSC::replaceUsingRegExpSearch):
1793         (JSC::replaceUsingStringSearch):
1794         (JSC::stringProtoFuncReplace):
1795         (JSC::stringProtoFuncCharAt):
1796         (JSC::stringProtoFuncCharCodeAt):
1797         (JSC::stringProtoFuncConcat):
1798         (JSC::stringProtoFuncIndexOf):
1799         (JSC::stringProtoFuncLastIndexOf):
1800         (JSC::stringProtoFuncMatch):
1801         (JSC::stringProtoFuncSearch):
1802         (JSC::stringProtoFuncSlice):
1803         (JSC::stringProtoFuncSplit):
1804         (JSC::stringProtoFuncSubstr):
1805         (JSC::stringProtoFuncSubstring):
1806         (JSC::stringProtoFuncToLowerCase):
1807         (JSC::stringProtoFuncToUpperCase):
1808         (JSC::stringProtoFuncLocaleCompare):
1809         (JSC::stringProtoFuncBig):
1810         (JSC::stringProtoFuncSmall):
1811         (JSC::stringProtoFuncBlink):
1812         (JSC::stringProtoFuncBold):
1813         (JSC::stringProtoFuncFixed):
1814         (JSC::stringProtoFuncItalics):
1815         (JSC::stringProtoFuncStrike):
1816         (JSC::stringProtoFuncSub):
1817         (JSC::stringProtoFuncSup):
1818         (JSC::stringProtoFuncFontcolor):
1819         (JSC::stringProtoFuncFontsize):
1820         (JSC::stringProtoFuncAnchor):
1821         (JSC::stringProtoFuncLink):
1822         (JSC::trimString): Some of this code gets simpler, now that toString()
1823         does the right thing. More calls to value(), as above.
1824
1825 2012-01-23  Luke Macpherson   <macpherson@chromium.org>
1826
1827         Unreviewed, rolling out r105676.
1828         http://trac.webkit.org/changeset/105676
1829         https://bugs.webkit.org/show_bug.cgi?id=76665
1830
1831         Breaks build on max due to compile warnings.
1832
1833         * runtime/JSObject.cpp:
1834         (JSC::JSObject::finalize):
1835         (JSC::JSObject::visitChildren):
1836         (JSC::JSObject::allocatePropertyStorage):
1837         * runtime/JSObject.h:
1838
1839 2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>
1840
1841         Use copying collector for out-of-line JSObject property storage
1842         https://bugs.webkit.org/show_bug.cgi?id=76665
1843
1844         Reviewed by Geoffrey Garen.
1845
1846         * runtime/JSObject.cpp:
1847         (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
1848         (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
1849         operator new.
1850         * runtime/JSObject.h:
1851
1852 2012-01-23  Brian Weinstein  <bweinstein@apple.com>
1853
1854         More build fixing after r105646.
1855
1856         * JavaScriptCore.exp:
1857
1858 2012-01-23  Gavin Barraclough  <barraclough@apple.com>
1859
1860         https://bugs.webkit.org/show_bug.cgi?id=76855
1861         Implement a JIT-code aware sampling profiler for JSC
1862
1863         Reviewed by Geoff Garen.
1864
1865         Step 2: generalize RedBlackTree. The profiler is going to want tio use
1866         a RedBlackTree, allow this class to work with subclasses of
1867         RedBlackTree::Node, Node should not need to know the names of the m_key
1868         and m_value fields (the subclass can provide a key() accessor), and
1869         RedBlackTree does not need to know anything about ValueType.
1870
1871         * JavaScriptCore.exp:
1872         * wtf/MetaAllocator.cpp:
1873         (WTF::MetaAllocator::findAndRemoveFreeSpace):
1874         (WTF::MetaAllocator::debugFreeSpaceSize):
1875         (WTF::MetaAllocator::addFreeSpace):
1876         * wtf/MetaAllocator.h:
1877         (WTF::MetaAllocator::FreeSpaceNode::FreeSpaceNode):
1878         (WTF::MetaAllocator::FreeSpaceNode::key):
1879         * wtf/MetaAllocatorHandle.h:
1880         (WTF::MetaAllocatorHandle::key):
1881         * wtf/RedBlackTree.h:
1882         (WTF::RedBlackTree::Node::successor):
1883         (WTF::RedBlackTree::Node::predecessor):
1884         (WTF::RedBlackTree::Node::parent):
1885         (WTF::RedBlackTree::Node::setParent):
1886         (WTF::RedBlackTree::Node::left):
1887         (WTF::RedBlackTree::Node::setLeft):
1888         (WTF::RedBlackTree::Node::right):
1889         (WTF::RedBlackTree::Node::setRight):
1890         (WTF::RedBlackTree::insert):
1891         (WTF::RedBlackTree::remove):
1892         (WTF::RedBlackTree::findExact):
1893         (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
1894         (WTF::RedBlackTree::findGreatestLessThanOrEqual):
1895         (WTF::RedBlackTree::first):
1896         (WTF::RedBlackTree::last):
1897         (WTF::RedBlackTree::size):
1898         (WTF::RedBlackTree::treeMinimum):
1899         (WTF::RedBlackTree::treeMaximum):
1900         (WTF::RedBlackTree::treeInsert):
1901         (WTF::RedBlackTree::leftRotate):
1902         (WTF::RedBlackTree::rightRotate):
1903         (WTF::RedBlackTree::removeFixup):
1904
1905 2012-01-23  Andy Estes  <aestes@apple.com>
1906
1907         Fix the build after r105635.
1908
1909         * JavaScriptCore.exp:
1910
1911 2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>
1912
1913         Remove StackBounds from JSGlobalData
1914         https://bugs.webkit.org/show_bug.cgi?id=76310
1915
1916         Reviewed by Sam Weinig.
1917
1918         Removed StackBounds and the stack() function from JSGlobalData since it no 
1919         longer accessed any members of JSGlobalData.
1920
1921         * bytecompiler/BytecodeGenerator.cpp:
1922         (JSC::BytecodeGenerator::BytecodeGenerator):
1923         * heap/MachineStackMarker.cpp:
1924         (JSC::MachineThreads::addCurrentThread):
1925         (JSC::MachineThreads::gatherFromCurrentThread):
1926         * parser/Parser.cpp:
1927         (JSC::::Parser):
1928         * runtime/JSGlobalData.cpp:
1929         (JSC::JSGlobalData::JSGlobalData):
1930         * runtime/JSGlobalData.h:
1931
1932 2012-01-23  Gavin Barraclough  <barraclough@apple.com>
1933
1934         Implement a JIT-code aware sampling profiler for JSC
1935         https://bugs.webkit.org/show_bug.cgi?id=76855
1936
1937         Rubber stanmped by Geoff Garen.
1938
1939         Mechanical change - pass CodeBlock through to the executable allocator,
1940         such that we will be able to map ranges of JIT code back to their owner.
1941
1942         * assembler/ARMAssembler.cpp:
1943         (JSC::ARMAssembler::executableCopy):
1944         * assembler/ARMAssembler.h:
1945         * assembler/AssemblerBuffer.h:
1946         (JSC::AssemblerBuffer::executableCopy):
1947         * assembler/AssemblerBufferWithConstantPool.h:
1948         (JSC::AssemblerBufferWithConstantPool::executableCopy):
1949         * assembler/LinkBuffer.h:
1950         (JSC::LinkBuffer::LinkBuffer):
1951         (JSC::LinkBuffer::linkCode):
1952         * assembler/MIPSAssembler.h:
1953         (JSC::MIPSAssembler::executableCopy):
1954         * assembler/SH4Assembler.h:
1955         (JSC::SH4Assembler::executableCopy):
1956         * assembler/X86Assembler.h:
1957         (JSC::X86Assembler::executableCopy):
1958         (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
1959         * dfg/DFGJITCompiler.cpp:
1960         (JSC::DFG::JITCompiler::compile):
1961         (JSC::DFG::JITCompiler::compileFunction):
1962         * dfg/DFGOSRExitCompiler.cpp:
1963         * dfg/DFGRepatch.cpp:
1964         (JSC::DFG::generateProtoChainAccessStub):
1965         (JSC::DFG::tryCacheGetByID):
1966         (JSC::DFG::tryBuildGetByIDList):
1967         (JSC::DFG::tryCachePutByID):
1968         * dfg/DFGThunks.cpp:
1969         (JSC::DFG::osrExitGenerationThunkGenerator):
1970         * jit/ExecutableAllocator.cpp:
1971         (JSC::ExecutableAllocator::allocate):
1972         * jit/ExecutableAllocator.h:
1973         * jit/ExecutableAllocatorFixedVMPool.cpp:
1974         (JSC::ExecutableAllocator::allocate):
1975         * jit/JIT.cpp:
1976         (JSC::JIT::privateCompile):
1977         * jit/JITOpcodes.cpp:
1978         (JSC::JIT::privateCompileCTIMachineTrampolines):
1979         * jit/JITOpcodes32_64.cpp:
1980         (JSC::JIT::privateCompileCTIMachineTrampolines):
1981         (JSC::JIT::privateCompileCTINativeCall):
1982         * jit/JITPropertyAccess.cpp:
1983         (JSC::JIT::stringGetByValStubGenerator):
1984         (JSC::JIT::privateCompilePutByIdTransition):
1985         (JSC::JIT::privateCompilePatchGetArrayLength):
1986         (JSC::JIT::privateCompileGetByIdProto):
1987         (JSC::JIT::privateCompileGetByIdSelfList):
1988         (JSC::JIT::privateCompileGetByIdProtoList):
1989         (JSC::JIT::privateCompileGetByIdChainList):
1990         (JSC::JIT::privateCompileGetByIdChain):
1991         * jit/JITPropertyAccess32_64.cpp:
1992         (JSC::JIT::stringGetByValStubGenerator):
1993         (JSC::JIT::privateCompilePutByIdTransition):
1994         (JSC::JIT::privateCompilePatchGetArrayLength):
1995         (JSC::JIT::privateCompileGetByIdProto):
1996         (JSC::JIT::privateCompileGetByIdSelfList):
1997         (JSC::JIT::privateCompileGetByIdProtoList):
1998         (JSC::JIT::privateCompileGetByIdChainList):
1999         (JSC::JIT::privateCompileGetByIdChain):
2000         * jit/JITStubs.cpp:
2001         * jit/SpecializedThunkJIT.h:
2002         (JSC::SpecializedThunkJIT::finalize):
2003         * yarr/YarrJIT.cpp:
2004         (JSC::Yarr::YarrGenerator::compile):
2005
2006 2012-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>
2007
2008         Basic enhancements to StringBuilder
2009         https://bugs.webkit.org/show_bug.cgi?id=67081
2010
2011         This change contains the following enhancements to StringBuilder,
2012         for convenience, performance, testability, etc.:
2013         - Change toStringPreserveCapacity() to const
2014         - new public methods: capacity(), swap(), toAtomicString(), canShrink()
2015           and append(const StringBuilder&)
2016         - == and != opearators to compare StringBuilders and a StringBuilder/String
2017
2018         Unit tests: Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp
2019
2020         Reviewed by Darin Adler.
2021
2022         * JavaScriptCore.exp:
2023         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2024         * wtf/text/AtomicString.cpp:
2025         (WTF::SubstringTranslator::hash):
2026         (WTF::SubstringTranslator::equal):
2027         (WTF::SubstringTranslator::translate):
2028         (WTF::AtomicString::add):
2029         (WTF::AtomicString::addSlowCase):
2030         * wtf/text/AtomicString.h:
2031         (WTF::AtomicString::AtomicString):
2032         (WTF::AtomicString::add):
2033         * wtf/text/StringBuilder.cpp:
2034         (WTF::StringBuilder::reifyString):
2035         (WTF::StringBuilder::resize):
2036         (WTF::StringBuilder::canShrink):
2037         (WTF::StringBuilder::shrinkToFit):
2038         * wtf/text/StringBuilder.h:
2039         (WTF::StringBuilder::append):
2040         (WTF::StringBuilder::toString):
2041         (WTF::StringBuilder::toStringPreserveCapacity):
2042         (WTF::StringBuilder::toAtomicString):
2043         (WTF::StringBuilder::isEmpty):
2044         (WTF::StringBuilder::capacity):
2045         (WTF::StringBuilder::is8Bit):
2046         (WTF::StringBuilder::swap):
2047         (WTF::equal):
2048         (WTF::operator==):
2049         (WTF::operator!=):
2050         * wtf/text/StringImpl.h:
2051
2052 2012-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>
2053
2054         Unreviewed. Fix make distcheck.
2055
2056         * GNUmakefile.list.am: Add missing files, remove deleted files and
2057         fix indentation.
2058
2059 2012-01-22  Filip Pizlo  <fpizlo@apple.com>
2060
2061         Build fix for non-DFG platforms that error out on warn-unused-parameter.
2062
2063         * bytecode/CallLinkStatus.cpp:
2064         (JSC::CallLinkStatus::computeFor):
2065         * bytecode/GetByIdStatus.cpp:
2066         (JSC::GetByIdStatus::computeFor):
2067         * bytecode/MethodCallLinkStatus.cpp:
2068         (JSC::MethodCallLinkStatus::computeFor):
2069         * bytecode/PutByIdStatus.cpp:
2070         (JSC::PutByIdStatus::computeFor):
2071
2072 2012-01-22  Filip Pizlo  <fpizlo@apple.com>
2073
2074         Build fix for non-DFG platforms.
2075
2076         * bytecode/CallLinkStatus.cpp:
2077         (JSC::CallLinkStatus::computeFor):
2078         * bytecode/GetByIdStatus.cpp:
2079         (JSC::GetByIdStatus::computeFor):
2080         * bytecode/MethodCallLinkStatus.cpp:
2081         (JSC::MethodCallLinkStatus::computeFor):
2082         * bytecode/PutByIdStatus.cpp:
2083         (JSC::PutByIdStatus::computeFor):
2084
2085 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
2086
2087         DFG should not have code that directly decodes the states of old JIT inline
2088         cache data structures
2089         https://bugs.webkit.org/show_bug.cgi?id=76768
2090
2091         Reviewed by Sam Weinig.
2092         
2093         Introduced new classes (like GetByIdStatus) that encapsulate the set of things
2094         that the DFG would like to know about property accesses and calls. Whereas it
2095         previously got this information by directly decoding the data structures used
2096         by the old JIT for inline caching, it now uses these classes, which do the work
2097         for it. This should make it somewhat more straight forward to introduce new
2098         ways of profiling the same information.
2099         
2100         Also hoisted StructureSet into bytecode/ from dfg/, because it's now used by
2101         code in bytecode/.
2102         
2103         Making this work right involved carefully ensuring that the heuristics for
2104         choosing how to handle property accesses was at least as good as what we had
2105         before, since I completely restructured that code. Currently the performance
2106         looks neutral. Since I rewrote the code I did change some things that I never
2107         liked before, like previously if a put_bu_id had executed exactly once then
2108         we'd compile it as if it had taken slow-path. Executing once is special because
2109         then the inline cache is not baked in, so there is no information about how the
2110         DFG should optimize the code. Now this is rationalized: if the put_by_id does
2111         not offer enough information to be optimized (i.e. had executed 0 or 1 times)
2112         then we turn it into a forced OSR exit (i.e. a patch point). However, get_by_id
2113         still has the old behavior; I left it that way because I didn't want to make
2114         too many changes at once.
2115
2116         * CMakeLists.txt:
2117         * GNUmakefile.list.am:
2118         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2119         * JavaScriptCore.xcodeproj/project.pbxproj:
2120         * Target.pri:
2121         * bytecode/CallLinkStatus.cpp: Added.
2122         (JSC::CallLinkStatus::computeFor):
2123         * bytecode/CallLinkStatus.h: Added.
2124         (JSC::CallLinkStatus::CallLinkStatus):
2125         (JSC::CallLinkStatus::isSet):
2126         (JSC::CallLinkStatus::operator!):
2127         (JSC::CallLinkStatus::couldTakeSlowPath):
2128         (JSC::CallLinkStatus::callTarget):
2129         * bytecode/GetByIdStatus.cpp: Added.
2130         (JSC::GetByIdStatus::computeFor):
2131         * bytecode/GetByIdStatus.h: Added.
2132         (JSC::GetByIdStatus::GetByIdStatus):
2133         (JSC::GetByIdStatus::state):
2134         (JSC::GetByIdStatus::isSet):
2135         (JSC::GetByIdStatus::operator!):
2136         (JSC::GetByIdStatus::isSimpleDirect):
2137         (JSC::GetByIdStatus::takesSlowPath):
2138         (JSC::GetByIdStatus::makesCalls):
2139         (JSC::GetByIdStatus::structureSet):
2140         (JSC::GetByIdStatus::offset):
2141         * bytecode/MethodCallLinkStatus.cpp: Added.
2142         (JSC::MethodCallLinkStatus::computeFor):
2143         * bytecode/MethodCallLinkStatus.h: Added.
2144         (JSC::MethodCallLinkStatus::MethodCallLinkStatus):
2145         (JSC::MethodCallLinkStatus::isSet):
2146         (JSC::MethodCallLinkStatus::operator!):
2147         (JSC::MethodCallLinkStatus::needsPrototypeCheck):
2148         (JSC::MethodCallLinkStatus::structure):
2149         (JSC::MethodCallLinkStatus::prototypeStructure):
2150         (JSC::MethodCallLinkStatus::function):
2151         (JSC::MethodCallLinkStatus::prototype):
2152         * bytecode/PutByIdStatus.cpp: Added.
2153         (JSC::PutByIdStatus::computeFor):
2154         * bytecode/PutByIdStatus.h: Added.
2155         (JSC::PutByIdStatus::PutByIdStatus):
2156         (JSC::PutByIdStatus::state):
2157         (JSC::PutByIdStatus::isSet):
2158         (JSC::PutByIdStatus::operator!):
2159         (JSC::PutByIdStatus::isSimpleReplace):
2160         (JSC::PutByIdStatus::isSimpleTransition):
2161         (JSC::PutByIdStatus::takesSlowPath):
2162         (JSC::PutByIdStatus::oldStructure):
2163         (JSC::PutByIdStatus::newStructure):
2164         (JSC::PutByIdStatus::structureChain):
2165         (JSC::PutByIdStatus::offset):
2166         * bytecode/StructureSet.h: Added.
2167         (JSC::StructureSet::StructureSet):
2168         (JSC::StructureSet::clear):
2169         (JSC::StructureSet::add):
2170         (JSC::StructureSet::addAll):
2171         (JSC::StructureSet::remove):
2172         (JSC::StructureSet::contains):
2173         (JSC::StructureSet::isSubsetOf):
2174         (JSC::StructureSet::isSupersetOf):
2175         (JSC::StructureSet::size):
2176         (JSC::StructureSet::at):
2177         (JSC::StructureSet::operator[]):
2178         (JSC::StructureSet::last):
2179         (JSC::StructureSet::predictionFromStructures):
2180         (JSC::StructureSet::operator==):
2181         (JSC::StructureSet::dump):
2182         * dfg/DFGAbstractValue.h:
2183         * dfg/DFGByteCodeParser.cpp:
2184         (JSC::DFG::ByteCodeParser::handleCall):
2185         (JSC::DFG::ByteCodeParser::parseBlock):
2186         * dfg/DFGStructureSet.h: Removed.
2187
2188 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
2189
2190         JIT compilation should not require ExecState
2191         https://bugs.webkit.org/show_bug.cgi?id=76729
2192         <rdar://problem/10731545>
2193
2194         Reviewed by Gavin Barraclough.
2195         
2196         Changed the relevant JIT driver functions to take JSGlobalData& instead of
2197         ExecState*, since really they just needed the global data.
2198
2199         * dfg/DFGDriver.cpp:
2200         (JSC::DFG::compile):
2201         (JSC::DFG::tryCompile):
2202         (JSC::DFG::tryCompileFunction):
2203         * dfg/DFGDriver.h:
2204         (JSC::DFG::tryCompile):
2205         (JSC::DFG::tryCompileFunction):
2206         * jit/JITDriver.h:
2207         (JSC::jitCompileIfAppropriate):
2208         (JSC::jitCompileFunctionIfAppropriate):
2209         * runtime/Executable.cpp:
2210         (JSC::EvalExecutable::compileInternal):
2211         (JSC::ProgramExecutable::compileInternal):
2212         (JSC::FunctionExecutable::compileForCallInternal):
2213         (JSC::FunctionExecutable::compileForConstructInternal):
2214
2215 2012-01-20  David Levin  <levin@chromium.org>
2216
2217         Make OwnPtr<HDC> work for the Chromium Windows port.
2218         https://bugs.webkit.org/show_bug.cgi?id=76738
2219
2220         Reviewed by Jian Li.
2221
2222         * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnPtrWin.cpp to the
2223         Chromium Windows build.
2224         * wtf/OwnPtrCommon.h: Changed from platform WIN to OS WIN for
2225         OwnPtr<HDC> and similar constructs.
2226
2227 2012-01-19  Geoffrey Garen  <ggaren@apple.com>
2228
2229         Removed some regexp entry boilerplate code
2230         https://bugs.webkit.org/show_bug.cgi?id=76687
2231
2232         Reviewed by Darin Adler.
2233         
2234         1% - 2% speedup on regexp tests, no change overall.
2235
2236         * runtime/RegExp.cpp:
2237         (JSC::RegExp::match):
2238             - ASSERT that our startIndex is non-negative, because anything less
2239             would be uncivilized.
2240             
2241             - ASSERT that our input is not the null string for the same reason.
2242
2243             - No need to test for startOffset being past the end of the string,
2244             since the regular expression engine will do this test for us.
2245
2246             - No need to initialize the output vector, since the regular expression
2247             engine will fill it in for us.
2248
2249         * yarr/YarrInterpreter.cpp:
2250         (JSC::Yarr::Interpreter::interpret):
2251         * yarr/YarrJIT.cpp:
2252         (JSC::Yarr::YarrGenerator::compile):
2253         
2254             RegExp used to do these jobs for us, but now we do them for ourselves
2255             because it's a better separation of concerns, and the JIT can do them
2256             more efficiently than C++ code:
2257
2258             - Test for "past the end" before doing any matching -- otherwise
2259             a* will match with zero length past the end of the string, which is wrong.
2260
2261             - Initialize the output vector before doing any matching.
2262
2263 2012-01-20  Filip Pizlo  <fpizlo@apple.com>
2264
2265         Build fix for no-DFG configuration.
2266         Needed for <rdar://problem/10727689>.
2267
2268         * bytecompiler/BytecodeGenerator.cpp:
2269         (JSC::BytecodeGenerator::emitProfiledOpcode):
2270         * jit/JIT.h:
2271         (JSC::JIT::emitValueProfilingSite):
2272
2273 2012-01-19  Filip Pizlo  <fpizlo@apple.com>
2274
2275         Bytecode instructions that may have value profiling should have a direct inline
2276         link to the ValueProfile instance
2277         https://bugs.webkit.org/show_bug.cgi?id=76682
2278         <rdar://problem/10727689>
2279
2280         Reviewed by Sam Weinig.
2281         
2282         Each opcode that gets value profiled now has a link to its ValueProfile. This
2283         required rationalizing the emission of value profiles for opcode combos, like
2284         op_method_check/op_get_by_id and op_call/op_call_put_result. It only makes
2285         sense for one of them to have a value profile link, and it makes most sense
2286         for it to be the one that actually sets the result. The previous behavior was
2287         to have op_method_check profile for op_get_by_id when they were used together,
2288         but otherwise for op_get_by_id to have its own profiles. op_call already did
2289         the right thing; all profiling was done by op_call_put_result.
2290         
2291         But rationalizing this code required breaking some of the natural boundaries
2292         that the code had; for instance the code in DFG that emits a GetById in place
2293         of both op_method_check and op_get_by_id must now know that it's the latter of
2294         those that has the value profile, while the first of those constitutes the OSR
2295         target. Hence each CodeOrigin must now have two bytecode indices - one for
2296         OSR exit and one for profiling.
2297         
2298         Finally this change required some refiddling of our optimization heuristics,
2299         because now all code blocks have "more instructions" due to the value profile
2300         slots.
2301
2302         * bytecode/CodeBlock.cpp:
2303         (JSC::CodeBlock::printGetByIdOp):
2304         (JSC::CodeBlock::dump):
2305         * bytecode/CodeBlock.h:
2306         (JSC::CodeBlock::valueProfileForBytecodeOffset):
2307         * bytecode/CodeOrigin.h:
2308         (JSC::CodeOrigin::CodeOrigin):
2309         (JSC::CodeOrigin::bytecodeIndexForValueProfile):
2310         * bytecode/Instruction.h:
2311         (JSC::Instruction::Instruction):
2312         * bytecode/Opcode.h:
2313         * bytecompiler/BytecodeGenerator.cpp:
2314         (JSC::BytecodeGenerator::emitProfiledOpcode):
2315         (JSC::BytecodeGenerator::emitResolve):
2316         (JSC::BytecodeGenerator::emitGetScopedVar):
2317         (JSC::BytecodeGenerator::emitResolveBase):
2318         (JSC::BytecodeGenerator::emitResolveBaseForPut):
2319         (JSC::BytecodeGenerator::emitResolveWithBase):
2320         (JSC::BytecodeGenerator::emitResolveWithThis):
2321         (JSC::BytecodeGenerator::emitGetById):
2322         (JSC::BytecodeGenerator::emitGetByVal):
2323         (JSC::BytecodeGenerator::emitCall):
2324         (JSC::BytecodeGenerator::emitCallVarargs):
2325         (JSC::BytecodeGenerator::emitConstruct):
2326         * bytecompiler/BytecodeGenerator.h:
2327         * dfg/DFGByteCodeParser.cpp:
2328         (JSC::DFG::ByteCodeParser::ByteCodeParser):
2329         (JSC::DFG::ByteCodeParser::currentCodeOrigin):
2330         (JSC::DFG::ByteCodeParser::addCall):
2331         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
2332         (JSC::DFG::ByteCodeParser::getPrediction):
2333         (JSC::DFG::ByteCodeParser::handleCall):
2334         (JSC::DFG::ByteCodeParser::handleInlining):
2335         (JSC::DFG::ByteCodeParser::parseBlock):
2336         (JSC::DFG::ByteCodeParser::parse):
2337         * dfg/DFGGraph.h:
2338         (JSC::DFG::Graph::valueProfileFor):
2339         * jit/JIT.h:
2340         (JSC::JIT::emitValueProfilingSite):
2341         * jit/JITCall.cpp:
2342         (JSC::JIT::emit_op_call_put_result):
2343         * jit/JITCall32_64.cpp:
2344         (JSC::JIT::emit_op_call_put_result):
2345         * jit/JITInlineMethods.h:
2346         (JSC::JIT::emitValueProfilingSite):
2347         * jit/JITOpcodes.cpp:
2348         (JSC::JIT::emit_op_resolve):
2349         (JSC::JIT::emit_op_resolve_base):
2350         (JSC::JIT::emit_op_resolve_skip):
2351         (JSC::JIT::emit_op_resolve_global):
2352         (JSC::JIT::emitSlow_op_resolve_global):
2353         (JSC::JIT::emit_op_resolve_with_base):
2354         (JSC::JIT::emit_op_resolve_with_this):
2355         (JSC::JIT::emitSlow_op_resolve_global_dynamic):
2356         * jit/JITOpcodes32_64.cpp:
2357         (JSC::JIT::emit_op_resolve):
2358         (JSC::JIT::emit_op_resolve_base):
2359         (JSC::JIT::emit_op_resolve_skip):
2360         (JSC::JIT::emit_op_resolve_global):
2361         (JSC::JIT::emitSlow_op_resolve_global):
2362         (JSC::JIT::emit_op_resolve_with_base):
2363         (JSC::JIT::emit_op_resolve_with_this):
2364         * jit/JITPropertyAccess.cpp:
2365         (JSC::JIT::emit_op_get_by_val):
2366         (JSC::JIT::emitSlow_op_get_by_val):
2367         (JSC::JIT::emit_op_method_check):
2368         (JSC::JIT::emitSlow_op_method_check):
2369         (JSC::JIT::emit_op_get_by_id):
2370         (JSC::JIT::emitSlow_op_get_by_id):
2371         (JSC::JIT::emit_op_get_scoped_var):
2372         (JSC::JIT::emit_op_get_global_var):
2373         * jit/JITPropertyAccess32_64.cpp:
2374         (JSC::JIT::emit_op_method_check):
2375         (JSC::JIT::emitSlow_op_method_check):
2376         (JSC::JIT::emit_op_get_by_val):
2377         (JSC::JIT::emitSlow_op_get_by_val):
2378         (JSC::JIT::emit_op_get_by_id):
2379         (JSC::JIT::emitSlow_op_get_by_id):
2380         (JSC::JIT::emit_op_get_scoped_var):
2381         (JSC::JIT::emit_op_get_global_var):
2382         * jit/JITStubCall.h:
2383         (JSC::JITStubCall::callWithValueProfiling):
2384         * runtime/Options.cpp:
2385         (JSC::Options::initializeOptions):
2386
2387 2012-01-20  ChangSeok Oh  <shivamidow@gmail.com>
2388
2389         undefined reference to symbol eina_module_free
2390         https://bugs.webkit.org/show_bug.cgi?id=76681
2391
2392         Reviewed by Martin Robinson.
2393
2394         eina_module_free has been used without including eina libraries after r104936.
2395
2396         * wtf/PlatformEfl.cmake: Add EINA_LIBRARIES.
2397
2398 2012-01-19  Tony Chang  <tony@chromium.org>
2399
2400         [chromium] Remove an obsolete comment about features.gypi
2401         https://bugs.webkit.org/show_bug.cgi?id=76643
2402
2403         There can be only one features.gypi.
2404
2405         Reviewed by James Robinson.
2406
2407         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2408
2409 2012-01-19  Geoffrey Garen  <ggaren@apple.com>
2410
2411         Implicit creation of a regular expression should eagerly check for syntax errors
2412         https://bugs.webkit.org/show_bug.cgi?id=76642
2413
2414         Reviewed by Oliver Hunt.
2415         
2416         This is a correctness fix and a slight optimization.
2417
2418         * runtime/StringPrototype.cpp:
2419         (JSC::stringProtoFuncMatch):
2420         (JSC::stringProtoFuncSearch): Check for syntax errors because that's the
2421         correct behavior.
2422
2423         * runtime/RegExp.cpp:
2424         (JSC::RegExp::match): ASSERT that we aren't a syntax error. (One line
2425         of code change, many lines of indentation change.)
2426
2427         Since we have no clients that try to match a RegExp that is a syntax error,
2428         let's optimize out the check.
2429
2430 2012-01-19  Mark Hahnenberg  <mhahnenberg@apple.com>
2431
2432         Implement a new allocator for backing stores
2433         https://bugs.webkit.org/show_bug.cgi?id=75181
2434
2435         Reviewed by Filip Pizlo.
2436
2437         We want to move away from using fastMalloc for the backing stores for 
2438         some of our objects (e.g. JSArray, JSObject, JSString, etc).  These backing 
2439         stores have a nice property in that they only have a single owner (i.e. a 
2440         single pointer to them at any one time).  One way that we can take advantage 
2441         of this property is to implement a simple bump allocator/copying collector, 
2442         which will run alongside our normal mark/sweep collector, that only needs to 
2443         update the single owner pointer rather than having to redirect an arbitrary 
2444         number of pointers in from-space to to-space.
2445
2446         This plan can give us a number of benefits. We can beat fastMalloc in terms 
2447         of both performance and memory usage, we can track how much memory we're using 
2448         far more accurately than our rough estimation now through the use of 
2449         reportExtraMemoryCost, and we can allocate arbitrary size objects (as opposed 
2450         to being limited to size classes like we have been historically). This is also 
2451         another step toward moving away from lazy destruction, which will improve our memory footprint.
2452
2453         We start by creating said allocator and moving the ArrayStorage for JSArray 
2454         to use it rather than fastMalloc.
2455
2456         The design of the collector is as follows:
2457         Allocation:
2458         -The collector allocates 64KB chunks from the OS to use for object allocation.
2459         -Each chunk contains an offset, a flag indicating if the block has been pinned, 
2460          and a payload, along with next and prev pointers so that they can be put in DoublyLinkedLists.
2461         -Any allocation greater than 64KB gets its own separate oversize block, which 
2462          is managed separately from the rest.
2463         -If the allocator receives a request for more than the remaining amount in the 
2464          current block, it grabs a fresh block.
2465         -Grabbing a fresh block means grabbing one off of the global free list (which is now 
2466          shared between the mark/sweep allocator and the bump allocator) if there is one. 
2467          If there isn't a new one we do one of two things: allocate a new block from the OS 
2468          if we're not ready for a GC yet, or run a GC and then try again. If we still don't 
2469          have enough space after the GC, we allocate a new block from the OS.
2470
2471         Garbage collection:
2472         -At the start of garbage collection during conservative stack scanning, if we encounter 
2473          what appears to be a pointer to a bump-allocated block of memory, we pin that block so 
2474          that it will not be copied for this round of collection.
2475         -We also pin any oversize blocks that we encounter, which effectively doubles as a 
2476          "mark bit" for that block. Any oversize blocks that aren't pinned at the end of copying 
2477          are given back to the OS.
2478         -Marking threads are now also responsible for copying bump-allocated objects to newSpace
2479         -Each marking thread has a private 64KB block into which it copies bump-allocated objects that it encounters.
2480         -When that block fills up, the marking thread gives it back to the allocator and requests a new one.
2481         -When all marking has concluded, each thread gives back its copy block, even if it isn't full.
2482         -At the conclusion of copying (which is done by the end of the marking phase), we un-pin 
2483          any pinned blocks and give any blocks left in from-space to the global free list.
2484
2485         * CMakeLists.txt:
2486         * GNUmakefile.list.am:
2487         * JavaScriptCore.gypi:
2488         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2489         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2490         * JavaScriptCore.xcodeproj/project.pbxproj:
2491         * Target.pri:
2492         * heap/AllocationSpace.cpp:
2493         (JSC::AllocationSpace::allocateSlowCase):
2494         (JSC::AllocationSpace::allocateBlock):
2495         (JSC::AllocationSpace::freeBlocks):
2496         * heap/AllocationSpace.h:
2497         (JSC::AllocationSpace::waterMark):
2498         * heap/BumpBlock.h: Added.
2499         (JSC::BumpBlock::BumpBlock):
2500         * heap/BumpSpace.cpp: Added.
2501         (JSC::BumpSpace::tryAllocateSlowCase):
2502         * heap/BumpSpace.h: Added.
2503         (JSC::BumpSpace::isInCopyPhase):
2504         (JSC::BumpSpace::totalMemoryAllocated):
2505         (JSC::BumpSpace::totalMemoryUtilized):
2506         * heap/BumpSpaceInlineMethods.h: Added.
2507         (JSC::BumpSpace::BumpSpace):
2508         (JSC::BumpSpace::init):
2509         (JSC::BumpSpace::contains):
2510         (JSC::BumpSpace::pin):
2511         (JSC::BumpSpace::startedCopying):
2512         (JSC::BumpSpace::doneCopying):
2513         (JSC::BumpSpace::doneFillingBlock):
2514         (JSC::BumpSpace::recycleBlock):
2515         (JSC::BumpSpace::getFreshBlock):
2516         (JSC::BumpSpace::borrowBlock):
2517         (JSC::BumpSpace::addNewBlock):
2518         (JSC::BumpSpace::allocateNewBlock):
2519         (JSC::BumpSpace::fitsInBlock):
2520         (JSC::BumpSpace::fitsInCurrentBlock):
2521         (JSC::BumpSpace::tryAllocate):
2522         (JSC::BumpSpace::tryAllocateOversize):
2523         (JSC::BumpSpace::allocateFromBlock):
2524         (JSC::BumpSpace::tryReallocate):
2525         (JSC::BumpSpace::tryReallocateOversize):
2526         (JSC::BumpSpace::isOversize):
2527         (JSC::BumpSpace::isPinned):
2528         (JSC::BumpSpace::oversizeBlockFor):
2529         (JSC::BumpSpace::blockFor):
2530         * heap/ConservativeRoots.cpp:
2531         (JSC::ConservativeRoots::ConservativeRoots):
2532         (JSC::ConservativeRoots::genericAddPointer):
2533         (JSC::ConservativeRoots::add):
2534         * heap/ConservativeRoots.h:
2535         * heap/Heap.cpp:
2536         (JSC::Heap::Heap):
2537         (JSC::Heap::blockFreeingThreadMain):
2538         (JSC::Heap::reportExtraMemoryCostSlowCase):
2539         (JSC::Heap::getConservativeRegisterRoots):
2540         (JSC::Heap::markRoots):
2541         (JSC::Heap::collect):
2542         (JSC::Heap::releaseFreeBlocks):
2543         * heap/Heap.h:
2544         (JSC::Heap::waterMark):
2545         (JSC::Heap::highWaterMark):
2546         (JSC::Heap::setHighWaterMark):
2547         (JSC::Heap::tryAllocateStorage):
2548         (JSC::Heap::tryReallocateStorage):
2549         * heap/HeapBlock.h: Added.
2550         (JSC::HeapBlock::HeapBlock):
2551         * heap/MarkStack.cpp:
2552         (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
2553         (JSC::SlotVisitor::drain):
2554         (JSC::SlotVisitor::drainFromShared):
2555         (JSC::SlotVisitor::startCopying):
2556         (JSC::SlotVisitor::allocateNewSpace):
2557         (JSC::SlotVisitor::copy):
2558         (JSC::SlotVisitor::copyAndAppend):
2559         (JSC::SlotVisitor::doneCopying):
2560         * heap/MarkStack.h:
2561         * heap/MarkedBlock.cpp:
2562         (JSC::MarkedBlock::recycle):
2563         (JSC::MarkedBlock::MarkedBlock):
2564         * heap/MarkedBlock.h:
2565         * heap/MarkedSpace.cpp:
2566         (JSC::MarkedSpace::MarkedSpace):
2567         * heap/MarkedSpace.h:
2568         (JSC::MarkedSpace::allocate):
2569         (JSC::MarkedSpace::forEachBlock):
2570         (JSC::MarkedSpace::SizeClass::resetAllocator):
2571         * heap/SlotVisitor.h:
2572         (JSC::SlotVisitor::SlotVisitor):
2573         * heap/TinyBloomFilter.h:
2574         (JSC::TinyBloomFilter::reset):
2575         * runtime/JSArray.cpp:
2576         (JSC::JSArray::JSArray):
2577         (JSC::JSArray::finishCreation):
2578         (JSC::JSArray::tryFinishCreationUninitialized):
2579         (JSC::JSArray::~JSArray):
2580         (JSC::JSArray::enterSparseMode):
2581         (JSC::JSArray::defineOwnNumericProperty):
2582         (JSC::JSArray::setLengthWritable):
2583         (JSC::JSArray::getOwnPropertySlotByIndex):
2584         (JSC::JSArray::getOwnPropertyDescriptor):
2585         (JSC::JSArray::putByIndexBeyondVectorLength):
2586         (JSC::JSArray::deletePropertyByIndex):
2587         (JSC::JSArray::getOwnPropertyNames):
2588         (JSC::JSArray::increaseVectorLength):
2589         (JSC::JSArray::unshiftCountSlowCase):
2590         (JSC::JSArray::setLength):
2591         (JSC::JSArray::pop):
2592         (JSC::JSArray::unshiftCount):
2593         (JSC::JSArray::visitChildren):
2594         (JSC::JSArray::sortNumeric):
2595         (JSC::JSArray::sort):
2596         (JSC::JSArray::compactForSorting):
2597         (JSC::JSArray::subclassData):
2598         (JSC::JSArray::setSubclassData):
2599         (JSC::JSArray::checkConsistency):
2600         * runtime/JSArray.h:
2601         (JSC::JSArray::inSparseMode):
2602         (JSC::JSArray::isLengthWritable):
2603         * wtf/CheckedBoolean.h: Added.
2604         (CheckedBoolean::CheckedBoolean):
2605         (CheckedBoolean::~CheckedBoolean):
2606         (CheckedBoolean::operator bool):
2607         * wtf/DoublyLinkedList.h:
2608         (WTF::::push):
2609         * wtf/StdLibExtras.h:
2610         (WTF::isPointerAligned):
2611
2612 2012-01-19  Joi Sigurdsson  <joi@chromium.org>
2613
2614         Enable use of precompiled headers in Chromium port on Windows.
2615
2616         Bug 76381 - Use precompiled headers in Chromium port on Windows
2617         https://bugs.webkit.org/show_bug.cgi?id=76381
2618
2619         Reviewed by Tony Chang.
2620
2621         * JavaScriptCore.gyp/JavaScriptCore.gyp: Include WinPrecompile.gypi.
2622
2623 2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
2624
2625         Cross-platform processor core counter fix
2626         https://bugs.webkit.org/show_bug.cgi?id=76540
2627
2628         Reviewed by Zoltan Herczeg.
2629
2630         I attached "OS(FREEBSD)" to "#if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD)"
2631         and I removed the OS checking macros from ParallelJobsGeneric.cpp because
2632         the NumberOfCores.cpp contains them for counting CPU cores.
2633         The processor core counter patch located at
2634         https://bugs.webkit.org/show_bug.cgi?id=76530
2635
2636         * wtf/NumberOfCores.cpp:
2637         * wtf/ParallelJobsGeneric.cpp:
2638
2639 2012-01-18  Csaba Osztrogonác  <ossy@webkit.org>
2640
2641         Cross-platform processor core counter
2642         https://bugs.webkit.org/show_bug.cgi?id=76530
2643
2644         Unreviewed cross-MinGW buildfix after r105270.
2645
2646         * wtf/NumberOfCores.cpp: Use windows.h instead of Windows.h.
2647
2648 2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>
2649
2650         Cross-platform processor core counter
2651         https://bugs.webkit.org/show_bug.cgi?id=76530
2652
2653         Reviewed by Zoltan Herczeg.
2654
2655         Two files have been created that include the processor core counter function.
2656         It used to be in ParallelJobsGeneric.h/cpp before.
2657
2658         * GNUmakefile.list.am:
2659         * JavaScriptCore.gypi:
2660         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2661         * JavaScriptCore.xcodeproj/project.pbxproj:
2662         * runtime/Options.cpp:
2663         (JSC::Options::initializeOptions):
2664         * wtf/CMakeLists.txt:
2665         * wtf/NumberOfCores.cpp: Added.
2666         (WTF::numberOfProcessorCores):
2667         * wtf/NumberOfCores.h: Added.
2668         * wtf/ParallelJobsGeneric.cpp:
2669         (WTF::ParallelEnvironment::ParallelEnvironment):
2670         * wtf/ParallelJobsGeneric.h:
2671
2672 2012-01-18  Balazs Kelemen  <kbalazs@webkit.org>
2673
2674         [Qt] Consolidate layout test crash logging
2675         https://bugs.webkit.org/show_bug.cgi?id=75088
2676
2677         Reviewed by Simon Hausmann.
2678
2679         Move backtrace generating logic into WTFReportBacktrace
2680         and add a way to deinstall signal handlers if we know
2681         that we have already printed the backtrace.
2682
2683         * JavaScriptCore.exp:
2684         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2685         * wtf/Assertions.cpp:
2686         (WTFLogLocker::WTFReportBacktrace):
2687         (WTFLogLocker::WTFSetCrashHook):
2688         (WTFLogLocker::WTFInvokeCrashHook):
2689         * wtf/Assertions.h:
2690
2691 2012-01-17  Geoffrey Garen  <ggaren@apple.com>
2692
2693         Factored out some code into a helper function.
2694         
2695         I think this might help getting rid of omit-frame-pointer.
2696
2697         Reviewed by Sam Weinig.
2698         
2699         No benchmark change.
2700
2701         * runtime/StringPrototype.cpp:
2702         (JSC::removeUsingRegExpSearch): Moved to here...
2703         (JSC::replaceUsingRegExpSearch): ...from here.
2704
2705 2012-01-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
2706
2707         Uint8ClampedArray support
2708         https://bugs.webkit.org/show_bug.cgi?id=74455
2709
2710         Reviewed by Filip Pizlo.
2711
2712         * GNUmakefile.list.am:
2713         * JavaScriptCore.xcodeproj/project.pbxproj:
2714         * bytecode/PredictedType.cpp:
2715         (JSC::predictionToString):
2716         (JSC::predictionFromClassInfo):
2717         * bytecode/PredictedType.h:
2718         (JSC::isUint8ClampedArrayPrediction):
2719         (JSC::isActionableMutableArrayPrediction):
2720         * dfg/DFGAbstractState.cpp:
2721         (JSC::DFG::AbstractState::initialize):
2722         (JSC::DFG::AbstractState::execute):
2723         * dfg/DFGNode.h:
2724         (JSC::DFG::Node::shouldSpeculateUint8ClampedArray):
2725         * dfg/DFGPropagator.cpp:
2726         (JSC::DFG::Propagator::propagateNodePredictions):
2727         (JSC::DFG::Propagator::fixupNode):
2728         (JSC::DFG::Propagator::performNodeCSE):
2729         * dfg/DFGSpeculativeJIT.cpp:
2730         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
2731         (JSC::DFG::clampDoubleToByte):
2732         (JSC::DFG::compileClampIntegerToByte):
2733         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
2734         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2735         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
2736         * dfg/DFGSpeculativeJIT.h:
2737         * dfg/DFGSpeculativeJIT32_64.cpp:
2738         (JSC::DFG::SpeculativeJIT::compile):
2739         * dfg/DFGSpeculativeJIT64.cpp:
2740         (JSC::DFG::SpeculativeJIT::compile):
2741         * runtime/JSCell.h:
2742         * runtime/JSGlobalData.h:
2743         * wtf/Forward.h:
2744         * wtf/Uint8Array.h:
2745         * wtf/Uint8ClampedArray.h: Added.
2746         (WTF::Uint8ClampedArray::set):
2747         (WTF::Uint8ClampedArray::create):
2748         (WTF::Uint8ClampedArray::Uint8ClampedArray):
2749         (WTF::Uint8ClampedArray::subarray):
2750
2751 2012-01-17  Sam Weinig  <sam@webkit.org>
2752
2753         Add helper macro for forward declaring objective-c classes
2754         https://bugs.webkit.org/show_bug.cgi?id=76485
2755
2756         Reviewed by Anders Carlsson.
2757
2758         * wtf/Compiler.h:
2759         Add OBJC_CLASS macro which helps reduce code when forward declaring an
2760         objective-c class in a header which can be included from both Objective-C
2761         and non-Objective-C files.
2762
2763 2012-01-17  Filip Pizlo  <fpizlo@apple.com>
2764
2765         DFG should be able to do JS and custom getter caching
2766         https://bugs.webkit.org/show_bug.cgi?id=76361
2767
2768         Reviewed by Csaba Osztrogonác.
2769         
2770         Fix for 32-bit.
2771
2772         * dfg/DFGRepatch.cpp:
2773         (JSC::DFG::tryBuildGetByIDList):
2774         * dfg/DFGSpeculativeJIT32_64.cpp:
2775         (JSC::DFG::SpeculativeJIT::compile):
2776
2777 2012-01-15  Filip Pizlo  <fpizlo@apple.com>
2778
2779         DFG should be able to do JS and custom getter caching
2780         https://bugs.webkit.org/show_bug.cgi?id=76361
2781         <rdar://problem/10698060>
2782
2783         Reviewed by Geoff Garen.
2784         
2785         Added the ability to cache JS getter calls and custom getter calls in the DFG.
2786         Most of this is pretty mundane, since the old JIT supported this functionality
2787         as well. But a couple interesting things had to happen:
2788         
2789         - There are now two variants of GetById: GetById, which works as before, and
2790           GetByIdFlush, which flushes registers prior to doing the GetById. Only
2791           GetByIdFlush can be used for caching getters. We detect which GetById style
2792           to use by looking at the inline caches of the old JIT.
2793         
2794         - Exception handling for getter calls planted in stubs uses a separate lookup
2795           handler routine, which uses the CodeOrigin stored in the StructureStubInfo.
2796           
2797         This is a 40% speed-up in the Dromaeo DOM Traversal average. It removes all of
2798         the DFG regressions we saw in Dromaeo. This is neutral on SunSpider, V8, and
2799         Kraken.
2800
2801         * bytecode/StructureStubInfo.h:
2802         * dfg/DFGAbstractState.cpp:
2803         (JSC::DFG::AbstractState::execute):
2804         * dfg/DFGAssemblyHelpers.h:
2805         (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
2806         * dfg/DFGByteCodeParser.cpp:
2807         (JSC::DFG::ByteCodeParser::willNeedFlush):
2808         (JSC::DFG::ByteCodeParser::parseBlock):
2809         * dfg/DFGCCallHelpers.h:
2810         (JSC::DFG::CCallHelpers::setupResults):
2811         * dfg/DFGJITCompiler.cpp:
2812         (JSC::DFG::JITCompiler::link):
2813         * dfg/DFGJITCompiler.h:
2814         (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
2815         (JSC::DFG::JITCompiler::addExceptionCheck):
2816         * dfg/DFGNode.h:
2817         (JSC::DFG::Node::hasIdentifier):
2818         (JSC::DFG::Node::hasHeapPrediction):
2819         * dfg/DFGOperations.cpp:
2820         * dfg/DFGOperations.h:
2821         * dfg/DFGPropagator.cpp:
2822         (JSC::DFG::Propagator::propagateNodePredictions):
2823         * dfg/DFGRepatch.cpp:
2824         (JSC::DFG::tryCacheGetByID):
2825         (JSC::DFG::tryBuildGetByIDList):
2826         * dfg/DFGSpeculativeJIT.h:
2827         (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
2828         * dfg/DFGSpeculativeJIT32_64.cpp:
2829         (JSC::DFG::SpeculativeJIT::cachedGetById):
2830         (JSC::DFG::SpeculativeJIT::compile):
2831         * dfg/DFGSpeculativeJIT64.cpp:
2832         (JSC::DFG::SpeculativeJIT::cachedGetById):
2833         (JSC::DFG::SpeculativeJIT::compile):
2834
2835 2012-01-16  Jon Lee  <jonlee@apple.com>
2836
2837         Build fix for r105086.
2838
2839         * Configurations/FeatureDefines.xcconfig:
2840         * wtf/Platform.h:
2841
2842 2012-01-16  Jon Lee  <jonlee@apple.com>
2843
2844         Remove HTML notifications support on Mac
2845         https://bugs.webkit.org/show_bug.cgi?id=76401
2846         <rdar://problem/10589881>
2847
2848         Reviewed by Sam Weinig.
2849
2850         * wtf/Platform.h: Define ENABLE_HTML_NOTIFICATIONS macro.
2851
2852 2012-01-16  Zeno Albisser  <zeno@webkit.org>
2853
2854         [Qt] Fix QT_VERSION related warnings when building on Mac OS X
2855         https://bugs.webkit.org/show_bug.cgi?id=76340
2856
2857         This bug was caused by r104826.
2858         As already mentioned for https://bugs.webkit.org/show_bug.cgi?id=57239
2859         we should not use "using namespace WebCore" in header files,
2860         because it might cause ambiguous references.
2861         This patch reverts the changes from r104826 and r104981
2862         and removes the "using namespace WebCore" statement from
2863         two header files.
2864
2865         Reviewed by Tor Arne Vestbø.
2866
2867         * wtf/Platform.h:
2868
2869 2012-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>
2870
2871         Unreviewed. Fix make distcheck.
2872
2873         * GNUmakefile.list.am: Fix typo.
2874
2875 2012-01-16  Pavel Heimlich  <tropikhajma@gmail.com>
2876
2877         Solaris Studio supports alignment macros too
2878         https://bugs.webkit.org/show_bug.cgi?id=75453
2879
2880         Reviewed by Hajime Morita.
2881
2882         * wtf/Alignment.h:
2883
2884 2012-01-16  Yuqiang Xian  <yuqiang.xian@intel.com>
2885
2886         Build fix on 32bit if verbose debug is enabled in DFG
2887         https://bugs.webkit.org/show_bug.cgi?id=76351
2888
2889         Reviewed by Hajime Morita.
2890
2891         Mostly change "%lu" to "%zu" to print a "size_t" variable.
2892
2893         * dfg/DFGAbstractState.cpp:
2894         (JSC::DFG::AbstractState::endBasicBlock):
2895         * dfg/DFGByteCodeParser.cpp:
2896         (JSC::DFG::ByteCodeParser::handleCall):
2897         (JSC::DFG::ByteCodeParser::handleInlining):
2898         (JSC::DFG::ByteCodeParser::parseBlock):
2899         (JSC::DFG::ByteCodeParser::parseCodeBlock):
2900         * dfg/DFGGraph.cpp:
2901         (JSC::DFG::Graph::predictArgumentTypes):
2902         * dfg/DFGJITCompiler.cpp:
2903         (JSC::DFG::JITCompiler::link):
2904         * dfg/DFGOSREntry.cpp:
2905         (JSC::DFG::prepareOSREntry):
2906
2907 2012-01-15  Filip Pizlo  <fpizlo@apple.com>
2908
2909         The C calling convention logic in DFG::SpeculativeJIT should be available even
2910         when not generating code for the DFG speculative path
2911         https://bugs.webkit.org/show_bug.cgi?id=76355
2912
2913         Reviewed by Dan Bernstein.
2914         
2915         Moved all of the logic for placing C call arguments into the right place (stack
2916         or registers) into a new class, DFG::CCallHelpers.  This class inherits from
2917         AssemblyHelpers, another DFG grab-bag of helper functions.  I could have moved
2918         this code into AssemblyHelpers, but decided against it, because I wanted to
2919         limit the number of methods each class in the JIT has.  Hence now we have a
2920         slightly odd organization of JIT classes in DFG: MacroAssembler (basic instruction
2921         emission) <= AssemblyHelpers (some additional JS smarts) <= CCallHelpers
2922         (understands calls to C functions) <= JITCompiler (can compile a graph to machine
2923         code).  Each of these except for JITCompiler can be reused for stub compilation.
2924         
2925         * GNUmakefile.list.am:
2926         * JavaScriptCore.xcodeproj/project.pbxproj:
2927         * dfg/DFGCCallHelpers.h: Added.
2928         (JSC::DFG::CCallHelpers::CCallHelpers):
2929         (JSC::DFG::CCallHelpers::resetCallArguments):
2930         (JSC::DFG::CCallHelpers::addCallArgument):
2931         (JSC::DFG::CCallHelpers::setupArguments):
2932         (JSC::DFG::CCallHelpers::setupArgumentsExecState):
2933         (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
2934         (JSC::DFG::CCallHelpers::setupTwoStubArgs):
2935         (JSC::DFG::CCallHelpers::setupStubArguments):
2936         * dfg/DFGJITCompiler.h:
2937         (JSC::DFG::JITCompiler::JITCompiler):
2938         * dfg/DFGSpeculativeJIT.h:
2939         (JSC::DFG::SpeculativeJIT::callOperation):
2940
2941 2012-01-15  Pablo Flouret  <pablof@motorola.com>
2942
2943         Fix compilation errors on build-webkit --debug --no-video on mac.
2944         https://bugs.webkit.org/show_bug.cgi?id=75867
2945
2946         Reviewed by Philippe Normand.
2947
2948         Make ENABLE_VIDEO_TRACK conditional on ENABLE_VIDEO, video track feature
2949         doesn't build without video.
2950
2951         * wtf/Platform.h:
2952
2953 2012-01-14  David Levin  <levin@chromium.org>
2954
2955         HWndDC should be in platform/win instead of wtf.
2956         https://bugs.webkit.org/show_bug.cgi?id=76314
2957
2958         Reviewed by Sam Weinig.
2959
2960         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2961         * JavaScriptCore.gypi:
2962
2963 2012-01-13  David Levin  <levin@chromium.org>
2964
2965         check-webkit-style: should encourage the use of Own* classes for Windows DC.
2966         https://bugs.webkit.org/show_bug.cgi?id=76227
2967
2968         Reviewed by Dirk Pranke.
2969
2970         * wtf/win/HWndDCWin.h:
2971         (WTF::HwndDC::HwndDC): Add a way to do GetDCEx.
2972         There are no users, but I want to catch this in check-webkit-style
2973         and tell any users to use HwndDC to avoid leaks.
2974
2975 2012-01-13  David Levin  <levin@chromium.org>
2976
2977         Header file is missing header guard.
2978
2979         Reviewed by Dirk Pranke.
2980
2981         * wtf/win/HWndDCWin.h: Added the guards.
2982
2983 2012-01-13  Andy Wingo  <wingo@igalia.com>
2984
2985         Eval in strict mode does not need dynamic checks
2986         https://bugs.webkit.org/show_bug.cgi?id=76286
2987
2988         Reviewed by Oliver Hunt.
2989
2990         * runtime/JSActivation.cpp (JSC::JSActivation::JSActivation):
2991         Eval in strict mode cannot introduce variables, so it not impose
2992         the need for dynamic checks.
2993
2994 2012-01-13  David Levin  <levin@chromium.org>
2995
2996         HWndDC is a better name than HwndDC.
2997         https://bugs.webkit.org/show_bug.cgi?id=76281
2998
2999         Reviewed by Darin Adler.
3000
3001         * JavaScriptCore.gyp/JavaScriptCore.gyp:
3002         * JavaScriptCore.gypi:
3003         * wtf/win/HWndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/HwndDCWin.h.
3004         (WTF::HWndDC::HWndDC):
3005         (WTF::HWndDC::~HWndDC):
3006         (WTF::HWndDC::operator HDC):
3007
3008 2012-01-13  YoungTaeck Song  <youngtaeck.song@samsung.com>
3009
3010         [EFL] Add OwnPtr specialization for Eina_Module.
3011         https://bugs.webkit.org/show_bug.cgi?id=76255
3012
3013         Reviewed by Andreas Kling.
3014
3015         Add an overload for deleteOwnedPtr(Eina_Module*) on EFL port.
3016
3017         * wtf/OwnPtrCommon.h:
3018         * wtf/efl/OwnPtrEfl.cpp:
3019         (WTF::deleteOwnedPtr):
3020
3021 2012-01-13  Yuqiang Xian  <yuqiang.xian@intel.com>
3022
3023         Unreviewed build fix after r104787 if JIT_VERBOSE_OSR is defined
3024
3025         * jit/JITStubs.cpp:
3026         (JSC::DEFINE_STUB_FUNCTION):
3027
3028 2012-01-12  Hajime Morrita  <morrita@chromium.org>
3029
3030         JavaScriptCore: Mark all exported symbols in the header file automatically.
3031         https://bugs.webkit.org/show_bug.cgi?id=72855
3032
3033         Reviewed by Darin Adler.
3034
3035         Added WTF_EXPORT_PRIVATE and JS_EXPORT_PRIVATE based on JavaScriptCore.exp files.
3036         The change is generated by a tool calledListExportables (https://github.com/omo/ListExportables)
3037
3038         * API/OpaqueJSString.h:
3039         * bytecode/CodeBlock.h:
3040         * bytecode/SamplingTool.h:
3041         * debugger/Debugger.h:
3042         * debugger/DebuggerActivation.h:
3043         * debugger/DebuggerCallFrame.h:
3044         * heap/AllocationSpace.h:
3045         * heap/HandleHeap.h:
3046         * heap/Heap.h:
3047         * heap/MachineStackMarker.h:
3048         * heap/MarkStack.h:
3049         * heap/VTableSpectrum.h:
3050         * heap/WriteBarrierSupport.h:
3051         * parser/Nodes.h:
3052         * parser/ParserArena.h:
3053         * profiler/Profile.h:
3054         * runtime/ArgList.h:
3055         * runtime/CallData.h:
3056         * runtime/Completion.h:
3057         * runtime/ConstructData.h:
3058         * runtime/DateInstance.h:
3059         * runtime/Error.h:
3060         * runtime/ExceptionHelpers.h:
3061         * runtime/FunctionConstructor.h:
3062         * runtime/Identifier.h:
3063         * runtime/InitializeThreading.h:
3064         * runtime/InternalFunction.h:
3065         * runtime/JSArray.h:
3066         * runtime/JSByteArray.h:
3067         * runtime/JSCell.h:
3068         * runtime/JSFunction.h:
3069         * runtime/JSGlobalData.cpp:
3070         * runtime/JSGlobalData.h:
3071         * runtime/JSGlobalObject.h:
3072         * runtime/JSGlobalThis.h:
3073         * runtime/JSLock.h:
3074         * runtime/JSObject.h:
3075         * runtime/JSString.h:
3076         * runtime/JSValue.h:
3077         * runtime/JSVariableObject.h:
3078         * runtime/Lookup.h:
3079         * runtime/MemoryStatistics.h:
3080         * runtime/ObjectPrototype.h:
3081         * runtime/Options.h:
3082         * runtime/PropertyDescriptor.h:
3083         * runtime/PropertyNameArray.h:
3084         * runtime/PropertySlot.h:
3085         * runtime/RegExp.h:
3086         * runtime/RegExpObject.h:
3087         * runtime/SamplingCounter.h:
3088         * runtime/SmallStrings.h:
3089         * runtime/StringObject.h:
3090         * runtime/Structure.h:
3091         * runtime/TimeoutChecker.h:
3092         * runtime/UString.h:
3093         * runtime/WriteBarrier.h:
3094         * wtf/ArrayBufferView.h:
3095         * wtf/ByteArray.h:
3096         * wtf/CryptographicallyRandomNumber.h:
3097         * wtf/CurrentTime.h:
3098         * wtf/DateMath.h:
3099         * wtf/DecimalNumber.h:
3100         * wtf/FastMalloc.cpp:
3101         * wtf/FastMalloc.h:
3102         * wtf/MD5.h:
3103         * wtf/MainThread.h:
3104         * wtf/MetaAllocator.h:
3105         * wtf/MetaAllocatorHandle.h:
3106         * wtf/OSAllocator.h:
3107         * wtf/PageBlock.h:
3108         * wtf/RandomNumber.h:
3109         * wtf/RefCountedLeakCounter.h:
3110         * wtf/SHA1.h:
3111         * wtf/Threading.cpp:
3112         * wtf/Threading.h:
3113         * wtf/ThreadingPrimitives.h:
3114         * wtf/WTFThreadData.h:
3115         * wtf/dtoa.h:
3116         * wtf/text/AtomicString.h:
3117         * wtf/text/CString.h:
3118         * wtf/text/StringBuilder.h:
3119         * wtf/text/StringImpl.h:
3120         * wtf/text/WTFString.h:
3121         * wtf/unicode/Collator.h:
3122         * wtf/unicode/UTF8.h:
3123         * yarr/Yarr.h:
3124         * yarr/YarrPattern.h:
3125
3126 2012-01-12  MORITA Hajime  <morrita@google.com>
3127
3128         [Chromium] JSExportMacros.h should be visible.
3129         https://bugs.webkit.org/show_bug.cgi?id=76147
3130
3131         Reviewed by Tony Chang.
3132
3133         * config.h:
3134
3135 2012-01-12  David Levin  <levin@chromium.org>
3136
3137         HwndDC is a better name than OwnGetDC.
3138         https://bugs.webkit.org/show_bug.cgi?id=76235
3139
3140         Reviewed by Dmitry Titov.
3141
3142         This is a better name for two reasons:
3143         1. "Own" implies "delete". In this case, the final call is a release (ReleaseDC).
3144         2. "Ref" would be a better name due to the release but the RefPtr (and OwnPtr)
3145            classes always take something to hold on to. In this case, the object (the DC)
3146            is created by the class once it is given a Window to ensure that the HDC
3147            was actually created using GetDC.
3148
3149         * JavaScriptCore.gyp/JavaScriptCore.gyp:
3150         * JavaScriptCore.gypi:
3151         * wtf/win/HwndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/OwnGetDCWin.h.
3152         (WTF::HwndDC::HwndDC):
3153         (WTF::HwndDC::~HwndDC):
3154         (WTF::HwndDC::operator HDC):
3155
3156 2012-01-12  Gavin Barraclough  <barraclough@apple.com>
3157
3158         Clean up putDirect (part 2)
3159         https://bugs.webkit.org/show_bug.cgi?id=76232
3160
3161         Reviewed by Sam Weinig.
3162
3163         Rename putWithAttributes to putDirectVirtual, to identify that this
3164         has the same unchecked-DefineOwnProperty behaviour, change putDirectInternal
3165         to be templated on an enum indicating which behaviour it is supposed to be
3166         implementing, and change clients that are defining properties to call
3167         putDirectInternal correctly.
3168
3169         * API/JSObjectRef.cpp:
3170         (JSObjectSetProperty):
3171         * JavaScriptCore.exp:
3172         * debugger/DebuggerActivation.cpp:
3173         (JSC::DebuggerActivation::putDirectVirtual):
3174         * debugger/DebuggerActivation.h:
3175         * interpreter/Interpreter.cpp:
3176         (JSC::Interpreter::execute):
3177         * runtime/ClassInfo.h:
3178         * runtime/Error.cpp:
3179         (JSC::addErrorInfo):
3180         * runtime/JSActivation.cpp:
3181         (JSC::JSActivation::putDirectVirtual):
3182         * runtime/JSActivation.h:
3183         * runtime/JSCell.cpp:
3184         (JSC::JSCell::putDirectVirtual):
3185         * runtime/JSCell.h:
3186         * runtime/JSGlobalObject.cpp:
3187         (JSC::JSGlobalObject::putDirectVirtual):
3188         * runtime/JSGlobalObject.h:
3189         * runtime/JSObject.cpp:
3190         (JSC::JSObject::put):
3191         (JSC::JSObject::putDirectVirtual):
3192         (JSC::JSObject::defineGetter):
3193         (JSC::JSObject::initializeGetterSetterProperty):
3194         (JSC::JSObject::defineSetter):
3195         (JSC::putDescriptor):
3196         * runtime/JSObject.h:
3197         (JSC::JSObject::putDirectInternal):
3198         (JSC::JSObject::putOwnDataProperty):
3199         (JSC::JSObject::putDirect):
3200         * runtime/JSStaticScopeObject.cpp:
3201         (JSC::JSStaticScopeObject::putDirectVirtual):
3202         * runtime/JSStaticScopeObject.h:
3203         * runtime/JSVariableObject.cpp:
3204         (JSC::JSVariableObject::putDirectVirtual):
3205         * runtime/JSVariableObject.h:
3206
3207 2012-01-12  Gavin Barraclough  <barraclough@apple.com>
3208
3209         Clean up putDirect (part 1)
3210         https://bugs.webkit.org/show_bug.cgi?id=76232
3211
3212         Reviewed by Sam Weinig.
3213
3214         putDirect has ambiguous semantics, clean these up a bit.
3215
3216         putDirect generally behaves a bit like a fast defineOwnProperty, but one that
3217         always creates the property, with no checking to validate the put it permitted.
3218
3219         It also encompasses two slightly different behaviors.
3220         (1) a fast form of put for JSActivation, which doesn't have to handle searching
3221             the prototype chain, getter/setter properties, or the magic __proto__ value.
3222             Break this out as a new method, 'putOwnDataProperty'.
3223         (2) the version of putDirect on JSValue will also check for overwriting ReadOnly
3224             values, in strict mode. This is, however, not so smart on a few level, since
3225             it is only called from op_put_by_id with direct set, which is only used with
3226             an object as the base, and is only used to put new properties onto objects.
3227
3228         * dfg/DFGOperations.cpp:
3229         * interpreter/Interpreter.cpp:
3230         (JSC::Interpreter::privateExecute):
3231         * jit/JITStubs.cpp:
3232         (JSC::DEFINE_STUB_FUNCTION):
3233         * runtime/JSActivation.cpp:
3234         (JSC::JSActivation::put):
3235         * runtime/JSFunction.cpp:
3236         (JSC::JSFunction::getOwnPropertySlot):
3237         * runtime/JSObject.h:
3238         (JSC::JSObject::putOwnDataProperty):
3239         * runtime/JSValue.h:
3240
3241 2012-01-12  Gavin Barraclough  <barraclough@apple.com>
3242
3243         https://bugs.webkit.org/show_bug.cgi?id=76141
3244         defineSetter/defineGetter may fail to update Accessor attribute
3245
3246         Reviewed by Oliver Hunt.
3247
3248         * runtime/JSObject.cpp:
3249         (JSC::JSObject::defineGetter):
3250         (JSC::JSObject::initializeGetterSetterProperty):
3251         (JSC::JSObject::defineSetter):
3252         * runtime/Structure.cpp:
3253         (JSC::Structure::attributeChangeTransition):
3254         * runtime/Structure.h:
3255
3256 2012-01-12  David Levin  <levin@chromium.org>
3257
3258         [chromium] Fix DC leak in WebScreenInfoFactory.
3259         https://bugs.webkit.org/show_bug.cgi?id=76203
3260
3261         Reviewed by Dmitry Titov.
3262
3263         * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnGetDCWin.h
3264         * JavaScriptCore.gypi: Added OwnGetDCWin.h
3265         * JavaScriptCore/wtf/win/OwnGetDCWin.h: Made an owner class for GetDC which needs ReleaseDC as opposed to DeleteDC.
3266
3267 2012-01-11  Gavin Barraclough  <barraclough@apple.com>
3268
3269         Allow accessor get/set property to be set to undefined
3270         https://bugs.webkit.org/show_bug.cgi?id=76148
3271
3272         Reviewed by Oliver Hunt.
3273
3274         AccessorDescriptor properties may have their get & set properties defined to reference a function
3275         (Callable object) or be set to undefined. Valid PropertyDescriptors created by toPropertyDescriptor
3276         (defined from JS code via Object.defineProperty, etc) have get and set properties that are in one of
3277         three states (1) nonexistent, (2) set to undefined, or (3) a function (any Callable object).
3278
3279         On the PropertyDescriptor object these three states are represneted by JSValue(), jsUndefined(), and
3280         any JSObject* (with a constraint that this must be callable).
3281
3282         Logically the get/set property of an accessor descriptor on an object might be in any of the three
3283         states above, but in practice there is no way to distinguish between the first two states. As such
3284         we stor the get/set values in property storage in a JSObject* field, with 0 indicating absent or
3285         undefined. When unboxing to a PropertyDescriptor, map this back to a JS undefined value.
3286
3287         * runtime/GetterSetter.h:
3288         (JSC::GetterSetter::setGetter):
3289         (JSC::GetterSetter::setSetter):
3290             - Allow the getter/setter to be cleared.
3291         * runtime/JSArray.cpp:
3292         (JSC::JSArray::putDescriptor):
3293             - Changed to call getterObject/setterObject.
3294         (JSC::JSArray::defineOwnNumericProperty):
3295             - Added ASSERT.
3296         * runtime/JSObject.cpp:
3297         (JSC::putDescriptor):
3298         (JSC::JSObject::defineOwnProperty):
3299             - Changed to call getterObject/setterObject.
3300         * runtime/ObjectConstructor.cpp:
3301         (JSC::objectConstructorGetOwnPropertyDescriptor):
3302             - getter/setter values read from properties on object are never missing, they will now be set as undefined by 'setDescriptor'.
3303         (JSC::toPropertyDescriptor):
3304             - Do not translate undefined->empty, this loses an important distinction between a get/set property being absent, or being explicitly set to undefined.
3305         * runtime/PropertyDescriptor.cpp:
3306         (JSC::PropertyDescriptor::getterObject):
3307         (JSC::PropertyDescriptor::setterObject):
3308             - Accessors to convert the get/set property to an object pointer, converting undefined to 0.
3309         (JSC::PropertyDescriptor::setDescriptor):
3310         (JSC::PropertyDescriptor::setAccessorDescriptor):
3311             - Translate a getter/setter internally represented at 0 to undefined, indicating that it is present.
3312         * runtime/PropertyDescriptor.h:
3313             - Declare getterObject/setterObject.
3314
3315 2012-01-12  Zeno Albisser  <zeno@webkit.org>
3316
3317         [Qt][WK2][Mac] Conflict of MacTypes.h defining a Fixed type after r104560.
3318         https://bugs.webkit.org/show_bug.cgi?id=76175
3319
3320         Defining ENABLE_CSS_FILTERS leads to ambiguous references
3321         due to MacTypes.h being included.
3322         Defining CF_OPEN_SOURCE works around this problem.
3323
3324         Reviewed by Simon Hausmann.
3325
3326         * wtf/Platform.h:
3327
3328 2012-01-12  Simon Hausmann  <simon.hausmann@nokia.com>
3329
3330         Make the new WTF module build on Qt
3331         https://bugs.webkit.org/show_bug.cgi?id=76163
3332
3333         Reviewed by Tor Arne Vestbø.
3334
3335         * JavaScriptCore.pro: Removed wtf from the subdirs to build.
3336
3337 2012-01-11  Filip Pizlo  <fpizlo@apple.com>
3338
3339         CodeBlock::m_executeCounter should be renamed to CodeBlock::m_jitExecuteCounter
3340         https://bugs.webkit.org/show_bug.cgi?id=76144
3341         <rdar://problem/10681711>
3342
3343         Rubber stamped by Gavin Barraclough.
3344
3345         * bytecode/CodeBlock.h:
3346         (JSC::CodeBlock::addressOfJITExecuteCounter):
3347         (JSC::CodeBlock::offsetOfJITExecuteCounter):
3348         (JSC::CodeBlock::jitExecuteCounter):
3349         (JSC::CodeBlock::optimizeNextInvocation):
3350         (JSC::CodeBlock::dontOptimizeAnytimeSoon):
3351         (JSC::CodeBlock::optimizeAfterWarmUp):
3352         (JSC::CodeBlock::optimizeAfterLongWarmUp):
3353         (JSC::CodeBlock::optimizeSoon):
3354         * dfg/DFGOSRExitCompiler32_64.cpp:
3355         (JSC::DFG::OSRExitCompiler::compileExit):
3356         * dfg/DFGOSRExitCompiler64.cpp:
3357         (JSC::DFG::OSRExitCompiler::compileExit):
3358         * jit/JIT.cpp:
3359         (JSC::JIT::emitOptimizationCheck):
3360
3361 2012-01-11  Gavin Barraclough  <barraclough@apple.com>
3362
3363         Merge 'Getter'/'Setter' attributes into 'Accessor'
3364         https://bugs.webkit.org/show_bug.cgi?id=76141
3365
3366         Reviewed by Filip Pizlo.
3367
3368         These are currently ambiguous (and used inconsistently). It would logically appear
3369         that either being bit set implies that the corresponding type of accessor is present
3370         but (a) we don't correctly enforce this, and (b) this means the attributes would not
3371         be able to distinguish between a data descriptor and an accessor descriptor with
3372         neither a getter nor setter defined (which is a descriptor permissible under the spec).
3373         This ambiguity would lead to unsafe property caching behavior (though this does not
3374         represent an actual current bug, since we are currently unable to create descriptors
3375         that have neither a getter nor setter, it just prevents us from doing so).
3376
3377         * runtime/Arguments.cpp:
3378         (JSC::Arguments::createStrictModeCallerIfNecessary):
3379         (JSC::Arguments::createStrictModeCalleeIfNecessary):
3380         * runtime/JSArray.cpp:
3381         (JSC::SparseArrayValueMap::put):
3382         (JSC::JSArray::putDescriptor):
3383         * runtime/JSBoundFunction.cpp:
3384         (JSC::JSBoundFunction::finishCreation):
3385         * runtime/JSFunction.cpp:
3386         (JSC::JSFunction::getOwnPropertySlot):
3387         (JSC::JSFunction::getOwnPropertyDescriptor):
3388         * runtime/JSObject.cpp:
3389         (JSC::JSObject::defineGetter):
3390         (JSC::JSObject::initializeGetterSetterProperty):
3391         (JSC::JSObject::defineSetter):
3392         (JSC::putDescriptor):
3393         (JSC::JSObject::defineOwnProperty):
3394         * runtime/JSObject.h:
3395         * runtime/ObjectConstructor.cpp:
3396         (JSC::objectConstructorDefineProperty):
3397         * runtime/PropertyDescriptor.cpp:
3398         (JSC::PropertyDescriptor::setDescriptor):
3399         (JSC::PropertyDescriptor::setAccessorDescriptor):
3400         (JSC::PropertyDescriptor::setSetter):
3401         (JSC::PropertyDescriptor::setGetter):
3402         (JSC::PropertyDescriptor::attributesOverridingCurrent):
3403
3404 2012-01-11  Gavin Barraclough  <barraclough@apple.com>
3405
3406         Object.defineProperty([], 'length', {}) should not make length read-only
3407         https://bugs.webkit.org/show_bug.cgi?id=76097
3408
3409         Reviewed by Oliver Hunt.
3410
3411         * runtime/JSArray.cpp:
3412         (JSC::JSArray::defineOwnProperty):
3413             - We should be checking writablePresent().
3414
3415 2012-01-11  Filip Pizlo  <fpizlo@apple.com>
3416
3417         Code duplication for invoking the JIT and DFG should be reduced
3418         https://bugs.webkit.org/show_bug.cgi?id=76117
3419         <rdar://problem/10680189>
3420
3421         Rubber stamped by Geoff Garen.
3422
3423         * GNUmakefile.list.am:
3424         * JavaScriptCore.xcodeproj/project.pbxproj:
3425         * jit/JITDriver.h: Added.
3426         (JSC::jitCompileIfAppropriate):
3427         (JSC::jitCompileFunctionIfAppropriate):
3428         * runtime/Executable.cpp:
3429         (JSC::EvalExecutable::compileInternal):
3430         (JSC::ProgramExecutable::compileInternal):
3431         (JSC::FunctionExecutable::compileForCallInternal):
3432         (JSC::FunctionExecutable::compileForConstructInternal):
3433
3434 2012-01-11  Geoffrey Garen  <ggaren@apple.com>
3435
3436         Bytecode dumping is broken for call opcodes (due to two new operands)