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