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