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