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