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