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