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