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