Reviewed by Geoff Garen.
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-07-23  Alexey Proskuryakov  <ap@webkit.org>
2
3         Reviewed by Geoff Garen.
4
5         JSClassRef is created context-free, but gets infatuated with the first context it sees.
6
7         The implicit API contract is that JSClassRef can be used with any context on any thread.
8         This no longer worked, because UStrings in the class were turned into per-context
9         identifiers, and the cached JSObject prototype was tied to JSGlobalData, too.
10
11         * API/JSClassRef.h: Made a separate struct for context-dependent parts of OpaqueJSClass.
12         * API/JSClassRef.cpp:
13         (OpaqueJSClass::OpaqueJSClass): Updated for renames and changed member variable order.
14         (OpaqueJSClass::~OpaqueJSClass): Assert that string members are not identifiers.
15         (clearReferenceToPrototype): Update for the new reference location.
16         (OpaqueJSClassContextData::OpaqueJSClassContextData): Make a deep copy of all strings.
17         (OpaqueJSClass::contextData): Added a function that finds the per-context part of
18         OpaqueJSClass in JSGlobalData, or creates it if not found.
19         (OpaqueJSClass::className): Always make a deep copy. Callers of this function do not have
20         a way to access JSGlobalData, so a per-context copy could not be made.
21         (OpaqueJSClass::staticValues): Updated for new data location.
22         (OpaqueJSClass::staticFunctions): Ditto.
23         (OpaqueJSClass::prototype): Changed to take an internal type for consistency.
24
25         * kjs/JSGlobalData.cpp:
26         (KJS::JSGlobalData::JSGlobalData):
27         (KJS::JSGlobalData::~JSGlobalData):
28         * kjs/JSGlobalData.h:
29         Keep a HashMap to access per-context JSClass data given a pointr to the shared part.
30
31         * API/JSCallbackObjectFunctions.h:
32         (KJS::::className):
33         (KJS::::getOwnPropertySlot):
34         (KJS::::put):
35         (KJS::::deleteProperty):
36         (KJS::::getPropertyNames):
37         (KJS::::staticValueGetter):
38         (KJS::::staticFunctionGetter):j
39         Use function accessors instead of accessing OpaqueJSClass members directly.
40
41         * API/JSContextRef.cpp: (JSGlobalContextCreate): Updated for the change in
42         OpaqueJSClass::prototype() argument type.
43
44         * API/JSObjectRef.cpp:
45         (JSObjectMake): Updated for the change in OpaqueJSClass::prototype() argument type.
46         (JSObjectMakeConstructor): Ditto.
47
48 2008-07-23  Alexey Proskuryakov  <ap@webkit.org>
49
50         Build fix.
51
52         * kjs/ArgList.h: (KJS::ArgList::operator new): removed an extraneous "ArgList::" inside the
53         class definition.
54
55 2008-07-22  Geoffrey Garen  <ggaren@apple.com>
56
57         Reviewed by Oliver Hunt and Sam Weinig.
58
59         Next step toward putting doubles in registers: Prepare the Register class
60         and its clients for registers that don't contain JSValue*s.
61         
62         This means a few things:
63         
64         1. Register::jsValue() clients, including ArgList clients, must now supply
65         an ExecState* when accessing an entry in an ArgList, in case the entry
66         will need to create a JSValue* on the fly.
67         
68         2. Register clients that definitely don't want to create a JSValue* on
69         the fly now use different APIs: getJSValue() for clients that know
70         the register contains a JSValue*, and v() for clients who just want a
71         void*.
72         
73         3. I had to change some headers around in order to resolve dependency
74         problems created by using a Register in the ArgList header.
75         
76         SunSpider reports no change.
77         
78 2008-07-22  Gavin Barraclough  <barraclough@apple.com>
79
80         Reviewed by Alexey Proskuryakov.
81
82         Prevent integer overflow when reallocating storage vector for arrays.
83
84         Sunspider reports 1.005x as fast (no change expected).
85
86         * kjs/JSArray.cpp:
87
88 2008-07-21  Mark Rowe  <mrowe@apple.com>
89
90         Reviewed by Sam Weinig.
91
92         <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.
93
94         * Configurations/Version.xcconfig:
95         * Info.plist:
96
97 2008-07-21  Adam Roben  <aroben@apple.com>
98
99         Add Vector::find
100
101         This is a convenience wrapper around std::find.
102
103         Reviewed by Anders Carlsson.
104
105         * wtf/Vector.h:
106
107 2008-07-19  Oliver Hunt  <oliver@apple.com>
108
109         Reviewed by Cameron Zwarich.
110
111         Bug 20104: Exception in tables/mozilla_expected_failures/bugs/bug92868_1.html includes the equals operator in the quoted expression
112         <https://bugs.webkit.org/show_bug.cgi?id=20104>
113
114         To make this correct we make the dot and bracket assign nodes emit the information to indicate
115         the failure range is the dot/bracket accessor.
116
117         * kjs/grammar.y:
118
119 2008-07-18  Steve Falkenburg  <sfalken@apple.com>
120
121         Windows build fix.
122
123         * kjs/JSGlobalObjectFunctions.cpp:
124         (KJS::isStrWhiteSpace):
125
126 2008-07-18  Steve Falkenburg  <sfalken@apple.com>
127
128         Windows build fix.
129
130         * kjs/nodes.h:
131         (KJS::ThrowableExpressionData::ThrowableExpressionData):
132
133 2008-07-18  Oliver Hunt  <oliver@apple.com>
134
135         Reviewed by Cameron Zwarich.
136
137         Bug 18774: SQUIRRELFISH: print meaningful error messages <https://bugs.webkit.org/show_bug.cgi?id=18774>
138         <rdar://problem/5769353> SQUIRRELFISH: JavaScript error messages are missing informative text
139
140         Add support for decent error messages in JavaScript.  This patch achieves this by providing
141         ensuring the common errors and exceptions have messages that provide the text of expression
142         that trigger the exception.  In addition it attaches a number of properties to the exception
143         object detailing where in the source the expression came from.
144
145         * JavaScriptCore.exp:
146         * VM/CodeBlock.cpp:
147         (KJS::CodeBlock::lineNumberForVPC):
148         (KJS::CodeBlock::expressionRangeForVPC): 
149             Function to recover the expression range for an instruction
150             that triggered an exception.
151         * VM/CodeBlock.h:
152         (KJS::ExpressionRangeInfo::):
153         (KJS::CodeBlock::CodeBlock):
154         * VM/CodeGenerator.cpp:
155         (KJS::CodeGenerator::emitCall):
156         (KJS::CodeGenerator::emitCallEval):
157             Emit call needed to be modified so to place the expression range info internally,
158             as the CodeGenerator emits the arguments nodes itself, rather than the various call
159             nodes.
160         * VM/CodeGenerator.h:
161         (KJS::CodeGenerator::emitExpressionInfo):
162             Record the expression range info.
163         * VM/ExceptionHelpers.cpp:
164         (KJS::createErrorMessage):
165         (KJS::createInvalidParamError):
166         (KJS::createUndefinedVariableError):
167         (KJS::createNotAConstructorError):
168         (KJS::createNotAFunctionError):
169         (KJS::createNotAnObjectErrorStub):
170         (KJS::createNotAnObjectError):
171             Rewrite all the code for the error messages so that they make use of the newly available
172             information.
173         * VM/ExceptionHelpers.h:
174         * VM/Machine.cpp:
175         (KJS::isNotObject):  Now needs vPC and codeBlock
176         (KJS::Machine::throwException):
177             New logic to handle the NotAnObjectErrorStub and to handle the absurd "no default value" edge case
178         (KJS::Machine::privateExecute):
179         * VM/Machine.h:
180         * kjs/DebuggerCallFrame.cpp:
181         (KJS::DebuggerCallFrame::evaluate):
182         * kjs/Error.cpp:
183         (KJS::Error::create):
184         * kjs/Error.h:
185         * kjs/JSGlobalObjectFunctions.cpp:
186         * kjs/JSImmediate.cpp:
187         (KJS::JSImmediate::toObject):
188         (KJS::JSImmediate::prototype):
189             My changes to the JSNotAnObject constructor needed to be handled here.
190         * kjs/JSNotAnObject.h:
191         (KJS::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub):
192         (KJS::JSNotAnObjectErrorStub::isNull):
193         (KJS::JSNotAnObjectErrorStub::isNotAnObjectErrorStub):
194             Added a JSNotAnObjectErrorStub class to ease the handling of toObject failure exceptions,
195             and potentially allow even more detailed error messages in future.
196         * kjs/JSObject.h:
197         * kjs/Parser.h:
198         (KJS::Parser::parse):
199         * kjs/SourceRange.h:
200         * kjs/grammar.y:
201             Large amounts of position propagation.
202         * kjs/lexer.cpp:
203         (KJS::Lexer::Lexer):
204         (KJS::Lexer::shift):
205         (KJS::Lexer::lex):
206             The lexer needed a few changes to be able to correctly track token character positions.
207         * kjs/lexer.h:
208         * kjs/nodes.cpp:
209         (KJS::ThrowableExpressionData::emitThrowError):
210         (KJS::StatementNode::StatementNode):
211         (KJS::ResolveNode::emitCode):
212         (KJS::BracketAccessorNode::emitCode):
213         (KJS::DotAccessorNode::emitCode):
214         (KJS::NewExprNode::emitCode):
215         (KJS::EvalFunctionCallNode::emitCode):
216         (KJS::FunctionCallValueNode::emitCode):
217         (KJS::FunctionCallResolveNode::emitCode):
218         (KJS::FunctionCallBracketNode::emitCode):
219         (KJS::FunctionCallDotNode::emitCode):
220         (KJS::PostfixResolveNode::emitCode):
221         (KJS::PostfixBracketNode::emitCode):
222         (KJS::PostfixDotNode::emitCode):
223         (KJS::DeleteResolveNode::emitCode):
224         (KJS::DeleteBracketNode::emitCode):
225         (KJS::DeleteDotNode::emitCode):
226         (KJS::PrefixResolveNode::emitCode):
227         (KJS::PrefixBracketNode::emitCode):
228         (KJS::PrefixDotNode::emitCode):
229         (KJS::ThrowableBinaryOpNode::emitCode):
230         (KJS::ReadModifyResolveNode::emitCode):
231         (KJS::AssignResolveNode::emitCode):
232         (KJS::AssignDotNode::emitCode):
233         (KJS::ReadModifyDotNode::emitCode):
234         (KJS::AssignBracketNode::emitCode):
235         (KJS::ReadModifyBracketNode::emitCode):
236         (KJS::ForInNode::ForInNode):
237         (KJS::ForInNode::emitCode):
238         (KJS::WithNode::emitCode):
239         (KJS::LabelNode::emitCode):
240         (KJS::ThrowNode::emitCode):
241         (KJS::ProgramNode::ProgramNode):
242         (KJS::ProgramNode::create):
243         (KJS::EvalNode::generateCode):
244         (KJS::FunctionBodyNode::create):
245         (KJS::FunctionBodyNode::generateCode):
246         (KJS::ProgramNode::generateCode):
247             All of these methods were handling the position information.  
248             Constructors and create methods were modified to store the information.
249             All the emitCall implementations listed needed to be updated to actually
250             record the position information we have so carefully collected.
251         * kjs/nodes.h:
252         (KJS::ThrowableExpressionData::ThrowableExpressionData):
253         (KJS::ThrowableExpressionData::setExceptionSourceRange):
254         (KJS::ThrowableExpressionData::divot):
255         (KJS::ThrowableExpressionData::startOffset):
256         (KJS::ThrowableExpressionData::endOffset):
257         (KJS::ThrowableSubExpressionData::ThrowableSubExpressionData):
258         (KJS::ThrowableSubExpressionData::setSubexpressionInfo):
259         (KJS::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData):
260         (KJS::ThrowablePrefixedSubExpressionData::setSubexpressionInfo):
261             ThrowableExpressionData is just a uniform mechanism for storing the position
262             information.
263         (KJS::ResolveNode::):
264         (KJS::PrePostResolveNode::):
265         (KJS::ThrowableBinaryOpNode::):
266         (KJS::WithNode::):
267
268 2008-07-18  Geoffrey Garen  <ggaren@apple.com>
269
270         Reviewed by Cameron Zwarich.
271         
272         Three renames:
273         
274         "CallTypeNative" => "CallTypeHost"
275         "code" => "byteCode"
276         "generatedCode" => "generatedByteCode"
277
278 2008-07-18  Geoffrey Garen  <ggaren@apple.com>
279
280         Reviewed by Oliver Hunt.
281         
282         Optimized <= for immediate number cases.
283         
284         SunSpider reports no overall change, but a 10% speedup on access-nsieve.
285
286 2008-07-18  Mark Rowe  <mrowe@apple.com>
287
288         Rubber-stamped by Sam Weinig.
289
290         Fix some casts added in a previous build fix to match the style used
291         throughout WebKit.
292
293         * VM/Machine.cpp:
294         (KJS::Machine::initializeCallFrame):
295         * VM/Register.h:
296         (KJS::Register::Register):
297
298 2008-07-18  Landry Breuil  <landry@openbsd.org>
299
300         Bug 19975: [OpenBSD] Patches to enable build of WebKit
301
302         <https://bugs.webkit.org/show_bug.cgi?id=19975>
303
304         Reviewed by David Kilzer.
305
306         Support for OpenBSD, mostly threading and libm tweaks.
307
308         * kjs/collector.cpp: #include <pthread.h>
309         (KJS::currentThreadStackBase): use pthread_stackseg_np() to get stack base
310         * kjs/config.h: OpenBSD also provides <pthread_np.h>
311         * wtf/MathExtras.h: #include <sys/types.h> and <machine/ieee.h>
312         (isfinite), (signbit): as long as we don't have those functions provide fallback implementations
313         * wtf/Platform.h: Add support for PLATFORM(OPENBSD) and PLATFORM(SPARC64) macro
314
315 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
316
317         Reviewed by Oliver Hunt.
318         
319         Next step toward putting doubles in registers: Store constant pool
320         entries as registers, not JSValue*s.
321         
322         SunSpider reports no change.
323
324 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
325
326         Reviewed by John Sullivan and Oliver Hunt.
327         
328         A tiny bit of tidying in function call register allocation.
329         
330         This patch saves one register when invoking a function expression and/or
331         a new expression that is stored in a temporary.
332         
333         Since it's just one register, I can't make a testcase for it.
334
335         * VM/CodeGenerator.cpp:
336         (KJS::CodeGenerator::emitCall): No need to ref the function we're calling
337         or its base. We'd like the call frame to overlap with them, if possible.
338         op_call will read the function and its base before writing the call frame,
339         so this is safe.
340
341         * kjs/nodes.cpp:
342         (KJS::NewExprNode::emitCode): No need to ref the function we're new-ing,
343         for the same reasons stated above.
344         
345         (KJS::FunctionCallValueNode::emitCode): ditto
346
347 2008-07-17  Steve Falkenburg  <sfalken@apple.com>
348
349         Build fix.
350         
351         * kjs/InternalFunction.cpp:
352
353 2008-07-17  Sam Weinig  <sam@webkit.org>
354
355         Roll out r35199 as it is causing failures on the PPC build.
356
357 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
358
359         Reviewed by David Kilzer.
360         
361         Fixed https://bugs.webkit.org/show_bug.cgi?id=20067
362         Support function.name (Firefox extension)
363         
364         Pretty straight-forward.
365
366 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
367
368         Reviewed by Oliver Hunt.
369         
370         Fixed <rdar://problem/6081636> Functions calls use more temporary
371         registers than necessary
372         
373         Holding a reference to the last statement result register caused each
374         successive statement to output its result to an even higher register.
375         
376         Happily, statements don't actually need to return a result register
377         at all. I hope to make this clearer in a future cleanup patch,
378         but this change will fix the major bug for now.
379
380         * kjs/nodes.cpp:
381         (KJS::statementListEmitCode):
382
383 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
384
385         Reviewed by Sam Weinig.
386
387         Merge pre&post dot nodes to simplify the parse tree.
388         Sunspider results show 0.6% progression (no performance change expected).
389
390         * kjs/grammar.y:
391         * kjs/nodes.cpp:
392         * kjs/nodes.h:
393         * kjs/nodes2string.cpp:
394
395 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
396
397         Reviewed by Cameron Zwarich.
398
399         Merge pre&post resolve nodes to simplify the parse tree.
400         Sunspider results show no performance change.
401
402         * kjs/grammar.y:
403         * kjs/nodes.cpp:
404         * kjs/nodes.h:
405         * kjs/nodes2string.cpp:
406
407 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
408
409         Reviewed by Cameron Zwarich.
410
411         Merge logical nodes to simplify the parse tree.
412         Sunspider results show 0.6% progression (no performance change expected).
413
414         * kjs/grammar.y:
415         * kjs/nodes.cpp:
416         * kjs/nodes.h:
417         * kjs/nodes2string.cpp:
418
419 2008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
420
421         Reviewed by Simon.
422
423         Fix MinGW build (broken in r35198) and simplify getLocalTime().
424
425         * kjs/DateMath.cpp:
426         (KJS::getLocalTime):
427
428 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
429
430         Reviewed by Sam Weinig.
431
432         Merge pre&post bracket nodes to simplify the parse tree.
433         Sunspider results show no performance change.
434
435         * kjs/grammar.y:
436         * kjs/nodes.cpp:
437         * kjs/nodes.h:
438         * kjs/nodes2string.cpp:
439
440 2008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
441
442         Reviewed by Simon.
443
444         Fix the 32-bit gcc builds, conversion from "long int" to Register is
445         ambiguous. Explicitly choose the intptr_t constructor.
446
447         * VM/Machine.cpp:
448         (KJS::Machine::initializeCallFrame):
449         * VM/Register.h:
450         (KJS::Register::Register):
451
452 2008-07-16  Mark Rowe  <mrowe@apple.com>
453
454         Rubber-stamped by Geoff Garen.
455
456         Fix JavaScript in 64-bit by using a pointer-sized integer
457         type in the Register union.  Also includes a rename of
458         the intType constant to IntType.
459
460         * VM/Machine.cpp:
461         (KJS::Machine::initializeCallFrame):
462         * VM/Register.h:
463         (KJS::Register::):
464         (KJS::Register::Register):
465
466 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
467
468         Reviewed by Oliver Hunt.
469         
470         First step toward putting doubles in registers: Turned Register into a
471         proper abstraction layer. It is no longer possible to cast a Register
472         to a JSValue*, or a Register& to a JSValue*&, or to access the union
473         inside a Register directly.
474         
475         SunSpider reports no change.
476         
477         In support of this change, I had to make the following mechanical changes
478         in a lot of places:
479         
480         1. Clients now use explicit accessors to read data out of Registers, and
481         implicit copy constructors to write data into registers.
482         
483         So, assignment that used to look like
484         
485             x.u.jsValue = y;
486         
487         now looks like
488         
489             x = y;
490             
491         And access that used to look like
492         
493             x = y.u.jsValue;
494         
495         now looks like
496         
497             x = y.jsValue();
498
499         2. I made generic flow control specific in opcodes that made their flow
500         control generic by treating a Register& as a JSValue*&. This had the
501         added benefit of removing some exception checking branches from immediate
502         number code.
503
504         3. I beefed up PropertySlot to support storing a Register* in a property
505         slot. For now, only JSVariableObject's symbolTableGet and symbolTablePut
506         use this functionality, but I expect more clients to use it in the future.
507         
508         4. I changed ArgList to be a buffer of Registers, not JSValue*'s, and I
509         changed ArgList iterator clients to iterate Registers, not JSValue*'s.
510
511 2008-07-16  Ada Chan  <adachan@apple.com>
512
513         Fixed build.
514
515         * kjs/JSGlobalObject.cpp:
516
517 2008-07-16  Kevin McCullough  <kmccullough@apple.com>
518
519         Reviewed by Sam and Geoff.
520
521         <rdar://problem/5958840> Navigating to another page while profiler is
522         attached results in slow JavaScript for all time.
523
524         - The UNLIKELY keeps this from being a sunspider performance regression.
525
526         * kjs/JSGlobalObject.cpp:
527         (KJS::JSGlobalObject::~JSGlobalObject): Stop the profiler associated
528         with this exec state.
529
530 2008-07-16  Sam Weinig  <sam@webkit.org>
531
532         Reviewed by Steve Falkenburg.
533
534         Replace adopting UString constructor in favor of explicit
535         static adopt method.
536
537         * API/JSStringRefCF.cpp:
538         (JSStringCreateWithCFString):
539         * kjs/StringConstructor.cpp:
540         (KJS::stringFromCharCode):
541         * kjs/StringPrototype.cpp:
542         (KJS::stringProtoFuncToLowerCase):
543         (KJS::stringProtoFuncToUpperCase):
544         (KJS::stringProtoFuncToLocaleLowerCase):
545         (KJS::stringProtoFuncToLocaleUpperCase):
546         * kjs/ustring.cpp:
547         (KJS::UString::adopt):
548         * kjs/ustring.h:
549         (KJS::UString::UString):
550         (KJS::UString::~UString):
551
552 2008-07-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>
553
554         Reviewed by Simon.
555
556         http://trolltech.com/developer/task-tracker/index_html?method=entry&id=216179
557         Fix potential crash (on Qt for Windows port) when performing JavaScript date
558         conversion.
559
560         * kjs/DateMath.cpp:
561         (KJS::getLocalTime): For the Qt port, prefer to use Windows code, i.e.
562         localtime_s() instead of localtime() since the latter might crash (on Windows)
563         given a non-sensible, e.g. NaN, argument.
564
565 2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
566
567         Reviewed by Anders and Geoff.
568
569         https://bugs.webkit.org/show_bug.cgi?id=20023
570         Failed assertion in PropertyNameArray.cpp
571
572         This is already tested by testapi.
573
574         * API/JSObjectRef.cpp: (JSPropertyNameAccumulatorAddName): Add the string to identifier
575         table to appease PropertyNameArray.
576
577 2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
578
579         Reviewed by Geoff.
580
581         Dereference identifiers when deleting a hash table (fixes leaks with private JSGlobalData
582         objects).
583
584         * kjs/JSGlobalData.cpp: (KJS::JSGlobalData::~JSGlobalData):
585         * kjs/lookup.cpp: (KJS::HashTable::deleteTable):
586         * kjs/lookup.h:
587         * kjs/lexer.cpp: (KJS::Lexer::~Lexer)
588         HashTable cannot have a destructor, because check-for-global-initializers complains about
589         having a global constructor then.
590
591 2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
592
593         Reviewed by Geoff.
594
595         Check pthread_key_create return value.
596
597         This check was helpful when debugging a crash in run-webkit-tests --threaded that happened
598         because JSGlobalData objects were not deleted, and we were running out of pthread keys soon.
599         It also looks useful for production builds.
600
601         * wtf/ThreadSpecific.h: (WTF::::ThreadSpecific):
602
603 2008-07-15  Kevin McCullough  <kmccullough@apple.com>
604
605         Reviewed by Geoff.
606
607         Rename pageGroupIdentifier to profileGroup to keep mention of a
608         pageGroup out of JavaScriptCore.
609
610         * kjs/JSGlobalObject.cpp:
611         (KJS::JSGlobalObject::init):
612         * kjs/JSGlobalObject.h:
613         (KJS::JSGlobalObject::setProfileGroup):
614         (KJS::JSGlobalObject::profileGroup):
615         * profiler/ProfileGenerator.cpp:
616         (KJS::ProfileGenerator::create):
617         (KJS::ProfileGenerator::ProfileGenerator):
618         * profiler/ProfileGenerator.h:
619         (KJS::ProfileGenerator::profileGroup):
620         * profiler/Profiler.cpp:
621         (KJS::Profiler::startProfiling):
622         (KJS::dispatchFunctionToProfiles):
623         (KJS::Profiler::willExecute):
624         (KJS::Profiler::didExecute):
625
626 2008-07-14  Mark Rowe  <mrowe@apple.com>
627
628         Reviewed by Sam Weinig.
629
630         Fix https://bugs.webkit.org/show_bug.cgi?id=20037
631         Bug 20037: GCC 4.2 build broken due to strict aliasing violation.
632
633         * kjs/ustring.cpp:
634         (KJS::UString::Rep::computeHash): Add a version of computeHash that takes a char* and explicit length.
635         * kjs/ustring.h:
636         * profiler/CallIdentifier.h:
637         (WTF::): Use new version of computeHash that takes a char* and explicit length to avoid unsafe aliasing.
638
639 2008-07-14  David Hyatt  <hyatt@apple.com>
640
641         Fix a crashing bug in ListHashSet's -- operator.  Make sure that end() can be -- by special-casing the null
642         position.
643
644         Reviewed by Maciej
645
646         * wtf/ListHashSet.h:
647         (WTF::ListHashSetConstIterator::operator--):
648
649 2008-07-14  David Hyatt  <hyatt@apple.com>
650
651         Buidl fix.  Make sure the second insertBefore method returns a value.
652
653         * wtf/ListHashSet.h:
654         (WTF::::insertBefore):
655
656 2008-07-14  Adam Roben  <aroben@apple.com>
657
658         Windows build fix
659
660         * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added include/pthreads to the
661         include path.
662
663 2008-07-14  Alexey Proskuryakov  <ap@webkit.org>
664
665         Reviewed by Kevin McCullough.
666
667         Make JSGlobalData refcounted in preparation to adding a way to create contexts that share
668         global data.
669
670         * JavaScriptCore.exp:
671         * kjs/JSGlobalData.cpp:
672         (KJS::JSGlobalData::create):
673         * kjs/JSGlobalData.h:
674         Made contructor private, and added a static create() method. Made the class inherit from
675         RefCounted.
676
677         * kjs/JSGlobalObject.h:
678         (KJS::JSGlobalObject::globalData):
679         JSGlobalData is now owned by JSGlobalObject (except for the shared one, and the common
680         WebCore one, which are never deleted).
681
682         * kjs/Shell.cpp: (main): Create JSGlobalData with create() method.
683
684 2008-07-14  Simon Hausmann  <hausmann@webkit.org>
685
686         Fix the single-threaded build.
687
688         * kjs/JSLock.cpp: Removed undeclared registerThread() function.
689         * kjs/collector.cpp:
690         (KJS::Heap::registerThread): Added dummy implementation.
691
692 2008-07-14  Alexey Proskuryakov  <ap@webkit.org>
693
694         Reviewed by Geoff Garen.
695
696         Eliminate per-thread JavaScript global data instance support and make arbitrary
697         global data/global object combinations possible.
698
699         * kjs/collector.cpp:
700         (KJS::Heap::Heap): Store a JSGlobalData pointer instead of multiple pointers to its members.
701         This allows for going from any JS object to its associated global data, currently used in
702         JSGlobalObject constructor to initialize its JSGlobalData pointer.
703         (KJS::Heap::registerThread): Changed thread registration data to be per-heap. Previously,
704         only the shared heap could be used from multiple threads, so it was the only one that needed
705         thread registration, but now this can happen to any heap.
706         (KJS::Heap::unregisterThread): Ditto.
707         (KJS::Heap::markStackObjectsConservatively): Adapt for the above changes.
708         (KJS::Heap::setGCProtectNeedsLocking): Ditto.
709         (KJS::Heap::protect): Ditto.
710         (KJS::Heap::unprotect): Ditto.
711         (KJS::Heap::collect): Ditto.
712         (KJS::Heap::globalObjectCount): Use global object list associated with the current heap,
713         not the late per-thread one.
714         (KJS::Heap::protectedGlobalObjectCount): Ditto.
715
716         * kjs/collector.h:
717         (KJS::Heap::ThreadRegistrar): Added a helper object that unregisters a thread when it is
718         destroyed.
719
720         * kjs/JSLock.cpp:
721         (KJS::JSLock::JSLock):
722         * kjs/JSLock.h:
723         (KJS::JSLock::JSLock):
724         Don't use JSLock to implicitly register threads. I've added registerThread() calls to most
725         places that use JSLock - we cannot guarantee absolute safety unless we always mark all
726         threads in the process, but these implicit registration calls should cover reasonable usage
727         scenarios, I hope.
728
729         * API/JSBase.cpp:
730         (JSEvaluateScript): Explicitly register the current thread.
731         (JSCheckScriptSyntax): Explicitly register the current thread.
732         (JSGarbageCollect): Changed to use the passed in context. Unfortunately, this creates a race
733         condition for clients that pass an already released context to JSGarbageCollect - but it is
734         unlikely to create real life problems.
735         To maintain compatibility, the shared heap is collected if NULL is passed.
736
737         * API/JSContextRef.cpp:
738         (JSGlobalContextCreate): Use a new syntax for JSGlobalObject allocation.
739         (JSGlobalContextRetain): Register the thread.
740         (JSContextGetGlobalObject): Register the thread.
741
742         * API/JSObjectRef.cpp:
743         (JSObjectMake):
744         (JSObjectMakeFunctionWithCallback):
745         (JSObjectMakeConstructor):
746         (JSObjectMakeFunction):
747         (JSObjectHasProperty):
748         (JSObjectGetProperty):
749         (JSObjectSetProperty):
750         (JSObjectGetPropertyAtIndex):
751         (JSObjectSetPropertyAtIndex):
752         (JSObjectDeleteProperty):
753         (JSObjectCallAsFunction):
754         (JSObjectCallAsConstructor):
755         (JSObjectCopyPropertyNames):
756         (JSPropertyNameAccumulatorAddName):
757         * API/JSValueRef.cpp:
758         (JSValueIsEqual):
759         (JSValueIsInstanceOfConstructor):
760         (JSValueMakeNumber):
761         (JSValueMakeString):
762         (JSValueToNumber):
763         (JSValueToStringCopy):
764         (JSValueToObject):
765         (JSValueProtect):
766         (JSValueUnprotect):
767         Register the thread.
768
769         * API/JSStringRef.cpp: (JSStringRelease): Changed a comment to not mention per-thread contexts.
770
771         * API/JSStringRefCF.cpp: Removed an unnecessary include of JSLock.h.
772
773         * JavaScriptCore.exp: Export JSGlobalData constructor/destructor, now that anyone can have
774         their own instances. Adapt to other changes, too.
775
776         * JavaScriptCore.xcodeproj/project.pbxproj: Made ThreadSpecific.h private, as it is now
777         included by collector.h and is thus needed in other projects.
778
779         * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Don't initialize per-thread
780         global data, as it no longer exists.
781
782         * kjs/JSGlobalData.cpp:
783         (KJS::JSGlobalData::JSGlobalData):
784         (KJS::JSGlobalData::~JSGlobalData):
785         * kjs/JSGlobalData.h:
786         Removed support for per-thread instance. Made constructor and destructor public.
787
788         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Get to now arbitrary  JSGlobalData
789         via the heap.
790         (KJS::JSGlobalObject::operator new): Changed ot take JSGlobalDatra pointer.
791         * kjs/JSGlobalObject.h:
792
793         * kjs/Shell.cpp:
794         (main):
795         (jscmain):
796         Changed to maintain a custom JSGlobalData pointer instead of a per-thread one.
797
798 2008-07-13  Ada Chan  <adachan@apple.com>
799
800         Windows build fix: Add wtf/RefCountedLeakCounter to the project.
801
802         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
803
804 2008-07-12  Jan Michael Alonzo  <jmalonzo@webkit.org>
805
806         Gtk, Qt and Wx build fix: Add wtf/RefCountedLeakCounter in the
807         build scripts
808
809         * GNUmakefile.am:
810         * JavaScriptCore.pri:
811         * JavaScriptCoreSources.bkl:
812
813 2008-07-11  Stephanie Lewis  <slewis@apple.com>
814
815         Reviewed by Darin Adler and Oliver Hunt.
816
817         Refactor RefCounting Leak counting code into a common class.
818
819         In order to export the symbols I needed to put the debug defines inside the function names
820         
821         Before we had a separate channel for each Logging each Leak type.  Since the leak channels were only used in one location, and only at quit for simplicity I combined them all into one leak channel.
822
823         * JavaScriptCore.exp:
824         * JavaScriptCore.xcodeproj/project.pbxproj: add new class
825         * kjs/nodes.cpp: remove old leak counting code
826         * wtf/RefCountedLeakCounter.cpp: Added. create a common leak counting class
827         * wtf/RefCountedLeakCounter.h: Added.
828
829 2008-07-11  David Hyatt  <hyatt@apple.com>
830
831         Add an insertBefore method to ListHashSet to allow for insertions in the middle of the list (rather than just
832         at the end).
833
834         Reviewed by Anders
835
836         * wtf/ListHashSet.h:
837         (WTF::::insertBefore):
838         (WTF::::insertNodeBefore):
839
840 2008-07-11  Sam Weinig  <sam@webkit.org>
841
842         Rubber-stamped by Darin Adler.
843
844         Move call function to CallData.cpp and construct to ConstructData.cpp.
845
846         * GNUmakefile.am:
847         * JavaScriptCore.pri:
848         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
849         * JavaScriptCore.xcodeproj/project.pbxproj:
850         * JavaScriptCoreSources.bkl:
851         * kjs/AllInOneFile.cpp:
852         * kjs/CallData.cpp: Copied from kjs/JSValue.cpp.
853         * kjs/ConstructData.cpp: Copied from kjs/JSValue.cpp.
854         * kjs/JSValue.cpp:
855
856 2008-07-10  Mark Rowe  <mrowe@apple.com>
857
858         Reviewed by Sam Weinig.
859
860         Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.
861
862         * Configurations/Base.xcconfig:
863
864 2008-07-10  Mark Rowe  <mrowe@apple.com>
865
866         Reviewed by Sam Weinig.
867
868         Fix the Tiger build by omitting annotations from methods declared in categories when using old versions of GCC.
869
870         * API/WebKitAvailability.h:
871
872 2008-07-10  Kevin McCullough  <kmccullough@apple.com>
873
874         Reviewed by Darin.
875
876         -Minor cleanup. Renamed callTree() to head() and no longer use m_head
877         directly but instead keep it private and access via a method().
878
879         * profiler/HeavyProfile.cpp:
880         (KJS::HeavyProfile::HeavyProfile):
881         (KJS::HeavyProfile::generateHeavyStructure):
882         (KJS::HeavyProfile::addNode):
883         * profiler/Profile.h:
884         (KJS::Profile::head):
885         * profiler/ProfileGenerator.cpp:
886         (KJS::ProfileGenerator::ProfileGenerator):
887
888 2008-07-10  Alexey Proskuryakov  <ap@webkit.org>
889
890         Reviewed by Mark Rowe.
891
892         Eliminate CollectorHeapIntrospector.
893
894         CollectorHeapIntrospector was added primarily in the hopes to improve leaks tool output,
895         a result that it didn't deliver. Also, it helped by labeling JSC heap regions as reported by
896         vmmap tool, but at the same time, it made them mislabeled as malloc'd ones - the correct
897         way to label mapped regions is to use a VM tag.
898
899         So, it makes more sense to remove it completely than to make it work with multiple heaps.
900
901         * JavaScriptCore.exp:
902         * JavaScriptCore.xcodeproj/project.pbxproj:
903         * kjs/AllInOneFile.cpp:
904         * kjs/InitializeThreading.cpp:
905         (KJS::initializeThreading):
906         * kjs/collector.cpp:
907         * kjs/collector.h:
908         * kjs/CollectorHeapIntrospector.cpp: Removed.
909         * kjs/CollectorHeapIntrospector.h: Removed.
910
911 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
912
913         Reviewed by Darin.
914
915         <rdar://problem/5951532> JSProfiler: Implement heavy (or bottom-up)
916         view (19228)
917         - Implemented the time and call count portionof heavy.  Now all that we
918         need is some UI.
919
920         * profiler/CallIdentifier.h: Removed an unused constructor.
921         * profiler/HeavyProfile.cpp: 
922         (KJS::HeavyProfile::HeavyProfile): Set the initial time of the head
923         node so that percentages work correctly.
924         (KJS::HeavyProfile::mergeProfiles): Sum the times and call count of
925         nodes being merged.
926         * profiler/ProfileNode.cpp: Set the intital values of time and call
927         count when copying ProfileNodes.
928         (KJS::ProfileNode::ProfileNode):
929
930 2008-07-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
931
932         Gtk build fix.
933
934         * GNUmakefile.am: Add HeavyProfile.cpp
935
936 2008-07-09  Mark Rowe  <mrowe@apple.com>
937
938         Reviewed by Geoff Garen.
939
940         Don't warn about deprecated functions in production builds.
941
942         * Configurations/Base.xcconfig:
943         * Configurations/DebugRelease.xcconfig:
944
945 2008-07-09  Darin Adler  <darin@apple.com>
946
947         * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp.
948
949 2008-07-09  Kevin Ollivier  <kevino@theolliviers.com>
950
951         wx biuld fix. Add HeavyProfile.cpp to build files.
952
953         * JavaScriptCoreSources.bkl:
954
955 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
956
957         - Windows build fix.
958
959         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
960
961 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
962
963         - Build fix.
964
965         * profiler/HeavyProfile.cpp:
966         (KJS::HeavyProfile::mergeProfiles):
967
968 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
969
970         Reviewed by Geoff and Adam.
971
972         <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
973         - This is the plumbing for bottom-up, but does not include calculating
974         time, mostly because I'm still undclear about what the end result should
975         look like.
976         - This, obviously, does not include the UI to expose this in the
977         inspector yet.
978
979         * JavaScriptCore.xcodeproj/project.pbxproj:
980         * profiler/CallIdentifier.h:
981         (KJS::CallIdentifier::CallIdentifier):
982         (WTF::): Added HashTraits for CallIdentifiers to be used by a HashMap.
983         * profiler/HeavyProfile.cpp: Added.
984         (KJS::HeavyProfile::HeavyProfile):
985         (KJS::HeavyProfile::generateHeavyStructure):
986         (KJS::HeavyProfile::addNode):
987         (KJS::HeavyProfile::mergeProfiles):
988         (KJS::HeavyProfile::addAncestorsAsChildren):
989         * profiler/HeavyProfile.h: Added.
990         (KJS::HeavyProfile::create):
991         (KJS::HeavyProfile::heavyProfile):
992         (KJS::HeavyProfile::treeProfile):
993         * profiler/Profile.cpp: Removed old commented out includes.
994         * profiler/Profile.h: The m_head is needed by the HeavyProfile so it
995         is now protected as opposed to private.
996         * profiler/ProfileNode.cpp:
997         (KJS::ProfileNode::ProfileNode): Created a constructor to copy
998         ProfileNodes.
999         (KJS::ProfileNode::findChild): Added a null check to make HeavyProfile
1000         children finding easier and avoid a potential crasher.
1001         * profiler/ProfileNode.h: Mostly moved things around but also added some
1002         functionality needed by HeavyProfile.
1003         (KJS::ProfileNode::create):
1004         (KJS::ProfileNode::functionName):
1005         (KJS::ProfileNode::url):
1006         (KJS::ProfileNode::lineNumber):
1007         (KJS::ProfileNode::head):
1008         (KJS::ProfileNode::setHead):
1009         (KJS::ProfileNode::setNextSibling):
1010         (KJS::ProfileNode::actualTotalTime):
1011         (KJS::ProfileNode::actualSelfTime):
1012         * profiler/TreeProfile.cpp: Implemented the ability to get a
1013         HeavyProfile.
1014         (KJS::TreeProfile::heavyProfile):
1015         * profiler/TreeProfile.h:
1016
1017 2008-07-08  Geoffrey Garen  <ggaren@apple.com>
1018
1019         Reviewed by Oliver Hunt.
1020         
1021         Added support for checking if an object has custom properties in its
1022         property map. WebCore uses this to optimize marking DOM wrappers.
1023
1024 2008-07-08  Simon Hausmann  <hausmann@webkit.org>
1025
1026         Prospective Gtk/Wx build fixes, add ProfileGenerator.cpp to the build.
1027
1028         * GNUmakefile.am:
1029         * JavaScriptCoreSources.bkl:
1030
1031 2008-07-08  Simon Hausmann  <hausmann@webkit.org>
1032
1033         Fix the Qt build, add ProfileGenerator.cpp to the build.
1034
1035         * JavaScriptCore.pri:
1036
1037 2008-07-07  David Kilzer  <ddkilzer@apple.com>
1038
1039         releaseFastMallocFreeMemory() should always be defined
1040
1041         Reviewed by Darin.
1042
1043         * JavaScriptCore.exp: Changed to export C++ binding for
1044         WTF::releaseFastMallocFreeMemory() instead of C binding for
1045         releaseFastMallocFreeMemory().
1046         * wtf/FastMalloc.cpp: Moved definitions of
1047         releaseFastMallocFreeMemory() to be in the WTF namespace
1048         regardless whether FORCE_SYSTEM_MALLOC is defined.
1049         * wtf/FastMalloc.h: Moved releaseFastMallocFreeMemory() from
1050         extern "C" binding to WTF::releaseFastMallocFreeMemory().
1051
1052 2008-07-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1053
1054         Reviewed by Geoff.
1055
1056         Bug 19926: URL causes crash within a minute
1057         <https://bugs.webkit.org/show_bug.cgi?id=19926>
1058
1059         Add a check that lastGlobalObject is non-null in Machine::execute()
1060         before copying its globals to the current register file.
1061
1062         In theory, it is possible to make a test case for this, but it will
1063         take a while to get it right.
1064
1065         * VM/Machine.cpp:
1066         (KJS::Machine::execute):
1067
1068 2008-07-07  Darin Adler  <darin@apple.com>
1069
1070         Rubber stamped by Adele.
1071
1072         * VM/Machine.cpp:
1073         (KJS::Machine::privateExecute): Fix a typo in a comment.
1074
1075 2008-07-07  Steve Falkenburg  <sfalken@apple.com>
1076
1077         Build fixes.
1078
1079         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1080         * JavaScriptCore.vcproj/testapi/testapi.vcproj:
1081
1082 2008-07-07  Kevin McCullough  <kmccullough@apple.com>
1083
1084         Reviewed by Darin.
1085
1086         When the profiler is running it gathers information and creates a
1087         Profile.  After it finishes the Profile can be sorted and have other
1088         data refinements run over it.  Both of these were done in the same class
1089         before.  Now I split the gathering operations into a new class called
1090         ProfileGenerator.
1091
1092         * JavaScriptCore.xcodeproj/project.pbxproj:
1093         * profiler/Profile.cpp: Removed code related to the gather stage of a
1094         Profile's creation.  
1095         (KJS::Profile::create):
1096         (KJS::Profile::Profile):
1097         * profiler/Profile.h: Ditto.
1098         (KJS::Profile::title):
1099         (KJS::Profile::callTree):
1100         (KJS::Profile::setHead):
1101         * profiler/ProfileGenerator.cpp: Added. This is the class that will
1102         handle the stage of creating a Profile.  Once the Profile is finished
1103         being created, this class goes away.
1104         (KJS::ProfileGenerator::create):
1105         (KJS::ProfileGenerator::ProfileGenerator):
1106         (KJS::ProfileGenerator::title):
1107         (KJS::ProfileGenerator::willExecute):
1108         (KJS::ProfileGenerator::didExecute):
1109         (KJS::ProfileGenerator::stopProfiling):
1110         (KJS::ProfileGenerator::didFinishAllExecution):
1111         (KJS::ProfileGenerator::removeProfileStart):
1112         (KJS::ProfileGenerator::removeProfileEnd):
1113         * profiler/ProfileGenerator.h: Added.
1114         (KJS::ProfileGenerator::profile):
1115         (KJS::ProfileGenerator::originatingGlobalExec):
1116         (KJS::ProfileGenerator::pageGroupIdentifier):
1117         (KJS::ProfileGenerator::client):
1118         (KJS::ProfileGenerator::stoppedProfiling):
1119         * profiler/Profiler.cpp: Now operates with the ProfileGenerator instead
1120         of the Profile.
1121         (KJS::Profiler::startProfiling):
1122         (KJS::Profiler::stopProfiling):
1123         (KJS::Profiler::didFinishAllExecution): It is here that the Profile is
1124         handed off to its client and the Profile Generator is no longer needed.
1125         (KJS::dispatchFunctionToProfiles):
1126         (KJS::Profiler::willExecute):
1127         (KJS::Profiler::didExecute):
1128         * profiler/Profiler.h: Cleaned up the includes and subsequently the
1129         forward declarations.  Also use the new ProfileGenerator.
1130         (KJS::ProfilerClient::~ProfilerClient):
1131         (KJS::Profiler::currentProfiles):
1132         * profiler/TreeProfile.cpp: Use Profile's new interface.
1133         (KJS::TreeProfile::create):
1134         (KJS::TreeProfile::TreeProfile):
1135         * profiler/TreeProfile.h:
1136
1137 2008-07-07  Sam Weinig  <sam@webkit.org>
1138
1139         Reviewed by Cameron Zwarich.
1140
1141         Third step in broad cleanup effort.
1142
1143         [ File list elided ]
1144
1145 2008-07-06  Sam Weinig  <sam@webkit.org>
1146
1147         Reviewed by Cameron Zwarich.
1148
1149         Second step in broad cleanup effort.
1150
1151         [ File list elided ]
1152
1153 2008-07-05  Sam Weinig  <sam@webkit.org>
1154
1155         Reviewed by Cameron Zwarich.
1156
1157         First step in broad cleanup effort.
1158
1159         [ File list elided ]
1160
1161 2008-07-05  Sam Weinig  <sam@webkit.org>
1162
1163         Rubber-stamped by Cameron Zwarich.
1164
1165         Rename list.h/cpp to ArgList.h/cpp.
1166
1167         * GNUmakefile.am:
1168         * JavaScriptCore.pri:
1169         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1170         * JavaScriptCore.xcodeproj/project.pbxproj:
1171         * JavaScriptCoreSources.bkl:
1172         * VM/Machine.h:
1173         * kjs/AllInOneFile.cpp:
1174         * kjs/ArgList.cpp: Copied from JavaScriptCore/kjs/list.cpp.
1175         * kjs/ArgList.h: Copied from JavaScriptCore/kjs/list.h.
1176         * kjs/IndexToNameMap.cpp:
1177         * kjs/JSGlobalData.cpp:
1178         * kjs/JSGlobalData.h:
1179         * kjs/JSObject.h:
1180         * kjs/collector.cpp:
1181         * kjs/list.cpp: Removed.
1182         * kjs/list.h: Removed.
1183
1184 2008-07-05  Sam Weinig  <sam@webkit.org>
1185
1186         Fix non-AllInOne builds again.
1187
1188         * kjs/BooleanPrototype.cpp:
1189         * kjs/ErrorPrototype.cpp:
1190         * kjs/FunctionPrototype.cpp:
1191         * kjs/NumberPrototype.cpp:
1192         * kjs/ObjectPrototype.cpp:
1193
1194 2008-07-05  Sam Weinig  <sam@webkit.org>
1195
1196         Fix build on case-sensitive build systems.
1197
1198         * kjs/IndexToNameMap.cpp:
1199
1200 2008-07-05  Sam Weinig  <sam@webkit.org>
1201
1202         Fix build.
1203
1204         * kjs/Arguments.cpp:
1205         * kjs/BooleanPrototype.cpp:
1206         * kjs/DateConstructor.cpp:
1207         * kjs/ErrorPrototype.cpp:
1208         * kjs/FunctionPrototype.cpp:
1209         * kjs/NumberPrototype.cpp:
1210         * kjs/ObjectPrototype.cpp:
1211         * kjs/RegExpPrototype.cpp:
1212         * kjs/StringConstructor.cpp:
1213         * kjs/lookup.cpp:
1214
1215 2008-07-05  Sam Weinig  <sam@webkit.org>
1216
1217         Fix non-AllInOne build.
1218
1219         * kjs/JSGlobalObject.cpp:
1220
1221 2008-07-05  Sam Weinig  <sam@webkit.org>
1222
1223         Rubber-stamped by Cameron Zwarich.
1224
1225         Split Arguments, IndexToNameMap, PrototypeFunction, GlobalEvalFunction and 
1226         the functions on the global object out of JSFunction.h/cpp.
1227
1228         * GNUmakefile.am:
1229         * JavaScriptCore.pri:
1230         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1231         * JavaScriptCore.xcodeproj/project.pbxproj:
1232         * JavaScriptCoreSources.bkl:
1233         * VM/Machine.cpp:
1234         * kjs/AllInOneFile.cpp:
1235         * kjs/Arguments.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1236         * kjs/Arguments.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1237         * kjs/GlobalEvalFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1238         * kjs/GlobalEvalFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1239         * kjs/IndexToNameMap.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1240         * kjs/IndexToNameMap.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1241         * kjs/JSActivation.cpp:
1242         * kjs/JSFunction.cpp:
1243         * kjs/JSFunction.h:
1244         * kjs/JSGlobalObject.cpp:
1245         * kjs/JSGlobalObjectFunctions.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1246         * kjs/JSGlobalObjectFunctions.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1247         The functions on the global object should be in JSGlobalObject.cpp, but putting them there
1248         was a 0.5% regression.
1249
1250         * kjs/PrototypeFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1251         * kjs/PrototypeFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1252         * kjs/Shell.cpp:
1253         * kjs/lexer.cpp:
1254         * kjs/ustring.cpp:
1255
1256 2008-07-04  Sam Weinig  <sam@webkit.org>
1257
1258         Really fix the mac build.
1259
1260         * JavaScriptCore.xcodeproj/project.pbxproj:
1261
1262 2008-07-04  Sam Weinig  <sam@webkit.org>
1263
1264         Fix mac build.
1265
1266         * JavaScriptCore.xcodeproj/project.pbxproj:
1267
1268 2008-07-04  Sam Weinig  <sam@webkit.org>
1269
1270         Fix non-AllInOne builds.
1271
1272         * kjs/Error.cpp:
1273         * kjs/GetterSetter.cpp:
1274         * kjs/JSImmediate.cpp:
1275         * kjs/operations.cpp:
1276
1277 2008-07-04  Sam Weinig  <sam@webkit.org>
1278
1279         Rubber-stamped by Dan Bernstein.
1280
1281         Split Error and GetterSetter out of JSObject.h.
1282
1283         * API/JSCallbackObjectFunctions.h:
1284         * GNUmakefile.am:
1285         * JavaScriptCore.pri:
1286         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1287         * JavaScriptCore.xcodeproj/project.pbxproj:
1288         * JavaScriptCoreSources.bkl:
1289         * kjs/AllInOneFile.cpp:
1290         * kjs/ClassInfo.h: Copied from JavaScriptCore/kjs/JSObject.h.
1291         * kjs/Error.cpp: Copied from JavaScriptCore/kjs/JSObject.cpp.
1292         * kjs/Error.h: Copied from JavaScriptCore/kjs/JSObject.h.
1293         * kjs/GetterSetter.cpp:
1294         * kjs/GetterSetter.h: Copied from JavaScriptCore/kjs/JSObject.h.
1295         * kjs/JSObject.cpp:
1296         * kjs/JSObject.h:
1297         * kjs/nodes.h:
1298
1299 2008-07-04  Simon Hausmann  <hausmann@webkit.org>
1300
1301         Fix the Wx build, added TreeProfile.cpp to the build.
1302
1303         * JavaScriptCoreSources.bkl:
1304
1305 2008-07-03  Mark Rowe  <mrowe@apple.com>
1306
1307         Reviewed by Oliver Hunt.
1308
1309         Fix output path of recently-added script phase to reference the correct file.
1310         This prevents Xcode from running the script phase unnecessarily, which caused
1311         the generated header to be recreated and lead to AllInOneFile.cpp rebuilding.
1312
1313         * JavaScriptCore.xcodeproj/project.pbxproj:
1314
1315 2008-07-03  Mark Rowe  <mrowe@apple.com>
1316
1317         Follow-up to the 64-bit build fix.  Use intptr_t rather than ssize_t as
1318         the latter is non-standard and does not exist on Windows.
1319
1320         * kjs/JSLock.cpp:
1321         (KJS::JSLock::lockCount):
1322         (KJS::JSLock::lock):
1323         (KJS::JSLock::unlock):
1324         (KJS::JSLock::DropAllLocks::DropAllLocks):
1325         * kjs/JSLock.h:
1326
1327 2008-07-02  Mark Rowe  <mrowe@apple.com>
1328
1329         Fix the 64-bit build.  pthread_getspecific works with pointer-sized values,
1330         so use ssize_t rather than int to track the lock count to avoid warnings about
1331         truncating the result of pthread_getspecific.
1332
1333         * kjs/JSLock.cpp:
1334         (KJS::JSLock::lockCount):
1335         (KJS::JSLock::lock):
1336         (KJS::JSLock::unlock):
1337         (KJS::JSLock::DropAllLocks::DropAllLocks):
1338         * kjs/JSLock.h:
1339
1340 2008-07-03  Geoffrey Garen  <ggaren@apple.com>
1341
1342         Reviewed by Sam Weinig.
1343         
1344         Removed checking for the array get/put fast case from the array code.
1345         Callers who want the fast case should call getIndex and/or setIndex
1346         instead. (get_by_val and put_by_val already do this.)
1347         
1348         SunSpider reports no change overall, but a 1.4% speedup on fannkuch and
1349         a 3.6% speedup on nsieve.
1350
1351 2008-07-03  Dan Bernstein  <mitz@apple.com>
1352
1353         - Windows build fix
1354
1355         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}.
1356
1357 2008-07-03  Dan Bernstein  <mitz@apple.com>
1358
1359         Reviewed by Anders Carlsson.
1360
1361         - Windows build fix
1362
1363         * VM/Machine.cpp:
1364         (KJS::Machine::Machine):
1365
1366 2008-07-03  Simon Hausmann  <hausmann@webkit.org>
1367
1368         Reviewed by Alexey Proskuryakov.
1369
1370         Fix the non-threaded build.
1371
1372         * kjs/JSGlobalData.cpp:
1373         (KJS::JSGlobalData::threadInstanceInternal):
1374
1375 2008-07-03  Simon Hausmann  <hausmann@webkit.org>
1376
1377         Fix the Qt build, added TreeProfile to the build.
1378
1379         * JavaScriptCore.pri:
1380
1381 2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
1382
1383         Reviewed by Geoff.
1384
1385         Don't create unnecessary JSGlobalData instances.
1386
1387         * kjs/JSGlobalData.h:
1388         * kjs/JSGlobalData.cpp:
1389         (KJS::JSGlobalData::threadInstanceExists):
1390         (KJS::JSGlobalData::sharedInstanceExists):
1391         (KJS::JSGlobalData::threadInstance):
1392         (KJS::JSGlobalData::sharedInstance):
1393         (KJS::JSGlobalData::threadInstanceInternal):
1394         (KJS::JSGlobalData::sharedInstanceInternal):
1395         Added methods to query instance existence.
1396
1397         * kjs/InitializeThreading.cpp:
1398         (KJS::initializeThreadingOnce):
1399         Initialize thread instance static in a new way.
1400
1401         * API/JSBase.cpp:
1402         (JSGarbageCollect):
1403         * kjs/collector.cpp:
1404         (KJS::Heap::collect):
1405         Check for instance existence before accessing it.
1406
1407 2008-07-02  Geoffrey Garen  <ggaren@apple.com>
1408
1409         Reviewed by Cameron Zwarich.
1410         
1411         Fixed https://bugs.webkit.org/show_bug.cgi?id=19862
1412         REGRESSION (r34907): Gmail crashes in JavaScriptCore code while editing drafts
1413         
1414         I was never able to reproduce this issue, but Cameron could, and he says
1415         that this patch fixes it.
1416         
1417         The crash seems tied to a timer or event handler callback. In such a case,
1418         the sole reference to the global object may be in the current call frame,
1419         so we can't depend on the global object to mark the call frame area in
1420         the register file.
1421         
1422         The new GC marking rule is: the global object is not responsible for
1423         marking the whole register file -- it's just responsible for the globals
1424         section it's tied to. The heap is responsible for marking the call frame area.
1425
1426 2008-07-02  Mark Rowe  <mrowe@apple.com>
1427
1428         Reviewed by Sam Weinig.
1429
1430         Add the ability to trace JavaScriptCore garabge collections using dtrace.
1431
1432         * JavaScriptCore.xcodeproj/project.pbxproj: Generate the dtrace probe header
1433         file when building on a new enough version of Mac OS X.
1434         * JavaScriptCorePrefix.h: Add our standard Mac OS X version detection macros.
1435         * kjs/Tracing.d: Declare three dtrace probes.
1436         * kjs/Tracing.h: Include the generated dtrace macros if dtrace is available,
1437         otherwise provide versions that do nothing.
1438         * kjs/collector.cpp:
1439         (KJS::Heap::collect): Fire dtrace probes when starting a collection, after the
1440         mark phase has completed, and when the collection is complete.
1441         * wtf/Platform.h: Define HAVE_DTRACE when building on a new enough version of Mac OS X.
1442
1443 2008-07-02  Geoffrey Garen  <ggaren@apple.com>
1444
1445         Rubber stamped by Oliver Hunt.
1446         
1447         Reduced the max register file size from 8MB to 2MB.
1448
1449         We still allow about 20,000 levels of recursion.
1450
1451 2008-07-02  Alp Toker  <alp@nuanti.com>
1452
1453         Build fix for r34960. Add TreeProfile.cpp to build.
1454
1455         * GNUmakefile.am:
1456
1457 2008-07-02  Geoffrey Garen  <ggaren@apple.com>
1458
1459         Reviewed by Oliver Hunt.
1460
1461         Optimized a[n] get for cases when a is an array or a string. When a is
1462         an array, we optimize both get and put. When a is a string, we only
1463         optimize get, since you can't put to a string.
1464         
1465         SunSpider says 3.4% faster.
1466
1467 2008-07-02  Kevin McCullough  <kmccullough@apple.com>
1468
1469         Reviewed by Darin.
1470
1471         -Small cleanup in preparation for implementing Bottom-up.
1472
1473         * profiler/CallIdentifier.h: Rename debug function to make it clear of
1474         its output and intention to be debug only.
1475         (KJS::CallIdentifier::operator const char* ): Implement in terms of
1476         c_str.
1477         (KJS::CallIdentifier::c_str):
1478         * profiler/ProfileNode.cpp: Impelment findChild() which will be needed
1479         by the bottom-up implementation.
1480         (KJS::ProfileNode::findChild):
1481         * profiler/ProfileNode.h: Added comments to make the collections of
1482         functions more clear.
1483         (KJS::ProfileNode::operator==):
1484         (KJS::ProfileNode::c_str):
1485
1486 2008-07-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1487
1488         Reviewed by Darin.
1489
1490         Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
1491         <https://bugs.webkit.org/show_bug.cgi?id=19776>
1492
1493         Perform the sign check for the exponent on the actual exponent value,
1494         which is 1 less than the value of decimalPoint, instead of on the value
1495         of decimalPoint itself.
1496
1497         * kjs/NumberPrototype.cpp:
1498         (KJS::exponentialPartToString):
1499
1500 2008-07-02  Kevin McCullough  <kmccullough@apple.com>
1501
1502         Reviewed by Darin.
1503
1504         <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
1505         - Subclass TreeProfile as I prepare for a HeavyProfile to be comming
1506         later.
1507
1508         * JavaScriptCore.xcodeproj/project.pbxproj:
1509         * profiler/Profile.cpp: By default we create a TreeProfile.
1510         (KJS::Profile::create):
1511         * profiler/Profile.h: Changes to the Profile class to make it amenable
1512         to be inherited from.
1513         (KJS::Profile::~Profile):
1514         * profiler/TreeProfile.cpp: Added.
1515         (KJS::TreeProfile::create):
1516         (KJS::TreeProfile::TreeProfile):
1517         (KJS::TreeProfile::heavyProfile):
1518         * profiler/TreeProfile.h: Added.
1519         (KJS::TreeProfile::treeProfile):
1520
1521 2008-07-02  Kevin McCullough  <kmccullough@apple.com>
1522
1523         Reviewed by Dan.
1524
1525         Broke CallIdentifier out into its own file. I did this because it's
1526         going to grow a lot soon and I wanted this to be a separate patch.
1527
1528         * JavaScriptCore.xcodeproj/project.pbxproj:
1529         * profiler/CallIdentifier.h: Added.
1530         (KJS::CallIdentifier::CallIdentifier):
1531         (KJS::CallIdentifier::operator==):
1532         (KJS::CallIdentifier::operator!=):
1533         (KJS::CallIdentifier::operator const char* ):
1534         (KJS::CallIdentifier::toString):
1535         * profiler/ProfileNode.h:
1536
1537 2008-07-02  Simon Hausmann  <hausmann@webkit.org>
1538
1539         Build fix. Implemented missing functions for single-threaded build.
1540
1541         * kjs/JSLock.cpp:
1542         (KJS::JSLock::JSLock):
1543         (KJS::JSLock::lock):
1544         (KJS::JSLock::unlock):
1545         (KJS::JSLock::DropAllLocks::DropAllLocks):
1546
1547 2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
1548
1549         Another non-AllInOne build fix.
1550
1551         * kjs/JSGlobalObject.cpp: Include JSLock.h here, too.
1552
1553 2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
1554
1555         Non-AllInOne build fix.
1556
1557         * kjs/interpreter.cpp: Include JSLock.h.
1558
1559 2008-06-30  Alexey Proskuryakov  <ap@webkit.org>
1560
1561         Reviewed by Darin.
1562
1563         Disable JSLock for per-thread contexts.
1564
1565         No change on SunSpider.
1566
1567         * kjs/JSGlobalData.h:
1568         * kjs/JSGlobalData.cpp:
1569         (KJS::JSGlobalData::JSGlobalData):
1570         (KJS::JSGlobalData::sharedInstance):
1571         Added isSharedInstance as a better way to tell whether the instance is shared (legacy).
1572
1573         * kjs/JSLock.cpp:
1574         (KJS::createJSLockCount):
1575         (KJS::JSLock::lockCount):
1576         (KJS::setLockCount):
1577         (KJS::JSLock::JSLock):
1578         (KJS::JSLock::lock):
1579         (KJS::JSLock::unlock):
1580         (KJS::JSLock::currentThreadIsHoldingLock):
1581         (KJS::JSLock::DropAllLocks::DropAllLocks):
1582         (KJS::JSLock::DropAllLocks::~DropAllLocks):
1583         * kjs/JSLock.h:
1584         (KJS::JSLock::JSLock):
1585         (KJS::JSLock::~JSLock):
1586         Made JSLock and JSLock::DropAllLocks constructors take a parameter to decide whether to
1587         actually lock a mutex, or only to increment recursion count. We cannot turn it into no-op
1588         if we want to keep existing assertions working.
1589         Made recursion count per-thread, now that locks may not lock.
1590
1591         * API/JSBase.cpp:
1592         (JSEvaluateScript): Take JSLock after casting JSContextRef to ExecState* (which doesn't need
1593         locking in any case), so that a decision whether to actually lock can be made.
1594         (JSCheckScriptSyntax): Ditto.
1595         (JSGarbageCollect): Only lock while collecting the shared heap, not the per-thread one.
1596
1597         * API/JSObjectRef.cpp:
1598         (JSClassCreate): Don't lock, as there is no reason to.
1599         (JSClassRetain): Ditto.
1600         (JSClassRelease): Ditto.
1601         (JSPropertyNameArrayRetain): Ditto.
1602         (JSPropertyNameArrayRelease): Only lock while deleting the array, as that may touch
1603         identifier table.
1604         (JSPropertyNameAccumulatorAddName): Adding a string also involves an identifier table
1605         lookup, and possibly modification.
1606
1607         * API/JSStringRef.cpp:
1608         (JSStringCreateWithCharacters):
1609         (JSStringCreateWithUTF8CString):
1610         (JSStringRetain):
1611         (JSStringRelease):
1612         (JSStringGetUTF8CString):
1613         (JSStringIsEqual):
1614         * API/JSStringRefCF.cpp:
1615         (JSStringCreateWithCFString):
1616         JSStringRef operations other than releasing do not need locking.
1617
1618         * VM/Machine.cpp: Don't include unused JSLock.h.
1619
1620         * kjs/CollectorHeapIntrospector.cpp: (KJS::CollectorHeapIntrospector::statistics):
1621         Don't take the lock for real, as heap introspection pauses the process anyway. It seems that
1622         the existing code could cause deadlocks.
1623
1624         * kjs/Shell.cpp:
1625         (functionGC):
1626         (main):
1627         (jscmain):
1628         The test tool uses a per-thread context, so no real locking is required.
1629
1630         * kjs/collector.h:
1631         (KJS::Heap::setGCProtectNeedsLocking): Optionally protect m_protectedValues access with a
1632         per-heap mutex. This is only needed for WebCore Database code, which violates the "no data
1633         migration between threads" by using ProtectedPtr on a background thread.
1634         (KJS::Heap::isShared): Keep a shared flag here, as well.
1635
1636         * kjs/protect.h:
1637         (KJS::::ProtectedPtr):
1638         (KJS::::~ProtectedPtr):
1639         (KJS::::operator):
1640         (KJS::operator==):
1641         (KJS::operator!=):
1642         ProtectedPtr is ony used from WebCore, so it doesn't need to take JSLock. An assertion in
1643         Heap::protect/unprotect guards agains possible future unlocked uses of ProtectedPtr in JSC.
1644
1645         * kjs/collector.cpp:
1646         (KJS::Heap::Heap): Initialize m_isShared.
1647         (KJS::Heap::~Heap): No need to lock for real during destruction, but must keep assertions
1648         in sweep() working.
1649         (KJS::destroyRegisteredThread): Registered thread list is only accessed for shared heap,
1650         so locking is always needed here.
1651         (KJS::Heap::registerThread): Ditto.
1652         (KJS::Heap::markStackObjectsConservatively): Use m_isShared instead of comparing to a shared
1653         instance for a small speedup.
1654         (KJS::Heap::setGCProtectNeedsLocking): Create m_protectedValuesMutex. There is currently no
1655         way to undo this - and ideally, Database code will be fixed to lo longer require this quirk.
1656         (KJS::Heap::protect): Take m_protectedValuesMutex (if it exists) while accessing
1657         m_protectedValues.
1658         (KJS::Heap::unprotect): Ditto.
1659         (KJS::Heap::markProtectedObjects): Ditto.
1660         (KJS::Heap::protectedGlobalObjectCount): Ditto.
1661         (KJS::Heap::protectedObjectCount): Ditto.
1662         (KJS::Heap::protectedObjectTypeCounts): Ditto.
1663
1664         * kjs/ustring.cpp:
1665         * kjs/ustring.h:
1666         Don't include JSLock.h, which is no longer used here. As a result, an explicit include had
1667         to be added to many files in JavaScriptGlue, WebCore and WebKit.
1668
1669         * kjs/JSGlobalObject.cpp:
1670         (KJS::JSGlobalObject::init):
1671         * API/JSCallbackConstructor.cpp:
1672         (KJS::constructJSCallback):
1673         * API/JSCallbackFunction.cpp:
1674         (KJS::JSCallbackFunction::call):
1675         * API/JSCallbackObjectFunctions.h:
1676         (KJS::::init):
1677         (KJS::::getOwnPropertySlot):
1678         (KJS::::put):
1679         (KJS::::deleteProperty):
1680         (KJS::::construct):
1681         (KJS::::hasInstance):
1682         (KJS::::call):
1683         (KJS::::getPropertyNames):
1684         (KJS::::toNumber):
1685         (KJS::::toString):
1686         (KJS::::staticValueGetter):
1687         (KJS::::callbackGetter):
1688         * API/JSContextRef.cpp:
1689         (JSGlobalContextCreate):
1690         (JSGlobalContextRetain):
1691         (JSGlobalContextRelease):
1692         * API/JSValueRef.cpp:
1693         (JSValueIsEqual):
1694         (JSValueIsStrictEqual):
1695         (JSValueIsInstanceOfConstructor):
1696         (JSValueMakeNumber):
1697         (JSValueMakeString):
1698         (JSValueToNumber):
1699         (JSValueToStringCopy):
1700         (JSValueToObject):
1701         (JSValueProtect):
1702         (JSValueUnprotect):
1703         * JavaScriptCore.exp:
1704         * kjs/PropertyNameArray.h:
1705         (KJS::PropertyNameArray::globalData):
1706         * kjs/interpreter.cpp:
1707         (KJS::Interpreter::checkSyntax):
1708         (KJS::Interpreter::evaluate):
1709         Pass a parameter to JSLock/JSLock::DropAllLocks to decide whether the lock needs to be taken.
1710
1711 2008-07-01  Alexey Proskuryakov  <ap@webkit.org>
1712
1713         Reviewed by Darin.
1714
1715         https://bugs.webkit.org/show_bug.cgi?id=19834
1716         Failed assertion in JavaScriptCore/VM/SegmentedVector.h:82
1717
1718         Creating a global object with a custom prototype resets it twice (wasteful!).
1719         So, addStaticGlobals() was called twice, but JSGlobalObject::reset() didn't reset
1720         the register array.        
1721
1722         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::reset): Call setRegisterArray(0, 0).
1723
1724         * kjs/JSVariableObject.h: Changed registerArray to OwnArrayPtr. Also, added private copy
1725         constructor and operator= to ensure that no one attempts to copy this object (for whatever
1726         reason, I couldn't make Noncopyable work).
1727
1728         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::addStaticGlobals): Allocate registerArray
1729         with new[].
1730
1731         * kjs/JSVariableObject.cpp:
1732         (KJS::JSVariableObject::copyRegisterArray): Allocate registerArray with new[].
1733         (KJS::JSVariableObject::setRegisterArray): Avoid hitting an assertion in OwnArrayPtr when
1734         "changing" the value from 0 to 0.
1735
1736 2008-07-01  Geoffrey Garen  <ggaren@apple.com>
1737
1738         Reviewed by Oliver Hunt.
1739         
1740         Removed and/or reordered exception checks in array-style a[n] access.
1741         
1742         SunSpider says 1.4% faster.
1743
1744         * VM/Machine.cpp:
1745         (KJS::Machine::privateExecute): No need to check for exceptions before
1746         calling toString, toNumber and/or get. If the call ends up being observable
1747         through toString, valueOf, or a getter, we short-circuit it there, instead.
1748         In the op_del_by_val case, I removed the incorrect comment without actually
1749         removing the code, since I didn't want to tempt the GCC fates!
1750
1751         * kjs/JSObject.cpp:
1752         (KJS::callDefaultValueFunction): Added exception check to prevent
1753         toString and valueOf functions from observing execution after an exception
1754         has been thrown. This removes some of the burden of exception checking
1755         from the machine.
1756
1757         (KJS::JSObject::defaultValue): Removed redundant exception check here.
1758
1759         * kjs/PropertySlot.cpp:
1760         (KJS::PropertySlot::functionGetter): Added exception check to prevent
1761         getter functions from observing execution after an exception has been
1762         thrown. This removes some of the burden of exception checking from the
1763         machine.
1764
1765 2008-07-01  Geoffrey Garen  <ggaren@apple.com>
1766
1767         Reviewed by Oliver Hunt.
1768         
1769         Optimized a[n] get and put for cases where n is an immediate unsigned
1770         value.
1771         
1772         SunSpider says 3.5% faster.
1773
1774 2008-07-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1775
1776         Reviewed by Darin.
1777
1778         Bug 19844: JavaScript Switch statement modifies "this"
1779         <https://bugs.webkit.org/show_bug.cgi?id=19844>
1780
1781         Use a temporary when generating code for switch clauses to avoid
1782         overwriting 'this' or a local variable.
1783
1784         * kjs/nodes.cpp:
1785         (KJS::CaseBlockNode::emitCodeForBlock):
1786
1787 2008-07-01  Christian Dywan  <christian@twotoasts.de>
1788
1789         Gtk+ build fix.
1790
1791         * kjs/list.cpp: Include "JSCell.h"
1792
1793 2008-07-01  Kevin McCullough  <kmccullough@apple.com>
1794
1795         Build fix.
1796
1797         * JavaScriptCore.xcodeproj/project.pbxproj:
1798
1799 2008-07-01  Dan Bernstein  <mitz@apple.com>
1800
1801         Reviewed by Anders Carlsson.
1802
1803         - Mac release build fix
1804
1805         * JavaScriptCore.exp:
1806
1807 2008-07-01  Sam Weinig  <sam@webkit.org>
1808
1809         Try and fix mac builds.
1810
1811         * JavaScriptCore.exp:
1812
1813 2008-07-01  Sam Weinig  <sam@webkit.org>
1814
1815         Fix non-AllInOne builds.
1816
1817         * kjs/DateMath.cpp:
1818
1819 2008-07-01  Sam Weinig  <sam@webkit.org>
1820
1821         Reviewed by Darin Adler.
1822
1823         Split JSCell and JSNumberCell class declarations out of JSValue.h
1824
1825         * GNUmakefile.am:
1826         * JavaScriptCore.pri:
1827         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1828         * JavaScriptCore.xcodeproj/project.pbxproj:
1829         * JavaScriptCoreSources.bkl:
1830         * VM/JSPropertyNameIterator.h:
1831         * kjs/AllInOneFile.cpp:
1832         * kjs/JSCell.cpp: Copied from JavaScriptCore/kjs/JSValue.cpp.
1833         * kjs/JSCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
1834         (KJS::JSValue::getJSNumber):
1835         * kjs/JSNumberCell.cpp:
1836         * kjs/JSNumberCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
1837         * kjs/JSObject.h:
1838         * kjs/JSString.cpp:
1839         (KJS::jsString):
1840         (KJS::jsOwnedString):
1841         * kjs/JSString.h:
1842         (KJS::JSValue::toThisJSString):
1843         * kjs/JSValue.cpp:
1844         * kjs/JSValue.h:
1845
1846 2008-07-01  Anders Carlsson  <andersca@apple.com>
1847
1848         Build fixes.
1849         
1850         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1851         * kjs/JSGlobalObject.h:
1852         (KJS::JSGlobalObject::addStaticGlobals):
1853
1854 2008-07-01  Simon Hausmann  <hausmann@webkit.org>
1855
1856         Build fix, include OwnPtr.h.
1857
1858         * kjs/RegExpConstructor.h:
1859
1860 2008-06-30  Geoffrey Garen  <ggaren@apple.com>
1861
1862         Reviewed by Oliver Hunt.
1863         
1864         Fixed a global object leak caused by the switch to one register file.
1865         
1866         Don't unconditionally mark the register file, since that logically
1867         makes all global variables GC roots, even when their global object is
1868         no longer reachable.
1869         
1870         Instead, make the global object associated with the register file
1871         responsible for marking the register file.
1872
1873 2008-06-30  Geoffrey Garen  <ggaren@apple.com>
1874
1875         Reviewed by Oliver Hunt.
1876         
1877         Removed the "registerBase" abstraction. Since the register file never
1878         reallocates, we can keep direct pointers into it, instead of
1879         <registerBase, offset> tuples.
1880         
1881         SunSpider says 0.8% faster.
1882         
1883 2008-06-30  Oliver Hunt  <oliver@apple.com>
1884
1885         Reviewed by NOBODY (build fix).
1886
1887         Fix build by adding all (hopefully) the missing includes.
1888
1889         * kjs/BooleanPrototype.cpp:
1890         * kjs/DateConstructor.cpp:
1891         * kjs/ErrorPrototype.cpp:
1892         * kjs/FunctionPrototype.cpp:
1893         * kjs/NativeErrorConstructor.cpp:
1894         * kjs/NumberPrototype.cpp:
1895         * kjs/ObjectPrototype.cpp:
1896         * kjs/RegExpConstructor.cpp:
1897         * kjs/StringConstructor.cpp:
1898         * kjs/StringPrototype.cpp:
1899
1900 2008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1901
1902         Reviewed by Oliver.
1903
1904         Bug 19830: REGRESSION (r34883): Google Reader doesn't show up feed list on sidebar
1905         <https://bugs.webkit.org/show_bug.cgi?id=19830>
1906
1907         Ensure that we do not eliminate a write to a local register when doing
1908         peephole optimizations.
1909
1910         * VM/CodeGenerator.cpp:
1911         (KJS::CodeGenerator::emitJumpIfTrue):
1912         (KJS::CodeGenerator::emitJumpIfFalse):
1913
1914 2008-06-30  Sam Weinig  <sam@webkit.org>
1915
1916         Rubber-stamped by Darin Alder.
1917
1918         Split InternalFunction into its own header file.
1919
1920         * API/JSCallbackFunction.h:
1921         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1922         * JavaScriptCore.xcodeproj/project.pbxproj:
1923         * kjs/ArrayConstructor.h:
1924         * kjs/BooleanConstructor.h:
1925         * kjs/DateConstructor.h:
1926         * kjs/ErrorConstructor.h:
1927         * kjs/FunctionConstructor.h:
1928         * kjs/FunctionPrototype.h:
1929         * kjs/InternalFunction.h: Copied from kjs/JSFunction.h.
1930         * kjs/JSFunction.h:
1931         * kjs/NativeErrorConstructor.h:
1932         * kjs/NumberConstructor.h:
1933         * kjs/ObjectConstructor.h:
1934         * kjs/RegExpConstructor.h:
1935         * kjs/StringConstructor.h:
1936         * profiler/Profiler.cpp:
1937
1938 2008-06-30  Sam Weinig  <sam@webkit.org>
1939
1940         Reviewed by Kevin McCullough.
1941
1942         Remove empty files Instruction.cpp, LabelID.cpp, Register.cpp and RegisterID.cpp.
1943
1944         * GNUmakefile.am:
1945         * JavaScriptCore.pri:
1946         * JavaScriptCore.xcodeproj/project.pbxproj:
1947         * JavaScriptCoreSources.bkl:
1948         * VM/Instruction.cpp: Removed.
1949         * VM/LabelID.cpp: Removed.
1950         * VM/Register.cpp: Removed.
1951         * VM/RegisterID.cpp: Removed.
1952
1953 2008-06-30  Sam Weinig  <sam@webkit.org>
1954
1955         Rubber-stamped (reluctantly) by Kevin McCullough.
1956
1957         Rename date_object.h/cpp to DateInstance.h/cpp
1958
1959         * GNUmakefile.am:
1960         * JavaScriptCore.pri:
1961         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1962         * JavaScriptCore.xcodeproj/project.pbxproj:
1963         * JavaScriptCoreSources.bkl:
1964         * kjs/AllInOneFile.cpp:
1965         * kjs/DateConstructor.cpp:
1966         * kjs/DateInstance.cpp: Copied from kjs/date_object.cpp.
1967         * kjs/DateInstance.h: Copied from kjs/date_object.h.
1968         * kjs/DatePrototype.cpp:
1969         * kjs/DatePrototype.h:
1970         * kjs/date_object.cpp: Removed.
1971         * kjs/date_object.h: Removed.
1972
1973 2008-06-30  Sam Weinig  <sam@webkit.org>
1974
1975         Rubber-stamped by Darin Adler.
1976
1977         Remove internal.cpp and move its contents to there own .cpp files.
1978
1979         * GNUmakefile.am:
1980         * JavaScriptCore.pri:
1981         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1982         * JavaScriptCore.xcodeproj/project.pbxproj:
1983         * JavaScriptCoreSources.bkl:
1984         * kjs/AllInOneFile.cpp:
1985         * kjs/GetterSetter.cpp: Copied from kjs/internal.cpp.
1986         * kjs/InternalFunction.cpp: Copied from kjs/internal.cpp.
1987         * kjs/JSNumberCell.cpp: Copied from kjs/internal.cpp.
1988         * kjs/JSString.cpp: Copied from kjs/internal.cpp.
1989         * kjs/JSString.h:
1990         * kjs/LabelStack.cpp: Copied from kjs/internal.cpp.
1991         * kjs/NumberConstructor.cpp:
1992         * kjs/NumberObject.cpp:
1993         (KJS::constructNumber):
1994         (KJS::constructNumberFromImmediateNumber):
1995         * kjs/internal.cpp: Removed.
1996
1997 2008-06-30  Adam Roben  <aroben@apple.com>
1998
1999         Fix <rdar://5954749> Assertion failure due to HashTable's use of
2000         operator&
2001
2002         HashTable was passing &value to constructDeletedValue, which in
2003         classes like WebCore::COMPtr would cause an assertion. We now pass
2004         value by reference instead of by address so that the HashTraits
2005         implementations have more flexibility in constructing the deleted
2006         value.
2007
2008         Reviewed by Ada Chan.
2009
2010         * VM/CodeGenerator.h: Updated for changes to HashTraits.
2011         * wtf/HashTable.h:
2012         (WTF::::deleteBucket): Changed to pass bucket by reference instead of
2013         by address.
2014         (WTF::::checkKey): Ditto.
2015         * wtf/HashTraits.h:
2016         (WTF::): Updated HashTraits for HashTable change.
2017
2018 2008-07-01  Alexey Proskuryakov  <ap@webkit.org>
2019
2020         Reviewed by Cameron Zwarich.
2021
2022         Make RegisterFile really unmap memory on destruction.
2023
2024         This fixes run-webkit-tests --threaded, which ran out of address space in a few seconds.
2025
2026         * VM/RegisterFile.cpp: (KJS::RegisterFile::~RegisterFile): Unmap all the memory, not just
2027         1/4 of it.
2028
2029         * kjs/JSGlobalObject.h: Don't include RegisterFile.h, so that changes to it don't make
2030         half of WebCore rebuild.
2031
2032         * VM/Machine.h: Don't forward declare RegisterFile, as RegisterFile.h is included already.
2033
2034         * VM/RegisterFile.h: (KJS::RegisterFile::RegisterFile): Assert that the allocation succeeded.
2035
2036 2008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2037
2038         Rubber-stamped by Oliver.
2039
2040         Correct the documentation for op_put_by_index.
2041
2042         * VM/Machine.cpp:
2043         (KJS::Machine::privateExecute):
2044
2045 2008-06-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2046
2047         Reviewed by Oliver.
2048
2049         Bug 19821: Merge the instruction pair (less, jfalse)
2050         <https://bugs.webkit.org/show_bug.cgi?id=19821>
2051         
2052         This is a 2.4% win on SunSpider. I needed to add an ALWAYS_INLINE
2053         intrinisc to CodeGenerator::rewindBinaryOp() to avoid a massive
2054         regression in regexp-dna.
2055
2056         * VM/CodeBlock.cpp:
2057         (KJS::CodeBlock::dump):
2058         * VM/CodeGenerator.cpp:
2059         (KJS::CodeGenerator::rewindBinaryOp):
2060         (KJS::CodeGenerator::emitJumpIfFalse):
2061         * VM/Machine.cpp:
2062         (KJS::Machine::privateExecute):
2063         * VM/Opcode.cpp:
2064         (KJS::):
2065         * VM/Opcode.h:
2066
2067 2008-06-29  Sam Weinig  <sam@webkit.org>
2068
2069         Fix non-AllInOne builds.
2070
2071         * kjs/JSObject.cpp:
2072         * kjs/JSValue.cpp:
2073
2074 2008-06-29  Sam Weinig  <sam@webkit.org>
2075
2076         Build fix for Qt.
2077
2078         * kjs/DateMath.cpp:
2079         * kjs/DatePrototype.cpp:
2080
2081 2008-06-29  Sam Weinig  <sam@webkit.org>
2082
2083         Rubber-stamped by Cameron Zwarich.
2084
2085         Splits ErrorConstructor, ErrorPrototype,  NativeErrorConstructor and
2086         NativeErrorPrototype out of error_object.h/cpp and renames it ErrorInstance.
2087
2088         * GNUmakefile.am:
2089         * JavaScriptCore.pri:
2090         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2091         * JavaScriptCore.xcodeproj/project.pbxproj:
2092         * JavaScriptCoreSources.bkl:
2093         * kjs/AllInOneFile.cpp:
2094         * kjs/ArrayConstructor.cpp:
2095         * kjs/ArrayPrototype.cpp:
2096         * kjs/BooleanPrototype.cpp:
2097         * kjs/DatePrototype.cpp:
2098         * kjs/ErrorConstructor.cpp: Copied from kjs/error_object.cpp.
2099         * kjs/ErrorConstructor.h: Copied from kjs/error_object.h.
2100         * kjs/ErrorInstance.cpp: Copied from kjs/error_object.cpp.
2101         * kjs/ErrorInstance.h: Copied from kjs/error_object.h.
2102         * kjs/ErrorPrototype.cpp: Copied from kjs/error_object.cpp.
2103         * kjs/ErrorPrototype.h: Copied from kjs/error_object.h.
2104         * kjs/JSGlobalObject.cpp:
2105         * kjs/JSObject.cpp:
2106         * kjs/JSValue.cpp:
2107         * kjs/NativeErrorConstructor.cpp: Copied from kjs/error_object.cpp.
2108         * kjs/NativeErrorConstructor.h: Copied from kjs/error_object.h.
2109         * kjs/NativeErrorPrototype.cpp: Copied from kjs/error_object.cpp.
2110         * kjs/NativeErrorPrototype.h: Copied from kjs/error_object.h.
2111         * kjs/NumberPrototype.cpp:
2112         * kjs/RegExpConstructor.cpp:
2113         * kjs/RegExpObject.cpp:
2114         * kjs/RegExpPrototype.cpp:
2115         * kjs/StringPrototype.cpp:
2116         * kjs/error_object.cpp: Removed.
2117         * kjs/error_object.h: Removed.
2118         * kjs/internal.cpp:
2119
2120 2008-06-29  Sam Weinig  <sam@webkit.org>
2121
2122         Fix non-AllInOne build.
2123
2124         * kjs/DateConstructor.cpp:
2125         * kjs/DateMath.cpp:
2126         * kjs/JSObject.cpp:
2127
2128 2008-06-29  Sam Weinig  <sam@webkit.org>
2129
2130         Rubber-stamped by Oliver Hunt.
2131
2132         Splits DateConstructor and DatePrototype out of date_object.h/cpp
2133         Moves shared Date code into DateMath.
2134
2135         * DerivedSources.make:
2136         * GNUmakefile.am:
2137         * JavaScriptCore.pri:
2138         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2139         * JavaScriptCore.xcodeproj/project.pbxproj:
2140         * JavaScriptCoreSources.bkl:
2141         * kjs/AllInOneFile.cpp:
2142         * kjs/DateConstructor.cpp: Copied from kjs/date_object.cpp.
2143         * kjs/DateConstructor.h: Copied from kjs/date_object.h.
2144         * kjs/DateMath.cpp:
2145         (KJS::ymdhmsToSeconds):
2146         (KJS::):
2147         (KJS::skipSpacesAndComments):
2148         (KJS::findMonth):
2149         (KJS::parseDate):
2150         (KJS::timeClip):
2151         (KJS::formatDate):
2152         (KJS::formatDateUTCVariant):
2153         (KJS::formatTime):
2154         * kjs/DateMath.h:
2155         (KJS::gmtoffset):
2156         * kjs/DatePrototype.cpp: Copied from kjs/date_object.cpp.
2157         * kjs/DatePrototype.h: Copied from kjs/date_object.h.
2158         * kjs/JSGlobalObject.cpp:
2159         * kjs/JSObject.cpp:
2160         * kjs/date_object.cpp:
2161         * kjs/date_object.h:
2162         * kjs/internal.cpp:
2163
2164 2008-06-29  Jan Michael Alonzo  <jmalonzo@webkit.org>
2165
2166         Rubber-stamped by Cameron Zwarich
2167
2168         Fix Gtk non-AllInOne build
2169
2170         * GNUmakefile.am: include JSVariableObject.cpp
2171         * kjs/RegExpConstructor.cpp: include RegExpObject.h
2172         * kjs/RegExpObject.h: forward declare RegExpPrototype
2173
2174 2008-06-28  Darin Adler  <darin@apple.com>
2175
2176         Reviewed by Sam and Cameron.
2177
2178         - fix https://bugs.webkit.org/show_bug.cgi?id=19805
2179           Array.concat turns missing array elements into "undefined"
2180
2181         Test: fast/js/array-holes.html
2182
2183         * JavaScriptCore.exp: No longer export JSArray::getItem.
2184
2185         * kjs/ArrayPrototype.cpp:
2186         (KJS::arrayProtoFuncConcat): Changed to use getProperty instead of
2187         JSArray::getItem -- need to handle properties from the prototype chain
2188         instead of ignoring them.
2189
2190         * kjs/JSArray.cpp: Removed getItem.
2191         * kjs/JSArray.h: Ditto.
2192
2193 2008-06-28  Darin Adler  <darin@apple.com>
2194
2195         Reviewed by Cameron.
2196
2197         - https://bugs.webkit.org/show_bug.cgi?id=19804
2198           optimize access to arrays without "holes"
2199
2200         SunSpider says 1.8% faster.
2201
2202         * kjs/JSArray.cpp:
2203         (KJS::JSArray::JSArray): Initialize m_fastAccessCutoff when creating
2204         arrays. Also updated for new location of m_vectorLength.
2205         (KJS::JSArray::getItem): Updated for new location of m_vectorLength.
2206         (KJS::JSArray::getSlowCase): Added. Broke out the non-hot parts of
2207         getOwnPropertySlot to make the hot part faster.
2208         (KJS::JSArray::getOwnPropertySlot): Added a new faster case for
2209         indices lower than m_fastAccessCutoff. We can do theese with no
2210         additional checks or branches.
2211         (KJS::JSArray::put): Added a new faster case for indices lower than
2212         m_fastAccessCutoff. We can do theese with no additional checks or
2213         branches. Moved the maxArrayIndex handling out of this function.
2214         Added code to set m_fastAccessCutoff when the very last hole in
2215         an array is filled; this is how the cutoff gets set for most arrays.
2216         (KJS::JSArray::putSlowCase): Moved the rest of the put function logic
2217         in here, to make the hot part of the put function faster.
2218         (KJS::JSArray::deleteProperty): Added code to lower m_fastAccessCutoff
2219         when a delete makes a new hole in the array.
2220         (KJS::JSArray::getPropertyNames): Updated for new location of
2221         m_vectorLength.
2222         (KJS::JSArray::increaseVectorLength): Ditto.
2223         (KJS::JSArray::setLength): Added code to lower m_fastAccessCutoff
2224         when setLength makes the array smaller.
2225         (KJS::JSArray::mark): Updated for new location of m_vectorLength.
2226         (KJS::JSArray::sort): Ditto. Set m_fastAccessCutoff after moving
2227         all the holes to the end of the array.
2228         (KJS::JSArray::compactForSorting): Ditto.
2229         (KJS::JSArray::checkConsistency): Added consistency checks fro
2230         m_fastAccessCutoff and updated for the new location of m_vectorLength.
2231
2232         * kjs/JSArray.h: Added declarations for slow case functions.
2233         Replaced m_vectorLength with m_fastAccessCutoff.
2234
2235 2008-06-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2236
2237         Reviewed by Sam.
2238
2239         When executing a native call, check for an exception before writing the
2240         return value.
2241
2242         * VM/Machine.cpp:
2243         (KJS::Machine::privateExecute):
2244
2245 2008-06-28  Mark Rowe  <mrowe@apple.com>
2246
2247         Build fix.  Flag headers as private or public as is appropriate.
2248         These settings were accidentally removed during some project file cleanup.
2249
2250         * JavaScriptCore.xcodeproj/project.pbxproj:
2251
2252 2008-06-28  Sam Weinig  <sam@webkit.org>
2253
2254         Rubber-stamped by Darin Adler.
2255
2256         Splits RegExpConstructor and RegExpPrototype out of RegExpObject.h/cpp
2257
2258         * DerivedSources.make:
2259         * GNUmakefile.am:
2260         * JavaScriptCore.pri:
2261         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2262         * JavaScriptCore.xcodeproj/project.pbxproj:
2263         * JavaScriptCoreSources.bkl:
2264         * VM/Machine.cpp:
2265         * kjs/AllInOneFile.cpp:
2266         * kjs/JSGlobalObject.cpp:
2267         * kjs/RegExpConstructor.cpp: Copied from kjs/RegExpObject.cpp.
2268         * kjs/RegExpConstructor.h: Copied from kjs/RegExpObject.h.
2269         * kjs/RegExpObject.cpp:
2270         * kjs/RegExpObject.h:
2271         * kjs/RegExpPrototype.cpp: Copied from kjs/RegExpObject.cpp.
2272         * kjs/RegExpPrototype.h: Copied from kjs/RegExpObject.h.
2273         * kjs/StringPrototype.cpp:
2274         * kjs/internal.cpp:
2275
2276 2008-06-28  Sam Weinig  <sam@webkit.org>
2277
2278         Fix non-AllInOne builds.
2279
2280         * kjs/StringConstructor.cpp:
2281
2282 2008-06-28  Sam Weinig  <sam@webkit.org>
2283
2284         Rubber-stamped by Darin Adler.
2285
2286         Rename string_object.h/cpp to StringObject.h/cpp and split out StringObjectThatMasqueradesAsUndefined,
2287         StringConstructor and StringPrototype.
2288
2289         * DerivedSources.make:
2290         * GNUmakefile.am:
2291         * JavaScriptCore.pri:
2292         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2293         * JavaScriptCore.xcodeproj/project.pbxproj:
2294         * JavaScriptCoreSources.bkl:
2295         * kjs/AllInOneFile.cpp:
2296         * kjs/JSGlobalObject.cpp:
2297         * kjs/StringConstructor.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
2298         * kjs/StringConstructor.h: Copied from JavaScriptCore/kjs/string_object.h.
2299         * kjs/StringObject.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
2300         * kjs/StringObject.h: Copied from JavaScriptCore/kjs/string_object.h.
2301         * kjs/StringObjectThatMasqueradesAsUndefined.h: Copied from JavaScriptCore/kjs/string_object.h.
2302         * kjs/StringPrototype.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
2303         * kjs/StringPrototype.h: Copied from JavaScriptCore/kjs/string_object.h.
2304         * kjs/internal.cpp:
2305         * kjs/string_object.cpp: Removed.
2306         * kjs/string_object.h: Removed.
2307
2308 2008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
2309
2310         Gtk build fix: JSVariableObject is now part of AllInOne
2311
2312         * GNUmakefile.am:
2313
2314 2008-06-28  Darin Adler  <darin@apple.com>
2315
2316         Reviewed by Oliver.
2317
2318         - https://bugs.webkit.org/show_bug.cgi?id=19801
2319           add a feature so we can tell what regular expressions are taking time
2320
2321         * pcre/pcre_compile.cpp:
2322         (jsRegExpCompile): Compile in the string if REGEXP_HISTOGRAM is on.
2323
2324         * pcre/pcre_exec.cpp:
2325         (jsRegExpExecute): Add hook to time execution.
2326         (Histogram::~Histogram): Print a sorted list of what took time.
2327         (Histogram::add): Accumulate records of what took time.
2328         (HistogramTimeLogger::~HistogramTimeLogger): Hook that calls
2329         Histogram::add at the right moment and creates the global histogram
2330         object.
2331
2332         * pcre/pcre_internal.h: Define REGEXP_HISTOGRAM.
2333
2334         * pcre/pcre_tables.cpp: Added missing include of "config.h". Not needed
2335         any more, but an omissions an earlier version of this patch detected.
2336         * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
2337         * pcre/pcre_xclass.cpp: Ditto.
2338
2339 2008-06-28  Sam Weinig  <sam@webkit.org>
2340
2341         Try and fix the Windows build again.
2342
2343         * kjs/RegExpObject.cpp:
2344         * kjs/date_object.cpp:
2345         * kjs/error_object.cpp:
2346
2347 2008-06-28  Sam Weinig  <sam@webkit.org>
2348
2349         Rubber-stamped by Darin Adler.
2350
2351         Remove unused StringConstructorFunction class.
2352
2353         * kjs/string_object.h:
2354
2355 2008-06-28  Sam Weinig  <sam@webkit.org>
2356
2357         Fix windows build.
2358
2359         * kjs/ArrayPrototype.cpp:
2360         * kjs/BooleanPrototype.cpp:
2361         * kjs/BooleanPrototype.h:
2362         * kjs/FunctionPrototype.cpp:
2363         * kjs/JSImmediate.cpp:
2364         * kjs/JSObject.cpp:
2365         * kjs/MathObject.cpp:
2366         * kjs/NumberPrototype.cpp:
2367         * kjs/NumberPrototype.h:
2368         * kjs/ObjectConstructor.cpp:
2369         * kjs/RegExpObject.h:
2370         * kjs/error_object.h:
2371         * kjs/string_object.cpp:
2372
2373 2008-06-28  Sam Weinig  <sam@webkit.org>
2374
2375         Rubber-stamped by Oliver Hunt.
2376
2377         Splits FunctionConstructor out of FunctionPrototype.h/cpp
2378         Splits NumberConstructor and NumberPrototype out of NumberObject.h/cpp
2379         Rename object_object.h/cpp to ObjectPrototype.h/cpp and split out ObjectConstructor.
2380
2381         * API/JSCallbackConstructor.cpp:
2382         * API/JSClassRef.cpp:
2383         * API/JSObjectRef.cpp:
2384         * DerivedSources.make:
2385         * GNUmakefile.am:
2386         * JavaScriptCore.pri:
2387         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2388         * JavaScriptCore.xcodeproj/project.pbxproj:
2389         * JavaScriptCoreSources.bkl:
2390         * VM/Machine.cpp:
2391         * kjs/AllInOneFile.cpp:
2392         * kjs/ArrayConstructor.cpp:
2393         * kjs/ArrayConstructor.h:
2394         * kjs/FunctionConstructor.cpp: Copied from JavaScriptCore/kjs/FunctionPrototype.cpp.
2395         * kjs/FunctionConstructor.h: Copied from JavaScriptCore/kjs/FunctionPrototype.h.
2396         * kjs/FunctionPrototype.cpp:
2397         * kjs/FunctionPrototype.h:
2398         * kjs/JSFunction.cpp:
2399         * kjs/JSGlobalObject.cpp:
2400         * kjs/JSImmediate.cpp:
2401         * kjs/MathObject.h:
2402         * kjs/NumberConstructor.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
2403         * kjs/NumberConstructor.h: Copied from JavaScriptCore/kjs/NumberObject.h.
2404         * kjs/NumberObject.cpp:
2405         * kjs/NumberObject.h:
2406         * kjs/NumberPrototype.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
2407         * kjs/NumberPrototype.h: Copied from JavaScriptCore/kjs/NumberObject.h.
2408         * kjs/ObjectConstructor.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
2409         * kjs/ObjectConstructor.h: Copied from JavaScriptCore/kjs/object_object.h.
2410         * kjs/ObjectPrototype.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
2411         * kjs/ObjectPrototype.h: Copied from JavaScriptCore/kjs/object_object.h.
2412         * kjs/RegExpObject.h:
2413         * kjs/Shell.cpp:
2414         * kjs/error_object.h:
2415         * kjs/internal.cpp:
2416         * kjs/nodes.cpp:
2417         * kjs/object_object.cpp: Removed.
2418         * kjs/object_object.h: Removed.
2419         * kjs/string_object.h:
2420
2421 2008-06-28  Darin Adler  <darin@apple.com>
2422
2423         Reviewed by Oliver.
2424
2425         - fix https://bugs.webkit.org/show_bug.cgi?id=19796
2426           optimize expressions with ignored results (especially post-increment)
2427
2428         SunSpider says 0.9% faster.
2429
2430         * VM/CodeGenerator.h:
2431         (KJS::CodeGenerator::tempDestination): Create a new temporary for
2432         ignoredResult() too, just as we would for 0.
2433         (KJS::CodeGenerator::finalDestination): Use the temporary if the
2434         register passed in is ignoredResult() too, just as we would for 0.
2435         (KJS::CodeGenerator::destinationForAssignResult): Return 0 if the
2436         passed in register is ignoredResult(), just as we would for 0.
2437         (KJS::CodeGenerator::moveToDestinationIfNeeded): Return 0 if the
2438         register passed in is ignoredResult(). What matters is that we
2439         don't want to emit a move. The return value won't be looked at.
2440         (KJS::CodeGenerator::emitNode): Allow ignoredResult() and pass it
2441         through to the node's emitCode function.
2442
2443         * VM/RegisterID.h:
2444         (KJS::ignoredResult): Added. Special value to indicate the result of
2445         a node will be ignored and need not be put in any register.
2446
2447         * kjs/nodes.cpp:
2448         (KJS::NullNode::emitCode): Do nothing if dst == ignoredResult().
2449         (KJS::BooleanNode::emitCode): Ditto.
2450         (KJS::NumberNode::emitCode): Ditto.
2451         (KJS::StringNode::emitCode): Ditto.
2452         (KJS::RegExpNode::emitCode): Ditto.
2453         (KJS::ThisNode::emitCode): Ditto.
2454         (KJS::ResolveNode::emitCode): Do nothing if dst == ignoredResult() and
2455         the identifier resolves to a local variable.
2456         (KJS::ObjectLiteralNode::emitCode): Do nothing if dst == ignoredResult()
2457         and the object is empty.
2458         (KJS::PostIncResolveNode::emitCode): If dst == ignoredResult(), then do
2459         nothing for the local constant case, and do a pre-increment in all the
2460         other cases.
2461         (KJS::PostDecResolveNode::emitCode): Ditto.
2462         (KJS::PostIncBracketNode::emitCode): Ditto.
2463         (KJS::PostDecBracketNode::emitCode): Ditto.
2464         (KJS::PostIncDotNode::emitCode): Ditto.
2465         (KJS::PostDecDotNode::emitCode): Ditto.
2466         (KJS::DeleteValueNode::emitCode): Pass ignoredResult() when evaluating
2467         the expression.
2468         (KJS::VoidNode::emitCode): Ditto.
2469         (KJS::TypeOfResolveNode::emitCode): If dst == ignoredResult(), do nothing
2470         if the identifier resolves to a local variable, and don't bother generating
2471         a typeof opcode in the other case.
2472         (KJS::TypeOfValueNode::emitCode): Ditto.
2473         (KJS::PreIncResolveNode::emitCode): Do nothing if dst == ignoredResult() and
2474         the identifier resolves to a local constant.
2475         (KJS::PreDecResolveNode::emitCode): Ditto.
2476         (KJS::AssignResolveNode::emitCode): Turn ignoredResult() into 0 in a couple
2477         places, because we need to put the result into a register so we can assign
2478         it. At other sites this is taken care of by functions like finalDestination.
2479         (KJS::CommaNode::emitCode): Pass ignoredResult() when evaluating the first
2480         expression.
2481         (KJS::ForNode::emitCode): Pass ignoredResult() when evaluating the first and
2482         third expressions.
2483         (KJS::ForInNode::emitCode): Pass ignoredResult() when evaluating the first
2484         expression.
2485
2486 2008-06-28  Darin Adler  <darin@apple.com>
2487
2488         Reviewed by Oliver.
2489
2490         - https://bugs.webkit.org/show_bug.cgi?id=19787
2491           create most arrays from values in registers rather than with multiple put operations
2492
2493         SunSpider says 0.8% faster.
2494
2495         * VM/CodeBlock.cpp:
2496         (KJS::CodeBlock::dump): Added argv and argc parameters to new_array.
2497         * VM/Machine.cpp:
2498         (KJS::Machine::privateExecute): Ditto.
2499
2500         * VM/CodeGenerator.cpp:
2501         (KJS::CodeGenerator::emitNewArray): Added.
2502         * VM/CodeGenerator.h: Added ElementNode* argument to emitNewArray.
2503
2504         * kjs/nodes.cpp:
2505         (KJS::ArrayNode::emitCode): Pass the ElementNode to emitNewArray so it can be
2506         initialized with as many elements as possible. If the array doesn't have any
2507         holes in it, that's all that's needed. If there are holes, then emit some separate
2508         put operations for the other values in the array and for the length as needed.
2509
2510         * kjs/nodes.h: Added some accessors to ElementNode so the code generator can
2511         iterate through elements and generate code to evaluate them. Now ArrayNode does
2512         not need to be a friend. Also took out some unused PlacementNewAdoptType
2513         constructors.
2514
2515 2008-06-28  Darin Adler  <darin@apple.com>
2516
2517         Reviewed by Oliver.
2518
2519         * kjs/nodes.h: Remove obsolete PlacementNewAdopt constructors.
2520         We no longer mutate the AST in place.
2521
2522 2008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
2523
2524         Reviewed by Oliver Hunt.
2525
2526         Build fix
2527
2528         * VM/Machine.cpp: include stdio.h for printf
2529
2530 2008-06-27  Sam Weinig  <sam@webkit.org>
2531
2532         Reviewed by Oliver Hunt.
2533
2534         Fix platforms that don't use AllInOne.cpp
2535
2536         * kjs/BooleanConstructor.h:
2537         * kjs/BooleanPrototype.h:
2538         * kjs/FunctionPrototype.cpp:
2539
2540 2008-06-27  Sam Weinig  <sam@webkit.org>
2541
2542         Rubber-stamped by Oliver Hunt.
2543
2544         Splits ArrayConstructor out of ArrayPrototype.h/cpp
2545         Splits BooleanConstructor and BooleanPrototype out of BooleanObject.h/cpp
2546
2547         * GNUmakefile.am:
2548         * JavaScriptCore.pri:
2549         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2550         * JavaScriptCore.xcodeproj/project.pbxproj:
2551         * JavaScriptCoreSources.bkl:
2552         * VM/Machine.cpp:
2553         * kjs/AllInOneFile.cpp:
2554         * kjs/ArrayConstructor.cpp: Copied from kjs/ArrayPrototype.cpp.
2555         * kjs/ArrayConstructor.h: Copied from kjs/ArrayPrototype.h.
2556         * kjs/ArrayPrototype.cpp:
2557         * kjs/ArrayPrototype.h:
2558         * kjs/BooleanConstructor.cpp: Copied from kjs/BooleanObject.cpp.
2559         * kjs/BooleanConstructor.h: Copied from kjs/BooleanObject.h.
2560         * kjs/BooleanObject.cpp:
2561         * kjs/BooleanObject.h:
2562         * kjs/BooleanPrototype.cpp: Copied from kjs/BooleanObject.cpp.
2563         * kjs/BooleanPrototype.h: Copied from kjs/BooleanObject.h.
2564         * kjs/CommonIdentifiers.h:
2565         * kjs/FunctionPrototype.cpp:
2566         * kjs/JSArray.cpp:
2567         * kjs/JSGlobalObject.cpp:
2568         * kjs/JSImmediate.cpp:
2569         * kjs/Shell.cpp:
2570         * kjs/internal.cpp:
2571         * kjs/nodes.cpp:
2572         * kjs/string_object.cpp:
2573
2574 2008-06-27  Oliver Hunt  <oliver@apple.com>
2575
2576         Reviewed by Sam.
2577
2578         Bug 18626: SQUIRRELFISH: support the "slow script" dialog <https://bugs.webkit.org/show_bug.cgi?id=18626>
2579         <rdar://problem/5973931> Slow script dialog needs to be reimplemented for squirrelfish
2580
2581         Adds support for the slow script dialog in squirrelfish.  This requires the addition
2582         of three new op codes, op_loop, op_loop_if_true, and op_loop_if_less which have the
2583         same behaviour as their simple jump equivalents but have an additional time out check.
2584
2585         Additional assertions were added to other jump instructions to prevent accidentally
2586         creating loops with jump types that do not support time out checks.
2587
2588         Sunspider does not report a regression, however this appears very sensitive to code
2589         layout and hardware, so i would expect up to a 1% regression on other systems.
2590
2591         Part of this required moving the old timeout logic from JSGlobalObject and into Machine
2592         which is the cause of a number of the larger diff blocks.
2593
2594         * JavaScriptCore.exp:
2595         * VM/CodeBlock.cpp:
2596         (KJS::CodeBlock::dump):
2597         * VM/CodeGenerator.cpp:
2598         (KJS::CodeGenerator::emitJumpIfTrue):
2599         (KJS::CodeGenerator::emitJumpScopes):
2600         * VM/ExceptionHelpers.cpp:
2601         (KJS::InterruptedExecutionError::isWatchdogException):
2602         (KJS::createInterruptedExecutionException):
2603         * VM/ExceptionHelpers.h:
2604         * VM/LabelID.h:
2605         * VM/Machine.cpp:
2606         (KJS::Machine::Machine):
2607         (KJS::Machine::throwException):
2608         (KJS::Machine::resetTimeoutCheck):
2609         (KJS::getCurrentTime):
2610         (KJS::Machine::checkTimeout):
2611         (KJS::Machine::privateExecute):
2612         * VM/Machine.h:
2613         (KJS::Machine::setTimeoutTime):
2614         (KJS::Machine::startTimeoutCheck):
2615         (KJS::Machine::stopTimeoutCheck):
2616         (KJS::Machine::initTimeout):
2617         * VM/Opcode.cpp:
2618         (KJS::):
2619         * VM/Opcode.h:
2620         * kjs/JSGlobalObject.cpp:
2621         (KJS::JSGlobalObject::init):
2622         (KJS::JSGlobalObject::setTimeoutTime):
2623         (KJS::JSGlobalObject::startTimeoutCheck):
2624         * kjs/JSGlobalObject.h:
2625         * kjs/JSObject.h:
2626         * kjs/interpreter.cpp:
2627         (KJS::Interpreter::evaluate):
2628
2629 2008-06-27  Jan Michael Alonzo  <jmalonzo@webkit.org>
2630
2631         Gtk and Qt build fix: Remove RegisterFileStack from the build
2632         scripts.
2633
2634         * GNUmakefile.am:
2635         * JavaScriptCore.pri:
2636
2637 2008-06-27  Adele Peterson  <adele@apple.com>
2638
2639         Reviewed by Geoff.
2640
2641         Build fixes. 
2642
2643         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2644         * VM/RegisterFile.h:
2645         (KJS::RegisterFile::RegisterFile):
2646         * kjs/JSGlobalObject.cpp:
2647         * kjs/collector.cpp:
2648
2649 2008-06-27  Geoffrey Garen  <ggaren@apple.com>
2650
2651         Reviewed by Oliver Hunt.
2652         
2653         One RegisterFile to rule them all!
2654         
2655         SunSpider reports a 0.2% speedup.
2656
2657         This patch removes the RegisterFileStack abstraction and replaces it with
2658         a single register file that
2659         
2660         (a) allocates a fixed storage area, including a fixed area for global
2661         vars, so that no operation may cause the register file to reallocate
2662         
2663         and
2664
2665         (b) swaps between global storage areas when executing code in different 
2666         global objects.
2667         
2668         This patch also changes the layout of the register file so that all call
2669         frames, including call frames for global code, get a header. This is
2670         required to support re-entrant global code. It also just makes things simpler.
2671         
2672         * VM/CodeGenerator.cpp:
2673         (KJS::CodeGenerator::addGlobalVar): New function. Differs from addVar in
2674         that
2675         
2676         (a) global vars don't contribute to a CodeBlock's numLocals count, since
2677         global storage is fixed and allocated at startup
2678         
2679         and
2680         
2681         (b) references to global vars get shifted to elide intermediate stack
2682         between "r" and the global storage area.
2683         
2684         * VM/Machine.cpp:
2685         (KJS::Machine::dumpRegisters): Updated this function to match the new
2686         register file layout, and added the ability to dump exact identifiers
2687         for the different parts of a call frame.
2688         
2689         (KJS::Machine::unwindCallFrame): Updated this function to match the new
2690         register file layout.
2691          
2692         (KJS::Machine::execute): Updated this function to initialize a call frame
2693         header for global code, and to swap global storage areas when switching
2694         to execution in a new global object.
2695         
2696         (KJS::Machine::privateExecute): Got rid of "safeForReentry" and re-reading
2697         of registerBase because the register file is always safe for reentry now,
2698         and registerBase never changes.
2699         
2700         * VM/Machine.h: Moved the call frame header enum from Machine to RegisterFile,
2701         to resolve a header dependency problem (a good sign that the enum belonged
2702         in RegisterFile all along!)
2703
2704         * VM/RegisterFile.cpp:
2705         * VM/RegisterFile.h: Changed RegisterFile to mmap a fixed size register
2706         area. This allows us to avoid re-allocting the register file later on.
2707         Instead, we rely on the OS to allocate physical pages to the register
2708         file as necessary.
2709
2710         * VM/RegisterFileStack.cpp: Removed. Tada!
2711         * VM/RegisterFileStack.h: Removed. Tada!
2712
2713         * kjs/DebuggerCallFrame.cpp: Updated this class to match the new
2714         register file layout, greatly simplifying it in the process.
2715
2716         * kjs/JSActivation.h:
2717         * kjs/JSActivation.cpp: Moved some of this logic up to JSVariableObject,
2718         since the global object now needs to be able to tear off its registers
2719         just like the activation object.
2720
2721         * kjs/JSFunction.cpp: No need to fiddle with the register file anymore.
2722
2723         * kjs/JSGlobalObject.h:
2724         * kjs/JSGlobalObject.cpp: Updated JSGlobalObject to support moving its
2725         global storage area into and out of the register file.
2726
2727         * kjs/PropertySlot.cpp: No need to fiddle with the register file anymore.
2728
2729         * kjs/collector.cpp: Renamed markStackObjectConservatively to
2730         markConservatively, since we don't just mark stack objects this way.
2731         
2732         Also, added code to mark the machine's register file.
2733
2734         * kjs/config.h: Moved some platforms #defines from here...
2735         * wtf/Platform.h: ...to here, to support mmap/VirtualAlloc detection
2736         in RegisterFile.h.
2737
2738 2008-06-26  Mark Rowe  <mrowe@apple.com>
2739
2740         Speculative fix for the Windows build.
2741
2742         * kjs/JSImmediate.cpp:
2743
2744 2008-06-26  Mark Rowe  <mrowe@apple.com>
2745
2746         Reviewed by Darin Adler and Geoff Garen.
2747
2748         Fix the malloc zone introspection functions so that malloc_zone_statistics does not give
2749         bogus output in an application that uses JavaScriptCore.
2750
2751         * kjs/CollectorHeapIntrospector.cpp:
2752         (KJS::CollectorHeapIntrospector::statistics): Return statistics about memory allocated by the collector.
2753         * kjs/CollectorHeapIntrospector.h:
2754         * wtf/FastMalloc.cpp: Zero out the statistics.  FastMalloc doesn't track this information at present.
2755         Returning zero for all values is preferable to returning bogus data.
2756
2757 2008-06-26  Darin Adler  <darin@apple.com>
2758
2759         Reviewed by Geoff.
2760
2761         - https://bugs.webkit.org/show_bug.cgi?id=19721
2762           speed up JavaScriptCore by not wrapping strings in objects just
2763           to call functions on them
2764
2765         - optimize UString append and the replace function a bit
2766
2767         SunSpider says 1.8% faster.
2768
2769         * JavaScriptCore.exp: Updated.
2770
2771         * VM/JSPropertyNameIterator.cpp: Added include of JSString.h, now needed
2772         because jsString returns a JSString*.
2773
2774         * VM/Machine.cpp:
2775         (KJS::Machine::privateExecute): Removed the toObject call from native
2776         function calls. Also removed code to put the this value into a register.
2777
2778         * kjs/BooleanObject.cpp:
2779         (KJS::booleanProtoFuncToString): Rewrite to handle false and true
2780         separately.
2781
2782         * kjs/FunctionPrototype.cpp:
2783         (KJS::constructFunction): Use single-character append rather than building
2784         a string for each character.
2785         * kjs/JSFunction.cpp:
2786         (KJS::globalFuncUnescape): Ditto.
2787
2788         * kjs/JSImmediate.cpp:
2789         (KJS::JSImmediate::prototype): Added. Gets the appropriate prototype for
2790         use with an immediate value. To be used instead of toObject when doing a
2791         get on an immediate value.
2792         * kjs/JSImmediate.h: Added prototype.
2793
2794         * kjs/JSObject.cpp:
2795         (KJS::JSObject::toString): Tweaked formatting.
2796
2797         * kjs/JSObject.h:
2798         (KJS::JSValue::get): Use prototype instead of toObject to avoid creating
2799         an object wrapper just to search for properties. This also saves an
2800         unnecessary hash table lookup since the object wrappers themselves don't
2801         have any properties.
2802
2803         * kjs/JSString.h: Added toThisString and toThisJSString.
2804
2805         * kjs/JSValue.cpp:
2806         (KJS::JSCell::toThisString): Added.
2807         (KJS::JSCell::toThisJSString): Added.
2808         (KJS::JSCell::getJSNumber): Added.
2809         (KJS::jsString): Changed return type to JSString*.
2810         (KJS::jsOwnedString): Ditto.
2811
2812         * kjs/JSValue.h:
2813         (KJS::JSValue::toThisString): Added.
2814         (KJS::JSValue::toThisJSString): Added.
2815         (KJS::JSValue::getJSNumber): Added.
2816
2817         * kjs/NumberObject.cpp:
2818         (KJS::NumberObject::getJSNumber): Added.
2819         (KJS::integer_part_noexp): Append C string directly rather than first
2820         turning it into a UString.
2821         (KJS::numberProtoFuncToString): Use getJSNumber to check if the value
2822         is a number rather than isObject(&NumberObject::info). This works for
2823         immediate numbers, number cells, and NumberObject instances.
2824         (KJS::numberProtoFuncToLocaleString): Ditto.
2825         (KJS::numberProtoFuncValueOf): Ditto.
2826         (KJS::numberProtoFuncToFixed): Ditto.
2827         (KJS::numberProtoFuncToExponential): Ditto.
2828         (KJS::numberProtoFuncToPrecision): Ditto.
2829         * kjs/NumberObject.h: Added getJSNumber.
2830
2831         * kjs/PropertySlot.cpp: Tweaked comment.
2832
2833         * kjs/internal.cpp:
2834         (KJS::JSString::toThisString): Added.
2835         (KJS::JSString::toThisJSString): Added.
2836         (KJS::JSString::getOwnPropertySlot): Changed code that searches the
2837         prototype chain to start with the string prototype and not create a
2838         string object.
2839         (KJS::JSNumberCell::toThisString): Added.
2840         (KJS::JSNumberCell::getJSNumber): Added.
2841
2842         * kjs/lookup.cpp:
2843         (KJS::staticFunctionGetter): Moved here, because there's no point in
2844         having a function that's only used for a function pointer be inline.
2845         (KJS::setUpStaticFunctionSlot): New function for getStaticFunctionSlot.
2846
2847         * kjs/lookup.h:
2848         (KJS::staticValueGetter): Don't mark this inline. It doesn't make sense
2849         to have a function that's only used for a function pointer be inline.
2850         (KJS::getStaticFunctionSlot): Changed to get properties from the parent
2851         first before doing any handling of functions. This is the fastest way
2852         to return the function once the initial setup is done.
2853
2854         * kjs/string_object.cpp:
2855         (KJS::StringObject::getPropertyNames): Call value() instead of getString(),
2856         avoiding an unnecessary virtual function call (the call to the type()
2857         function in the implementation of the isString() function).
2858         (KJS::StringObject::toString): Added.
2859         (KJS::StringObject::toThisString): Added.
2860         (KJS::StringObject::toThisJSString): Added.
2861         (KJS::substituteBackreferences): Rewrote to use a appending algorithm
2862         instead of a the old one that tried to replace in place.
2863         (KJS::stringProtoFuncReplace): Merged this function and the replace function.
2864         Replaced the hand-rolled dynamic arrays for source ranges and replacements
2865         with Vector.
2866         (KJS::stringProtoFuncToString): Handle JSString as well as StringObject.
2867         Removed the separate valueOf implementation, since it can just share this.
2868         (KJS::stringProtoFuncCharAt): Use toThisString, which handles JSString as
2869         well as StringObject, and is slightly more efficient than the old code too.
2870         (KJS::stringProtoFuncCharCodeAt): Ditto.
2871         (KJS::stringProtoFuncConcat): Ditto.
2872         (KJS::stringProtoFuncIndexOf): Ditto.
2873         (KJS::stringProtoFuncLastIndexOf): Ditto.
2874         (KJS::stringProtoFuncMatch): Ditto.
2875         (KJS::stringProtoFuncSearch): Ditto.
2876         (KJS::stringProtoFuncSlice): Ditto.
2877         (KJS::stringProtoFuncSplit): Ditto.
2878         (KJS::stringProtoFuncSubstr): Ditto.
2879         (KJS::stringProtoFuncSubstring): Ditto.
2880         (KJS::stringProtoFuncToLowerCase): Use toThisJSString.
2881         (KJS::stringProtoFuncToUpperCase): Ditto.
2882         (KJS::stringProtoFuncToLocaleLowerCase): Ditto.
2883         (KJS::stringProtoFuncToLocaleUpperCase): Ditto.
2884         (KJS::stringProtoFuncLocaleCompare): Ditto.
2885         (KJS::stringProtoFuncBig): Use toThisString.
2886         (KJS::stringProtoFuncSmall): Ditto.
2887         (KJS::stringProtoFuncBlink): Ditto.
2888         (KJS::stringProtoFuncBold): Ditto.
2889         (KJS::stringProtoFuncFixed): Ditto.
2890         (KJS::stringProtoFuncItalics): Ditto.
2891         (KJS::stringProtoFuncStrike): Ditto.
2892         (KJS::stringProtoFuncSub): Ditto.
2893         (KJS::stringProtoFuncSup): Ditto.
2894         (KJS::stringProtoFuncFontcolor): Ditto.
2895         (KJS::stringProtoFuncFontsize): Ditto.
2896         (KJS::stringProtoFuncAnchor): Ditto.
2897         (KJS::stringProtoFuncLink): Ditto.
2898
2899         * kjs/string_object.h: Added toString, toThisString, and toThisJSString.
2900
2901         * kjs/ustring.cpp:
2902         (KJS::UString::append): Added a version that takes a character pointer and
2903         size, so we don't have to create a UString just to append to another UString.
2904         * kjs/ustring.h:
2905
2906 2008-06-26  Alexey Proskuryakov  <ap@webkit.org>
2907
2908         Reviewed by Maciej.
2909
2910         Make JSGlobalData per-thread.
2911
2912         No change on SunSpider total.
2913
2914         * wtf/ThreadSpecific.h: Re-enabled the actual implementation.
2915
2916         * kjs/JSGlobalObject.cpp:
2917         (KJS::JSGlobalObject::~JSGlobalObject): Re-added a JSLock-related assertion. We'll probably
2918         want to preserve these somehow to keep legacy behavior in working condition.
2919         (KJS::JSGlobalObject::init): Initialize globalData pointer earlier, so that it is ready
2920         when updating JSGlobalObject linked list.
2921
2922         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::head): Changed head() to be non-static, and
2923         to use JSGlobalData associated with the current object.
2924
2925         * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Removed a no longer needed
2926         Heap::registerAsMainThread() call.
2927
2928         * kjs/JSGlobalData.h: Removed a lying lie comment - parserObjectExtraRefCounts is not
2929         transient, and while newParserObjects may conceptually be such, there is still some node
2930         manipulation going on outside Parser::parse which touches it.
2931
2932         * kjs/JSGlobalData.cpp:
2933         (KJS::JSGlobalData::~JSGlobalData): Delete recently added members.
2934         (KJS::JSGlobalData::sharedInstance): Actually use a separate instance.
2935
2936         * kjs/collector.cpp:
2937         (KJS::Heap::Heap):
2938         (KJS::Heap::~Heap): Added a destructor, which unconditionally deletes everything.
2939         (KJS::Heap::sweep): Removed code related to "collect on main thread only" logic.
2940         (KJS::Heap::collect): Ditto.
2941         (KJS::Heap::globalObjectCount): Explicitly use per-thread instance of JSGlobalObject linked
2942         list now that JSGlobalObject::head() is not static. Curently, WebCoreStatistics methods only
2943         work with the main thread currently anyway.
2944         (KJS::Heap::protectedGlobalObjectCount): Ditto.
2945
2946         * kjs/collector.h: Removed code related to "collect on main thread only" logic.
2947
2948         * JavaScriptCore.exp: Removed Heap::collectOnMainThreadOnly.
2949
2950 2008-06-26  Alexey Proskuryakov  <ap@webkit.org>
2951
2952         Reviewed by Darin.
2953
2954         https://bugs.webkit.org/show_bug.cgi?id=19767
2955         REGRESSION: Crash in sort() when visiting http://www.onnyturf.com/subway/
2956
2957         * kjs/JSArray.cpp: (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
2958         Made changing balance factor from -1 to +1 work correctly.
2959
2960         * wtf/AVLTree.h: (KJS::AVLTreeDefaultBSet::operator[]): Added an assertion that catches
2961         this slightly earlier.
2962
2963 2008-06-25  Timothy Hatcher  <timothy@apple.com>
2964
2965         Fixes an ASSERT in the profiler when starting multiple profiles
2966         with the same name inside the same function/program.
2967
2968         Reviewed by Kevin McCullough.
2969
2970         * profiler/Profile.cpp:
2971         (KJS::Profile::Profile): Initialize m_stoppedCallDepth to zero.
2972         (KJS::Profile::stopProfiling): Set the current node to the parent,
2973         because we are in a call that will not get a didExecute call.
2974         (KJS::Profile::removeProfile): Increment m_stoppedCallDepth to
2975         account for didExecute not being called for profile.
2976         (KJS::Profile::willExecute): Increment m_stoppedCallDepth if stopped.
2977         (KJS::Profile::didExecute): Decrement m_stoppedCallDepth if stopped and
2978         greater than zero, and return early.
2979         * profiler/Profile.h: Added stoppedProfiling().
2980         * profiler/Profiler.cpp:
2981         (KJS::Profiler::findProfile): Removed.
2982         (KJS::Profiler::startProfiling): Don't return early for stopped profiles.
2983         (KJS::Profiler::stopProfiling): Skipp stopped profiles.
2984         (KJS::Profiler::didFinishAllExecution): Code clean-up.
2985         * profiler/Profiler.h: Removed findProfile.
2986
2987 2008-06-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2988
2989         Reviewed by Alexey Proskuryakov.
2990
2991         Attempt to fix Windows debug build. The compiler gives a warning when
2992         Structured Exception Handling and destructors are used in the same
2993         function. Using manual locking and unlocking instead of constructors
2994         and destructors should fix the warning.
2995
2996         * kjs/Shell.cpp:
2997         (main):
2998
2999 2008-06-25  Alexey Proskuryakov  <ap@webkit.org>
3000
3001         Forgot to address a review comment about better names for tracked objects, doing it now.
3002
3003         * kjs/JSGlobalData.cpp:
3004         (KJS::JSGlobalData::JSGlobalData):
3005         * kjs/JSGlobalData.h:
3006         * kjs/nodes.cpp:
3007         (KJS::ParserRefCounted::ParserRefCounted):
3008         (KJS::ParserRefCounted::ref):
3009         (KJS::ParserRefCounted::deref):
3010         (KJS::ParserRefCounted::hasOneRef):
3011         (KJS::ParserRefCounted::deleteNewObjects):
3012
3013 2008-06-25  Alexey Proskuryakov  <ap@webkit.org>
3014
3015         Reviewed by Geoff.
3016
3017         Remove more threadInstance() calls.
3018
3019         * kjs/JSFunction.cpp:
3020         (KJS::JSFunction::getParameterName):
3021         (KJS::IndexToNameMap::unMap):
3022         (KJS::Arguments::deleteProperty):
3023         * kjs/JSFunction.h:
3024         Access nullIdentifier without going to thread specific storage.
3025
3026         * JavaScriptCore.exp:
3027         * kjs/JSGlobalData.cpp:
3028         (KJS::JSGlobalData::JSGlobalData):
3029         * kjs/JSGlobalData.h:
3030         * kjs/Parser.cpp:
3031         (KJS::Parser::parse):
3032         * kjs/Parser.h:
3033         (KJS::ParserRefCountedData::ParserRefCountedData):
3034         (KJS::Parser::parse):
3035         * kjs/grammar.y:
3036         * kjs/nodes.cpp:
3037         (KJS::ParserRefCounted::ParserRefCounted):
3038         (KJS::ParserRefCounted::ref):
3039         (KJS::ParserRefCounted::deref):
3040         (KJS::ParserRefCounted::hasOneRef):
3041         (KJS::ParserRefCounted::deleteNewObjects):
3042         (KJS::Node::Node):
3043         (KJS::StatementNode::StatementNode):
3044         (KJS::BreakpointCheckStatement::BreakpointCheckStatement):
3045         (KJS::ConstDeclNode::ConstDeclNode):
3046         (KJS::BlockNode::BlockNode):
3047         (KJS::ForInNode::ForInNode):
3048         (KJS::ScopeNode::ScopeNode):
3049         (KJS::ProgramNode::ProgramNode):
3050         (KJS::ProgramNode::create):
3051         (KJS::EvalNode::EvalNode):
3052         (KJS::EvalNode::create):
3053         (KJS::FunctionBodyNode::FunctionBodyNode):
3054         (KJS::FunctionBodyNode::create):
3055         * kjs/nodes.h:
3056         (KJS::ExpressionNode::):
3057         (KJS::NullNode::):
3058         (KJS::BooleanNode::):
3059         (KJS::NumberNode::):
3060         (KJS::ImmediateNumberNode::):
3061         (KJS::StringNode::):
3062         (KJS::RegExpNode::):
3063         (KJS::ThisNode::):
3064         (KJS::ResolveNode::):
3065         (KJS::ElementNode::):
3066         (KJS::ArrayNode::):
3067         (KJS::PropertyNode::):
3068         (KJS::PropertyListNode::):
3069         (KJS::ObjectLiteralNode::):
3070         (KJS::BracketAccessorNode::):
3071         (KJS::DotAccessorNode::):
3072         (KJS::ArgumentListNode::):
3073         (KJS::ArgumentsNode::):
3074         (KJS::NewExprNode::):
3075         (KJS::EvalFunctionCallNode::):
3076         (KJS::FunctionCallValueNode::):
3077         (KJS::FunctionCallResolveNode::):
3078         (KJS::FunctionCallBracketNode::):
3079         (KJS::FunctionCallDotNode::):
3080         (KJS::PrePostResolveNode::):
3081         (KJS::PostIncResolveNode::):
3082         (KJS::PostDecResolveNode::):
3083         (KJS::PostfixBracketNode::):
3084         (KJS::PostIncBracketNode::):
3085         (KJS::PostDecBracketNode::):
3086         (KJS::PostfixDotNode::):
3087         (KJS::PostIncDotNode::):
3088         (KJS::PostDecDotNode::):
3089         (KJS::PostfixErrorNode::):
3090         (KJS::DeleteResolveNode::):
3091         (KJS::DeleteBracketNode::):
3092         (KJS::DeleteDotNode::):
3093         (KJS::DeleteValueNode::):
3094         (KJS::VoidNode::):
3095         (KJS::TypeOfResolveNode::):
3096         (KJS::TypeOfValueNode::):
3097         (KJS::PreIncResolveNode::):
3098         (KJS::PreDecResolveNode::):
3099         (KJS::PrefixBracketNode::):
3100         (KJS::PreIncBracketNode::):
3101         (KJS::PreDecBracketNode::):
3102         (KJS::PrefixDotNode::):
3103         (KJS::PreIncDotNode::):
3104         (KJS::PreDecDotNode::):
3105         (KJS::PrefixErrorNode::):
3106         (KJS::UnaryOpNode::UnaryOpNode):
3107         (KJS::UnaryPlusNode::):
3108         (KJS::NegateNode::):
3109         (KJS::BitwiseNotNode::):
3110         (KJS::LogicalNotNode::):
3111         (KJS::BinaryOpNode::BinaryOpNode):
3112         (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
3113         (KJS::MultNode::):
3114         (KJS::DivNode::):
3115         (KJS::ModNode::):
3116         (KJS::AddNode::):
3117         (KJS::SubNode::):
3118         (KJS::LeftShiftNode::):
3119         (KJS::RightShiftNode::):
3120         (KJS::UnsignedRightShiftNode::):
3121         (KJS::LessNode::):
3122         (KJS::GreaterNode::):
3123         (KJS::LessEqNode::):
3124         (KJS::GreaterEqNode::):
3125         (KJS::InstanceOfNode::):
3126         (KJS::InNode::):
3127         (KJS::EqualNode::):
3128         (KJS::NotEqualNode::):
3129         (KJS::StrictEqualNode::):
3130         (KJS::NotStrictEqualNode::):
3131         (KJS::BitAndNode::):
3132         (KJS::BitOrNode::):
3133         (KJS::BitXOrNode::):
3134         (KJS::LogicalAndNode::):
3135         (KJS::LogicalOrNode::):
3136         (KJS::ConditionalNode::):
3137         (KJS::ReadModifyResolveNode::):
3138         (KJS::AssignResolveNode::):
3139         (KJS::ReadModifyBracketNode::):
3140         (KJS::AssignBracketNode::):
3141         (KJS::AssignDotNode::):
3142         (KJS::ReadModifyDotNode::):
3143         (KJS::AssignErrorNode::):
3144         (KJS::CommaNode::):
3145         (KJS::VarDeclCommaNode::):
3146         (KJS::ConstStatementNode::):
3147         (KJS::SourceElements::SourceElements):
3148         (KJS::EmptyStatementNode::):
3149         (KJS::DebuggerStatementNode::):
3150         (KJS::ExprStatementNode::):
3151         (KJS::VarStatementNode::):
3152         (KJS::IfNode::):
3153         (KJS::IfElseNode::):
3154         (KJS::DoWhileNode::):
3155         (KJS::WhileNode::):
3156         (KJS::ForNode::):
3157         (KJS::ContinueNode::):
3158         (KJS::BreakNode::):
3159         (KJS::ReturnNode::):
3160         (KJS::WithNode::):
3161         (KJS::LabelNode::):
3162         (KJS::ThrowNode::):
3163         (KJS::TryNode::):
3164         (KJS::ParameterNode::):
3165         (KJS::FuncExprNode::):
3166         (KJS::FuncDeclNode::):
3167         (KJS::CaseClauseNode::):
3168         (KJS::ClauseListNode::):
3169         (KJS::CaseBlockNode::):
3170         (KJS::SwitchNode::):
3171         Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace
3172         threadInstance calls.
3173
3174 2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3175
3176         Reviewed by Alexey Proskuryakov.
3177
3178         Make the JavaScript shell collect the heap from main() instead of
3179         jscmain() to suppress leak messages in debug builds.
3180
3181         * kjs/Shell.cpp:
3182         (main):
3183         (jscmain):
3184
3185 2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3186
3187         Reviewed by Maciej.
3188
3189         Make the conversion of the pair (less, jtrue) to jless use register
3190         reference counting information for safety instead of requiring callers
3191         to decide whether it is safe.
3192
3193         No changes on SunSpider codegen.
3194
3195         * VM/CodeGenerator.cpp:
3196         (KJS::CodeGenerator::emitJumpIfTrue):
3197         * VM/CodeGenerator.h:
3198         * kjs/nodes.cpp:
3199         (KJS::DoWhileNode::emitCode):
3200         (KJS::WhileNode::emitCode):
3201         (KJS::ForNode::emitCode):
3202         (KJS::CaseBlockNode::emitCodeForBlock):
3203
3204 2008-06-24  Kevin McCullough  <kmccullough@apple.com>
3205
3206         Reviewed by Tim.
3207
3208         <rdar://problem/6031594> JSProfiler: Profiler goes into an infinite
3209         loop sometimes.
3210         <rdar://problem/6031603> JSProfiler: Profiler asserts in debug and
3211         give the wrong times in release
3212
3213         Fixed two issues found by Tim in the same test.
3214
3215         * profiler/Profile.cpp:
3216         (KJS::Profile::removeProfileStart): No longer take profile's time from
3217         all ancestors, but instead attribute it to its parent.  Also add an
3218         Assert to ensure we only delete the child we mean to.
3219         (KJS::Profile::removeProfileEnd): Ditto for profileEnd.
3220         (KJS::Profile::didExecute): Cleaned up the execution order and correctly
3221         attribute all of the parent's time to the new node.
3222         * profiler/ProfileNode.cpp: If this node does not have a startTime it
3223         should not get a giant total time, but instead be 0.
3224         (KJS::ProfileNode::endAndRecordCall):
3225         * profiler/ProfileNode.h:
3226         (KJS::ProfileNode::removeChild): Should reset the sibling pointers since
3227         one of them has been removed.
3228
3229 2008-06-24  Darin Adler  <darin@apple.com>
3230
3231         Reviewed by Cameron.
3232
3233         - fix https://bugs.webkit.org/show_bug.cgi?id=19739
3234           REGRESSION: fast/js/property-getters-and-setters.html fails
3235
3236         * kjs/JSObject.cpp:
3237         (KJS::JSObject::put): Remove an untested optimization I checked in by accident.
3238         The two loops up the prototype chain both need to start from this; instead the
3239         second loop was starting where the first loop left off.
3240
3241 2008-06-24  Steve Falkenburg  <sfalken@apple.com>
3242
3243         Build fix.
3244
3245         * kjs/nodes.cpp:
3246
3247 2008-06-24  Joerg Bornemann  <joerg.bornemann@trolltech.com>
3248
3249         Reviewed by Simon.
3250
3251         For the Qt build on Windows don't depend on the presence of GNU CPP
3252         but use MSVC's preprocessor instead.
3253         dftables accepts a --preprocessor option which is set in pcre.pri for MSVC platforms.
3254
3255         * pcre/dftables: Added support for specifying the preprocessor command
3256         to use via --preprocessor, similar to
3257         WebCore/bindings/scripts/generate-bindings.pl.
3258         * pcre/pcre.pri: Pass --preprocessor='cl /e' to dftables, or more
3259         generally speaking QMAKE_CC /E for the win32-msvc buildspecs.
3260
3261 2008-06-24  Simon Hausmann  <hausmann@webkit.org>
3262
3263         Fix the Qt build, added missing include.
3264
3265         * kjs/PropertySlot.cpp:
3266
3267 2008-06-24  Alexey Proskuryakov  <ap@webkit.org>
3268
3269         Reviewed by Cameron Zwarich.
3270
3271         Make ParserRefCountedCounter actually perform a leak check.
3272
3273         * kjs/nodes.cpp:
3274         (KJS::ParserRefCountedCounter::~ParserRefCountedCounter): Check for leaks in destructor,
3275         not in constructor.
3276         (KJS::ParserRefCountedCounter::increment):
3277         (KJS::ParserRefCountedCounter::decrement):
3278         (KJS::ParserRefCounted::ParserRefCounted):
3279         (KJS::ParserRefCounted::~ParserRefCounted):
3280         While at it, also made counting thread-safe.
3281
3282 2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3283
3284         Reviewed by Oliver.
3285
3286         Bug 19730: REGRESSION (r34497): Text in alerts in "Leisure suit Larry" is not wrapped
3287         <https://bugs.webkit.org/show_bug.cgi?id=19730>
3288
3289         Do not convert the pair (less, jtrue) to jless when jtrue is a jump
3290         target. An example of this is when the condition of a while loop is a
3291         LogicalOrNode.
3292
3293         * VM/CodeGenerator.cpp:
3294         (KJS::CodeGenerator::emitLabel):
3295
3296 2008-06-20  Ariya Hidayat  <ariya.hidayat@trolltech.com>
3297
3298         Reviewed by Adam Roben.
3299
3300         Fix compile with MinGW.
3301
3302         * kjs/Shell.cpp:
3303         * wtf/Threading.h:
3304         (WTF::atomicIncrement):
3305         (WTF::atomicDecrement):
3306
3307 2008-06-23  Mark Rowe  <mrowe@apple.com>
3308
3309         Reviewed by Oliver Hunt.
3310
3311         Prepration for returning memory to the OS on Windows.  Track whether a portion of a span of memory was returned to the OS.
3312         If it was, ask that it be recommitted before returning it to the application as an allocated region.
3313
3314         * wtf/FastMalloc.cpp:
3315         (WTF::TCMalloc_PageHeap::New):  If the span was decommitted, ask that it be recommitted before returning it.
3316         (WTF::TCMalloc_PageHeap::AllocLarge):  Ditto.
3317         (WTF::TCMalloc_PageHeap::Carve):  When splitting a span, ensure that the decommitted state propogates to the two new spans.
3318         (WTF::TCMalloc_PageHeap::Delete):  When merging a span, ensure that the resulting span is marked as decommitted if any of the
3319         spans being merged were marked as decommitted.
3320         (WTF::TCMalloc_PageHeap::IncrementalScavenge):  Mark as decommitted after releasing the span.
3321         (WTF::TCMalloc_Central_FreeList::FetchFromSpans): Add an assertion to catch a decommitted span being returned to the application
3322         without first being recommitted.
3323         (WTF::TCMalloc_Central_FreeList::Populate): Ditto.
3324         * wtf/TCSystemAlloc.cpp: Stub out TCMalloc_SystemCommit.
3325         * wtf/TCSystemAlloc.h:
3326
3327 2008-06-23  Mark Rowe  <mrowe@apple.com>
3328
3329         Reviewed by Sam Weinig.
3330
3331         Remove the sample member of Span when NO_TCMALLOC_SAMPLES is defined.
3332
3333         * wtf/FastMalloc.cpp:
3334         (WTF::TCMalloc_PageHeap::Delete): Only update Span::sample if NO_TCMALLOC_SAMPLES is not defined.
3335         (WTF::TCMallocStats::do_free):  Ditto.
3336
3337 2008-06-23  Darin Adler  <darin@apple.com>
3338
3339         Reviewed by Geoff.
3340
3341         - work toward https://bugs.webkit.org/show_bug.cgi?id=19721
3342
3343         More preparation toward making functions work on primitive types without
3344         creating wrapper objects. No speedup this time, but prepares for a future
3345         speedup without slowing things down.
3346
3347         SunSpider reports no change.
3348
3349         - Eliminated the implementsCall, callAsFunction and construct virtual
3350           functions from JSObject. Instead, the CallData and ConstructData for
3351           a native function includes a function pointer that the caller can use
3352           directly. Changed all call sites to use CallData and ConstructData.
3353
3354         - Changed the "this" argument to native functions to be a JSValue rather
3355           than a JSObject. This prepares us for passing primitives into these
3356           functions. The conversion to an object now must be done inside the
3357           function. Critically, if it's a function that can be called on a DOM
3358           window object, then we have to be sure to call toThisObject on the
3359           argument before we use it for anything even if it's already an object.
3360
3361         - Eliminated the practice of using constructor objects in the global
3362           object to make objects of the various basic types. Since these
3363           constructors can't be replaced by script, there's no reason to involve
3364           a constructor object at all. Added functions to do the construction
3365           directly.
3366
3367         - Made some more class members private and protected, including virtual
3368           function overrides. This can catch code using unnecessarily slow virtual
3369           function code paths when the type of an object is known statically. If we
3370           later find a new reason use the members outside the class it's easy to
3371           make them public again.
3372
3373         - Moved the declarations of the native implementations for functions out
3374           of header files. These can have internal linkage and be declared inside
3375           the source file.
3376
3377         - Changed PrototypeFunction to take function pointers with the right
3378           arguments to be put directly into CallData. This eliminates the
3379           need to have a separate PrototypeReflexiveFunction, and reveals that the
3380           real purpose of that class included something else specific to eval --
3381           storage of a cached global object. So renamed PrototypeReflexiveFunction
3382           to GlobalEvalFunction.
3383
3384         * API/JSCallbackConstructor.cpp:
3385         (KJS::constructJSCallback):
3386         (KJS::JSCallbackConstructor::getConstructData):
3387         * API/JSCallbackConstructor.h:
3388         * API/JSCallbackFunction.cpp:
3389         (KJS::JSCallbackFunction::implementsHasInstance):
3390         (KJS::JSCallbackFunction::call):
3391         (KJS::JSCallbackFunction::getCallData):
3392         * API/JSCallbackFunction.h:
3393         (KJS::JSCallbackFunction::classInfo):
3394         * API/JSCallbackObject.h:
3395         (KJS::JSCallbackObject::classRef):
3396         (KJS::JSCallbackObject::classInfo):
3397         * API/JSCallbackObjectFunctions.h:
3398         (KJS::::getConstructData):
3399         (KJS::::construct):
3400         (KJS::::getCallData):
3401         (KJS::::call):
3402         * API/JSObjectRef.cpp:
3403         (JSObjectMakeFunction):
3404         (JSObjectIsFunction):
3405         (JSObjectCallAsFunction):
3406         (JSObjectCallAsConstructor):
3407         * JavaScriptCore.exp:
3408         * VM/Machine.cpp:
3409         (KJS::jsTypeStringForValue):
3410         (KJS::Machine::privateExecute):
3411         * kjs/ArrayPrototype.cpp:
3412         (KJS::arrayProtoFuncToString):
3413         (KJS::arrayProtoFuncToLocaleString):
3414         (KJS::arrayProtoFuncJoin):
3415         (KJS::arrayProtoFuncConcat):
3416         (KJS::arrayProtoFuncPop):
3417         (KJS::arrayProtoFuncPush):
3418         (KJS::arrayProtoFuncReverse):
3419         (KJS::arrayProtoFuncShift):
3420         (KJS::arrayProtoFuncSlice):
3421         (KJS::arrayProtoFuncSort):
3422         (KJS::arrayProtoFuncSplice):
3423         (KJS::arrayProtoFuncUnShift):
3424         (KJS::arrayProtoFuncFilter):
3425         (KJS::arrayProtoFuncMap):
3426         (KJS::arrayProtoFuncEvery):
3427         (KJS::arrayProtoFuncForEach):
3428         (KJS::arrayProtoFuncSome):
3429         (KJS::arrayProtoFuncIndexOf):
3430         (KJS::arrayProtoFuncLastIndexOf):
3431         (KJS::ArrayConstructor::ArrayConstructor):
3432         (KJS::constructArrayWithSizeQuirk):
3433         (KJS::constructWithArrayConstructor):
3434         (KJS::ArrayConstructor::getConstructData):
3435         (KJS::callArrayConstructor):
3436         (KJS::ArrayConstructor::getCallData):
3437         * kjs/ArrayPrototype.h:
3438         * kjs/BooleanObject.cpp:
3439         (KJS::booleanProtoFuncToString):
3440         (KJS::booleanProtoFuncValueOf):
3441         (KJS::constructBoolean):
3442         (KJS::constructWithBooleanConstructor):
3443         (KJS::BooleanConstructor::getConstructData):
3444         (KJS::callBooleanConstructor):
3445         (KJS::BooleanConstructor::getCallData):
3446         (KJS::constructBooleanFromImmediateBoolean):
3447         * kjs/BooleanObject.h:
3448         * kjs/CallData.h:
3449         (KJS::):
3450         * kjs/ConstructData.h:
3451         (KJS::):
3452         * kjs/FunctionPrototype.cpp:
3453         (KJS::callFunctionPrototype):
3454         (KJS::FunctionPrototype::getCallData):
3455         (KJS::functionProtoFuncToString):
3456         (KJS::functionProtoFuncApply):
3457         (KJS::functionProtoFuncCall):
3458         (KJS::constructWithFunctionConstructor):
3459         (KJS::FunctionConstructor::getConstructData):
3460         (KJS::callFunctionConstructor):
3461         (KJS::FunctionConstructor::getCallData):
3462         (KJS::constructFunction):
3463         * kjs/FunctionPrototype.h:
3464         * kjs/JSArray.cpp:
3465         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
3466         (KJS::JSArray::sort):
3467         (KJS::constructEmptyArray):
3468         (KJS::constructArray):
3469         * kjs/JSArray.h:
3470         (KJS::JSArray::classInfo):
3471         * kjs/JSFunction.cpp:
3472         (KJS::JSFunction::call):
3473         (KJS::globalFuncEval):
3474         (KJS::globalFuncParseInt):
3475         (KJS::globalFuncParseFloat):
3476         (KJS::globalFuncIsNaN):
3477         (KJS::globalFuncIsFinite):
3478         (KJS::globalFuncDecodeURI):
3479         (KJS::globalFuncDecodeURIComponent):
3480         (KJS::globalFuncEncodeURI):
3481         (KJS::globalFuncEncodeURIComponent):
3482         (KJS::globalFuncEscape):
3483         (KJS::globalFuncUnescape):
3484         (KJS::globalFuncKJSPrint):
3485         (KJS::PrototypeFunction::PrototypeFunction):
3486         (KJS::PrototypeFunction::getCallData):
3487         (KJS::GlobalEvalFunction::GlobalEvalFunction):
3488         (KJS::GlobalEvalFunction::mark):
3489         * kjs/JSFunction.h:
3490         (KJS::InternalFunction::classInfo):
3491         (KJS::InternalFunction::functionName):
3492         (KJS::JSFunction::classInfo):
3493         (KJS::GlobalEvalFunction::cachedGlobalObject):
3494         * kjs/JSGlobalObject.cpp:
3495         (KJS::JSGlobalObject::reset):
3496         (KJS::JSGlobalObject::mark):
3497         * kjs/JSGlobalObject.h:
3498         (KJS::JSGlobalObject::JSGlobalObject):
3499         (KJS::JSGlobalObject::evalFunction):
3500         * kjs/JSImmediate.cpp:
3501         (KJS::JSImmediate::toObject):
3502         * kjs/JSNotAnObject.cpp:
3503         * kjs/JSNotAnObject.h:
3504         * kjs/JSObject.cpp:
3505         (KJS::JSObject::put):
3506         (KJS::callDefaultValueFunction):
3507         (KJS::JSObject::defaultValue):
3508         (KJS::JSObject::lookupGetter):
3509         (KJS::JSObject::lookupSetter):
3510         (KJS::JSObject::hasInstance):
3511         (KJS::JSObject::fillGetterPropertySlot):
3512         (KJS::Error::create):
3513         (KJS::constructEmptyObject):
3514         * kjs/JSObject.h:
3515         (KJS::GetterSetter::GetterSetter):
3516         (KJS::GetterSetter::getter):
3517         (KJS::GetterSetter::setGetter):
3518         (KJS::GetterSetter::setter):
3519         (KJS::GetterSetter::setSetter):
3520         * kjs/JSValue.cpp:
3521         (KJS::JSCell::deleteProperty):
3522         (KJS::call):
3523         (KJS::construct):
3524         * kjs/JSValue.h:
3525         * kjs/MathObject.cpp: