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