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