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