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