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