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