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