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