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