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