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