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