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