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