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