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