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