JavaScriptCore:
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-02-25  Darin Adler  <darin@apple.com>
2
3         Reviewed by Adam.
4
5         * JavaScriptCore.exp: Sort the contents of this file.
6
7 2008-02-25  Adam Roben  <aroben@apple.com>
8
9         MSVC build fix
10
11         * kjs/testkjs.cpp:
12         (functionQuit): Don't add a return statement after exit(0) for MSVC.
13
14 2008-02-24  Sam Weinig  <sam@webkit.org>
15
16         Reviewed by Mark Rowe.
17
18         http://bugs.webkit.org/show_bug.cgi?id=17529
19         Add support for reading from stdin from testkjs
20
21         * kjs/testkjs.cpp:
22         (GlobalObject::GlobalObject): Add readline function to global object.
23         (functionReadline): Added. Reads characters from stdin until a '\n' or
24         EOF is encountered. The input is returned as a String to the caller.
25
26 2008-02-24  Sam Weinig  <sam@webkit.org>
27
28         Reviewed by Mark Rowe.
29
30         http://bugs.webkit.org/show_bug.cgi?id=17528
31         Give testkjs a bath
32
33         * JavaScriptCore.exp:
34         * JavaScriptCore.xcodeproj/project.pbxproj: Make the testkjs.cpp use 4 space indentation.
35         * kjs/testkjs.cpp:
36         (StopWatch::getElapsedMS):
37         (GlobalObject::className):
38         (GlobalObject::GlobalObject):
39         Rename GlobalImp to GlobalObject and setup the global functions
40         in the GlobalObject's constructor. Also, use static functions for
41         the implementation so we can use the standard PrototypeFunction
42         class and remove TestFunctionImp.
43         (functionPrint): Move print() functionality here.
44         (functionDebug): Move debug() functionality here.
45         (functionGC): Move gc() functionality here.
46         (functionVersion): Move version() functionality here.
47         (functionRun): Move run() functionality here.
48         (functionLoad): Move load() functionality here.
49         (functionQuit): Move quit() functionality here.
50         (prettyPrintScript): Fix indentation.
51         (runWithScripts): Since all the functionality of createGlobalObject is
52         now in the GlobalObject constructor, just call new here.
53         (parseArguments): Fix indentation.
54         (kjsmain): Ditto
55         (fillBufferWithContentsOfFile): Ditto.
56
57 2008-02-24  Sam Weinig  <sam@webkit.org>
58
59         Reviewed by Oliver Hunt and Mark Rowe.
60
61         http://bugs.webkit.org/show_bug.cgi?id=17505
62         Add support for getting command line arguments in testkjs
63
64         - This slightly changes the behavior of parsing arguments by requiring
65           a '-f' before all files. 
66
67         * kjs/testkjs.cpp:
68         (createGlobalObject): Add a global property called 'arguments' which
69         contains an array with the parsed arguments as strings.
70         (runWithScripts): Pass in the arguments vector so that it can be passed
71         to the global object.
72         (parseArguments): Change parsing rules to require a '-f' before any script
73         file. After all '-f' and '-p' arguments have been parsed, the remaining
74         are added to the arguments vector and exposed to the script. If there is a
75         chance of ambiguity (the user wants to pass the string '-f' to the script),
76         the string '--' can be used separate the options from the pass through 
77         arguments.
78         (kjsmain):
79
80 2008-02-24  Dan Bernstein  <mitz@apple.com>
81
82         Reviewed by Darin Adler.
83
84         - fix http://bugs.webkit.org/show_bug.cgi?id=17511
85           REGRESSION: Reproducible crash in SegmentedSubstring::SegmentedSubstring(SegmentedSubstring const&)
86
87         * wtf/Deque.h:
88         (WTF::::expandCapacityIfNeeded): Fixed the case where m_start and m_end
89         are both zero but the buffer capacity is non-zero.
90         (WTF::::prepend): Added validity checks.
91
92 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
93
94         Rubber stamped by Darin.
95
96         Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
97         whitespaces introduced in the previous commit.
98
99         * GNUmakefile.am: 
100
101 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
102
103         * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
104
105 2008-02-23  Darin Adler  <darin@apple.com>
106
107         Reviewed by Anders.
108
109         - http://bugs.webkit.org/show_bug.cgi?id=17496
110           make Deque use a circular array; add iterators
111
112         * wtf/Deque.h: Wrote an all-new version of this class that uses a circular
113         buffer. Growth policy is identical to vector. Added iterators.
114
115         * wtf/Vector.h: Made two small refinements while using this to implement
116         Deque: Made VectorBufferBase derive from Noncopyable, which would have
117         saved me some debugging time if it had been there. Renamed Impl and
118         m_impl to Buffer and m_buffer.
119
120 2008-02-23  Darin Adler  <darin@apple.com>
121
122         Reviewed by Anders.
123
124         - http://bugs.webkit.org/show_bug.cgi?id=17067
125           eliminate attributes parameter from JSObject::put for speed/clarity
126
127         * API/JSCallbackObject.h: Removed attribute arguments.
128         * API/JSCallbackObjectFunctions.h:
129         (KJS::JSCallbackObject<Base>::put): Ditto.
130         * API/JSObjectRef.cpp:
131         (JSObjectSetProperty): Use initializeVariable or putDirect when necessary
132         to set attribute values.
133         * JavaScriptCore.exp: Updated.
134         * bindings/objc/objc_runtime.h: Removed attribute arguments.
135         * bindings/objc/objc_runtime.mm:
136         (ObjcFallbackObjectImp::put): Ditto.
137         * bindings/runtime_array.cpp:
138         (RuntimeArray::put): Ditto.
139         * bindings/runtime_array.h: Ditto.
140         * bindings/runtime_object.cpp:
141         (RuntimeObjectImp::put): Ditto.
142         * bindings/runtime_object.h: Ditto. Also removed canPut which was only
143         called from one place in WebCore that can use hasProperty instead.
144
145         * kjs/Activation.h: Removed attribute argument from put and added the new
146         initializeVariable function that's used to put variables in variable objects.
147         Also made isActivationObject a const member.
148
149         * kjs/JSGlobalObject.cpp:
150         (KJS::JSGlobalObject::put): Removed attribute argument.
151         (KJS::JSGlobalObject::initializeVariable): Added. Used to give variables
152         their initial values, which can include the read-only property.
153         (KJS::JSGlobalObject::reset): Removed obsolete comments about flags.
154         Removed Internal flag, which is no longer needed.
155         * kjs/JSGlobalObject.h: More of the same.
156
157         * kjs/JSVariableObject.h: Added pure virtual initializeVariable function.
158         (KJS::JSVariableObject::symbolTablePut): Removed checkReadOnly flag; we always
159         check read-only.
160         (KJS::JSVariableObject::symbolTableInitializeVariable): Added.
161
162         * kjs/array_instance.cpp:
163         (KJS::ArrayInstance::put): Removed attribute argument.
164         * kjs/array_instance.h: Ditto.
165
166         * kjs/function.cpp:
167         (KJS::FunctionImp::put): Ditto.
168         (KJS::Arguments::put): Ditto.
169         (KJS::ActivationImp::put): Ditto.
170         (KJS::ActivationImp::initializeVariable): Added.
171         * kjs/function.h: Removed attribute arguments.
172
173         * kjs/function_object.cpp:
174         (KJS::FunctionObjectImp::construct): Removed Internal flag.
175
176         * kjs/lookup.h:
177         (KJS::lookupPut): Removed attributes argument. Also changed to use putDirect
178         instead of calling JSObject::put.
179         (KJS::cacheGlobalObject): Ditto.
180
181         * kjs/nodes.cpp:
182         (KJS::ConstDeclNode::handleSlowCase): Call initializeVariable to initialize
183         the constant.
184         (KJS::ConstDeclNode::evaluateSingle): Ditto.
185         (KJS::TryNode::execute): Use putDirect to set up the new object.
186         (KJS::FunctionBodyNode::processDeclarations): Removed Internal.
187         (KJS::ProgramNode::processDeclarations): Ditto.
188         (KJS::EvalNode::processDeclarations): Call initializeVariable to initialize
189         the variables and functions.
190         (KJS::FuncDeclNode::makeFunction): Removed Internal.
191         (KJS::FuncExprNode::evaluate): Ditto.
192
193         * kjs/object.cpp: Removed canPut, which was only being used in one code path,
194         not the normal high speed one.
195         (KJS::JSObject::put): Removed attribute argument. Moved the logic from
196         canPut here, in the one code ath that was still using it.
197         * kjs/object.h: Removed Internal attribute, ad canPut function. Removed the
198         attributes argument to the put function. Made isActivationObject const.
199
200         * kjs/regexp_object.cpp:
201         (KJS::RegExpImp::put): Removed attributes argument.
202         (KJS::RegExpImp::putValueProperty): Ditto.
203         (KJS::RegExpObjectImp::put): Ditto.
204         (KJS::RegExpObjectImp::putValueProperty): Ditto.
205         * kjs/regexp_object.h: Ditto.
206
207         * kjs/string_object.cpp:
208         (KJS::StringInstance::put): Removed attributes argument.
209         * kjs/string_object.h: Ditto.
210
211 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
212
213         Not reviewed, Gtk build fix.
214
215         * kjs/testkjs.pro:
216
217 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
218
219         Windows build fix - move ThreadCondition implementation from WebCore to WTF.
220
221         * wtf/ThreadingWin.cpp:
222         (WTF::ThreadCondition::ThreadCondition):
223         (WTF::ThreadCondition::~ThreadCondition):
224         (WTF::ThreadCondition::wait):
225         (WTF::ThreadCondition::signal):
226         (WTF::ThreadCondition::broadcast):
227
228 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
229
230         Touch some files, hoping that Windows build bot will create JSC headers.
231
232         * kjs/AllInOneFile.cpp:
233         * kjs/array_instance.cpp:
234         * wtf/HashTable.cpp:
235
236 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
237
238         Qt/Wx build fix - this file was still in a wrong namespace, too.
239
240         * wtf/ThreadingNone.cpp:
241
242 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
243
244         More build fixing - fix mismatched braces.
245
246         * JavaScriptCore.pri:
247
248 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
249
250         Wx and Gtk build fixes.
251
252         * JavaScriptCore.pri: Don't try to compile ThreadingPthreads.
253         * wtf/ThreadingGtk.cpp: Use a correct namespace.
254
255 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
256
257         Reviewed by Darin.
258
259         Move basic threading support from WebCore to WTF.
260
261         Added mutex protection to MessageQueue::killed() for paranoia sake.
262
263         * GNUmakefile.am:
264         * JavaScriptCore.exp:
265         * JavaScriptCore.pri:
266         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
267         * JavaScriptCore.xcodeproj/project.pbxproj:
268         * JavaScriptCoreSources.bkl:
269         * wtf/Locker.h: Copied from WebCore/platform/Locker.h.
270         * wtf/MessageQueue.h: Copied from WebCore/platform/MessageQueue.h.
271         (WTF::::killed):
272         * wtf/Threading.h: Copied from WebCore/platform/Threading.h.
273         * wtf/ThreadingGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp.
274         (WebCore::createThread):
275         * wtf/ThreadingNone.cpp: Copied from WebCore/platform/ThreadingNone.cpp.
276         * wtf/ThreadingPthreads.cpp: Copied from WebCore/platform/pthreads/ThreadingPthreads.cpp.
277         (WTF::createThread):
278         * wtf/ThreadingWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp.
279         (WTF::createThread):
280         (WTF::Mutex::Mutex):
281         (WTF::Mutex::~Mutex):
282         (WTF::Mutex::lock):
283         (WTF::Mutex::tryLock):
284         (WTF::Mutex::unlock):
285
286 2008-02-22  Geoffrey Garen  <ggaren@apple.com>
287
288         Reviewed by Sam Weinig.
289         
290         Partial fix for <rdar://problem/5744037> Gmail out of memory (17455)
291         
292         I'm removing KJS_MEM_LIMIT for the following reasons:
293         
294         - We have a few reports of KJS_MEM_LIMIT breaking important web
295         applications, like GMail and Google Reader. (For example, if you
296         simply open 12 GMail tabs, tab #12 will hit the limit.)
297
298         - Firefox has no discernable JS object count limit, so any limit, even
299         a large one, is a potential compatibility problem.
300         
301         - KJS_MEM_LIMIT does not protect against malicious memory allocation,
302         since there are many ways to maliciously allocate memory without
303         increasing the JS object count.
304         
305         - KJS_MEM_LIMIT is already mostly broken, since it only aborts the
306         script that breaches the limit, not any subsequent scripts.
307         
308         - We've never gotten bug reports about websites that would have
309         benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of
310         KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that
311         needed it.
312         
313         - Any website that brings you anywhere close to crashing due to the
314         number of live JS objects will almost certainly put up the "slow
315         script" dialog at least 20 times beforehand.
316
317         * kjs/collector.cpp:
318         (KJS::Collector::collect):
319         * kjs/collector.h:
320         * kjs/nodes.cpp:
321         (KJS::TryNode::execute):
322
323 2008-02-22  Oliver Hunt  <oliver@apple.com>
324
325         Reviewed by Alexey P.
326
327         <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true)
328
329         Fix yet another case where we incorrectly relied on implicit double
330         to bool coercion.
331
332         * kjs/nodes.cpp:
333         (KJS::PostDecLocalVarNode::evaluateToBoolean):
334
335 2008-02-20  Michael Knaup  <michael.knaup@mac.com>
336
337         Reviewed by Darin.
338
339         Fix for Bug 16753: date set methods with no args should result in NaN (Acid3 bug)
340         The set values result in NaN now when called with no args, NaN or +/- inf values.
341         The setYear, setFullYear and setUTCFullYear methods used on NaN dates work as 
342         descripted in the standard.
343
344         * kjs/date_object.cpp:
345         (KJS::fillStructuresUsingTimeArgs):
346         (KJS::fillStructuresUsingDateArgs):
347         (KJS::setNewValueFromTimeArgs):
348         (KJS::setNewValueFromDateArgs):
349         (KJS::dateProtoFuncSetYear):
350
351 2008-02-19  Anders Carlsson  <andersca@apple.com>
352
353         Reviewed by Darin.
354
355         Change OpaqueJSClass and RootObject to start with a ref count of 1.
356         
357         * API/JSClassRef.cpp:
358         (OpaqueJSClass::OpaqueJSClass):
359         (OpaqueJSClass::createNoAutomaticPrototype):
360         (OpaqueJSClass::create):
361         * API/JSClassRef.h:
362         * API/JSObjectRef.cpp:
363         (JSClassCreate):
364         * bindings/runtime_root.cpp:
365         (KJS::Bindings::RootObject::create):
366         (KJS::Bindings::RootObject::RootObject):
367
368 2008-02-19  Darin Adler  <darin@apple.com>
369
370         Rubber stamped by Anders.
371
372         - removed explicit initialization to 1 for RefCounted; that's now the default
373
374         * kjs/regexp.cpp:
375         (KJS::RegExp::RegExp): Removed RefCounted initializer.
376
377 2008-02-19  Darin Adler  <darin@apple.com>
378
379         Reviewed by Anders.
380
381         - next step for http://bugs.webkit.org/show_bug.cgi?id=17257
382           start ref counts at 1 instead of 0 for speed
383
384         * wtf/RefCounted.h:
385         (WTF::RefCounted::RefCounted): Have refcounts default to 1. This allows us to start
386         removing the explicit initialization of RefCounted from classes and eventually we
387         can remove the ability to have the initial count of 0 entirely.
388
389 2008-02-18  Samuel Weinig  <sam@webkit.org>
390
391         Reviewed by Geoff Garen.
392
393         Fix for http://bugs.webkit.org/show_bug.cgi?id=17419
394         Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode
395
396         * kjs/JSGlobalObject.cpp:
397         (KJS::JSGlobalObject::init):
398         * kjs/JSGlobalObject.h:
399         (KJS::JSGlobalObject::setDebugger):
400         * kjs/date_object.cpp:
401         (KJS::dateProtoFuncGetYear):
402
403 2008-02-18  Darin Adler  <darin@apple.com>
404
405         Reviewed by Sam.
406
407         * wtf/ASCIICType.h:
408         (WTF::toASCIIHexValue): Added.
409
410 2008-02-17  Darin Adler  <darin@apple.com>
411
412         * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
413
414 2008-02-15  Adam Roben  <aroben@apple.com>
415
416         Make JavaScriptCore's FEATURE_DEFINES match WebCore's
417
418         Reviewed by Mark.
419
420         * Configurations/JavaScriptCore.xcconfig:
421
422 2008-02-14  Stephanie Lewis <slewis@apple.com>
423
424         Reviewed by Geoff.
425
426         Update order files.
427
428         * JavaScriptCore.order:
429
430 2008-02-14  Geoffrey Garen  <ggaren@apple.com>
431
432         Reviewed by Sam Weinig.
433         
434         Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329
435         Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329)
436         
437         Don't reset the "activations" stack in JSGlobalObject::reset, since we
438         might be executing a script during the call to reset, and the script
439         needs to safely run to completion.
440         
441         Instead, initialize the "activations" stack when the global object is
442         created, and subsequently rely on pushing and popping during normal
443         execution to maintain the stack's state.
444         
445         * kjs/JSGlobalObject.cpp:
446         (KJS::JSGlobalObject::init):
447         (KJS::JSGlobalObject::reset):
448
449 2008-02-13  Bernhard Rosenkraenzer  <bero@arklinux.org>
450
451         Reviewed by Darin.
452
453         - http://bugs.webkit.org/show_bug.cgi?id=17339
454           JavaScriptCore does not build with gcc 4.3
455
456         * kjs/interpreter.cpp: Add include of <unistd.h>, since that's where
457         getpid() comes from.
458
459 2008-02-13  Oliver Hunt  <oliver@apple.com>
460
461         Reviewed by Alexey P.
462
463         <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com
464
465         When converting numeric values to booleans we need to account for NaN
466
467         * kjs/nodes.cpp:
468         (KJS::MultNode::evaluateToBoolean):
469         (KJS::ModNode::evaluateToBoolean):
470
471 2008-02-08  Samuel Weinig  <sam@webkit.org>
472
473         Reviewed by Brady Eidson.
474
475         <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList)
476
477         - Tweak the statements in isASCIISpace to account for the statistical distribution of
478           usage in the PLT.
479
480         .4% speedup on my machine.  Stephanie's machine shows this as .3% speedup.
481
482         * wtf/ASCIICType.h:
483         (WTF::isASCIISpace): 
484
485 2008-02-11  Sam Weinig  <sam@webkit.org>
486
487         Reviewed by Anders Carlsson.
488
489         Fixes for:
490         <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
491         <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it
492
493         - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain
494           toString calling.
495
496         * JavaScriptCore.exp:
497         * kjs/object_object.cpp:
498         * kjs/object_object.h:
499
500 2008-02-10  Darin Adler  <darin@apple.com>
501
502         Rubber stamped by Eric.
503
504         * kjs/ExecState.h:
505         (KJS::ExecState::takeException): Added.
506
507 2008-02-10  Darin Adler  <darin@apple.com>
508
509         Reviewed by Eric.
510
511         - http://bugs.webkit.org/show_bug.cgi?id=17256
512           eliminate default ref. count of 0 in RefCounted class
513
514         * wtf/RefCounted.h:
515         (WTF::RefCounted::RefCounted): Remove default of 0.
516
517 2008-02-10  Darin Adler  <darin@apple.com>
518
519         Reviewed by Eric.
520
521         - http://bugs.webkit.org/show_bug.cgi?id=17256
522           Make clients of RefCounted explicitly set the count to 0.
523
524         * API/JSClassRef.cpp:
525         (OpaqueJSClass::OpaqueJSClass):
526         * bindings/runtime_root.cpp:
527         (KJS::Bindings::RootObject::RootObject):
528
529 2008-02-09  Darin Adler  <darin@apple.com>
530
531         Reviewed by Mitz.
532
533         - http://bugs.webkit.org/show_bug.cgi?id=17256
534           Change RegExp to start its ref count at 1, not 0
535
536         We'll want to do this to every RefCounted class, one at a time.
537
538         * kjs/nodes.h:
539         (KJS::RegExpNode::RegExpNode): Use RegExp::create instead of new RegExp.
540         * kjs/regexp.cpp:
541         (KJS::RegExp::RegExp): Marked inline, set initial ref count to 1.
542         (KJS::RegExp::create): Added. Calls new RegExp then adopts the initial ref.
543         * kjs/regexp.h: Reformatted. Made the constructors private. Added static
544         create functions that return objects already wrapped in PassRefPtr.
545         * kjs/regexp_object.cpp:
546         (KJS::regExpProtoFuncCompile): Use RegExp::create instead of new RegExp.
547         (KJS::RegExpObjectImp::construct): Ditto.
548         * kjs/string_object.cpp:
549         (KJS::stringProtoFuncMatch): Ditto.
550         (KJS::stringProtoFuncSearch): Ditto.
551
552 2008-02-08  Oliver Hunt  <oliver@apple.com>
553
554         Reviewed by Maciej.
555
556         <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString()
557         https://bugs.webkit.org/show_bug.cgi?id=17214
558
559         Make a subclass of CommaNode to provide the correct precedence for each expression in
560         a variable declaration list.
561
562         * kjs/grammar.y:
563         * kjs/nodes.h:
564         (KJS::VarDeclCommaNode::):
565
566 2008-02-08  Darin Adler  <darin@apple.com>
567
568         Reviewed by Oliver.
569
570         - fix http://bugs.webkit.org/show_bug.cgi?id=17247
571           Labelled continue/break can fail in some cases
572
573         Test: fast/js/continue-break-multiple-labels.html
574
575         * kjs/nodes.h:
576         (KJS::StatementNode::pushLabel): Made this virtual.
577         (KJS::LabelNode::pushLabel): Forward pushLabel calls to the statement inside.
578
579 2008-02-08  Darin Adler  <darin@apple.com>
580
581         Reviewed by Eric.
582
583         - fix http://bugs.webkit.org/show_bug.cgi?id=15003
584           Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug)
585
586         Test: fast/js/constructor-attributes.html
587
588         * kjs/JSGlobalObject.cpp:
589         (KJS::JSGlobalObject::reset): Remove unwanted attributes from "constructor".
590         * kjs/function_object.cpp:
591         (KJS::FunctionObjectImp::construct): Ditto.
592         * kjs/nodes.cpp:
593         (KJS::FuncDeclNode::makeFunction): Ditto.
594         (KJS::FuncExprNode::evaluate): Ditto.
595
596 2008-02-06  Geoffrey Garen  <ggaren@apple.com>
597
598         Reviewed by Oliver Hunt.
599         
600         Added an ASSERT to catch refCount underflow, since it caused a leak in
601         my last check-in.
602
603         * wtf/RefCounted.h:
604         (WTF::RefCounted::deref):
605
606 2008-02-06  Geoffrey Garen  <ggaren@apple.com>
607
608         Reviewed by Darin Adler.
609
610         PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
611         slower due to r28884 (global variable symbol table optimization)
612         
613         Tweaked RefCounted::deref() to be a little more efficient.
614
615         1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine.
616         
617         * wtf/RefCounted.h:
618         (WTF::RefCounted::deref): Don't modify m_refCount if we're just going
619         to delete the object anyway. Also, use a simple == test, which might be
620         faster than <= on some hardware.
621
622 2008-02-06  Darin Adler  <darin@apple.com>
623
624         Reviewed by Sam.
625
626         - fix http://bugs.webkit.org/show_bug.cgi?id=17094
627           Array.prototype functions create length properties with DontEnum/DontDelete
628
629         Test results match Gecko with very few obscure exceptions that seem to be
630         bugs in Gecko.
631
632         Test: fast/js/array-functions-non-arrays.html
633
634         * kjs/array_object.cpp:
635         (KJS::arrayProtoFuncConcat):  Removed DontEnum and DontDelete from the call
636         to set length.
637         (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty,
638         which is not needed for real arrays, but is needed for non-arrays.
639         (KJS::arrayProtoFuncPush): Ditto.
640         (KJS::arrayProtoFuncShift): Ditto.
641         (KJS::arrayProtoFuncSlice): Ditto.
642         (KJS::arrayProtoFuncSort): Removed incorrect call to set length when
643         the array has no elements.
644         (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call
645         to set length.
646         (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to
647         make behavior match the specification in that case.
648         * kjs/nodes.cpp:
649         (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call
650         to set length.
651
652 2008-02-06  Darin Adler  <darin@apple.com>
653
654         Reviewed by Sam.
655
656         - replace calls to put to set up properties with calls to putDirect, to
657           prepare for a future change where put won't take attributes any more,
658           and for a slight performance boost
659
660         * API/JSObjectRef.cpp:
661         (JSObjectMakeConstructor): Use putDirect instead of put.
662         * kjs/CommonIdentifiers.h: Removed lastIndex.
663         * kjs/JSGlobalObject.cpp:
664         (KJS::JSGlobalObject::reset): Use putDirect instead of put.
665         * kjs/array_object.cpp:
666         (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused).
667         (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put.
668         * kjs/error_object.cpp:
669         (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put.
670         * kjs/function.cpp:
671         (KJS::Arguments::Arguments): Use putDirect instead of put.
672         (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put.
673         * kjs/function_object.cpp:
674         (KJS::FunctionObjectImp::construct): Use putDirect instead of put.
675         * kjs/nodes.cpp:
676         (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put.
677         (KJS::FuncExprNode::evaluate): Use putDirect instead of put.
678         * kjs/regexp_object.cpp:
679         (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex).
680         (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of
681         calling get and put.
682         * kjs/regexp_object.h:
683         (KJS::RegExpImp::setLastIndex): Added.
684         * kjs/string_object.cpp:
685         (KJS::stringProtoFuncMatch): Use setLastIndex instead of put(lastIndex).
686
687 2008-02-05  Sam Weinig  <sam@webkit.org>
688
689         Reviewed by Anders Carlsson.
690
691         Fix for http://bugs.webkit.org/show_bug.cgi?id=8080
692         NodeList (and other DOM lists) items are not enumeratable using for..in
693
694         * JavaScriptCore.exp:
695
696 2008-02-05  Mark Rowe  <mrowe@apple.com>
697
698         Reviewed by Oliver Hunt.
699
700         Update versioning to support the mysterious future.
701
702         * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.
703
704 2008-02-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
705
706         Reviewed by Oliver Hunt.
707
708         Fixes Bug 16889: REGRESSION (r29425): Canvas-based graphing calculator fails to run
709               Bug 17015: REGRESSION (r29414-29428): www.fox.com "shows" menu fails to render
710               Bug 17164: REGRESSION: JavaScript pop-up menu appears at wrong location when hovering image at http://news.chinatimes.com/
711
712         <http://bugs.webkit.org/show_bug.cgi?id=16889>
713         <rdar://problem/5696255>
714
715         <http://bugs.webkit.org/show_bug.cgi?id=17015>
716
717         <http://bugs.webkit.org/show_bug.cgi?id=17164>
718         <rdar://problem/5720947>
719
720         The ActivationImp tear-off (r29425) introduced a problem with ReadModify
721         nodes that first resolve a slot, call valueForReadModifyNode(), and then
722         store a value in the previously resolved slot. Since valueForReadModifyNode()
723         may cause a tear-off, the slot needs to be resolved again, but this was
724         not happening with the existing code.
725
726         * kjs/nodes.cpp:
727         (KJS::ReadModifyLocalVarNode::evaluate):
728         (KJS::ReadModifyResolveNode::evaluate):
729
730 2008-02-04  Cameron McCormack <cam@mcc.id.au>
731
732         Reviewed by Geoff Garen.
733
734         Remove some unneccesary UNUSED_PARAMs.  Clarify ownership rule of return value of JSObjectCopyPropertyNames.
735
736         * API/JSNode.c:
737         (JSNode_appendChild):
738         (JSNode_removeChild):
739         (JSNode_replaceChild):
740         (JSNode_getNodeType):
741         (JSNode_getFirstChild):
742         * API/JSNodeList.c:
743         (JSNodeList_length):
744         * API/JSObjectRef.h:
745
746 2008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>
747
748         Reviewed by Alp Toker and Mark Rowe.
749
750         Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
751         Bug 17175: Use of C++ compiler flags in CFLAGS
752
753         * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.
754
755 2008-02-04  Alp Toker  <alp@atoker.com>
756
757         Rubber-stamped by Mark Rowe.
758
759         Remove all trailing whitespace in the GTK+ port and related
760         components.
761
762         * GNUmakefile.am:
763
764 2008-02-02  Darin Adler  <darin@apple.com>
765
766         Reviewed by Geoff Garen.
767
768         PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
769         slower due to r28884 (global variable symbol table optimization)
770
771         Geoff's theory is that the slowdown was due to copying hash tables when
772         putting things into the back/forward cache. If that's true, then this
773         should fix the problem.
774
775         (According to Geoff's measurements, in a PLT that exaggerates the
776         importance of symbol table saving during cached page creation, this
777         patch is a ~3X speedup in cached page creation, and a 9% speedup overall.)
778
779         * JavaScriptCore.exp: Updated.
780
781         * kjs/JSVariableObject.cpp:
782         (KJS::JSVariableObject::saveLocalStorage): Updated for changes to SavedProperty,
783         which has been revised to avoid initializing each SavedProperty twice when building
784         the array. Store the property names too, so we don't have to store the symbol table
785         separately. Do this by iterating the symbol table instead of the local storage vector.
786         (KJS::JSVariableObject::restoreLocalStorage): Ditto. Restore the symbol table as
787         well as the local storage vector.
788
789         * kjs/JSVariableObject.h: Removed save/restoreSymbolTable and do that work inside
790         save/restoreLocalStorage instead. Made restoreLocalStorage a non-const member function
791         that takes a const reference to a SavedProperties object.
792
793         * kjs/LocalStorage.h: Changed attributes to be unsigned instead of int to match
794         other declarations of attributes elsewhere.
795
796         * kjs/property_map.cpp:
797         (KJS::SavedProperties::SavedProperties): Updated for data member name change.
798         (KJS::PropertyMap::save): Updated for data member name change and to use the new
799         inline init function instead of setting the fields directly. This allows us to
800         skip initializing the SavedProperty objects when first allocating the array, and
801         just do it when we're actually setting up the individual elements.
802         (KJS::PropertyMap::restore): Updated for SavedProperty changes.
803
804         * kjs/property_map.h: Changed SavedProperty from a struct to a class. Set it up so
805         it does not get initialized at construction time to avoid initializing twice when
806         creating an array of SavedProperty. Removed the m_ prefixes from the members of
807         the SavedProperties struct. Generally we use m_ for class members and not struct.
808
809 2008-02-02  Tony Chang  <idealisms@gmail.com>
810
811         Reviewed by darin.  Landed by eseidel.
812
813         Add #define guards for WIN32_LEAN_AND_MEAN and _CRT_RAND_S.
814
815         * kjs/config.h:
816         * wtf/FastMalloc.cpp:
817         * wtf/TCSpinLock.h:
818
819 2008-01-28  Sam Weinig  <sam@webkit.org>
820
821         Rubber-stamped by Darin Adler.
822
823         - Fix whitespace in nodes.h/cpp and nodes2string.cpp.
824
825         (NOTE: Specific changed functions elided for space and clarity)
826         * kjs/nodes.cpp:
827         * kjs/nodes.h:
828         * kjs/nodes2string.cpp:
829
830 2008-01-27  Sam Weinig  <sam@webkit.org>
831
832         Reviewed by Oliver Hunt.
833
834         Patch for http://bugs.webkit.org/show_bug.cgi?id=17025
835         nodes.h/cpp has been rolling around in the mud - lets hose it down
836
837         - Rename member variables to use the m_ prefix.
838
839         (NOTE: Specific changed functions elided for space and clarity)
840         * kjs/grammar.y:
841         * kjs/nodes.cpp:
842         * kjs/nodes.h:
843         * kjs/nodes2string.cpp:
844
845 2008-01-27  Darin Adler  <darin@apple.com>
846
847         Reviewed by Oliver.
848
849         - fix <rdar://problem/5657450> REGRESSION: const is broken
850
851         Test: fast/js/const.html
852
853         SunSpider said this was 0.3% slower. And I saw some Shark samples in
854         JSGlobalObject::put -- not a lot but a few. We may be able to regain the
855         speed, but for now we will take that small hit for correctness sake.
856
857         * kjs/JSGlobalObject.cpp:
858         (KJS::JSGlobalObject::put): Pass the checkReadOnly flag in to symbolTablePut
859         instead of passing attributes.
860
861         * kjs/JSVariableObject.h:
862         (KJS::JSVariableObject::symbolTablePut): Removed the code to set attributes
863         here, since we only set attributes when creating a property. Added the code
864         to check read-only here, since we need that to implement const!
865
866         * kjs/function.cpp:
867         (KJS::ActivationImp::put): Pass the checkReadOnly flag in to symbolTablePut
868         instead of passing attributes.
869
870         * kjs/nodes.cpp:
871         (KJS::isConstant): Added.
872         (KJS::PostIncResolveNode::optimizeVariableAccess): Create a PostIncConstNode
873         if optimizing for a local variable and the variable is constant.
874         (KJS::PostDecResolveNode::optimizeVariableAccess): Ditto. But PostDecConstNode.
875         (KJS::PreIncResolveNode::optimizeVariableAccess): Ditto. But PreIncConstNode.
876         (KJS::PreDecResolveNode::optimizeVariableAccess): Ditto. But PreDecConstNode.
877         (KJS::PreIncConstNode::evaluate): Return the value + 1.
878         (KJS::PreDecConstNode::evaluate): Return the value - 1.
879         (KJS::PostIncConstNode::evaluate): Return the value converted to a number.
880         (KJS::PostDecConstNode::evaluate): Ditto.
881         (KJS::ReadModifyResolveNode::optimizeVariableAccess): Create a ReadModifyConstNode
882         if optimizing for a local variable and the variable is constant.
883         (KJS::AssignResolveNode::optimizeVariableAccess): Ditto. But AssignConstNode.
884         (KJS::ScopeNode::optimizeVariableAccess): Pass the local storage to the
885         node optimizeVariableAccess functions, since that's where we need to look to
886         figure out if a variable is constant.
887         (KJS::FunctionBodyNode::processDeclarations): Moved the call to
888         optimizeVariableAccess until after localStorage is set up.
889         (KJS::ProgramNode::processDeclarations): Ditto.
890
891         * kjs/nodes.h: Fixed the IsConstant and HasInitializer values. They are used
892         as flag masks, so a value of 0 will not work for IsConstant. Changed the
893         first parameter to optimizeVariableAccess to be a const reference to a symbol
894         table and added a const reference to local storage. Added classes for const
895         versions of local variable access: PostIncConstNode, PostDecConstNode,
896         PreIncConstNode, PreDecConstNode, ReadModifyConstNode, and AssignConstNode.
897
898         * kjs/object.cpp:
899         (KJS::JSObject::put): Tweaked comments a bit, and changed the checkReadOnly
900         expression to match the form used at the two other call sites.
901
902 2008-01-27  Darin Adler  <darin@apple.com>
903
904         Reviewed by Oliver.
905
906         - fix http://bugs.webkit.org/show_bug.cgi?id=16498
907           ''.constructor.toString() gives [function]
908
909         Test: fast/js/function-names.html
910
911         * kjs/array_object.cpp:
912         (KJS::ArrayObjectImp::ArrayObjectImp): Use the class name as the constructor's function name.
913         * kjs/bool_object.cpp:
914         (KJS::BooleanObjectImp::BooleanObjectImp): Ditto.
915         * kjs/date_object.cpp:
916         (KJS::DateObjectImp::DateObjectImp): Ditto.
917         * kjs/error_object.cpp:
918         (KJS::ErrorPrototype::ErrorPrototype): Make the error object be an Error.
919         (KJS::ErrorObjectImp::ErrorObjectImp): Use the class name as the constructor's function name.
920         (KJS::NativeErrorPrototype::NativeErrorPrototype): Take const UString&.
921         (KJS::NativeErrorImp::NativeErrorImp): Use the prototype's name as the constructor's function
922         name.
923         * kjs/error_object.h: Change ErrorPrototype to inherit from ErrorInstance. Change the
924         NativeErrorImp constructor to take a NativeErrorPrototype pointer for its prototype.
925         * kjs/function.h: Removed unneeded constructor for internal functions without names.
926         We want to avoid those!
927         * kjs/function_object.cpp:
928         (KJS::functionProtoFuncToString): Removed code that writes out just [function] for functions
929         that have no names. There's no reason to do that.
930         (KJS::FunctionObjectImp::FunctionObjectImp): Use the class name as the constructor's
931         function name.
932         * kjs/internal.cpp: Removed the unused constructor.
933         * kjs/number_object.cpp:
934         (KJS::fractionalPartToString): Marked static for internal linkage.
935         (KJS::exponentialPartToString): Ditto.
936         (KJS::numberProtoFuncToPrecision): Removed an unneeded else.
937         (KJS::NumberObjectImp::NumberObjectImp): Use the class name as the constructor's
938         function name.
939         (KJS::NumberObjectImp::getValueProperty): Tweaked formatting.
940         * kjs/object_object.cpp:
941         (KJS::ObjectObjectImp::ObjectObjectImp): Use "Object" for the function name.
942         * kjs/regexp_object.cpp:
943         (KJS::RegExpObjectImp::RegExpObjectImp): Use "RegExp" for the function name.
944         * kjs/string_object.cpp:
945         (KJS::StringObjectImp::StringObjectImp): Use the class name as the constructor's
946         function name.
947
948 2008-01-26  Darin Adler  <darin@apple.com>
949
950         Reviewed by Oliver.
951
952         - fix http://bugs.webkit.org/show_bug.cgi?id=17027
953           Incorrect Function.toString behaviour with read/modify/write operators performed on negative numbers
954
955         Test: fast/js/function-toString-parentheses.html
956
957         The problem here was that a NumberNode with a negative number in it had the wrong
958         precedence. It's not a primary expression, it's a unary operator with a primary
959         expression after it.
960
961         Once the precedence of NumberNode was fixed, the cases from bug 17020 were also
962         fixed without trying to treat bracket nodes like dot nodes. That wasn't needed.
963         The reason we handle numbers before dot nodes specially is that the dot is a
964         legal character in a number. The same is not true of a bracket. Eventually we
965         could get smarter, and only add the parentheses when there is actual ambiguity.
966         There is none if the string form of the number already has a dot in it, or if
967         it's a number with a alphabetic name like infinity or NAN.
968
969         * kjs/nodes.h: Renamed back from ObjectAccess to DotExpr.
970         (KJS::NumberNode::precedence): Return PrecUnary for negative numbers, since
971         they serialize as a unary operator, not a primary expression.
972         * kjs/nodes2string.cpp:
973         (KJS::SourceStream::operator<<): Clear m_numberNeedsParens if this adds
974         parens; one set is enough.
975         (KJS::bracketNodeStreamTo): Remove unneeded special flag here. Normal
976         operator precedence suffices.
977         (KJS::NewExprNode::streamTo): Ditto.
978
979 2008-01-26  Oliver Hunt  <oliver@apple.com>
980
981         Reviewed by Maciej and Darin.
982
983         Fix for http://bugs.webkit.org/show_bug.cgi?id=17020
984         Function.toString does not parenthesise numbers for the bracket accessor
985
986         It turns out that logic was there for all of the dot accessor nodes to make numbers be
987         parenthesised properly, so it was a trivial extension to extend that to the bracket nodes.
988         I renamed the enum type to reflect the fact that it is now used for both dot and bracket
989         accessors.
990
991         * kjs/nodes2string.cpp:
992         (KJS::bracketNodeStreamTo):
993         (KJS::BracketAccessorNode::streamTo):
994
995 2008-01-26  Oliver Hunt  <oliver@apple.com>
996
997         Reviewed by Darin.
998
999         Fix Bug 17018: Incorrect code generated from Function.toString for get/setters in object literals
1000
1001         Don't quote getter and setter names during output, as that is simply wrong.
1002
1003         * kjs/nodes2string.cpp:
1004         (KJS::PropertyNode::streamTo):
1005
1006 2008-01-26  Darin Adler  <darin@apple.com>
1007
1008         Reviewed by Eric Seidel.
1009
1010         - http://bugs.webkit.org/show_bug.cgi?id=16860
1011           a bit of cleanup after the Activation optimization
1012
1013         * JavaScriptCore.exp: Export the GlobalExecState constructor instead of
1014         the global flavor of the ExecState constructor. It'd probably be cleaner
1015         to not export either one, but JSGlobalObject inlines the code that
1016         constructs the ExecState. If we changed that, we could remove this export.
1017
1018         * JavaScriptCore.xcodeproj/project.pbxproj: Re-sorted a few things and
1019         put the new source files into the kjs group rather than at the top level.
1020
1021         * kjs/ExecState.cpp:
1022         (KJS::ExecState::ExecState): Marked inline and updated for data member
1023         name changes. This is now only for use for the derived classes. Also removed
1024         code that sets the unused m_savedExec data member for the global case. That
1025         data member is only used for the other two types.
1026         (KJS::ExecState::~ExecState): Marked inline and removed all the code.
1027         The derived class destructors now inclde the appropriate code.
1028         (KJS::ExecState::lexicalGlobalObject): Removed unneeded special case for
1029         an empty scope chain. The bottom function already returns 0 for that case,
1030         so the general case code handles it fine. Also changed to use data members
1031         directly rather than calling functions.
1032         (KJS::GlobalExecState::GlobalExecState): Added. Calls through to the base
1033         class constructor.
1034         (KJS::GlobalExecState::~GlobalExecState): Added.
1035         (KJS::InterpreterExecState::InterpreterExecState): Added. Moved code to
1036         manipulate activeExecStates here since we don't want to have to check for the
1037         special case of globalExec.
1038         (KJS::InterpreterExecState::~InterpreterExecState): Added.
1039         (KJS::EvalExecState::EvalExecState): Added.
1040         (KJS::EvalExecState::~EvalExecState): Added.
1041         (KJS::FunctionExecState::FunctionExecState): Added.
1042         (KJS::FunctionExecState::~FunctionExecState): Added.
1043
1044         * kjs/ExecState.h: Tweaked the header, includes, and declarations a bit.
1045         Made ExecState inherit from Noncopyable. Reformatted some comments and
1046         made them a bit more brief. Rearranged declarations a little bit and removed
1047         unused savedExec function. Changed seenLabels function to return a reference
1048         rather than a pointer. Made constructors and destructor protected, and also
1049         did the same with all data members. Renamed m_thisVal to m_thisValue and
1050         ls to m_labelStack. Added three new derived classes for each of the
1051         types of ExecState. The primary goal here was to remove a branch from the
1052         code in the destructor, but it's also clearer than overloading the arguments
1053         to the ExecState constructor.
1054
1055         * kjs/JSGlobalObject.cpp:
1056         (KJS::getCurrentTime): Fixed formatting.
1057         (KJS::JSGlobalObject::pushActivation): Removed parentheses that don't make
1058         the expression clearer -- other similar sites didn't have these parentheses,
1059         even the one a couple lines earlier that sets stackEntry.
1060         (KJS::JSGlobalObject::tearOffActivation): Got rid of unneeded static_cast
1061         (I think I mentioned this during patch review) and used an early exit so that
1062         the entire contents of the function aren't nested inside an if statement.
1063         Also removed the check of codeType, instead checking Activation for 0.
1064         For now, I kept the codeType check, but inside an assertion.
1065
1066         * kjs/JSGlobalObject.h: Changed type of globalExec to GlobalExecState.
1067         * kjs/function.cpp:
1068         (KJS::FunctionImp::callAsFunction): Changed type to FunctionExecState.
1069         (KJS::GlobalFuncImp::callAsFunction): Changed type to EvalExecState.
1070         * kjs/interpreter.cpp:
1071         (KJS::Interpreter::evaluate): Changed type to GlobalExecState.
1072
1073         * kjs/nodes.cpp:
1074         (KJS::ContinueNode::execute): Changed code since seenLabels() returns a
1075         reference now instead of a pointer.
1076         (KJS::BreakNode::execute): Ditto.
1077         (KJS::LabelNode::execute): Ditto.
1078
1079 2008-01-26  Sam Weinig  <sam@webkit.org>
1080
1081         Reviewed by Mark Rowe.
1082
1083         Cleanup node2string a little.
1084         - Remove some unnecessary branching.
1085         - Factor out bracket and dot streaming into static inline functions.
1086
1087         * kjs/nodes.h:
1088         * kjs/nodes2string.cpp:
1089         (KJS::bracketNodeStreamTo):
1090         (KJS::dotNodeStreamTo):
1091         (KJS::FunctionCallBracketNode::streamTo):
1092         (KJS::FunctionCallDotNode::streamTo):
1093         (KJS::PostIncBracketNode::streamTo):
1094         (KJS::PostDecBracketNode::streamTo):
1095         (KJS::PostIncDotNode::streamTo):
1096         (KJS::PostDecDotNode::streamTo):
1097         (KJS::DeleteBracketNode::streamTo):
1098         (KJS::DeleteDotNode::streamTo):
1099         (KJS::PreIncBracketNode::streamTo):
1100         (KJS::PreDecBracketNode::streamTo):
1101         (KJS::PreIncDotNode::streamTo):
1102         (KJS::PreDecDotNode::streamTo):
1103         (KJS::ReadModifyBracketNode::streamTo):
1104         (KJS::AssignBracketNode::streamTo):
1105         (KJS::ReadModifyDotNode::streamTo):
1106         (KJS::AssignDotNode::streamTo):
1107         (KJS::WhileNode::streamTo):
1108
1109 2008-01-26  Mark Rowe  <mrowe@apple.com>
1110
1111         Reviewed by Darin Adler.
1112
1113         Fix http://bugs.webkit.org/show_bug.cgi?id=17001
1114         Bug 17001: Build error with Gtk port on Mac OS X
1115
1116         If both XP_MACOSX and XP_UNIX are defined then X11.h and Carbon.h will both be included.
1117         These provide conflicting definitions for a type named 'Cursor'.  As XP_UNIX is set by
1118         the build system when targeting X11, it doesn't make sense for XP_MACOSX to also be set
1119         in this instance.
1120
1121         * bindings/npapi.h: Don't define XP_MACOSX if XP_UNIX is defined.
1122
1123 2008-01-26  Darin Adler  <darin@apple.com>
1124
1125         Reviewed by Oliver.
1126
1127         - fix http://bugs.webkit.org/show_bug.cgi?id=17013
1128           JSC can't round trip certain for-loops
1129
1130         Test: fast/js/toString-for-var-decl.html
1131
1132         * kjs/nodes.h: Added PlaceholderTrueNode so we can put nodes into
1133         for loops without injecting the word "true" into them (nice, but not
1134         the bug fix). Fixed ForNode constructor so expr1WasVarDecl is set
1135         only when there is an expression, since it's common for the actual
1136         variable declaration to be moved by the parser.
1137
1138         * kjs/nodes2string.cpp:
1139         (KJS::PlaceholderTrueNode::streamTo): Added. Empty.
1140
1141 2008-01-25  Oliver Hunt  <oliver@apple.com>
1142
1143         Reviewed by Maciej.
1144
1145         Fix for bug 17012: REGRESSION: JSC can't round trip an object literal
1146
1147         Add logic to ensure that object literals and function expressions get
1148         parentheses when necessary.
1149
1150         * kjs/nodes.h:
1151         * kjs/nodes2string.cpp:
1152         (KJS::SourceStream::operator<<):
1153
1154 2008-01-24  Steve Falkenburg  <sfalken@apple.com>
1155
1156         Build fix.
1157
1158         * JavaScriptCore.vcproj/JavaScriptCore.sln:
1159
1160 2008-01-24  Steve Falkenburg  <sfalken@apple.com>
1161
1162         Build fix.
1163
1164         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
1165
1166 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1167
1168         Reviewed by Simon.
1169
1170         Fix QDateTime to JS Date conversion.
1171         Several conversion errors (some UTC related, some month
1172         offset related) and the conversion distance for Date
1173         to DateTime conversion weights were fixed (it should never
1174         be better to convert a JS Number into a Date rather than
1175         an int).
1176         
1177         * bindings/qt/qt_runtime.cpp:
1178         (KJS::Bindings::convertValueToQVariant):
1179         (KJS::Bindings::convertQVariantToValue):
1180
1181 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1182
1183         Reviewed by Simon.
1184
1185         Add support for calling QObjects.
1186         Add support for invokeDefaultMethod (via a call to
1187         a specific slot), and also allow using it as a
1188         constructor, like QtScript.
1189         
1190
1191         * bindings/qt/qt_class.cpp:
1192         (KJS::Bindings::QtClass::fallbackObject):
1193         * bindings/qt/qt_instance.cpp:
1194         (KJS::Bindings::QtRuntimeObjectImp::construct):
1195         (KJS::Bindings::QtInstance::QtInstance):
1196         (KJS::Bindings::QtInstance::~QtInstance):
1197         (KJS::Bindings::QtInstance::implementsCall):
1198         (KJS::Bindings::QtInstance::invokeDefaultMethod):
1199         * bindings/qt/qt_instance.h:
1200         * bindings/qt/qt_runtime.cpp:
1201         (KJS::Bindings::findMethodIndex):
1202         (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
1203         (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
1204         * bindings/qt/qt_runtime.h:
1205
1206 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1207
1208         Reviewed by Simon.
1209
1210         Code style cleanups.
1211         Add spaces before/after braces in inline function.
1212
1213         * bindings/qt/qt_instance.h:
1214
1215 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1216
1217         Reviewed by Simon.
1218
1219         Code style cleanups.
1220         Remove spaces and unneeded declared parameter names.
1221
1222         * bindings/qt/qt_instance.cpp:
1223         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
1224
1225 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1226
1227         Reviewed by Simon.
1228
1229         Clear stale RuntimeObjectImps.
1230         Since other objects can have refs to the QtInstance,
1231         we can't rely on the QtInstance being deleted when the
1232         RuntimeObjectImp is invalidate or deleted.  This
1233         could result in a stale JSObject being returned for
1234         a valid Instance.
1235
1236         * bindings/qt/qt_instance.cpp:
1237         (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
1238         (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
1239         (KJS::Bindings::QtRuntimeObjectImp::invalidate):
1240         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
1241         (KJS::Bindings::QtInstance::getRuntimeObject):
1242         * bindings/runtime.cpp:
1243         (KJS::Bindings::Instance::createRuntimeObject):
1244         * bindings/runtime.h:
1245
1246 2008-01-23  Alp Toker  <alp@atoker.com>
1247
1248         Rubber-stamped by Mark Rowe.
1249
1250         Remove whitespace after -I in automake include lists.
1251
1252         * GNUmakefile.am:
1253
1254 2008-01-23  Michael Goddard <michael.goddard@trolltech.com>
1255
1256         Reviewed by Lars Knoll <lars@trolltech.com>.
1257
1258         Reworked the JavaScriptCore Qt bindings:
1259         
1260         * Add initial support for string and variant arrays, as well
1261         as sub QObjects in the JS bindings.
1262         
1263         * Don't expose fields marked as not scriptable by moc.
1264         
1265         * Add support for dynamic properties and accessing named
1266         QObject children of an object (like QtScript and older
1267         IE DOM style JS).
1268         * Add support for custom toString methods.
1269         
1270         * Fine tune some bindings to be closer to QtScript.
1271         Make void functions return undefined, and empty/
1272         null QStrings return a zero length string.
1273         
1274         * Create framework for allowing more direct method calls.
1275         Since RuntimeMethod doesn't allow us to add additional
1276         methods/properties to a function, add these classes.
1277         Start prototyping object.signal.connect(...).
1278         
1279         * Add signal support to the Qt bindings.
1280         Allow connecting to signals (object.signal.connect(slot)),
1281         disconnecting, and emitting signals.  Currently chooses
1282         the first signal that matches the name, so this will need
1283         improvement.
1284         
1285         * Add property names, and resolve signals closer to use.
1286         Enumerating properties now returns some of the Qt properties
1287         and signals.  Slots and methods aren't quite present.  Also,
1288         resolve signal connections etc. closer to the time of use, so
1289         we can do more dynamic resolution based on argument type etc.
1290         Still picks the first one with the same name, at the moment.
1291         
1292         * Make signature comparison code consistent.
1293         Use the same code for checking meta signatures in
1294         the method and fallback getters, and avoid a
1295         QByteArray construction when we can.
1296         
1297         * Fix minor memory leak, and handle pointers better.
1298         Delete the private object in the dtors, and use RefPtrs
1299         for holding Instances etc.
1300         
1301         * Handle method lookup better.
1302         Allow invocation time method lookup based on the arguments,
1303         which is closer to QtScript behaviour.  Also, cache the
1304         method lists and delete them in the QtClass dtor (stops
1305         a memory leak).
1306         
1307         * Improve JS to Qt data type conversions.
1308         Add some support for Date & RegExp JS objects,
1309         and provide some metrics on the quality of the
1310         conversion.
1311         
1312         * A couple of fixes for autotest failures.
1313         Better support for converting lists, read/write only
1314         QMetaProperty support, modified slot search order...)
1315
1316         * bindings/qt/qt_class.cpp:
1317         (KJS::Bindings::QtClass::QtClass):
1318         (KJS::Bindings::QtClass::~QtClass):
1319         (KJS::Bindings::QtClass::name):
1320         (KJS::Bindings::QtClass::fallbackObject):
1321         (KJS::Bindings::QtClass::methodsNamed):
1322         (KJS::Bindings::QtClass::fieldNamed):
1323         * bindings/qt/qt_class.h:
1324         * bindings/qt/qt_instance.cpp:
1325         (KJS::Bindings::QtInstance::QtInstance):
1326         (KJS::Bindings::QtInstance::~QtInstance):
1327         (KJS::Bindings::QtInstance::getRuntimeObject):
1328         (KJS::Bindings::QtInstance::getClass):
1329         (KJS::Bindings::QtInstance::implementsCall):
1330         (KJS::Bindings::QtInstance::getPropertyNames):
1331         (KJS::Bindings::QtInstance::invokeMethod):
1332         (KJS::Bindings::QtInstance::invokeDefaultMethod):
1333         (KJS::Bindings::QtInstance::stringValue):
1334         (KJS::Bindings::QtInstance::booleanValue):
1335         (KJS::Bindings::QtInstance::valueOf):
1336         (KJS::Bindings::QtField::name):
1337         (KJS::Bindings::QtField::valueFromInstance):
1338         (KJS::Bindings::QtField::setValueToInstance):
1339         * bindings/qt/qt_instance.h:
1340         (KJS::Bindings::QtInstance::getBindingLanguage):
1341         (KJS::Bindings::QtInstance::getObject):
1342         * bindings/qt/qt_runtime.cpp:
1343         (KJS::Bindings::QWKNoDebug::QWKNoDebug):
1344         (KJS::Bindings::QWKNoDebug::~QWKNoDebug):
1345         (KJS::Bindings::QWKNoDebug::operator<<):
1346         (KJS::Bindings::):
1347         (KJS::Bindings::valueRealType):
1348         (KJS::Bindings::convertValueToQVariant):
1349         (KJS::Bindings::convertQVariantToValue):
1350         (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):
1351         (KJS::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
1352         (KJS::Bindings::QtRuntimeMethod::codeType):
1353         (KJS::Bindings::QtRuntimeMethod::execute):
1354         (KJS::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData):
1355         (KJS::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData):
1356         (KJS::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData):
1357         (KJS::Bindings::QtMethodMatchType::):
1358         (KJS::Bindings::QtMethodMatchType::QtMethodMatchType):
1359         (KJS::Bindings::QtMethodMatchType::kind):
1360         (KJS::Bindings::QtMethodMatchType::isValid):
1361         (KJS::Bindings::QtMethodMatchType::isVariant):
1362         (KJS::Bindings::QtMethodMatchType::isMetaType):
1363         (KJS::Bindings::QtMethodMatchType::isUnresolved):
1364         (KJS::Bindings::QtMethodMatchType::isMetaEnum):
1365         (KJS::Bindings::QtMethodMatchType::enumeratorIndex):
1366         (KJS::Bindings::QtMethodMatchType::variant):
1367         (KJS::Bindings::QtMethodMatchType::metaType):
1368         (KJS::Bindings::QtMethodMatchType::metaEnum):
1369         (KJS::Bindings::QtMethodMatchType::unresolved):
1370         (KJS::Bindings::QtMethodMatchType::typeId):
1371         (KJS::Bindings::QtMethodMatchType::name):
1372         (KJS::Bindings::QtMethodMatchData::QtMethodMatchData):
1373         (KJS::Bindings::QtMethodMatchData::isValid):
1374         (KJS::Bindings::QtMethodMatchData::firstUnresolvedIndex):
1375         (KJS::Bindings::indexOfMetaEnum):
1376         (KJS::Bindings::findMethodIndex):
1377         (KJS::Bindings::findSignalIndex):
1378         (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
1379         (KJS::Bindings::QtRuntimeMetaMethod::mark):
1380         (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
1381         (KJS::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
1382         (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
1383         (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
1384         (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
1385         (KJS::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod):
1386         (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
1387         (KJS::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
1388         (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
1389         (KJS::Bindings::QtConnectionObject::QtConnectionObject):
1390         (KJS::Bindings::QtConnectionObject::~QtConnectionObject):
1391         (KJS::Bindings::QtConnectionObject::metaObject):
1392         (KJS::Bindings::QtConnectionObject::qt_metacast):
1393         (KJS::Bindings::QtConnectionObject::qt_metacall):
1394         (KJS::Bindings::QtConnectionObject::execute):
1395         (KJS::Bindings::QtConnectionObject::match):
1396         (KJS::Bindings::::QtArray):
1397         (KJS::Bindings::::~QtArray):
1398         (KJS::Bindings::::rootObject):
1399         (KJS::Bindings::::setValueAt):
1400         (KJS::Bindings::::valueAt):
1401         * bindings/qt/qt_runtime.h:
1402         (KJS::Bindings::QtField::):
1403         (KJS::Bindings::QtField::QtField):
1404         (KJS::Bindings::QtField::fieldType):
1405         (KJS::Bindings::QtMethod::QtMethod):
1406         (KJS::Bindings::QtMethod::name):
1407         (KJS::Bindings::QtMethod::numParameters):
1408         (KJS::Bindings::QtArray::getLength):
1409         (KJS::Bindings::QtRuntimeMethod::d_func):
1410         (KJS::Bindings::QtRuntimeMetaMethod::d_func):
1411         (KJS::Bindings::QtRuntimeConnectionMethod::d_func):
1412         (KJS::Bindings::):
1413         * bindings/runtime.cpp:
1414         (KJS::Bindings::Instance::createBindingForLanguageInstance):
1415         (KJS::Bindings::Instance::createRuntimeObject):
1416         (KJS::Bindings::Instance::reallyCreateRuntimeObject):
1417         * bindings/runtime.h:
1418
1419 2008-01-22  Anders Carlsson  <andersca@apple.com>
1420
1421         Reviewed by Darin and Adam.
1422
1423         <rdar://problem/5688975>
1424         div element on microsoft site has wrong left offset.
1425         
1426         Return true even if NPN_GetProperty returns null or undefined. This matches Firefox 
1427         (and is what the Silverlight plug-in expects).
1428         
1429         * bindings/NP_jsobject.cpp:
1430         (_NPN_GetProperty):
1431
1432 2008-01-21  Geoffrey Garen  <ggaren@apple.com>
1433
1434         Reviewed by Maciej Stachowiak.
1435         
1436         Fixed http://bugs.webkit.org/show_bug.cgi?id=16909
1437         REGRESSION: Amazon.com crash (ActivationImp)
1438         
1439         (and a bunch of other crashes)
1440         
1441         Plus, a .7% SunSpider speedup to boot.
1442         
1443         Replaced the buggy currentExec and savedExec mechanisms with an
1444         explicit ExecState stack.
1445
1446         * kjs/collector.cpp:
1447         (KJS::Collector::collect): Explicitly mark the ExecState stack.
1448
1449         (KJS::Collector::reportOutOfMemoryToAllExecStates): Slight change in
1450         behavior: We no longer throw an exception in any global ExecStates,
1451         since global ExecStates are more like pseudo-ExecStates, and aren't
1452         used for script execution. (It's unclear what would happen if you left
1453         an exception waiting around in a global ExecState, but it probably
1454         wouldn't be good.)
1455
1456 2008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
1457
1458         Reviewed by Alp Toker.
1459
1460         http://bugs.webkit.org/show_bug.cgi?id=16955
1461         Get errors when cross-compile webkit-gtk
1462
1463         * GNUmakefile.am: removed ICU_CFLAGS
1464
1465 2008-01-18  Kevin McCullough  <kmccullough@apple.com>
1466
1467         - Build fix.
1468
1469         * kjs/ustring.h:
1470
1471 2008-01-18  Kevin McCullough  <kmccullough@apple.com>
1472
1473         - Build fix.
1474
1475         * kjs/ustring.cpp:
1476         * kjs/ustring.h:
1477         (KJS::UString::cost):
1478
1479 2008-01-18  Kevin McCullough  <kmccullough@apple.com>
1480
1481         Reviewed by Geoff.
1482
1483         - Correctly report cost of appended strings to trigger GC.
1484
1485         * kjs/ustring.cpp:
1486         (KJS::):
1487         (KJS::UString::Rep::create):
1488         (KJS::UString::UString): Don't create unnecssary objects.
1489         (KJS::UString::cost): Report cost if necessary but also keep track of 
1490         reported cost.
1491         * kjs/ustring.h:
1492
1493 2008-01-18  Simon Hausmann  <hausmann@webkit.org>
1494
1495         Reviewed by Holger.
1496
1497         Fix return type conversions from Qt slots to JS values.
1498         
1499         This also fixes fast/dom/open-and-close-by-DOM.html, which called
1500         layoutTestController.windowCount().
1501         
1502         When constructing the QVariant that holds the return type we cannot
1503         use the QVarian(Type) constuctor as that will create a null variant.
1504         We have to use the QVariant(Type, void *) constructor instead, just
1505         like in QMetaObject::read() for example.
1506         
1507
1508         * bindings/qt/qt_instance.cpp:
1509         (KJS::Bindings::QtInstance::getRuntimeObject):
1510
1511 2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
1512
1513         Reviewed by Simon Hausmann <hausmann@webkit.org>.
1514
1515         Fix compilation on Win64(2): Implemented currentThreadStackBase on X86-64 on Windows
1516         
1517
1518         * kjs/collector.cpp:
1519         (KJS::Collector::heapAllocate):
1520
1521 2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
1522
1523         Reviewed by Simon Hausmann <hausmann@webkit.org>.
1524
1525         Fix compilation on Win64(1): Define WTF_PLATFORM_X86_64 correctly on Win64.
1526         
1527
1528         * wtf/Platform.h:
1529
1530 2008-01-17  Antti Koivisto  <antti@apple.com>
1531
1532         Fix Windows build.
1533
1534         * kjs/regexp_object.cpp:
1535         (KJS::regExpProtoFuncToString):
1536
1537 2008-01-16  Sam Weinig  <sam@webkit.org>
1538
1539         Reviewed by Darin.
1540
1541         Fix for http://bugs.webkit.org/show_bug.cgi?id=16901
1542         Convert remaining JS function objects to use the new PrototypeFunction class
1543
1544         - Moves Boolean, Function, RegExp, Number, Object and Global functions to their
1545           own static function implementations so that they can be used with the
1546           PrototypeFunction class.  SunSpider says this is 1.003x as fast.
1547
1548         * kjs/JSGlobalObject.cpp:
1549         (KJS::JSGlobalObject::reset):
1550         * kjs/array_object.h:
1551         * kjs/bool_object.cpp:
1552         (KJS::BooleanInstance::BooleanInstance):
1553         (KJS::BooleanPrototype::BooleanPrototype):
1554         (KJS::booleanProtoFuncToString):
1555         (KJS::booleanProtoFuncValueOf):
1556         (KJS::BooleanObjectImp::BooleanObjectImp):
1557         (KJS::BooleanObjectImp::implementsConstruct):
1558         (KJS::BooleanObjectImp::construct):
1559         (KJS::BooleanObjectImp::callAsFunction):
1560         * kjs/bool_object.h:
1561         (KJS::BooleanInstance::classInfo):
1562         * kjs/error_object.cpp:
1563         (KJS::ErrorPrototype::ErrorPrototype):
1564         (KJS::errorProtoFuncToString):
1565         * kjs/error_object.h:
1566         * kjs/function.cpp:
1567         (KJS::globalFuncEval):
1568         (KJS::globalFuncParseInt):
1569         (KJS::globalFuncParseFloat):
1570         (KJS::globalFuncIsNaN):
1571         (KJS::globalFuncIsFinite):
1572         (KJS::globalFuncDecodeURI):
1573         (KJS::globalFuncDecodeURIComponent):
1574         (KJS::globalFuncEncodeURI):
1575         (KJS::globalFuncEncodeURIComponent):
1576         (KJS::globalFuncEscape):
1577         (KJS::globalFuncUnEscape):
1578         (KJS::globalFuncKJSPrint):
1579         (KJS::PrototypeFunction::PrototypeFunction):
1580         * kjs/function.h:
1581         * kjs/function_object.cpp:
1582         (KJS::FunctionPrototype::FunctionPrototype):
1583         (KJS::functionProtoFuncToString):
1584         (KJS::functionProtoFuncApply):
1585         (KJS::functionProtoFuncCall):
1586         * kjs/function_object.h:
1587         * kjs/number_object.cpp:
1588         (KJS::NumberPrototype::NumberPrototype):
1589         (KJS::numberProtoFuncToString):
1590         (KJS::numberProtoFuncToLocaleString):
1591         (KJS::numberProtoFuncValueOf):
1592         (KJS::numberProtoFuncToFixed):
1593         (KJS::numberProtoFuncToExponential):
1594         (KJS::numberProtoFuncToPrecision):
1595         * kjs/number_object.h:
1596         (KJS::NumberInstance::classInfo):
1597         (KJS::NumberObjectImp::classInfo):
1598         (KJS::NumberObjectImp::):
1599         * kjs/object_object.cpp:
1600         (KJS::ObjectPrototype::ObjectPrototype):
1601         (KJS::objectProtoFuncValueOf):
1602         (KJS::objectProtoFuncHasOwnProperty):
1603         (KJS::objectProtoFuncIsPrototypeOf):
1604         (KJS::objectProtoFuncDefineGetter):
1605         (KJS::objectProtoFuncDefineSetter):
1606         (KJS::objectProtoFuncLookupGetter):
1607         (KJS::objectProtoFuncLookupSetter):
1608         (KJS::objectProtoFuncPropertyIsEnumerable):
1609         (KJS::objectProtoFuncToLocaleString):
1610         (KJS::objectProtoFuncToString):
1611         * kjs/object_object.h:
1612         * kjs/regexp_object.cpp:
1613         (KJS::RegExpPrototype::RegExpPrototype):
1614         (KJS::regExpProtoFuncTest):
1615         (KJS::regExpProtoFuncExec):
1616         (KJS::regExpProtoFuncCompile):
1617         (KJS::regExpProtoFuncToString):
1618         * kjs/regexp_object.h:
1619
1620 2008-01-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1621
1622         Reviewed by Maciej & Darin.
1623
1624         Fixes Bug 16868: Gmail crash
1625           and Bug 16871: Crash when loading apple.com/startpage
1626
1627         <http://bugs.webkit.org/show_bug.cgi?id=16868>
1628         <rdar://problem/5686108>
1629
1630         <http://bugs.webkit.org/show_bug.cgi?id=16871>
1631         <rdar://problem/5686670>
1632
1633         Adds ActivationImp tear-off for cross-window eval() and fixes an
1634         existing garbage collection issue exposed by the ActivationImp tear-off
1635         patch (r29425) that can occur when an ExecState's m_callingExec is
1636         different than its m_savedExec.
1637
1638         * kjs/ExecState.cpp:
1639         (KJS::ExecState::mark):
1640         * kjs/function.cpp:
1641         (KJS::GlobalFuncImp::callAsFunction):
1642
1643 2008-01-16  Sam Weinig  <sam@webkit.org>
1644
1645         Reviewed by Oliver.
1646
1647         Clean up MathObjectImp, it needed a little scrubbing.
1648
1649         * kjs/math_object.cpp:
1650         (KJS::MathObjectImp::MathObjectImp):
1651         (KJS::MathObjectImp::getOwnPropertySlot):
1652         (KJS::MathObjectImp::getValueProperty):
1653         (KJS::mathProtoFuncACos):
1654         (KJS::mathProtoFuncASin):
1655         (KJS::mathProtoFuncATan):
1656         (KJS::mathProtoFuncATan2):
1657         (KJS::mathProtoFuncCos):
1658         (KJS::mathProtoFuncExp):
1659         (KJS::mathProtoFuncLog):
1660         (KJS::mathProtoFuncSin):
1661         (KJS::mathProtoFuncSqrt):
1662         (KJS::mathProtoFuncTan):
1663         * kjs/math_object.h:
1664         (KJS::MathObjectImp::classInfo):
1665         (KJS::MathObjectImp::):
1666
1667 2008-01-16  Sam Weinig  <sam@webkit.org>
1668
1669         Reviewed by Geoffrey Garen.
1670
1671         Rename Lexer variable bol to atLineStart.
1672
1673         * kjs/lexer.cpp:
1674         (KJS::Lexer::Lexer):
1675         (KJS::Lexer::setCode):
1676         (KJS::Lexer::nextLine):
1677         (KJS::Lexer::lex):
1678         * kjs/lexer.h:
1679
1680 2008-01-16  Sam Weinig  <sam@webkit.org>
1681
1682         Reviewed by Geoffrey Garen and Anders Carlsson.
1683
1684         Remove uses of KJS_PURE_ECMA as we don't ever build with it defined,
1685         and we have many features that are not included in the ECMA spec.
1686
1687         * kjs/lexer.cpp:
1688         (KJS::Lexer::Lexer):
1689         (KJS::Lexer::setCode):
1690         (KJS::Lexer::nextLine):
1691         (KJS::Lexer::lex):
1692         * kjs/lexer.h:
1693         * kjs/string_object.cpp:
1694         * kjs/string_object.h:
1695
1696 2008-01-15  Sam Weinig  <sam@webkit.org>
1697
1698         Reviewed by Geoffrey Garen.
1699
1700         Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size
1701
1702         - This changes the way JS functions that use Lookup tables are handled.  Instead of using
1703           one class per function, which allowed specialization of the virtual callAsFunction
1704           method, we now use one class, PrototypeFunction, which takes a pointer to a static
1705           function to use as the implementation.  This significantly decreases the binary size
1706           of JavaScriptCore (about 145k on an Intel only build) while still keeping some of the
1707           speedup r27608 garnered (SunSpider says this is 1.005x as slow, which should leave some
1708           wiggle room from the original 1% speedup) and keeps the functions implementations in separate
1709           functions to help with optimizations.
1710
1711         * JavaScriptCore.exp:
1712         * JavaScriptCore.xcodeproj/project.pbxproj:
1713         * kjs/array_object.cpp:
1714         (KJS::arrayProtoFuncToString):
1715         (KJS::arrayProtoFuncToLocaleString):
1716         (KJS::arrayProtoFuncJoin):
1717         (KJS::arrayProtoFuncConcat):
1718         (KJS::arrayProtoFuncPop):
1719         (KJS::arrayProtoFuncPush):
1720         (KJS::arrayProtoFuncReverse):
1721         (KJS::arrayProtoFuncShift):
1722         (KJS::arrayProtoFuncSlice):
1723         (KJS::arrayProtoFuncSort):
1724         (KJS::arrayProtoFuncSplice):
1725         (KJS::arrayProtoFuncUnShift):
1726         (KJS::arrayProtoFuncFilter):
1727         (KJS::arrayProtoFuncMap):
1728         (KJS::arrayProtoFuncEvery):
1729         (KJS::arrayProtoFuncForEach):
1730         (KJS::arrayProtoFuncSome):
1731         (KJS::arrayProtoFuncIndexOf):
1732         (KJS::arrayProtoFuncLastIndexOf):
1733         * kjs/array_object.h:
1734         * kjs/date_object.cpp:
1735         (KJS::DatePrototype::getOwnPropertySlot):
1736         (KJS::dateProtoFuncToString):
1737         (KJS::dateProtoFuncToUTCString):
1738         (KJS::dateProtoFuncToDateString):
1739         (KJS::dateProtoFuncToTimeString):
1740         (KJS::dateProtoFuncToLocaleString):
1741         (KJS::dateProtoFuncToLocaleDateString):
1742         (KJS::dateProtoFuncToLocaleTimeString):
1743         (KJS::dateProtoFuncValueOf):
1744         (KJS::dateProtoFuncGetTime):
1745         (KJS::dateProtoFuncGetFullYear):
1746         (KJS::dateProtoFuncGetUTCFullYear):
1747         (KJS::dateProtoFuncToGMTString):
1748         (KJS::dateProtoFuncGetMonth):
1749         (KJS::dateProtoFuncGetUTCMonth):
1750         (KJS::dateProtoFuncGetDate):
1751         (KJS::dateProtoFuncGetUTCDate):
1752         (KJS::dateProtoFuncGetDay):
1753         (KJS::dateProtoFuncGetUTCDay):
1754         (KJS::dateProtoFuncGetHours):
1755         (KJS::dateProtoFuncGetUTCHours):
1756         (KJS::dateProtoFuncGetMinutes):
1757         (KJS::dateProtoFuncGetUTCMinutes):
1758         (KJS::dateProtoFuncGetSeconds):
1759         (KJS::dateProtoFuncGetUTCSeconds):
1760         (KJS::dateProtoFuncGetMilliSeconds):
1761         (KJS::dateProtoFuncGetUTCMilliseconds):
1762         (KJS::dateProtoFuncGetTimezoneOffset):
1763         (KJS::dateProtoFuncSetTime):
1764         (KJS::dateProtoFuncSetMilliSeconds):
1765         (KJS::dateProtoFuncSetUTCMilliseconds):
1766         (KJS::dateProtoFuncSetSeconds):
1767         (KJS::dateProtoFuncSetUTCSeconds):
1768         (KJS::dateProtoFuncSetMinutes):
1769         (KJS::dateProtoFuncSetUTCMinutes):
1770         (KJS::dateProtoFuncSetHours):
1771         (KJS::dateProtoFuncSetUTCHours):
1772         (KJS::dateProtoFuncSetDate):
1773         (KJS::dateProtoFuncSetUTCDate):
1774         (KJS::dateProtoFuncSetMonth):
1775         (KJS::dateProtoFuncSetUTCMonth):
1776         (KJS::dateProtoFuncSetFullYear):
1777         (KJS::dateProtoFuncSetUTCFullYear):
1778         (KJS::dateProtoFuncSetYear):
1779         (KJS::dateProtoFuncGetYear):
1780         * kjs/date_object.h:
1781         * kjs/function.cpp:
1782         (KJS::PrototypeFunction::PrototypeFunction):
1783         (KJS::PrototypeFunction::callAsFunction):
1784         * kjs/function.h:
1785         * kjs/lookup.h:
1786         (KJS::HashEntry::):
1787         (KJS::staticFunctionGetter):
1788         * kjs/math_object.cpp:
1789         (KJS::mathProtoFuncAbs):
1790         (KJS::mathProtoFuncACos):
1791         (KJS::mathProtoFuncASin):
1792         (KJS::mathProtoFuncATan):
1793         (KJS::mathProtoFuncATan2):
1794         (KJS::mathProtoFuncCeil):
1795         (KJS::mathProtoFuncCos):
1796         (KJS::mathProtoFuncExp):
1797         (KJS::mathProtoFuncFloor):
1798         (KJS::mathProtoFuncLog):
1799         (KJS::mathProtoFuncMax):
1800         (KJS::mathProtoFuncMin):
1801         (KJS::mathProtoFuncPow):
1802         (KJS::mathProtoFuncRandom):
1803         (KJS::mathProtoFuncRound):
1804         (KJS::mathProtoFuncSin):
1805         (KJS::mathProtoFuncSqrt):
1806         (KJS::mathProtoFuncTan):
1807         * kjs/math_object.h:
1808         * kjs/string_object.cpp:
1809         (KJS::stringProtoFuncToString):
1810         (KJS::stringProtoFuncValueOf):
1811         (KJS::stringProtoFuncCharAt):
1812         (KJS::stringProtoFuncCharCodeAt):
1813         (KJS::stringProtoFuncConcat):
1814         (KJS::stringProtoFuncIndexOf):
1815         (KJS::stringProtoFuncLastIndexOf):
1816         (KJS::stringProtoFuncMatch):
1817         (KJS::stringProtoFuncSearch):
1818         (KJS::stringProtoFuncReplace):
1819         (KJS::stringProtoFuncSlice):
1820         (KJS::stringProtoFuncSplit):
1821         (KJS::stringProtoFuncSubstr):
1822         (KJS::stringProtoFuncSubstring):
1823         (KJS::stringProtoFuncToLowerCase):
1824         (KJS::stringProtoFuncToUpperCase):
1825         (KJS::stringProtoFuncToLocaleLowerCase):
1826         (KJS::stringProtoFuncToLocaleUpperCase):
1827         (KJS::stringProtoFuncLocaleCompare):
1828         (KJS::stringProtoFuncBig):
1829         (KJS::stringProtoFuncSmall):
1830         (KJS::stringProtoFuncBlink):
1831         (KJS::stringProtoFuncBold):
1832         (KJS::stringProtoFuncFixed):
1833         (KJS::stringProtoFuncItalics):
1834         (KJS::stringProtoFuncStrike):
1835         (KJS::stringProtoFuncSub):
1836         (KJS::stringProtoFuncSup):
1837         (KJS::stringProtoFuncFontcolor):
1838         (KJS::stringProtoFuncFontsize):
1839         (KJS::stringProtoFuncAnchor):
1840         (KJS::stringProtoFuncLink):
1841         * kjs/string_object.h:
1842
1843 2008-01-15  Geoffrey Garen  <ggaren@apple.com>
1844
1845         Reviewed by Adam Roben.
1846         
1847         Some tweaks to our headerdoc, suggested by David Gatwood on the docs
1848         team.
1849
1850         * API/JSBase.h:
1851         * API/JSObjectRef.h:
1852         * API/JSStringRef.h:
1853         * API/JSValueRef.h:
1854
1855 2008-01-15  Alp Toker  <alp@atoker.com>
1856
1857         Rubber-stamped by Anders.
1858
1859         Make the HTTP backend configurable in the GTK+ port. curl is currently
1860         the only option.
1861
1862         * wtf/Platform.h: Don't hard-code WTF_USE_CURL for GTK
1863
1864 2008-01-15  Sam Weinig  <sam@webkit.org>
1865
1866         Reviewed by Beth Dakin.
1867
1868         Remove unneeded variable.
1869
1870         * kjs/string_object.cpp:
1871         (KJS::StringProtoFuncSubstr::callAsFunction):
1872
1873 2008-01-14  Steve Falkenburg  <sfalken@apple.com>
1874
1875         Use shared vsprops for most vcproj properties.
1876         
1877         Reviewed by Darin.
1878
1879         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add missing Debug_Internal config.
1880         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add missing Debug_Internal config.
1881         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
1882
1883 2008-01-14  Adam Roben  <aroben@apple.com>
1884
1885         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
1886         some headers that were missing from the vcproj so their contents will
1887         be included in Find in Files.
1888
1889 2008-01-14  Adam Roben  <aroben@apple.com>
1890
1891         Fix Bug 16871: Crash when loading apple.com/startpage
1892
1893         <http://bugs.webkit.org/show_bug.cgi?id=16871>
1894         <rdar://problem/5686670>
1895
1896         Patch written by Darin, reviewed by me.
1897
1898         * kjs/ExecState.cpp:
1899         (KJS::ExecState::mark): Call ActivationImp::markChildren if our
1900         m_activation is on the stack. This is what ScopeChain::mark also does,
1901         but apparently in some cases it's possible for an ExecState's
1902         ActivationImp to not be in any ScopeChain.
1903
1904 2008-01-14  Kevin McCullough  <kmccullough@apple.com>
1905
1906         Reviewed by Oliver.
1907
1908         -<rdar://problem/5622667> REGRESSION (Leopard-ToT): Endless loading loop
1909         trying to view techreport.com comments
1910         - We need to set values in the map, because if they are already in the
1911         map they will not be reset when we use add().
1912
1913         * kjs/array_instance.cpp:
1914         (KJS::ArrayInstance::put):
1915
1916 2008-01-14  Darin Adler  <darin@apple.com>
1917
1918         Reviewed by Adam.
1919
1920         - re-speed-up the page load test (my StringImpl change slowed it down)
1921
1922         * wtf/RefCounted.h:
1923         (WTF::RefCounted::RefCounted): Allow derived classes to start with a reference
1924         count other than 0. Eventually everyone will want to start with a 1. This is a
1925         staged change. For now, there's a default of 0, and you can specify 1. Later,
1926         there will be no default and everyone will have to specify. And then later, there
1927         will be a default of 1. Eventually, we can take away even the option of starting
1928         with 0!
1929
1930         * wtf/Vector.h:
1931         (WTF::Vector::Vector): Sped up creation of non-empty vectors by removing the
1932         overhead of first constructing something empty and then calling resize.
1933         (WTF::Vector::clear): Sped up the common case of calling clear on an empty
1934         vector by adding a check for that case.
1935         (WTF::Vector::releaseBuffer): Marked this function inline and removed a branch
1936         in the case of vectors with no inline capacity (normal vectors) by leaving out
1937         the code to copy the inline buffer in that case.
1938
1939 2008-01-14  Alexey Proskuryakov  <ap@webkit.org>
1940
1941         Reviewed by David Kilzer.
1942
1943         http://bugs.webkit.org/show_bug.cgi?id=16787
1944         array.splice() with 1 element not working
1945
1946         Test: fast/js/array-splice.html
1947
1948         * kjs/array_object.cpp:
1949         (KJS::ArrayProtoFuncSplice::callAsFunction): Implement this Mozilla extension, and fix
1950         some other edge cases.
1951
1952 2008-01-13  Steve Falkenburg  <sfalken@apple.com>
1953
1954         Share common files across projects.
1955         
1956         Unify vsprops files
1957         Debug:          common.vsprops, debug.vsprops
1958         Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
1959         Release:        common.vsprops, release.vsprops
1960         
1961         Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
1962         debug_internal.vsprops will be mostly empty except for file path prefix modifiers.
1963
1964         Reviewed by Adam Roben.
1965
1966         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1967         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1968         * JavaScriptCore.vcproj/debug.vsprops: Removed.
1969         * JavaScriptCore.vcproj/debug_internal.vsprops: Removed.
1970         * JavaScriptCore.vcproj/release.vsprops: Removed.
1971         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
1972
1973 2008-01-13  Marius Bugge Monsen  <mbm@trolltech.com>
1974
1975         Contributions and review by Adriaan de Groot,
1976         Simon Hausmann, Eric Seidel, and Darin Adler.
1977
1978         - http://bugs.webkit.org/show_bug.cgi?id=16590
1979           Compilation fixes for Solaris.
1980
1981         * kjs/DateMath.h:
1982         (KJS::GregorianDateTime::GregorianDateTime): Use the WIN_OS code path
1983         for SOLARIS too, presumably because Solaris also lacks the tm_gtoff and tm_zone
1984         fields.
1985         (KJS::GregorianDateTime::operator tm): Ditto.
1986
1987         * kjs/collector.cpp:
1988         (KJS::currentThreadStackBase): Use thr_stksegment on Solaris.
1989
1990         * wtf/MathExtras.h:
1991         (isfinite): Implement for Solaris.
1992         (isinf): Ditto.
1993         (signbit): Ditto. But this one is wrong, so I added a FIXME.
1994
1995         * wtf/Platform.h: Define PLATFORM(SOLARIS) when "sun" or "__sun" is defined.
1996
1997 2008-01-13  Michael Goddard  <michael.goddard@trolltech.com>
1998
1999         Reviewed by Anders Carlsson.
2000
2001         Add binding language type to Instance.
2002         Allows runtime determination of the type of an
2003         Instance, to allow safe casting.  Doesn't actually
2004         add any safe casting yet, though.
2005
2006         Add a helper function to get an Instance from a JSObject*.
2007         Given an object and the expected binding language, see if
2008         the JSObject actually wraps an Instance of the given type
2009         and return it.  Otherwise return 0.
2010
2011         Move RuntimeObjectImp creations into Instance.
2012         Make the ctor protected, and Instance a friend class, so
2013         that all creation of RuntimeObjectImps goes through
2014         one place.
2015
2016         Remove copy ctor/assignment operator for QtInstance.
2017         Instance itself is Noncopyable, so QtInstance doesn't
2018         need to have these.
2019
2020         Add caching for QtInstance and associated RuntimeObjectImps.
2021         Push any dealings with QtLanguage bindings into QtInstance,
2022         and cache them there, rather than in the Instance layer.  Add
2023         a QtRuntimeObjectImp to help with caching.
2024
2025         * JavaScriptCore.exp:
2026         * bindings/c/c_instance.h:
2027         * bindings/jni/jni_instance.h:
2028         * bindings/objc/objc_instance.h:
2029         * bindings/qt/qt_instance.cpp:
2030         (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
2031         (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
2032         (KJS::Bindings::QtRuntimeObjectImp::invalidate):
2033         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
2034         (KJS::Bindings::QtInstance::QtInstance):
2035         (KJS::Bindings::QtInstance::~QtInstance):
2036         (KJS::Bindings::QtInstance::getQtInstance):
2037         (KJS::Bindings::QtInstance::getRuntimeObject):
2038         * bindings/qt/qt_instance.h:
2039         (KJS::Bindings::QtInstance::getBindingLanguage):
2040         * bindings/runtime.cpp:
2041         (KJS::Bindings::Instance::createBindingForLanguageInstance):
2042         (KJS::Bindings::Instance::createRuntimeObject):
2043         (KJS::Bindings::Instance::getInstance):
2044         * bindings/runtime.h:
2045         * bindings/runtime_object.h:
2046         (KJS::RuntimeObjectImp::getInternalInstance):
2047
2048 2008-01-12  Alp Toker  <alp@atoker.com>
2049
2050         Reviewed by Mark Rowe.
2051
2052         Hide non-public symbols in GTK+/autotools release builds.
2053
2054         * GNUmakefile.am:
2055
2056 2008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2057
2058         Reviewed by Mark Rowe.
2059
2060         Fix http://bugs.webkit.org/show_bug.cgi?id=16852
2061         Fixes leaking of ActivationStackNode objects.
2062
2063         * kjs/JSGlobalObject.cpp:
2064         (KJS::JSGlobalObject::deleteActivationStack):
2065         (KJS::JSGlobalObject::~JSGlobalObject):
2066         (KJS::JSGlobalObject::init):
2067         (KJS::JSGlobalObject::reset):
2068         * kjs/JSGlobalObject.h:
2069
2070 2008-01-12  Darin Adler  <darin@apple.com>
2071
2072         - try to fix Qt Windows build
2073
2074         * pcre/dftables: Remove reliance on the list form of Perl pipes.
2075
2076 2008-01-12  Darin Adler  <darin@apple.com>
2077
2078         - try to fix Qt build
2079
2080         * kjs/function.cpp: Added include of scope_chain_mark.h.
2081         * kjs/scope_chain_mark.h: Added multiple-include guards.
2082
2083 2008-01-12  Mark Rowe  <mrowe@apple.com>
2084
2085         Another Windows build fix.
2086
2087         * kjs/Activation.h:
2088
2089 2008-01-12  Mark Rowe  <mrowe@apple.com>
2090
2091         Attempted Windows build fix.  Use struct consistently when forward-declaring
2092         ActivationStackNode and StackActivation.
2093
2094         * kjs/Activation.h:
2095         * kjs/JSGlobalObject.h:
2096
2097 2008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2098
2099         Reviewed by Maciej.
2100
2101         Fixes a problem with the ActivationImp tear-off patch (r29425) where
2102         some of the calls to JSGlobalObject::tearOffActivation() were using
2103         the wrong test to determine whether it should leave a relic behind.
2104
2105         * kjs/function.cpp:
2106         (KJS::FunctionImp::argumentsGetter):
2107         (KJS::ActivationImp::getOwnPropertySlot):
2108
2109 2008-01-11  Geoffrey Garen  <ggaren@apple.com>
2110
2111         Reviewed by Oliver Hunt.
2112         
2113         Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global
2114         variable access (16644)
2115         
2116         This bug was caused by var declarations shadowing built-in properties of
2117         the global object.
2118         
2119         To match Firefox, we've decided that var declarations will never shadow
2120         built-in properties of the global object or its prototypes. We used to
2121         behave more like IE, which allows shadowing, but walking that line got
2122         us into trouble with websites that sent us down the Firefox codepath.
2123
2124         * kjs/JSVariableObject.h:
2125         (KJS::JSVariableObject::symbolTableGet): New code to support calling
2126         hasProperty before the variable object is fully initialized (so you
2127         can call it during initialization).
2128
2129         * kjs/nodes.cpp:.
2130         (KJS::ProgramNode::initializeSymbolTable): Always do a full hasProperty
2131         check when looking for duplicates, not getDirect, since it only checks
2132         the property map, and not hasOwnProperty, since it doesn't check
2133         prototypes.
2134         (KJS::EvalNode::processDeclarations): ditto
2135
2136         * kjs/property_slot.h:
2137         (KJS::PropertySlot::ungettableGetter): Best function name evar.
2138
2139 2008-01-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2140
2141         Reviewed by Maciej.
2142
2143         Optimized ActivationImp allocation, so that activation records are now
2144         first allocated on an explicitly managed stack and only heap allocated
2145         when necessary. Roughly a 5% improvement on SunSpider, and a larger
2146         improvement on benchmarks that use more function calls.
2147
2148         * JavaScriptCore.xcodeproj/project.pbxproj:
2149         * kjs/Activation.h: Added.
2150         (KJS::ActivationImp::ActivationData::ActivationData):
2151         (KJS::ActivationImp::ActivationImp):
2152         (KJS::ActivationImp::classInfo):
2153         (KJS::ActivationImp::isActivationObject):
2154         (KJS::ActivationImp::isOnStack):
2155         (KJS::ActivationImp::d):
2156         (KJS::StackActivation::StackActivation):
2157         * kjs/ExecState.cpp:
2158         (KJS::ExecState::ExecState):
2159         (KJS::ExecState::~ExecState):
2160         * kjs/ExecState.h:
2161         (KJS::ExecState::replaceScopeChainTop):
2162         (KJS::ExecState::setActivationObject):
2163         (KJS::ExecState::setLocalStorage):
2164         * kjs/JSGlobalObject.cpp:
2165         (KJS::JSGlobalObject::reset):
2166         (KJS::JSGlobalObject::pushActivation):
2167         (KJS::JSGlobalObject::checkActivationCount):
2168         (KJS::JSGlobalObject::popActivationHelper):
2169         (KJS::JSGlobalObject::popActivation):
2170         (KJS::JSGlobalObject::tearOffActivation):
2171         * kjs/JSGlobalObject.h:
2172         * kjs/JSVariableObject.h:
2173         (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
2174         (KJS::JSVariableObject::JSVariableObject):
2175         * kjs/function.cpp:
2176         (KJS::FunctionImp::argumentsGetter):
2177         (KJS::ActivationImp::ActivationImp):
2178         (KJS::ActivationImp::~ActivationImp):
2179         (KJS::ActivationImp::init):
2180         (KJS::ActivationImp::getOwnPropertySlot):
2181         (KJS::ActivationImp::markHelper):
2182         (KJS::ActivationImp::mark):
2183         (KJS::ActivationImp::ActivationData::ActivationData):
2184         (KJS::GlobalFuncImp::callAsFunction):
2185         * kjs/function.h:
2186         * kjs/nodes.cpp:
2187         (KJS::PostIncResolveNode::evaluate):
2188         (KJS::PostDecResolveNode::evaluate):
2189         (KJS::PreIncResolveNode::evaluate):
2190         (KJS::PreDecResolveNode::evaluate):
2191         (KJS::ReadModifyResolveNode::evaluate):
2192         (KJS::AssignResolveNode::evaluate):
2193         (KJS::WithNode::execute):
2194         (KJS::TryNode::execute):
2195         (KJS::FunctionBodyNode::processDeclarations):
2196         (KJS::FuncExprNode::evaluate):
2197         * kjs/object.h:
2198         * kjs/scope_chain.h:
2199         (KJS::ScopeChain::replace):
2200         * kjs/scope_chain_mark.h: Added.
2201         (KJS::ScopeChain::mark):
2202
2203 2008-01-11  Simon Hausmann  <hausmann@webkit.org>
2204
2205         Reviewed by Mark Rowe.
2206
2207         Fix the (clean) qmake build. For generating chartables.c we don't
2208         depend on a separate input source file anymore, the dftables perl
2209         script is enough. So use that instead as value for the .input
2210         variable, to ensure that qmake also generates a rule to call dftables.
2211
2212         * pcre/pcre.pri:
2213
2214 2008-01-10  Geoffrey Garen  <ggaren@apple.com>
2215
2216         Reviewed by John Sullivan.
2217
2218         Fixed some world leak reports:
2219         * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
2220         Interpreter after running cvs-base suite
2221
2222         * <rdar://problem/5669423> PLT complains about world leak if browser
2223         window is open when PLT starts
2224         
2225         * kjs/collector.h: Added the ability to distinguish between global
2226         objects and GC-protected global objects, since we only consider the
2227         latter to be world leaks.
2228         * kjs/collector.cpp:
2229
2230 2008-01-11  Mark Rowe  <mrowe@apple.com>
2231
2232         Silence qmake warning about ctgen lacking input.
2233
2234         Rubber-stamped by Alp Toker.
2235
2236         * pcre/pcre.pri:
2237
2238 2008-01-10  David Kilzer  <ddkilzer@apple.com>
2239
2240         dftables should be rewritten as a script
2241
2242         <http://bugs.webkit.org/show_bug.cgi?id=16818>
2243         <rdar://problem/5681463>
2244
2245         Reviewed by Darin.
2246
2247         Rewrote the dftables utility in Perl.  Attempted to switch all
2248         build systems to call the script directly instead of building
2249         a binary first.  Only the Xcode build was able to be tested.
2250
2251         * DerivedSources.make: Added pcre directory to VPATH and changed
2252         to invoke dftables directly.
2253         * GNUmakefile.am: Removed build information and changed to invoke
2254         dftables directly.
2255         * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed reference to
2256         dftables project.
2257         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
2258         * JavaScriptCore.vcproj/dftables: Removed.
2259         * JavaScriptCore.vcproj/dftables/dftables.vcproj: Removed.
2260         * JavaScriptCore.xcodeproj/project.pbxproj: Removed dftables target.
2261         * jscore.bkl: Removed dftables executable definition.
2262         * pcre/dftables: Copied from JavaScriptCore/pcre/dftables.cpp.
2263         * pcre/dftables.cpp: Removed.
2264         * pcre/dftables.pro: Removed.
2265         * pcre/pcre.pri: Removed references to dftables.cpp and changed to
2266         invoke dftables directly.
2267
2268 2008-01-10  Dan Bernstein  <mitz@apple.com>
2269
2270         Reviewed by Darin Adler.
2271
2272         - fix http://bugs.webkit.org/show_bug.cgi?id=16782
2273           <rdar://problem/5675331> REGRESSION(r29266): Reproducible crash in fast/replaced/image-map.html
2274
2275         The crash resulted from a native object (DumpRenderTree's
2276         EventSender) causing its wrapper to be invalidated (by clicking a
2277         link that replaced the document in the window) and consequently
2278         deallocated. The fix is to use RefPtrs to protect the native object
2279         from deletion by self-invalidation.
2280
2281         * bindings/runtime_method.cpp:
2282         (RuntimeMethod::callAsFunction):
2283         * bindings/runtime_object.cpp:
2284         (RuntimeObjectImp::fallbackObjectGetter):
2285         (RuntimeObjectImp::fieldGetter):
2286         (RuntimeObjectImp::methodGetter):
2287         (RuntimeObjectImp::put):
2288         (RuntimeObjectImp::defaultValue):
2289         (RuntimeObjectImp::callAsFunction):
2290
2291 2008-01-07  Mark Rowe  <mrowe@apple.com>
2292
2293         Reviewed by Maciej Stachowiak.
2294
2295         Turn testIsInteger assertions into compile-time asserts and move them into HashTraits.h
2296         where possible.
2297
2298         * kjs/testkjs.cpp:
2299         * wtf/HashTraits.h:
2300
2301 2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>
2302
2303         Reviewed by Mark.
2304
2305         Enable SVG_FONTS by default.
2306
2307         * Configurations/JavaScriptCore.xcconfig:
2308
2309 2008-01-07  Darin Adler  <darin@apple.com>
2310
2311         Rubber stamped by David Kilzer.
2312
2313         - get rid of empty fpconst.cpp
2314
2315         * GNUmakefile.am: Remove fpconst.cpp.
2316         * JavaScriptCore.pri: Ditto.
2317         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
2318         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
2319         * JavaScriptCoreSources.bkl: Ditto.
2320
2321         * kjs/fpconst.cpp: Removed.
2322
2323 2008-01-07  Darin Adler  <darin@apple.com>
2324
2325         Reviewed by David Kilzer.
2326
2327         - fix alignment problem with NaN and Inf globals
2328
2329         * kjs/fpconst.cpp: Move the contents of this file from here back to
2330         value.cpp. The reason this was in a separate file is that the DARWIN
2331         version of this used a declaration of the globals with a different
2332         type to avoid creating "init routines". That's no longer necessary for
2333         DARWIN and was never necessary for the non-DARWIN code path.
2334         To make this patch easy to merge, I didn't actually delete this file
2335         yet. We'll do that in a separate changeset.
2336
2337         * kjs/value.cpp: If C99's NAN and INFINITY are present, then use them,
2338         othrewise use the union trick from fpconst.cpp. I think it would be
2339         better to eliminate KJS::NaN and KJS::Inf and just use NAN and INFINITY
2340         directly or std::numeric_limits<double>::quiet_nan() and
2341         std::numeric_limits<double>::infinity(). But when I tried that, it
2342         slowed down SunSpider. Someone else could do that cleanup if they
2343         could do it without slowing down the engine.
2344
2345 2008-01-07  Adam Roben  <aroben@apple.com>
2346
2347         Windows build fix
2348
2349         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
2350         JavaScript.h to the project.
2351         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
2352         Copy JavaScript.h to WEBKITOUTPUTDIR.
2353
2354 2008-01-07  Timothy Hatcher  <timothy@apple.com>
2355
2356         Reviewed by Darin.
2357
2358         Fix Mac build.
2359
2360         * API/JSNode.c:
2361         * API/JSNode.h:
2362         * API/JSNodeList.c:
2363         * API/JSNodeList.h:
2364         * API/JavaScript.h:
2365         * API/JavaScriptCore.h:
2366         * API/minidom.c:
2367         * JavaScriptCore.xcodeproj/project.pbxproj:
2368
2369 2008-01-07  Alp Toker  <alp@atoker.com>
2370
2371         Reviewed by Darin.
2372
2373         http://bugs.webkit.org/show_bug.cgi?id=16029
2374         JavaScriptCore.h is not suitable for platforms other than Mac OS X
2375
2376         Introduce a new JavaScriptCore/JavaScript.h public API header. This
2377         should be used by all new portable code using the JavaScriptCore API.
2378
2379         JavaScriptCore/JavaScriptCore.h will remain for compatibility with
2380         existing applications that depend on it including JSStringRefCF.h
2381         which isn't portable.
2382
2383         Also add minidom to the GTK+/autotools build since we can now support
2384         it on all platforms.
2385
2386         * API/JSNode.h:
2387         * API/JSNodeList.h:
2388         * API/JavaScript.h: Added.
2389         * API/JavaScriptCore.h:
2390         * ForwardingHeaders/JavaScriptCore/JavaScript.h: Added.
2391         * GNUmakefile.am:
2392         * JavaScriptCore.xcodeproj/project.pbxproj:
2393
2394 2008-01-06  Eric Seidel  <eric@webkit.org>
2395
2396         Reviewed by Sam.
2397
2398         Abstract all DateObject.set* functions in preparation for fixing:
2399         http://bugs.webkit.org/show_bug.cgi?id=16753
2400         
2401         SunSpider had random changes here and there but was overall a wash.
2402
2403         * kjs/date_object.cpp:
2404         (KJS::fillStructuresUsingTimeArgs):
2405         (KJS::setNewValueFromTimeArgs):
2406         (KJS::setNewValueFromDateArgs):
2407         (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
2408         (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
2409         (KJS::DateProtoFuncSetSeconds::callAsFunction):
2410         (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
2411         (KJS::DateProtoFuncSetMinutes::callAsFunction):
2412         (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
2413         (KJS::DateProtoFuncSetHours::callAsFunction):
2414         (KJS::DateProtoFuncSetUTCHours::callAsFunction):
2415         (KJS::DateProtoFuncSetDate::callAsFunction):
2416         (KJS::DateProtoFuncSetUTCDate::callAsFunction):
2417         (KJS::DateProtoFuncSetMonth::callAsFunction):
2418         (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
2419         (KJS::DateProtoFuncSetFullYear::callAsFunction):
2420         (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
2421
2422 2008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>
2423
2424         Reviewed by Dan.
2425
2426         Add new helper function isArabicChar - SVG Fonts support needs it.
2427
2428         * wtf/unicode/icu/UnicodeIcu.h:
2429         (WTF::Unicode::isArabicChar):
2430         * wtf/unicode/qt4/UnicodeQt4.h:
2431         (WTF::Unicode::isArabicChar):
2432
2433 2008-01-06  Alp Toker  <alp@atoker.com>
2434
2435         Reviewed by Mark Rowe.
2436
2437         Use $(EXEEXT) to account for the .exe extension in the GTK+ Windows
2438         build. (This is already done correctly in DerivedSources.make.) Issue
2439         noticed by Mikkel when building in Cygwin.
2440
2441         Add a missing slash. This was a hack from the qmake build system that
2442         isn't necessary with autotools.
2443
2444         * GNUmakefile.am:
2445
2446 2008-01-05  Darin Adler  <darin@apple.com>
2447
2448         * API/JSRetainPtr.h: One more file that needed the change below.
2449
2450 2008-01-05  Darin Adler  <darin@apple.com>
2451
2452         * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.
2453
2454 2008-01-05  Adam Roben  <aroben@apple.com>
2455
2456         Build fix.
2457
2458         Reviewed by Maciej.
2459
2460         * wtf/RetainPtr.h: Use PtrType instead of T* because of the
2461         RemovePointer magic.
2462
2463 2008-01-05  Darin Adler  <darin@apple.com>
2464
2465         Rubber stamped by Maciej Stachowiak.
2466
2467         - cut down own PIC branches by using a pointer-to-member-data instead of a
2468           pointer-to-member-function in WTF smart pointers
2469
2470         * wtf/OwnArrayPtr.h:
2471         * wtf/OwnPtr.h:
2472         * wtf/PassRefPtr.h:
2473         * wtf/RefPtr.h:
2474         * wtf/RetainPtr.h:
2475         Use a pointer to the m_ptr member instead of the get member.
2476         The GCC compiler generates better code for this idiom.
2477
2478 2008-01-05  Henry Mason  <hmason@mac.com>
2479
2480         Reviewed by Maciej Stachowiak.
2481
2482         http://bugs.webkit.org/show_bug.cgi?id=16738
2483         Bug 16738: Collector block offset could be stored as an cell offset instead of a byte offset
2484
2485         Gives a 0.4% SunSpider boost and prettier code.
2486
2487         * kjs/collector.cpp: Switched to cell offsets from byte offsets
2488         (KJS::Collector::heapAllocate):
2489         (KJS::Collector::sweep):
2490
2491 2008-01-04  Mark Rowe  <mrowe@apple.com>
2492
2493         Reviewed by Maciej Stachowiak.
2494
2495         Have the two malloc zones print useful diagnostics if their free method are unexpectedly invoked.
2496         Due to <rdar://problem/5671357> this can happen if an application attempts to free a pointer that
2497         was not allocated by any registered malloc zone on the system.
2498
2499         * kjs/CollectorHeapIntrospector.h:
2500         * wtf/FastMalloc.cpp:
2501
2502 2008-01-04  Alp Toker  <alp@atoker.com>
2503
2504         GTK+ autotools build fix. Terminate empty rules.
2505
2506         * GNUmakefile.am:
2507
2508 2008-01-03  Simon Hausmann  <hausmann@webkit.org>
2509
2510         Reviewed by Mark Rowe.
2511
2512         Fix compilation with gcc 4.3: limits.h is needed for INT_MAX.
2513
2514         * pcre/pcre_exec.cpp:
2515
2516 2008-01-03  Darin Adler  <darin@apple.com>
2517
2518         * tests/mozilla/expected.html: The fix for bug 16696 also fixed a test
2519         case, ecma_3/RegExp/perlstress-002.js, so updated results to expect
2520         that test to succeed.
2521
2522 2008-01-02  Darin Adler  <darin@apple.com>
2523
2524         Reviewed by Geoff.
2525
2526         - fix http://bugs.webkit.org/show_bug.cgi?id=16696
2527           JSCRE fails fails to match Acid3 regexp
2528
2529         Test: fast/regex/early-acid3-86.html
2530
2531         The problem was with the cutoff point between backreferences and octal
2532         escape sequences. We need to determine the cutoff point by counting the
2533         total number of capturing brackets, which requires an extra pass through
2534         the expression when compiling it.
2535
2536         * pcre/pcre_compile.cpp:
2537         (CompileData::CompileData): Added numCapturingBrackets. Removed some
2538         unused fields.
2539         (compileBranch): Use numCapturingBrackets when calling checkEscape.
2540         (calculateCompiledPatternLength): Use numCapturingBrackets when calling
2541         checkEscape, and also store the bracket count at the end of the compile.
2542         (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
2543         count the number of brackets and then a second time to calculate the length.
2544
2545 2008-01-02  Darin Adler  <darin@apple.com>
2546
2547         Reviewed by Geoff.
2548
2549         - fix http://bugs.webkit.org/show_bug.cgi?id=16696
2550           JSCRE fails fails to match Acid3 regexp
2551
2552         Test: fast/regex/early-acid3-86.html
2553
2554         The problem was with the cutoff point between backreferences and octal
2555         escape sequences. We need to determine the cutoff point by counting the
2556         total number of capturing brackets, which requires an extra pass through
2557         the expression when compiling it.
2558
2559         * pcre/pcre_compile.cpp:
2560         (CompileData::CompileData): Added numCapturingBrackets. Removed some
2561         unused fields.
2562         (compileBranch): Use numCapturingBrackets when calling checkEscape.
2563         (calculateCompiledPatternLength): Use numCapturingBrackets when calling
2564         checkEscape, and also store the bracket count at the end of the compile.
2565         (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
2566         count the number of brackets and then a second time to calculate the length.
2567
2568 2008-01-02  David Kilzer <ddkilzer@webkit.org>
2569
2570         Reviewed and landed by Darin.
2571
2572         * kjs/nodes.cpp:
2573         (KJS::DoWhileNode::execute): Added a missing return.
2574
2575 2008-01-02  Darin Adler  <darin@apple.com>
2576
2577         - try to fix Qt build
2578
2579         * wtf/unicode/qt4/UnicodeQt4.h:
2580         (WTF::Unicode::foldCase): Add some missing const.
2581
2582 2008-01-02  Alice Liu  <alice.liu@apple.com>
2583
2584         Reviewed by Sam Weinig.
2585
2586         need to export ASCIICType.h for use in DRT
2587
2588         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2589         * wtf/ASCIICType.h:
2590         (WTF::isASCIIUpper):
2591
2592 2008-01-02  Sam Weinig  <sam@webkit.org>
2593
2594         Reviewed by Beth Dakin.
2595
2596         Cleanup error_object.h/cpp.
2597
2598         * kjs/JSGlobalObject.cpp:
2599         (KJS::JSGlobalObject::reset):
2600         * kjs/error_object.cpp:
2601         (KJS::):
2602         (KJS::ErrorInstance::ErrorInstance):
2603         (KJS::ErrorPrototype::ErrorPrototype):
2604         (KJS::ErrorProtoFuncToString::ErrorProtoFuncToString):
2605         (KJS::ErrorProtoFuncToString::callAsFunction):
2606         (KJS::ErrorObjectImp::ErrorObjectImp):
2607         (KJS::ErrorObjectImp::implementsConstruct):
2608         (KJS::ErrorObjectImp::construct):
2609         (KJS::ErrorObjectImp::callAsFunction):
2610         (KJS::NativeErrorPrototype::NativeErrorPrototype):
2611         (KJS::NativeErrorImp::NativeErrorImp):
2612         (KJS::NativeErrorImp::implementsConstruct):
2613         (KJS::NativeErrorImp::construct):
2614         (KJS::NativeErrorImp::callAsFunction):
2615         (KJS::NativeErrorImp::mark):
2616         * kjs/error_object.h:
2617         (KJS::ErrorInstance::classInfo):
2618         (KJS::NativeErrorImp::classInfo):
2619
2620 2008-01-02  Mark Rowe  <mrowe@apple.com>
2621
2622         Rubber-stamped by Alp Toker.
2623
2624         * GNUmakefile.am: Add missing dependency on grammar.y.
2625
2626 2008-01-01  Darin Adler  <darin@apple.com>
2627
2628         Reviewed by Eric.
2629
2630         - fix for http://bugs.webkit.org/show_bug.cgi?id=16695
2631           JSC allows non-identifier codepoints in identifiers (affects Acid3)
2632
2633         Test: fast/js/kde/parse.html
2634
2635         * kjs/lexer.cpp:
2636         (KJS::Lexer::lex): Added additional states to distinguish Unicode escapes at the
2637         start of identifiers from ones inside identifiers. Rejected characters that don't pass
2638         the isIdentStart and isIdentPart tests.
2639         (KJS::Lexer::convertUnicode): Removed incorrect FIXME comment.
2640
2641         * kjs/lexer.h: Added new states to distinguish \u escapes at the start of identifiers
2642         from \u escapes inside identifiers.
2643
2644 2008-01-01  Darin Adler  <darin@apple.com>
2645
2646         - rolled scope chain optimization out; it was breaking the world
2647
2648 2008-01-01  Darin Adler  <darin@apple.com>
2649
2650         Reviewed by Geoff.
2651
2652         - http://bugs.webkit.org/show_bug.cgi?id=16685
2653           eliminate List::empty() to cut down on PIC branches
2654
2655         Also included one other speed-up -- remove the call to reserveCapacity from
2656         FunctionBodyNode::processDeclarations in all but the most unusual cases.
2657
2658         Together these make SunSpider 1.016x as fast.
2659
2660         * JavaScriptCore.exp: Updated.
2661         * kjs/ExecState.cpp:
2662         (KJS::globalEmptyList): Added. Called only when creating global ExecState
2663         instances.
2664         (KJS::ExecState::ExecState): Broke constructor up into three separate functions,
2665         for the three separate node types. Also went through each of the three and
2666         streamlined as much as possible, removing dead code. This prevents us from having
2667         to access the global in the function body version of the constructor.
2668
2669         * kjs/ExecState.h: Added emptyList(). Replaced the constructor with a set of
2670         three that are specific to the different node types that can create new execution
2671         state objects.
2672
2673         * kjs/array_object.cpp:
2674         (KJS::ArrayProtoFuncToLocaleString::callAsFunction): Use exec->emptyList() instead
2675         of List::empty().
2676         (KJS::ArrayProtoFuncConcat::callAsFunction): Ditto.
2677         (KJS::ArrayProtoFuncSlice::callAsFunction): Ditto.
2678         (KJS::ArrayProtoFuncSplice::callAsFunction): Ditto.
2679         (KJS::ArrayProtoFuncFilter::callAsFunction): Ditto.
2680         * kjs/function.cpp:
2681         (KJS::FunctionImp::callAsFunction): Updated to call new ExecState constructor.
2682         (KJS::GlobalFuncImp::callAsFunction): Ditto (for eval).
2683         * kjs/function_object.cpp:
2684         (FunctionObjectImp::construct): Use exec->emptyList() instead of List::empty().
2685
2686         * kjs/list.cpp: Removed List::empty.
2687         * kjs/list.h: Ditto.
2688
2689         * kjs/nodes.cpp:
2690         (KJS::ElementNode::evaluate): Use exec->emptyList() instead of List::empty().
2691         (KJS::ArrayNode::evaluate): Ditto.
2692         (KJS::ObjectLiteralNode::evaluate): Ditto.
2693         (KJS::PropertyListNode::evaluate): Ditto.
2694         (KJS::FunctionBodyNode::processDeclarations): Another speed-up. Check the capacity
2695         before calling reserveCapacity, because it doesn't get inlined the local storage
2696         vector is almost always big enough -- saving the function call overhead is a big
2697         deal.
2698         (KJS::FuncDeclNode::makeFunction): Use exec->emptyList() instead of List::empty().
2699         (KJS::FuncExprNode::evaluate): Ditto.
2700         * kjs/object.cpp:
2701         (KJS::tryGetAndCallProperty): Ditto.
2702         * kjs/property_slot.cpp:
2703         (KJS::PropertySlot::functionGetter): Ditto.
2704         * kjs/string_object.cpp:
2705         (KJS::StringProtoFuncSplit::callAsFunction): Ditto.
2706
2707 2008-01-01  Darin Adler  <darin@apple.com>
2708
2709         Reviewed by Geoff.
2710
2711         - fix http://bugs.webkit.org/show_bug.cgi?id=16648
2712           REGRESSION (r28165): Yuku.com navigation prints "jsRegExpExecute failed with result -2"
2713           <rdar://problem/5646486> REGRESSION (r28165): Layout test fast/regex/test1 fails intermittently
2714
2715         Fixes 34 failing test cases in the fast/regex/test1.html test.
2716
2717         Restored the stack which prevents infinite loops for brackets that match the empty
2718         string; it had been removed as an optimization.
2719
2720         Unfortunately, restoring this stack causes the regular expression test in SunSpider
2721         to be 1.095x as slow and the overall test to be 1.004x as slow. Maybe we can find
2722         a correct optimization to restore the speed!
2723
2724         It's possible the original change was on the right track but just off by one.
2725
2726         * pcre/pcre_exec.cpp: Add back eptrblock, but name it BracketChainNode.
2727         (MatchStack::pushNewFrame): Add back the logic needed here.
2728         (startNewGroup): Ditto.
2729         (match): Ditto.
2730
2731 2008-01-01  Darin Adler  <darin@apple.com>
2732
2733         Reviewed by Geoff.
2734
2735         - http://bugs.webkit.org/show_bug.cgi?id=16683
2736           speed up function calls by making ScopeChain::push cheaper
2737
2738         This gives a 1.019x speedup on SunSpider.
2739
2740         After doing this, I realized this probably will be obsolete when the optimization
2741         to avoid creating an activation object is done. When we do that one we should check
2742         if rolling this out will speed things up, since this does add overhead at the time
2743         you copy the scope chain.
2744
2745         * kjs/object.h: Removed the ScopeChain::release function. It was
2746         marked inline, and called in exactly one place, so moved it there.
2747         No idea why it was in this header file!
2748
2749         * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push
2750         function that takes another ScopeChain. It was unused. I think we used
2751         it over in WebCore at one point, but not any more.
2752
2753         * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than
2754         a class, got rid of its constructor so we can have one that's uninitialized,
2755         and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node
2756         mutable so it can be changed in the moveToHeap function. Changed the copy
2757         constructor and assignment operator to call moveToHeap, since the top node
2758         can't be shared when it's embedded in another ScopeChain object. Updated
2759         functions as needed to handle the case where the first object isn't on the
2760         heap or to add casts for cases where it's guaranteed to be. Changed the push
2761         function to always put the new node into the ScopeChain object; it will get
2762         put onto the heap when needed later.
2763
2764 2008-01-01  Geoffrey Garen  <ggaren@apple.com>
2765
2766         Reviewed by Darin Adler.
2767         
2768         Fixed slight logic error in reserveCapacity, where we would reallocate
2769         the storage buffer unnecessarily.
2770
2771         * wtf/Vector.h:
2772         (WTF::::reserveCapacity): No need to grow the buffer if newCapacity is
2773         equal to capacity().
2774
2775 2008-01-01  Darin Adler  <darin@apple.com>
2776
2777         Reviewed by Oliver.
2778
2779         - http://bugs.webkit.org/show_bug.cgi?id=16684
2780           eliminate debugger overhead from function body execution
2781
2782         Speeds SunSpider up 1.003x. That's a small amount, but measurable.
2783
2784         * JavaScriptCore.exp: Updated.
2785         * kjs/Parser.h:
2786         (KJS::Parser::parse): Create the node with a static member function named create() instead
2787         of using new explicitly.
2788
2789         * kjs/grammar.y: Changed calls to new FunctionBodyNode to use FunctionBodyNode::create().
2790
2791         * kjs/nodes.cpp:
2792         (KJS::ProgramNode::create): Added. Calls new.
2793         (KJS::EvalNode::create): Ditto.
2794         (KJS::FunctionBodyNode::create): Ditto, but creates FunctionBodyNodeWithDebuggerHooks
2795         when a debugger is present.
2796         (KJS::FunctionBodyNode::execute): Removed debugger hooks.
2797         (KJS::FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks): Added.
2798         (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Calls the debugger, then the code,
2799         then the debugger again.
2800
2801         * kjs/nodes.h: Added create functions, made the constructors private and protected.
2802
2803 2007-12-30  Eric Seidel  <eric@webkit.org>
2804
2805         Reviewed by Sam.
2806
2807         More small cleanup to array_object.cpp
2808
2809         * kjs/array_object.cpp:
2810         (KJS::ArrayProtoFuncToString::callAsFunction):
2811         (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
2812         (KJS::ArrayProtoFuncJoin::callAsFunction):
2813         (KJS::ArrayProtoFuncConcat::callAsFunction):
2814         (KJS::ArrayProtoFuncReverse::callAsFunction):
2815         (KJS::ArrayProtoFuncShift::callAsFunction):
2816         (KJS::ArrayProtoFuncSlice::callAsFunction):
2817         (KJS::ArrayProtoFuncSort::callAsFunction):
2818         (KJS::ArrayProtoFuncSplice::callAsFunction):
2819         (KJS::ArrayProtoFuncUnShift::callAsFunction):
2820         (KJS::ArrayProtoFuncFilter::callAsFunction):
2821         (KJS::ArrayProtoFuncMap::callAsFunction):
2822         (KJS::ArrayProtoFuncEvery::callAsFunction):
2823
2824 2007-12-30  Eric Seidel  <eric@webkit.org>
2825
2826         Reviewed by Sam.
2827
2828         Apply wkstyle to array_object.cpp
2829
2830         * kjs/array_object.cpp:
2831         (KJS::ArrayPrototype::ArrayPrototype):
2832         (KJS::ArrayPrototype::getOwnPropertySlot):
2833         (KJS::ArrayProtoFuncConcat::callAsFunction):
2834         (KJS::ArrayProtoFuncPop::callAsFunction):
2835         (KJS::ArrayProtoFuncReverse::callAsFunction):
2836         (KJS::ArrayProtoFuncShift::callAsFunction):
2837         (KJS::ArrayProtoFuncSlice::callAsFunction):
2838         (KJS::ArrayProtoFuncSort::callAsFunction):
2839         (KJS::ArrayProtoFuncSplice::callAsFunction):
2840         (KJS::ArrayProtoFuncUnShift::callAsFunction):
2841         (KJS::ArrayProtoFuncFilter::callAsFunction):
2842         (KJS::ArrayProtoFuncMap::callAsFunction):
2843         (KJS::ArrayProtoFuncEvery::callAsFunction):
2844         (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
2845         (KJS::ArrayObjectImp::ArrayObjectImp):
2846         (KJS::ArrayObjectImp::implementsConstruct):
2847         (KJS::ArrayObjectImp::construct):
2848         (KJS::ArrayObjectImp::callAsFunction):
2849
2850 2007-12-30  Eric Seidel  <eric@webkit.org>
2851
2852         Reviewed by Sam.
2853
2854         Remove maxInt/minInt, replacing with std:max/min<int>()
2855
2856         * kjs/array_object.cpp:
2857         (KJS::ArrayProtoFuncSplice::callAsFunction):
2858         * kjs/operations.cpp:
2859         * kjs/operations.h:
2860
2861 2007-12-30  Eric Seidel  <eric@webkit.org>
2862
2863         Reviewed by Sam.
2864         
2865         Update Number.toString to properly throw exceptions.
2866         Cleanup code in Number.toString implementation.
2867
2868         * kjs/number_object.cpp:
2869         (KJS::numberToString):
2870         * kjs/object.cpp:
2871         (KJS::Error::create): Remove bogus debug lines.
2872
2873 2007-12-28  Eric Seidel  <eric@webkit.org>
2874
2875         Reviewed by Oliver.
2876
2877         ASSERT when debugging via Drosera due to missed var lookup optimization.
2878         http://bugs.webkit.org/show_bug.cgi?id=16634
2879         
2880         No test case possible.
2881
2882         * kjs/nodes.cpp:
2883         (KJS::BreakpointCheckStatement::optimizeVariableAccess):
2884         * kjs/nodes.h:
2885
2886 2007-12-28  Eric Seidel  <eric@webkit.org>
2887
2888         Reviewed by Oliver.
2889
2890         Fix (-0).toFixed() and re-factor a little
2891         Fix (-0).toExponential() and printing of trailing 0s in toExponential
2892         Fix toPrecision(nan) handling
2893         http://bugs.webkit.org/show_bug.cgi?id=16640
2894
2895         * kjs/number_object.cpp:
2896         (KJS::numberToFixed):
2897         (KJS::fractionalPartToString):
2898         (KJS::numberToExponential):
2899         (KJS::numberToPrecision):
2900
2901 2007-12-28  Eric Seidel  <eric@webkit.org>
2902
2903         Reviewed by Sam.
2904
2905         More changes to make number code readable
2906
2907         * kjs/number_object.cpp:
2908         (KJS::integer_part_noexp):
2909         (KJS::numberToFixed):
2910         (KJS::numberToExponential):
2911
2912 2007-12-28  Eric Seidel  <eric@webkit.org>
2913
2914         Reviewed by Sam.
2915
2916         More small cleanups to toPrecision
2917
2918         * kjs/number_object.cpp:
2919         (KJS::numberToPrecision):
2920
2921 2007-12-28  Eric Seidel  <eric@webkit.org>
2922
2923         Reviewed by Sam.
2924
2925         More small attempts to make number code readable
2926
2927         * kjs/number_object.cpp:
2928         (KJS::exponentialPartToString):
2929         (KJS::numberToExponential):
2930         (KJS::numberToPrecision):
2931
2932 2007-12-28  Eric Seidel  <eric@webkit.org>
2933
2934         Reviewed by Sam.
2935
2936         Break out callAsFunction implementations into static functions
2937
2938         * kjs/number_object.cpp:
2939         (KJS::numberToString):
2940         (KJS::numberToFixed):
2941         (KJS::numberToExponential):
2942         (KJS::numberToPrecision):
2943         (KJS::NumberProtoFunc::callAsFunction):
2944
2945 2007-12-28  Eric Seidel  <eric@webkit.org>
2946
2947         Reviewed by Sam.
2948
2949         Apply wkstyle/astyle and fix placement of *
2950
2951         * kjs/number_object.cpp:
2952         (KJS::):
2953         (KJS::NumberInstance::NumberInstance):
2954         (KJS::NumberPrototype::NumberPrototype):
2955         (KJS::NumberProtoFunc::NumberProtoFunc):
2956         (KJS::integer_part_noexp):
2957         (KJS::intPow10):
2958         (KJS::NumberProtoFunc::callAsFunction):
2959         (KJS::NumberObjectImp::NumberObjectImp):
2960         (KJS::NumberObjectImp::getOwnPropertySlot):
2961         (KJS::NumberObjectImp::getValueProperty):
2962         (KJS::NumberObjectImp::implementsConstruct):
2963         (KJS::NumberObjectImp::construct):
2964         (KJS::NumberObjectImp::callAsFunction):
2965         * kjs/object.cpp:
2966         (KJS::JSObject::put):
2967
2968 2007-12-27  Eric Seidel  <eric@webkit.org>
2969
2970         Reviewed by Sam.
2971
2972         ASSERT in JavaScriptCore while viewing WICD test case
2973         http://bugs.webkit.org/show_bug.cgi?id=16626
2974         
2975         * kjs/nodes.cpp:
2976         (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place
2977
2978 2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
2979
2980         Reviewed by Alp Toker.
2981
2982         http://bugs.webkit.org/show_bug.cgi?id=16390
2983         Use autotools or GNU make as the build system for the GTK port
2984
2985         * GNUmakefile.am: Added.
2986
2987 2007-12-25  Maciej Stachowiak  <mjs@apple.com>
2988         
2989         Reviewed by Oliver.
2990                 
2991         - Remove unnecessary redundant check from property setting
2992         http://bugs.webkit.org/show_bug.cgi?id=16602
2993                 
2994         1.3% speedup on SunSpider.
2995         
2996         * kjs/object.cpp:
2997         (KJS::JSObject::put): Don't do canPut check when not needed; let
2998         the PropertyMap handle it.        
2999         (KJS::JSObject::canPut): Don't check the static property
3000         table. lookupPut does that already.
3001         
3002 2007-12-24  Alp Toker  <alp@atoker.com>
3003
3004         Fix builds that don't use AllInOneFile.cpp following breakage
3005         introduced in r28973.
3006
3007         * kjs/grammar.y:
3008
3009 2007-12-24  Maciej Stachowiak  <mjs@apple.com>
3010
3011         Reviewed by Eric.
3012
3013         - Optimize variable declarations
3014         http://bugs.webkit.org/show_bug.cgi?id=16585
3015         
3016         3.5% speedup on SunSpider.
3017
3018         var statements now result in either assignments or empty statements.
3019         
3020         This allows a couple of optimization opportunities:
3021         - No need to branch at runtime to check if there is an initializer
3022         - EmptyStatementNodes can be removed entirely (also done in this patch)
3023         - Assignment expressions get properly optimized for local variables
3024         
3025         This patch also includes some code cleanup:
3026         - Most of the old VarStatement/VarDecl logic is now only used for const declarations, 
3027           thus it is renamed appropriately
3028         - AssignExprNode is gone
3029         
3030         * JavaScriptCore.exp:
3031         * kjs/NodeInfo.h:
3032         * kjs/grammar.y:
3033         * kjs/nodes.cpp:
3034         (KJS::SourceElements::append):
3035         (KJS::ConstDeclNode::ConstDeclNode):
3036         (KJS::ConstDeclNode::optimizeVariableAccess):
3037         (KJS::ConstDeclNode::handleSlowCase):
3038         (KJS::ConstDeclNode::evaluateSingle):
3039         (KJS::ConstDeclNode::evaluate):
3040         (KJS::ConstStatementNode::optimizeVariableAccess):
3041         (KJS::ConstStatementNode::execute):
3042         (KJS::VarStatementNode::optimizeVariableAccess):
3043         (KJS::VarStatementNode::execute):
3044         (KJS::ForInNode::ForInNode):
3045         (KJS::ForInNode::optimizeVariableAccess):
3046         (KJS::ForInNode::execute):
3047         (KJS::FunctionBodyNode::initializeSymbolTable):
3048         (KJS::ProgramNode::initializeSymbolTable):
3049         (KJS::FunctionBodyNode::processDeclarations):
3050         (KJS::ProgramNode::processDeclarations):
3051         (KJS::EvalNode::processDeclarations):
3052         * kjs/nodes.h:
3053         (KJS::DeclarationStacks::):
3054         (KJS::StatementNode::):
3055         (KJS::ConstDeclNode::):
3056         (KJS::ConstStatementNode::):
3057         (KJS::EmptyStatementNode::):
3058         (KJS::VarStatementNode::):
3059         (KJS::ForNode::):
3060         * kjs/nodes2string.cpp:
3061         (KJS::ConstDeclNode::streamTo):
3062         (KJS::ConstStatementNode::streamTo):
3063         (KJS::ScopeNode::streamTo):
3064         (KJS::VarStatementNode::streamTo):
3065         (KJS::ForNode::streamTo):
3066         (KJS::ForInNode::streamTo):
3067
3068 2007-12-21  Mark Rowe  <mrowe@apple.com>
3069
3070         Reviewed by Oliver Hunt.
3071
3072         * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol
3073         being generated in JavaScriptCore.framework.
3074
3075 2007-12-21  Darin Adler  <darin@apple.com>
3076
3077         Requested by Maciej.
3078
3079         * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old
3080         KJS_NO_INLINE. We don't want to have two, and we figured it was better
3081         to keep the one that's in WTF.
3082
3083 2007-12-21  Darin Adler  <darin@apple.com>
3084
3085         Reviewed by Eric.
3086
3087         - http://bugs.webkit.org/show_bug.cgi?id=16561
3088           remove debugger overhead from non-debugged JavaScript execution
3089
3090         1.022x as fast on SunSpider.
3091
3092         * JavaScriptCore.exp: Updated.
3093
3094         * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements,
3095         since that more accurately describes the role of this object, which
3096         is a reference-counted wrapper for a Vector.
3097
3098         * kjs/Parser.cpp:
3099         (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements,
3100         and use plain assignment instead of set.
3101         * kjs/Parser.h: Changed parameter type of didFinishParsing to a
3102         SourceElements. Also changed m_sourceElements; we now use a RefPtr instead
3103         of an OwnPtr as well.
3104
3105         * kjs/grammar.y: Got rid of all the calls to release() on SourceElements.
3106         That's now handed inside the constructors for various node types, since we now
3107         use vector swapping instead.
3108
3109         * kjs/nodes.cpp:
3110         (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined
3111         and we want exception handling out of the normal code flow.
3112         (KJS::SourceElements::append): Moved here from the header. This now handles
3113         creating a BreakpointCheckStatement for each statement in the debugger case.
3114         That way we can get breakpoint handling without having it in every execute function.
3115         (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added.
3116         (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly
3117         in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro.
3118         (KJS::BreakpointCheckStatement::streamTo): Added.
3119         (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return
3120         type is void.
3121         (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT.
3122         (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements.
3123         Changed code to use release since the class now contains a vector rather than
3124         a vector point.
3125         (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector
3126         rather than a vector pointer.
3127         (KJS::BlockNode::execute): Ditto.
3128         (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT.
3129         (KJS::IfNode::execute): Ditto.
3130         (KJS::IfElseNode::execute): Ditto.
3131         (KJS::DoWhileNode::execute): Ditto.
3132         (KJS::WhileNode::execute): Ditto.
3133         (KJS::ContinueNode::execute): Ditto.
3134         (KJS::BreakNode::execute): Ditto.
3135         (KJS::ReturnNode::execute): Ditto.
3136         (KJS::WithNode::execute): Ditto.
3137         (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector
3138         rather than a vector pointer.
3139         (KJS::CaseClauseNode::executeStatements): Ditto.
3140         (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT.
3141         (KJS::ThrowNode::execute): Ditto.
3142         (KJS::TryNode::execute): Ditto.
3143         (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements.
3144         (KJS::ProgramNode::ProgramNode): Ditto.
3145         (KJS::EvalNode::EvalNode): Ditto.
3146         (KJS::FunctionBodyNode::FunctionBodyNode): Ditto.
3147         (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector
3148         rather than a vector pointer.
3149
3150         * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector.
3151         Renamed SourceElementsStub to SourceElements and made it derive from
3152         ParserRefCounted rather than from Node, hold a vector rather than a pointer to
3153         a vector, and changed the release function to swap with another vector rather
3154         than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual
3155         vectors instead of pointers to vectors. Added BreakpointCheckStatement.
3156
3157         * kjs/nodes2string.cpp:
3158         (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer
3159         to a vector.
3160         (KJS::BlockNode::streamTo): Ditto.
3161         (KJS::CaseClauseNode::streamTo):  Ditto.
3162
3163         * wtf/AlwaysInline.h: Added NEVER_INLINE.
3164         * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the
3165         ones in OwnPtr and auto_ptr.
3166         * wtf/RefPtr.h: Ditto.
3167
3168 2007-12-21  Darin Adler  <darin@apple.com>
3169
3170         - fix broken regression tests
3171
3172         The broken tests were fast/js/do-while-expression-value.html and
3173         fast/js/while-expression-value.html.
3174
3175         * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed
3176         an old version of my patch for bug 16471.
3177         (KJS::statementListExecute): The logic here was backwards. Have to set the value
3178         even for non-normal execution results.
3179
3180 2007-12-20  Alexey Proskuryakov  <ap@webkit.org>
3181
3182         Windows build fix
3183
3184         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h
3185         to WebKitBuild.
3186
3187 2007-12-20  Eric Seidel  <eric@webkit.org>
3188
3189         Reviewed by mjs.
3190         
3191         Split IfNode into IfNode and IfElseNode for speedup.
3192         http://bugs.webkit.org/show_bug.cgi?id=16470
3193         
3194         SunSpider claims this is 1.003x as fast as before.
3195         (This required running with --runs 15 to get consistent enough results to tell!)
3196
3197         * kjs/grammar.y:
3198         * kjs/nodes.cpp:
3199         (KJS::IfNode::optimizeVariableAccess):
3200         (KJS::IfNode::execute):
3201         (KJS::IfNode::getDeclarations):
3202         (KJS::IfElseNode::optimizeVariableAccess):
3203         (KJS::IfElseNode::execute):
3204         (KJS::IfElseNode::getDeclarations):
3205         * kjs/nodes.h:
3206         (KJS::IfNode::):
3207         (KJS::IfElseNode::):
3208         * kjs/nodes2string.cpp:
3209         (KJS::IfNode::streamTo):
3210         (KJS::IfElseNode::streamTo):
3211
3212 2007-12-20  Darin Adler  <darin@apple.com>
3213
3214         Reviewed by Sam.
3215
3216         * wtf/OwnPtr.h:
3217         (WTF::operator==): Added.
3218         (WTF::operator!=): Added.
3219
3220 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
3221
3222         Reviewed by Oliver Hunt.
3223         
3224         AST optimization: Avoid NULL-checking ForNode's child nodes.
3225         
3226         0.6% speedup on SunSpider.
3227         
3228         This is a proof of concept patch that demonstrates how to optimize
3229         grammar productions with optional components, like
3230         
3231             for (optional; optional; optional) {
3232                 ...
3233             }
3234             
3235         The parser emits NULL for an optional component that is not present.
3236
3237         Instead of checking for a NULL child at execution time, a node that
3238         expects an optional component to be present more often than not checks
3239         for a NULL child at construction time, and substitutes a viable
3240         alternative node in its place.
3241
3242         (We'd like the parser to start emitting NULL a lot more once we teach
3243         it to emit NULL for certain no-op productions like EmptyStatement and
3244         VariableStatement, so, as a foundation, it's important for nodes with
3245         NULL optional components to be fast.)
3246
3247         * kjs/Parser.cpp:
3248         (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also,
3249         moved didFinishParsing into the .cpp file because adding a branch while
3250         it was in the header file caused a substantial and inexplicable
3251         performance regression. (Did I mention that GCC is crazy?)
3252
3253         * kjs/grammar.y:
3254
3255         * kjs/nodes.cpp:
3256         (KJS::BlockNode::BlockNode): Check for NULL SourceElements.
3257         (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here.
3258         (KJS::ForNode::execute): No need to check for NULL here.
3259         * kjs/nodes.h:
3260         (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode
3261         because it's semantically harmless, and it evaluates to boolean in an
3262         efficient manner.
3263
3264 2007-12-20  Oliver Hunt  <oliver@apple.com>
3265
3266         Reviewed by Geoff.
3267
3268         Slight logic reordering in JSImmediate::from(double)
3269
3270         This gives a 0.6% improvement in SunSpider.
3271
3272         * kjs/JSImmediate.h:
3273         (KJS::JSImmediate::from):
3274
3275 2007-12-20  Eric Seidel  <eric@webkit.org>
3276
3277         Reviewed by mjs.
3278
3279         Fix major Array regression introduced by 28899.
3280
3281         SunSpider claims this is at least 1.37x as fast as pre-regression. :)
3282
3283         * kjs/array_instance.cpp: make Arrays fast again!
3284
3285 2007-12-20  Eric Seidel  <eric@webkit.org>
3286
3287         Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing.
3288
3289         Small reworking of Date code for 4% speedup on Date tests (0.2% overall)
3290         http://bugs.webkit.org/show_bug.cgi?id=16537
3291
3292         Make msToYear human-readable
3293         Make msToDayInMonth slightly more readable and avoid recalculating msToYear
3294         Remove use of isInLeapYear to avoid calling msToYear
3295         Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear
3296         Remove more duplicate calls to dayInYear and getUTCOffset for further speedup
3297
3298         * kjs/DateMath.cpp:
3299         (KJS::daysFrom1970ToYear):
3300         (KJS::msToYear):
3301         (KJS::monthFromDayInYear):
3302         (KJS::checkMonth):
3303         (KJS::dayInMonthFromDayInYear):
3304         (KJS::dateToDayInYear):
3305         (KJS::getDSTOffsetSimple):
3306         (KJS::getDSTOffset):
3307         (KJS::gregorianDateTimeToMS):
3308         (KJS::msToGregorianDateTime):
3309
3310 2007-12-20  Rodney Dawes  <dobey@wayofthemonkey.com>
3311
3312         Reviewed by Darin Adler.
3313
3314         Proxy includes of npruntime.h or npapi.h through npruntime_internal.h
3315         Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined
3316         This is for building with X11, as some type and enum names conflict
3317         with #define names in X11 headers.
3318         http://bugs.webkit.org/show_bug.cgi?id=15669
3319
3320         * JavaScriptCore.xcodeproj/project.pbxproj:
3321         * bindings/NP_jsobject.h:
3322         * bindings/npapi.h:
3323         * bindings/npruntime.cpp:
3324         * bindings/npruntime_impl.h:
3325         * bindings/npruntime_priv.h:
3326         * bindings/npruntime_internal.h:
3327         * bindings/testbindings.cpp:
3328         * bindings/c/c_class.h:
3329         * bindings/c/c_runtime.h:
3330         * bindings/c/c_utility.h:
3331
3332 2007-12-20  Darin Adler  <darin@apple.com>
3333
3334         - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471
3335           Completions need to be smaller (or not exist at all)
3336
3337         Same patch as last time with the test failures problem fixed.
3338
3339         * kjs/function.cpp:
3340         (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion
3341         type from newExec to see if the execute raised an exception.
3342
3343 2007-12-20  Darin Adler  <darin@apple.com>
3344
3345         - roll out that last change -- it was causing test failures;
3346           I'll check it back in after fixing them
3347
3348 2007-12-20  Darin Adler  <darin@apple.com>
3349
3350         Reviewed by Eric.
3351
3352         - http://bugs.webkit.org/show_bug.cgi?id=16471
3353           Completions need to be smaller (or not exist at all)
3354
3355         SuSpider shows 2.4% speedup.
3356
3357         Stop using completions in the execution engine.
3358         Instead, the completion type and label target are both
3359         stored in the ExecState.
3360
3361         * API/JSContextRef.cpp: Removed unneeded include of "completion.h".
3362         * bindings/runtime_method.cpp: Removed unused execute function.
3363         * bindings/runtime_method.h: Ditto.
3364
3365         * kjs/ExecState.h: Added completionType, breakOrContinueTarget,
3366         setCompletionType, setNormalCompletion, setBreakCompletion,
3367         setContinueCompletion, setReturnValueCompletion, setThrowCompletion,
3368         setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget.
3369
3370         * kjs/completion.h: Removed constructor and getter for target
3371         for break and continue from Completion. This class is now only
3372         used for the public API to Interpreter and such.
3373
3374         * kjs/date_object.h: Removed unused execute function.
3375
3376         * kjs/function.cpp:
3377         (KJS::FunctionImp::callAsFunction): Removed some unneeded
3378         exception processing. Updated to call the new execute function
3379         and to get the completion type from the ExecState. Merged in
3380         the execute function, which repeated some of the same logic and
3381         was called only from here.
3382         (KJS::GlobalFuncImp::callAsFunction): More of the same for eval.
3383         * kjs/function.h: Removed execute.
3384
3385         * kjs/interpreter.cpp:
3386         (KJS::Interpreter::evaluate): Added code to convert the result of
3387         execut into a Completion.
3388
3389         * kjs/nodes.cpp:
3390         (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion.
3391         Now sets the completion type in the ExecState.
3392         (KJS::Node::rethrowException): Now sets the completion type in the
3393         ExecState.
3394         (KJS::StatementNode::hitStatement): Now sets the completion type in
3395         the ExecState.
3396         (KJS::VarStatementNode::execute): Updated to put completion type in
3397         the ExecState instead of a Completion object.
3398         (KJS::statementListExecute): Ditto. Also changed the for loop to use
3399         indices instead of iterators.
3400         (KJS::BlockNode::execute): Updated return type.
3401         (KJS::EmptyStatementNode::execute): Updated to put completion type in
3402         the ExecState instead of a Completion object.
3403         (KJS::ExprStatementNode::execute): Ditto.
3404         (KJS::IfNode::execute): Ditto.
3405         (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little
3406         to make the normal case a little faster and moved the end outside the
3407         loop so that "break" can do a break.
3408         (KJS::WhileNode::execute): Ditto.
3409         (KJS::ForNode::execute): Ditto.
3410         (KJS::ForInNode::execute): Ditto.
3411         (KJS::ContinueNode::execute): Updated to put completion type in
3412         the ExecState instead of a Completion object.
3413         (KJS::BreakNode::execute): Ditto.
3414         (KJS::ReturnNode::execute): Ditto.
3415         (KJS::WithNode::execute): Ditto.
3416         (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have
3417         execute in its name to reflect the fact that it's a member of the same
3418         family of functions.
3419         (KJS::CaseBlockNode::executeBlock): Ditto.
3420         (KJS::SwitchNode::execute): Ditto.
3421         (KJS::LabelNode::execute): Ditto.
3422         (KJS::ThrowNode::execute): Ditto.
3423         (KJS::TryNode::execute): Ditto.
3424         (KJS::ProgramNode::execute): Ditto.
3425         (KJS::EvalNode::execute): Ditto.
3426         (KJS::FunctionBodyNode::execute): Ditto.
3427         (KJS::FuncDeclNode::execute): Ditto.
3428
3429         * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made
3430         hitStatement protected, changed return value of execute to a JSValue,
3431         renamed evalStatements to executeStatements, and evalBlock to executeBlock.
3432
3433         * kjs/number_object.h: Removed unused execute function.
3434
3435 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
3436
3437         Added Radar number.
3438
3439         * kjs/nodes.cpp:
3440         (KJS::ProgramNode::processDeclarations):
3441
3442 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
3443
3444         Linux build fix: config.h has to come first.
3445
3446         * kjs/error_object.cpp:
3447
3448 2007-12-19  Geoffrey Garen  <ggaren@apple.com>
3449
3450         Reviewed by Oliver Hunt.
3451         
3452         Optimized global access to global variables, using a symbol table.
3453         
3454         SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph,
3455         and a whopping 33.1% speedup on bitops-bitwise-and.
3456
3457         * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with
3458         calls to Base::, since JSObject is not always our base class. This
3459         was always a bug, but the bug is even more apparent after some of my
3460         changes.
3461
3462         (KJS::::staticFunctionGetter): Replaced use of getDirect with call to
3463         getOwnPropertySlot. Global declarations are no longer stored in the
3464         property map, so a call to getDirect is insufficient for finding
3465         override properties.
3466
3467         * API/testapi.c: 
3468         * API/testapi.js: Added test for the getDirect change mentioned above.
3469
3470         * kjs/ExecState.cpp: 
3471         * kjs/ExecState.h: Dialed back the optimization to store a direct
3472         pointer to the localStorage buffer. One ExecState can grow the global
3473         object's localStorage without another ExecState's knowledge, so
3474         ExecState can't store a direct pointer to the localStorage buffer
3475         unless/until we invent a way to update all the relevant ExecStates.
3476
3477         * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put
3478         operations.
3479         (KJS::JSGlobalObject::reset): Reset the symbol table and local storage,
3480         too. Also, clear the property map here, removing the need for a
3481         separate call.
3482
3483         * kjs/JSVariableObject.cpp:
3484         * kjs/JSVariableObject.h: Added support for saving localStorage and the
3485         symbol table to the back/forward cache, and restoring them.
3486
3487         * kjs/function.cpp:
3488         (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode
3489         because it's an EvalNode, not a ProgramNode.
3490
3491         * kjs/lookup.h:
3492         (KJS::cacheGlobalObject): Replaced put with faster putDirect, since
3493         that's how the rest of lookup.h works. putDirect is safe here because
3494         cacheGlobalObject is only used for objects whose names are not valid
3495         identifiers.
3496
3497         * kjs/nodes.cpp: The good stuff!
3498
3499         (KJS::EvalNode::processDeclarations): Replaced hasProperty with
3500         the new hasOwnProperty, which is slightly faster.
3501
3502         * kjs/object.h: Nixed clearProperties because clear() does this job now.
3503
3504         * kjs/property_map.cpp:
3505         * kjs/property_map.h: More back/forward cache support.
3506         
3507         * wtf/Vector.h: