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