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