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