dc7d94db82e7343c5e73049a15336f29ec086858
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2007-11-28  Maciej Stachowiak  <mjs@apple.com>
2
3         Reviewed by Darin and Geoff.
4
5         - Fixed "Stack overflow crash in JavaScript garbage collector mark pass"
6         http://bugs.webkit.org/show_bug.cgi?id=12216
7         
8         Implement mark stack. This version is not suitable for prime time because it makes a
9         huge allocation on every collect, and potentially makes marking of detached subtrees
10         slow. But it is an 0.4% SunSpider speedup even without much tweaking.
11         
12         The basic approach is to replace mark() methods with
13         markChildren(MarkStack&) methods. Reachable references are pushed
14         onto a mark stack (which encapsulates ignoring already-marked
15         references). 
16         
17         Objects are no longer responsible for actually setting their own
18         mark bits, the collector does that. This means that for objects on
19         the number heap we don't have to call markChildren() at all since
20         we know there aren't any.
21         
22         The mark phase of collect pushes roots onto the mark stack
23         and drains it as often as possible.
24         
25         To make this approach viable requires a constant-size mark stack
26         and a slow fallback approach for when the stack size is exceeded,
27         plus optimizations to make the required stack small in common
28         cases. This should be doable.
29
30         * JavaScriptCore.exp: Export new symbols.
31         * JavaScriptCore.xcodeproj/project.pbxproj: Add new file.
32         * kjs/collector.cpp:
33         (KJS::Collector::heapAllocate):
34         (KJS::drainMarkStack): Helper for all of the below.
35         (KJS::Collector::markStackObjectsConservatively): Use mark stack.
36         (KJS::Collector::markCurrentThreadConservatively): ditto
37         (KJS::Collector::markOtherThreadConservatively): ditto
38         (KJS::Collector::markProtectedObjects): ditto
39         (KJS::Collector::markMainThreadOnlyObjects): ditto
40         (KJS::Collector::collect): ditto
41         * kjs/collector.h:
42         (KJS::Collector::cellMayHaveRefs): Helper for MarkStack.
43
44         * kjs/MarkStack.h: Added. The actual mark stack implementation.
45         (KJS::MarkStack::push):
46         (KJS::MarkStack::pushAtom):
47         (KJS::MarkStack::pop):
48         (KJS::MarkStack::isEmpty):
49         (KJS::MarkStack::reserveCapacity):
50
51         Changed mark() methods to markChildren() methods:
52         
53         * kjs/ExecState.cpp:
54         (KJS::ExecState::markChildren):
55         * kjs/ExecState.h:
56         * kjs/JSWrapperObject.cpp:
57         (KJS::JSWrapperObject::markChildren):
58         * kjs/JSWrapperObject.h:
59         * kjs/array_instance.cpp:
60         (KJS::ArrayInstance::markChildren):
61         * kjs/array_instance.h:
62         * kjs/bool_object.cpp:
63         (BooleanInstance::markChildren):
64         * kjs/bool_object.h:
65         * kjs/error_object.cpp:
66         * kjs/error_object.h:
67         * kjs/function.cpp:
68         (KJS::FunctionImp::markChildren):
69         (KJS::Arguments::Arguments):
70         (KJS::Arguments::markChildren):
71         (KJS::ActivationImp::markChildren):
72         * kjs/function.h:
73         * kjs/internal.cpp:
74         (KJS::GetterSetterImp::markChildren):
75         * kjs/interpreter.cpp:
76         (KJS::Interpreter::markRoots):
77         * kjs/interpreter.h:
78         * kjs/list.cpp:
79         (KJS::List::markProtectedListsSlowCase):
80         * kjs/list.h:
81         (KJS::List::markProtectedLists):
82         * kjs/object.cpp:
83         (KJS::JSObject::markChildren):
84         * kjs/object.h:
85         (KJS::ScopeChain::markChildren):
86         * kjs/property_map.cpp:
87         (KJS::PropertyMap::markChildren):
88         * kjs/property_map.h:
89         * kjs/scope_chain.h:
90         * kjs/string_object.cpp:
91         (KJS::StringInstance::markChildren):
92         * kjs/string_object.h:
93
94 2007-11-27  Alp Toker  <alp@atoker.com>
95
96         Reviewed by Mark Rowe.
97
98         Add a list of public JavaScriptCore headers for installation.
99
100         This follows the convention used for the Qt and GTK+ header lists.
101
102         * headers.pri: Added.
103
104 2007-11-27  Alp Toker  <alp@atoker.com>
105
106         Prospective MSVC build fix.
107
108         Roll back dllexport/dllimport support for now.
109
110         * API/JSBase.h:
111
112 2007-11-27  Alp Toker  <alp@atoker.com>
113
114         Reviewed by Maciej.
115
116         http://bugs.webkit.org/show_bug.cgi?id=15569
117         [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF
118
119         Introduce JS_EXPORT to mark symbols to be exported as public API.
120
121         Export all public symbols in the JavaScriptCore C API.
122
123         This matches conventions for exporting symbols set by the CF and CG
124         frameworks.
125
126         * API/JSBase.h:
127         * API/JSContextRef.h:
128         * API/JSObjectRef.h:
129         * API/JSStringRef.h:
130         * API/JSStringRefBSTR.h:
131         * API/JSStringRefCF.h:
132         * API/JSValueRef.h:
133
134 2007-11-27  Anders Carlsson  <andersca@apple.com>
135
136         Reviewed by Adam.
137
138         Make PropertyNameArray and ScopeChain COMEnumVariant friendly.
139         
140         * kjs/PropertyNameArray.cpp:
141         (KJS::PropertyNameArray::swap):
142         Implement PropertyNameArray::swap.
143         
144         * kjs/PropertyNameArray.h:
145         Add ValueType typedef. Replace PropertyNameArrayIterator with 
146         PropertyNameArray::const_iterator.
147         
148         * kjs/nodes.cpp:
149         (KJS::ForInNode::execute):
150         * kjs/scope_chain.cpp:
151         (KJS::ScopeChain::print):
152         Update for changes to PropertyNameArray.
153         
154         * kjs/scope_chain.h:
155         Add const_iterator and ValueType typedef.
156         
157 2007-11-27  Anders Carlsson  <andersca@apple.com>
158
159         Reviewed by Darin.
160
161         Add a ValueType typedef.
162         
163         * wtf/Vector.h:
164
165 2007-11-26  Darin Adler  <darin@apple.com>
166
167         Reviewed by Mitz.
168
169         - fix http://bugs.webkit.org/show_bug.cgi?id=16096
170           REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies
171
172         Test: fast/js/regexp-overflow.html
173
174         * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags):
175         Removed a stray "ptr++" that I added by accident when merging the
176         changes between PCRE 6.4 and 6.5. 
177
178 2007-11-26  Geoffrey Garen  <ggaren@apple.com>
179
180         Reviewed by Kevin McCullough.
181         
182         Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not 
183         show variables (can't enumerate ActivationImp properties)
184         
185         Implemented a custom ActivationImp::getPropertyNames, since 
186         ActivationImp now uses a custom property storage mechanism for local
187         variables.
188
189         * kjs/function.cpp:
190         (KJS::ActivationImp::getPropertyNames):
191         * kjs/function.h:
192
193 2007-11-26  Alp Toker  <alp@atoker.com>
194
195         GTK+/Qt/Wx build fix for breakage introduced in r28039.
196
197         * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added.
198
199 2007-11-24  Laszlo Gombos  <laszlo.gombos@gmail.com>
200
201         Reviewed by Maciej Stachowiak.
202
203         Fix minor compiler warning (GCC 4.1.3)
204
205         * pcre/pcre_internal.h:
206         * pcre/pcre_ucp_searchfuncs.cpp:
207         (_pcre_ucp_othercase):
208
209 2007-11-25  Mark Rowe  <mrowe@apple.com>
210
211         Reviewed by Dan Bernstein.
212
213         Fix http://bugs.webkit.org/show_bug.cgi?id=16129
214         Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build)
215
216         * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated
217         to our caller like they expect.
218
219 2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
220
221         MSVC7 build fix. (rand_s doesn't exist there)
222
223         Reviewed by Adam Roben.
224
225         * kjs/config.h:
226         * wtf/MathExtras.h:
227
228 2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
229
230         wx build fix. Move WX_PYTHON logic into project build settings,
231         add WebKitLibraries dirs on Win, and explicitly include JSCore 
232         headers in testkjs rather than getting them from a template.
233         (Include dir order of JSCore/WTF and ICU headers is important due  
234         to wtf/unicode/utf8.h.)
235
236         * jscore.bkl:
237
238 2007-11-23  Simon Hausmann  <hausmann@webkit.org>
239
240         Reviewed by George Staikos <staikos@kde.org>.
241
242         Fix make (dist)clean on Windows.
243         
244         OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR.
245         
246
247         * JavaScriptCore.pri:
248         * pcre/pcre.pri:
249
250 2007-11-22  Simon Hausmann  <hausmann@kde.org>
251
252         Reviewed by George.
253
254         Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable
255
256         * JavaScriptCore.pri:
257         * pcre/pcre.pri:
258
259 2007-11-22  Simon Hausmann  <hausmann@kde.org>
260
261         Reviewed by George.
262
263         Centralize the setup for all the extra compilers in a addExtraCompiler function.
264         
265         This allows adding a "generated_files" target that builds all generated files using "make generated_files".
266         For the build inside Qt we do not generate actual rules for the extra compilers but instead
267         do the variable substitution of compiler.output manually and add the generated sources to SOURCES.
268
269         * JavaScriptCore.pri:
270         * pcre/pcre.pri:
271
272 2007-11-20  Mark Rowe  <mrowe@apple.com>
273
274         Reviewed by Tim Hatcher.
275
276         <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
277
278         Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
279         -Werror to succeed.  At present they will crash when executed due to code that is not safe
280         under strict aliasing (<rdar://problem/5536806>).
281
282         * Configurations/Base.xcconfig: Remove the -Wno-long-double flag.
283         * kjs/date_object.cpp:
284         (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
285         * kjs/dtoa.cpp:
286         (Bigint::): Tweak formatting to silence warnings.
287         * pcre/pcre_exec.cpp:
288         (match): Tweak formatting to silence warnings
289         * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
290         * wtf/Assertions.h: Ditto.
291
292 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
293
294         wx port build fix (wx headers include ctype functions).
295
296         * kjs/config.h:
297
298 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
299
300         Remove outdated and unused Windows port files.
301
302         Reviewed by Adam Roben.
303
304         * Makefile.vc: Removed.
305         * README-Win32.txt: Removed.
306
307 2007-11-18  Eric Seidel  <eric@webkit.org>
308
309         Reviewed by Oliver.
310
311         * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run
312
313 2007-11-17  Mark Rowe  <mrowe@apple.com>
314
315         Reviewed by Darin Adler.
316
317         Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
318              <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
319              http://bugs.webkit.org/show_bug.cgi?id=16033
320
321         Split Interpreter's initialization into two distinct steps:  the creation of the global prototypes
322         and constructors, and storing them on the global object.  This allows JSClassRef's passed to
323         JSGlobalContextCreate to be instantiated with the correct prototype.
324
325         * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell.
326         * API/JSCallbackObject.h:
327         * API/JSCallbackObjectFunctions.h:
328         (KJS::::JSCallbackObject):
329         (KJS::::init):
330         * API/JSContextRef.cpp:
331         (JSGlobalContextCreate): Construct and set the interpreter's global object separately.  When globalObjectClass
332         is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to
333         prevent any JSObjectInitializeCallback's being invoked before a global object is set.
334         * API/testapi.c:
335         (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties.
336         (globalObject_get):
337         (globalObject_set):
338         (main):
339         * API/testapi.js: Test that any static properties exposed by the global object's custom class are found.
340         * JavaScriptCore.exp:
341         * bindings/testbindings.cpp:
342         (main): Update for changes in Interpreter method signatures.
343         * bindings/testbindings.mm:
344         (main): Ditto.
345         * kjs/ExecState.cpp:
346         (KJS::ExecState::ExecState):
347         (KJS::ExecState::mark):
348         (KJS::ExecState::setGlobalObject):
349         * kjs/ExecState.h: Rename scope to m_scopeChain.
350         * kjs/interpreter.cpp:
351         (KJS::Interpreter::Interpreter):
352         (KJS::Interpreter::init):
353         (KJS::Interpreter::globalObject):
354         (KJS::Interpreter::setGlobalObject):
355         (KJS::Interpreter::resetGlobalObjectProperties):
356         (KJS::Interpreter::createObjectsForGlobalObjectProperties):
357         (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method
358         cannot interfere with setting of the global properties.  This prevents a user-written JSClassRef from attempting to
359         call back into JavaScript from the initialization of the global object's members.
360         * kjs/interpreter.h:
361         * kjs/testkjs.cpp:
362         (setupInterpreter): Update for changes in Interpreter method signatures.
363
364 2007-11-17  Mark Rowe  <mrowe@apple.com>
365
366         Reviewed by Sam Weinig.
367
368         Prevent testapi from reporting false leaks.  Clear out local variables pointing at
369         JSObjectRefs to allow their values to be collected.
370
371         * API/testapi.c:
372         (main):
373
374 2007-11-17  Mark Rowe  <mrowe@apple.com>
375
376         Reviewed by Sam Weinig.
377
378         Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile.
379
380         * API/testapi.c:
381         (main):
382
383 2007-11-17  Alp Toker  <alp@atoker.com>
384
385         Reviewed by Eric.
386
387         http://bugs.webkit.org/show_bug.cgi?id=16032
388         JS minidom is not portable
389
390         Use a plain UTF-8 string instead of a CFString.
391
392         Print to stdout, not stderr like CFShow() would have done, since that
393         behaviour seems unintentional.
394
395         * API/minidom.c:
396         (main):
397
398 2007-11-17  Steve Falkenburg  <sfalken@apple.com>
399
400         Windows build fix.
401
402         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
403
404 2007-11-16  Mark Rowe  <mrowe@apple.com>
405
406         Windows build fix.
407
408         * kjs/lexer.cpp:
409         (KJS::Lexer::record8):
410
411 2007-11-16  Mark Rowe  <mrowe@apple.com>
412
413         Reviewed by Eric.
414
415         Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors.
416         SunSpider claims this is a 0.7% speedup.
417
418         * kjs/lexer.cpp:
419         (KJS::Lexer::Lexer):
420         (KJS::Lexer::lex):
421         (KJS::Lexer::record8):
422         (KJS::Lexer::record16):
423         (KJS::Lexer::scanRegExp):
424         (KJS::Lexer::clear):
425         (KJS::Lexer::makeIdentifier):
426         (KJS::Lexer::makeUString):
427         * kjs/lexer.h:
428         * kjs/ustring.cpp:
429         (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&.
430         * kjs/ustring.h:
431
432 2007-11-16  Adam Roben  <aroben@apple.com>
433
434         Windows build fix
435
436         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path
437         and ignore the int -> bool conversion warning.
438
439 2007-11-16  Alexey Proskuryakov  <ap@webkit.org>
440
441         Fix Windows debug build.
442         Rubber-stamped by Eric
443
444         * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC
445         complain about unreachable code.
446
447 2007-11-15  Mark Rowe  <mrowe@apple.com>
448
449         Gtk build fix.
450
451         * kjs/Parser.cpp:
452
453 2007-11-15  Mark Rowe  <mrowe@apple.com>
454
455         Mac build and header search path sanity fix.
456
457         Reviewed by Sam Weinig and Tim Hatcher.
458
459         Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend
460         it in JavaScriptCore.xcconfig.  This removes the need to override it on a
461         per-target basis inside the .xcodeproj file.
462
463         * Configurations/Base.xcconfig:
464         * Configurations/JavaScriptCore.xcconfig:
465         * JavaScriptCore.xcodeproj/project.pbxproj:
466
467 2007-11-15  Mark Rowe  <mrowe@apple.com>
468
469         Qt build fix.
470
471         * kjs/Parser.h:
472
473 2007-11-15  Geoffrey Garen  <ggaren@apple.com>
474
475         Reviewed by Eric Seidel.
476
477         Another round of grammar / parsing cleanup.
478         
479         1. Created distinct parser calls for parsing function bodies vs
480         programs. This will help later with optimizing global variable access.
481         
482         2. Turned Parser into a singleton. Cleaned up Lexer's singleton 
483         interface.
484         
485         3. Modified Lexer to free a little more memory when done lexing. (Added
486         FIXMEs for similar issues that I didn't fix.)
487         
488         4. Changed Lexer::makeIdentifier and Lexer::makeUString to start 
489         respecting the arguments passed to them. (No behavior change, but this
490         problem could have caused serious problems for an unsuspecting user of
491         these functions.)
492         
493         5. Removed KJS_DEBUG_MEM because it was bit-rotted.
494         
495         6. Removed Parser::prettyPrint because the same work was simpler to do
496         at the call site.
497         
498         7. Some renames:
499         
500             "Parser::accept" => "Parser::didFinishParsing"
501             "Parser::sid" => "Parser::m_sourceID"
502             "Lexer::doneParsing" => "Lexer::clear"
503             "sid" => "sourceId"
504             "lineno" => "lineNo"
505         
506         * JavaScriptCore.exp:
507         * kjs/Parser.cpp:
508         (KJS::Parser::Parser):
509         (KJS::Parser::parseProgram):
510         (KJS::Parser::parseFunctionBody):
511         (KJS::Parser::parse):
512         (KJS::Parser::didFinishParsing):
513         (KJS::parser):
514         * kjs/Parser.h:
515         (KJS::Parser::sourceId):
516         * kjs/function.cpp:
517         (KJS::GlobalFuncImp::callAsFunction):
518         * kjs/function_object.cpp:
519         (FunctionObjectImp::construct):
520         * kjs/grammar.y:
521         * kjs/interpreter.cpp:
522         (KJS::Interpreter::checkSyntax):
523         (KJS::Interpreter::evaluate):
524         * kjs/interpreter.h:
525         * kjs/lexer.cpp:
526         (kjsyylex):
527         (KJS::lexer):
528         (KJS::Lexer::Lexer):
529         (KJS::Lexer::~Lexer):
530         (KJS::Lexer::scanRegExp):
531         (KJS::Lexer::doneParsing):
532         (KJS::Lexer::makeIdentifier):
533         (KJS::Lexer::makeUString):
534         * kjs/lexer.h:
535         (KJS::Lexer::pattern):
536         (KJS::Lexer::flags):
537         (KJS::Lexer::sawError):
538         * kjs/nodes.cpp:
539         (KJS::Node::Node):
540         (KJS::FunctionBodyNode::FunctionBodyNode):
541         * kjs/nodes.h:
542         * kjs/testkjs.cpp:
543         (prettyPrintScript):
544         (kjsmain):
545         * kjs/ustring.cpp:
546         * kjs/ustring.h:
547
548 2007-11-15  Oliver Hunt  <oliver@apple.com>
549
550         Reviewed by Darin.
551
552         <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error
553         
554         Add a stub node to maintain the Vector of SourceElements until assignment.
555
556         * kjs/grammar.y:
557         * kjs/nodes.h:
558         (KJS::SourceElementsStub::SourceElementsStub):
559         (KJS::SourceElementsStub::append):
560         (KJS::SourceElementsStub::release):
561         (KJS::SourceElementsStub::):
562         (KJS::SourceElementsStub::precedence):
563
564 2007-11-15  Eric Seidel  <eric@webkit.org>
565
566         Reviewed by Sam.
567
568         Abstract most of RMATCH into MatchStack functions.
569         
570         SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp.
571
572         * pcre/pcre_exec.cpp:
573         (MatchStack::canUseStackBufferForNextFrame):
574         (MatchStack::allocateNextFrame):
575         (MatchStack::pushNewFrame):
576         (MatchStack::frameIsStackAllocated):
577         (MatchStack::popCurrentFrame):
578         (MatchStack::unrollAnyHeapAllocatedFrames):
579         (match):
580
581 2007-11-15  Eric Seidel  <eric@webkit.org>
582
583         Reviewed by Sam.
584
585         Remove RETURN_ERROR, add MatchStack
586         
587         * pcre/pcre_exec.cpp:
588         (MatchStack::MatchStack):
589         (MatchStack::unrollAnyHeapAllocatedFrames):
590         (matchError):
591         (match):
592         
593 2007-11-15  Eric Seidel  <eric@webkit.org>
594
595         Reviewed by Sam.
596
597         Clean up match function to match WebKit style
598
599         * JavaScriptCore.xcodeproj/project.pbxproj:
600         * pcre/pcre_exec.cpp:
601         (match):
602
603 2007-11-15  Steve Falkenburg  <sfalken@apple.com>
604
605         Windows build fix.
606
607         * JavaScriptCore.vcproj/JavaScriptCore.make:
608
609 2007-11-14  Alexey Proskuryakov  <ap@webkit.org>
610
611         Reviewed by Darin.
612
613         http://bugs.webkit.org/show_bug.cgi?id=15982
614         Improve JSString UTF-8 decoding
615
616         * API/JSStringRef.cpp:
617         (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error.
618
619         * wtf/unicode/UTF8.cpp:
620         (WTF::Unicode::convertUTF16ToUTF8):
621         (WTF::Unicode::convertUTF8ToUTF16):
622         * wtf/unicode/UTF8.h:
623         Made these function names start with a lower case letter.
624
625         * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming.
626
627         * bindings/c/c_utility.cpp:
628         (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference
629         from convertUTF8ToUTF16 in wtf/unicode.
630         (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming.
631         (KJS::Bindings::identifierFromNPIdentifier): Ditto.
632         * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static.
633
634 2007-11-14  Sam Weinig  <sam@webkit.org>
635
636         Rubber-stamped by Anders.
637
638         Fix the Xcode project file after it was messed up in r27402.
639
640         * JavaScriptCore.xcodeproj/project.pbxproj:
641
642 2007-11-14  Eric Seidel  <eric@webkit.org>
643
644         Reviewed by Oliver.
645         
646         More PCRE style cleanup.
647
648         * pcre/pcre_compile.cpp:
649         (compile_regex):
650
651 2007-11-14  Adam Roben  <aroben@apple.com>
652
653         Clean up the bison conflict checking script
654
655         Reviewed by Geoff.
656
657         * DerivedSources.make:
658
659 2007-11-14  Eric Seidel  <eric@webkit.org>
660
661         Reviewed by Geoff.
662
663         Another round of PCRE cleanups: inlines
664         
665         SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure.
666
667         * pcre/pcre_compile.cpp:
668         (jsRegExpCompile):
669         * pcre/pcre_exec.cpp:
670         (match):
671         (jsRegExpExecute):
672         * pcre/pcre_internal.h:
673         (PUT):
674         (GET):
675         (PUT2):
676         (GET2):
677         (isNewline):
678
679 2007-11-14  Eric Seidel  <eric@webkit.org>
680
681         Reviewed by Sam.
682         
683         Give PCRE a (small) bath.
684         Fix some formating and break things off into separate functions
685         http://bugs.webkit.org/show_bug.cgi?id=15993
686
687         * pcre/pcre_compile.cpp:
688         (calculateCompiledPatternLengthAndFlags):
689         (printCompiledRegExp):
690         (returnError):
691         (jsRegExpCompile):
692         * pcre/pcre_internal.h:
693         (compile_data::compile_data):
694
695 2007-11-14  Geoffrey Garen  <ggaren@apple.com>
696
697         Reviewed by Eric Seidel.
698         
699         Cleaned up the JavaScript grammar a bit.
700         
701         1. Changed BlockNode to always hold a child vector (which may be empty),
702         eliminating a few NULL-check branches in the common execution case.
703         
704         2. Changed the Block production to correctly report its starting and 
705         ending line numbers to the debugger. (It used to report its ending line
706         as its starting line.) Also, removed duplicate line-reporting code
707         inside the BlockNode constructor.
708         
709         3. Moved curly braces up from FunctionBody production into parent
710         productions. (I had to move the line number reporting code, too, since
711         it depends on the location of the curly braces.) This matches the ECMA
712         spec more closely, and makes some future changes I plan easier.
713         
714         4. Fixed statementList* convenience functions to deal appropriately with
715         empty Vectors.
716
717         SunSpider reports a small and statistically insignificant speedup.
718
719         * kjs/grammar.y:
720         * kjs/nodes.cpp:
721         (KJS::statementListPushFIFO):
722         (KJS::statementListGetDeclarations):
723         (KJS::statementListInitializeDeclarationStack):
724         (KJS::statementListInitializeVariableAccessStack):
725         (KJS::BlockNode::BlockNode):
726         (KJS::BlockNode::optimizeVariableAccess):
727         (KJS::BlockNode::getDeclarations):
728         (KJS::BlockNode::execute):
729         (KJS::FunctionBodyNode::initializeDeclarationStacks):
730         (KJS::FunctionBodyNode::optimizeVariableAccess):
731
732 2007-11-13  Anders Carlsson  <andersca@apple.com>
733
734         Add RefCounted.h (And remove Shared.h)
735         
736         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
737
738 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
739
740         Build fix.
741
742         * kjs/regexp.h:
743
744 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
745
746         Reviewed by Anders Carlsson.
747
748         Renamed Shared to RefCounted.
749
750         * API/JSClassRef.h:
751         * JavaScriptCore.xcodeproj/project.pbxproj:
752         * kjs/interpreter.h:
753         * kjs/regexp.h:
754         * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h.
755         (WTF::RefCounted::RefCounted):
756         * wtf/Shared.h: Removed.
757
758 2007-11-13  Adam Roben  <aroben@apple.com>
759
760         Build fix
761
762         Reviewed by Geoff.
763
764         * kjs/regexp.h: Added a missing #include.
765
766 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
767
768         Reviewed by Sam Weinig.
769
770         Moved Shared.h into wtf so it could be used in more places. Deployed
771         Shared in places where JSCore previously had hand-rolled ref-counting
772         classes.
773
774         * API/JSClassRef.cpp:
775         (OpaqueJSClass::OpaqueJSClass):
776         * API/JSClassRef.h:
777         * API/JSObjectRef.cpp:
778         (JSClassRetain):
779         (JSClassRelease):
780         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
781         * JavaScriptCore.xcodeproj/project.pbxproj:
782         * kjs/interpreter.cpp:
783         (KJS::Interpreter::init):
784         * kjs/interpreter.h:
785         * kjs/regexp.cpp:
786         (KJS::RegExp::RegExp):
787         * kjs/regexp.h:
788         * wtf/Shared.h: Copied from WebCore/platform/Shared.h.
789
790 2007-11-13  Eric Seidel  <eric@webkit.org>
791
792         Reviewed by Maciej.
793
794         Add an ASSERT to getTruncatedInt32 to enforce proper usage.
795         Best part about this patch?  It doesn't break the web!
796
797         * kjs/JSImmediate.h:
798         (KJS::JSImmediate::getTruncatedInt32):
799         (KJS::JSImmediate::toDouble):
800         (KJS::JSImmediate::getUInt32):
801
802 2007-11-13  Alexey Proskuryakov  <ap@webkit.org>
803
804         Windows build fix.
805
806         * bindings/c/c_utility.cpp:
807         (KJS::Bindings::convertUTF8ToUTF16):
808         * kjs/ustring.cpp:
809         (KJS::UString::UTF8String):
810         * wtf/unicode/UTF8.cpp:
811         (WTF::Unicode::ConvertUTF8ToUTF16):
812
813 2007-11-13  Darin Adler  <darin@apple.com>
814
815         Reviewed by Geoff.
816
817         - fix http://bugs.webkit.org/show_bug.cgi?id=11231
818           RegExp bug when handling newline characters
819           and a number of other differences between PCRE behvior
820           and JavaScript regular expressions:
821
822           + single-digit sequences like \4 should be treated as octal
823             character constants, unless there is a sufficient number
824             of brackets for them to be treated as backreferences
825
826           + \8 turns into the character "8", not a binary zero character
827             followed by "8" (same for 9)
828
829           + only the first 3 digits should be considered part of an
830             octal character constant (the old behavior was to decode
831             an arbitrarily long sequence and then mask with 0xFF)
832
833           + if \x is followed by anything other than two valid hex digits,
834             then it should simply be treated a the letter "x"; that includes
835             not supporting the \x{41} syntax
836
837           + if \u is followed by anything less than four valid hex digits,
838             then it should simply be treated a the letter "u"
839
840           + an extra "+" should be a syntax error, rather than being treated
841             as the "possessive quantifier"
842
843           + if a "]" character appears immediately after a "[" character that
844             starts a character class, then that's an empty character class,
845             rather than being the start of a character class that includes a
846             "]" character
847
848           + a "$" should not match a terminating newline; we could have gotten
849             PCRE to handle this the way we wanted by passing an appropriate option
850
851         Test: fast/js/regexp-no-extensions.html
852
853         * pcre/pcre_compile.cpp:
854         (check_escape): Check backreferences against bracount to catch both
855         overflows and things that should be treated as octal. Rewrite octal
856         loop to not go on indefinitely. Rewrite both hex loops to match and
857         remove \x{} support.
858         (compile_branch): Restructure loops so that we don't special-case a "]"
859         at the beginning of a character class. Remove code that treated "+" as
860         the possessive quantifier.
861         (jsRegExpCompile): Change the "]" handling here too.
862
863         * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation.
864         Changed DOLL to remove handling of "terminating newline", a Perl concept
865         which we don't need.
866
867         * tests/mozilla/expected.html: Two tests are fixed now:
868         ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js.
869         One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before
870         was due to a bug (we treated all 1-character numeric escapes as backreferences).
871         The date tests also now both expect success -- whatever was making them fail
872         before was probably due to the time being close to a DST shift; maybe we need
873         to get rid of those tests.
874
875 2007-11-13  Darin Adler  <darin@apple.com>
876
877         * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32):
878         Remove too-strong assert that was firing constantly and preventing even basic
879         web browsing from working in a debug build. This function is used in many
880         cases where the immediate value is not a number; the assertion could perhaps
881         be added back later with a bit of reorganization.
882
883 2007-11-13  Alp Toker  <alp@atoker.com>
884
885         Build fix for breakage to non-Mac builds introduced in r27746.
886
887         * kjs/ustring.cpp:
888
889 2007-11-13  Eric Seidel  <eric@webkit.org>
890
891         Reviewed by Maciej.
892
893         Clean up evaluateToBoolean functions to use inlines instead of copy/paste code
894
895         * kjs/JSImmediate.h:
896         * kjs/nodes.cpp:
897         (KJS::GreaterNode::inlineEvaluateToBoolean):
898         (KJS::GreaterNode::evaluate):
899         (KJS::LessEqNode::inlineEvaluateToBoolean):
900         (KJS::LessEqNode::evaluate):
901         (KJS::GreaterEqNode::inlineEvaluateToBoolean):
902         (KJS::GreaterEqNode::evaluate):
903         (KJS::InNode::evaluateToBoolean):
904         (KJS::EqualNode::inlineEvaluateToBoolean):
905         (KJS::EqualNode::evaluate):
906         (KJS::NotEqualNode::inlineEvaluateToBoolean):
907         (KJS::NotEqualNode::evaluate):
908         (KJS::StrictEqualNode::inlineEvaluateToBoolean):
909         (KJS::StrictEqualNode::evaluate):
910         (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
911         (KJS::NotStrictEqualNode::evaluate):
912         * kjs/nodes.h:
913
914 2007-11-12  Geoffrey Garen  <ggaren@apple.com>
915
916         Reviewed by Sam Weinig.
917         
918         Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
919         base64 spends 1.1% of total time checking for special Infinity case
920         
921         Use a fast character test instead of calling strncmp.
922         
923         1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
924         Sharks reports only .1%. Who are you going to believe? Huh?
925
926         * kjs/ustring.cpp:
927         (KJS::UString::toDouble):
928
929 2007-11-12  Eric Seidel  <eric@webkit.org>
930
931         Reviewed by Oliver.
932
933         Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
934         Fix a few missing evaluateToBoolean methods
935         Deploy all evaluateTo* functions to more nodes to avoid slowdowns
936         http://bugs.webkit.org/show_bug.cgi?id=15950
937         
938         SunSpider claims this is at least a 1.4% speedup.
939
940         * kjs/JSImmediate.h:
941         (KJS::JSImmediate::getTruncatedInt32):
942         (KJS::JSImmediate::toDouble):
943         (KJS::JSImmediate::getUInt32):
944         * kjs/nodes.cpp:
945         (KJS::ExpressionNode::evaluateToNumber):
946         (KJS::ExpressionNode::evaluateToInt32):
947         (KJS::ExpressionNode::evaluateToUInt32):
948         (KJS::NumberNode::evaluateToInt32):
949         (KJS::NumberNode::evaluateToUInt32):
950         (KJS::ImmediateNumberNode::evaluateToInt32):
951         (KJS::ImmediateNumberNode::evaluateToUInt32):
952         (KJS::ResolveNode::evaluate):
953         (KJS::ResolveNode::evaluateToNumber):
954         (KJS::ResolveNode::evaluateToBoolean):
955         (KJS::ResolveNode::evaluateToInt32):
956         (KJS::ResolveNode::evaluateToUInt32):
957         (KJS::LocalVarAccessNode::evaluateToInt32):
958         (KJS::LocalVarAccessNode::evaluateToUInt32):
959         (KJS::BracketAccessorNode::evaluateToNumber):
960         (KJS::BracketAccessorNode::evaluateToBoolean):
961         (KJS::BracketAccessorNode::evaluateToInt32):
962         (KJS::BracketAccessorNode::evaluateToUInt32):
963         (KJS::DotAccessorNode::inlineEvaluate):
964         (KJS::DotAccessorNode::evaluate):
965         (KJS::DotAccessorNode::evaluateToNumber):
966         (KJS::DotAccessorNode::evaluateToBoolean):
967         (KJS::DotAccessorNode::evaluateToInt32):
968         (KJS::DotAccessorNode::evaluateToUInt32):
969         (KJS::NewExprNode::inlineEvaluate):
970         (KJS::NewExprNode::evaluate):
971         (KJS::NewExprNode::evaluateToNumber):
972         (KJS::NewExprNode::evaluateToBoolean):
973         (KJS::NewExprNode::evaluateToInt32):
974         (KJS::NewExprNode::evaluateToUInt32):
975         (KJS::FunctionCallResolveNode::inlineEvaluate):
976         (KJS::FunctionCallResolveNode::evaluate):
977         (KJS::FunctionCallResolveNode::evaluateToNumber):
978         (KJS::FunctionCallResolveNode::evaluateToBoolean):
979         (KJS::FunctionCallResolveNode::evaluateToInt32):
980         (KJS::FunctionCallResolveNode::evaluateToUInt32):
981         (KJS::LocalVarFunctionCallNode::evaluate):
982         (KJS::LocalVarFunctionCallNode::evaluateToNumber):
983         (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
984         (KJS::LocalVarFunctionCallNode::evaluateToInt32):
985         (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
986         (KJS::FunctionCallDotNode::evaluate):
987         (KJS::FunctionCallDotNode::evaluateToNumber):
988         (KJS::FunctionCallDotNode::evaluateToBoolean):
989         (KJS::FunctionCallDotNode::evaluateToInt32):
990         (KJS::FunctionCallDotNode::evaluateToUInt32):
991         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
992         (KJS::PostDecLocalVarNode::evaluateToNumber):
993         (KJS::PostDecLocalVarNode::evaluateToBoolean):
994         (KJS::PostDecLocalVarNode::evaluateToInt32):
995         (KJS::PostDecLocalVarNode::evaluateToUInt32):
996         (KJS::typeStringForValue):
997         (KJS::UnaryPlusNode::evaluate):
998         (KJS::UnaryPlusNode::evaluateToBoolean):
999         (KJS::UnaryPlusNode::evaluateToNumber):
1000         (KJS::UnaryPlusNode::evaluateToInt32):
1001         (KJS::BitwiseNotNode::inlineEvaluateToInt32):
1002         (KJS::BitwiseNotNode::evaluate):
1003         (KJS::BitwiseNotNode::evaluateToNumber):
1004         (KJS::BitwiseNotNode::evaluateToBoolean):
1005         (KJS::BitwiseNotNode::evaluateToInt32):
1006         (KJS::MultNode::evaluateToBoolean):
1007         (KJS::MultNode::evaluateToInt32):
1008         (KJS::MultNode::evaluateToUInt32):
1009         (KJS::DivNode::evaluateToInt32):
1010         (KJS::DivNode::evaluateToUInt32):
1011         (KJS::ModNode::evaluateToBoolean):
1012         (KJS::ModNode::evaluateToInt32):
1013         (KJS::ModNode::evaluateToUInt32):
1014         (KJS::AddNode::evaluateToNumber):
1015         (KJS::AddNode::evaluateToInt32):
1016         (KJS::AddNode::evaluateToUInt32):
1017         (KJS::AddNumbersNode::evaluateToInt32):
1018         (KJS::AddNumbersNode::evaluateToUInt32):
1019         (KJS::SubNode::evaluateToInt32):
1020         (KJS::SubNode::evaluateToUInt32):
1021         (KJS::LeftShiftNode::inlineEvaluateToInt32):
1022         (KJS::LeftShiftNode::evaluate):
1023         (KJS::LeftShiftNode::evaluateToNumber):
1024         (KJS::LeftShiftNode::evaluateToInt32):
1025         (KJS::RightShiftNode::inlineEvaluateToInt32):
1026         (KJS::RightShiftNode::evaluate):
1027         (KJS::RightShiftNode::evaluateToNumber):
1028         (KJS::RightShiftNode::evaluateToInt32):
1029         (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
1030         (KJS::UnsignedRightShiftNode::evaluate):
1031         (KJS::UnsignedRightShiftNode::evaluateToNumber):
1032         (KJS::UnsignedRightShiftNode::evaluateToInt32):
1033         (KJS::LessNode::inlineEvaluateToBoolean):
1034         (KJS::LessNode::evaluate):
1035         (KJS::LessNode::evaluateToBoolean):
1036         (KJS::LessNumbersNode::inlineEvaluateToBoolean):
1037         (KJS::LessNumbersNode::evaluate):
1038         (KJS::LessNumbersNode::evaluateToBoolean):
1039         (KJS::LessStringsNode::inlineEvaluateToBoolean):
1040         (KJS::LessStringsNode::evaluate):
1041         (KJS::BitAndNode::evaluate):
1042         (KJS::BitAndNode::inlineEvaluateToInt32):
1043         (KJS::BitAndNode::evaluateToNumber):
1044         (KJS::BitAndNode::evaluateToBoolean):
1045         (KJS::BitAndNode::evaluateToInt32):
1046         (KJS::BitXOrNode::inlineEvaluateToInt32):
1047         (KJS::BitXOrNode::evaluate):
1048         (KJS::BitXOrNode::evaluateToNumber):
1049         (KJS::BitXOrNode::evaluateToBoolean):
1050         (KJS::BitXOrNode::evaluateToInt32):
1051         (KJS::BitOrNode::inlineEvaluateToInt32):
1052         (KJS::BitOrNode::evaluate):
1053         (KJS::BitOrNode::evaluateToNumber):
1054         (KJS::BitOrNode::evaluateToBoolean):
1055         (KJS::BitOrNode::evaluateToInt32):
1056         (KJS::ConditionalNode::evaluateToNumber):
1057         (KJS::ConditionalNode::evaluateToInt32):
1058         (KJS::ConditionalNode::evaluateToUInt32):
1059         (KJS::valueForReadModifyAssignment):
1060         (KJS::AssignExprNode::evaluate):
1061         (KJS::AssignExprNode::evaluateToBoolean):
1062         (KJS::AssignExprNode::evaluateToNumber):
1063         (KJS::AssignExprNode::evaluateToInt32):
1064         (KJS::VarDeclNode::handleSlowCase):
1065         * kjs/nodes.h:
1066         (KJS::FunctionCallResolveNode::precedence):
1067         (KJS::AddNode::precedence):
1068         (KJS::AddNode::):
1069         (KJS::LessNumbersNode::):
1070         (KJS::LessStringsNode::):
1071         * kjs/value.cpp:
1072         (KJS::JSValue::toInt32SlowCase):
1073         (KJS::JSValue::toUInt32SlowCase):
1074         * kjs/value.h:
1075         (KJS::JSValue::asCell):
1076         (KJS::JSValue::toInt32):
1077         (KJS::JSValue::toUInt32):
1078
1079 2007-11-12  Alexey Proskuryakov  <ap@webkit.org>
1080
1081         Reviewed by Darin.
1082
1083         http://bugs.webkit.org/show_bug.cgi?id=15953
1084         Add UTF-8 encoding/decoding to WTF
1085
1086         * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode.
1087         * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient
1088         parameter. Callers are not interested in getting decoding results in strict mode, so 
1089         this allows for bailing out as soon as an error is seen.
1090
1091         * kjs/function.cpp:
1092         (KJS::encode): Updated for new UString::UTF8String() signature.
1093
1094         * API/JSStringRef.cpp:
1095         (JSStringCreateWithCharacters): Disambiguate UChar.
1096         (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string!
1097         * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16().
1098
1099         * wtf/unicode/UTF8.cpp: Added.
1100         (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
1101         (WTF::Unicode::inlineUTF8SequenceLength):
1102         (WTF::Unicode::UTF8SequenceLength):
1103         (WTF::Unicode::decodeUTF8Sequence):
1104         (WTF::Unicode::):
1105         (WTF::Unicode::ConvertUTF16ToUTF8):
1106         (WTF::Unicode::isLegalUTF8):
1107         (WTF::Unicode::ConvertUTF8ToUTF16):
1108         * wtf/unicode/UTF8.h: Added.
1109         (WTF::Unicode::):
1110         Some code moved from ustring.h, some adapted from unicode.org sources.
1111
1112         * JavaScriptCore.exp:
1113         * JavaScriptCore.pri:
1114         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1115         * JavaScriptCore.xcodeproj/project.pbxproj:
1116         * JavaScriptCoreSources.bkl:
1117         Added UTF8.{h,cpp}
1118
1119 2007-11-12  Josh Aas  <joshmoz@gmail.com>
1120
1121         Reviewed by Darin.
1122
1123         - http://bugs.webkit.org/show_bug.cgi?id=15946
1124           add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)
1125
1126         * bindings/npapi.h:
1127
1128 2007-11-12  Darin Adler  <darin@apple.com>
1129
1130         Reviewed by Sam.
1131
1132         - http://bugs.webkit.org/show_bug.cgi?id=15951
1133           REGRESSION: assertion failure in regexp match() when running JS tests
1134
1135         Test: fast/js/regexp-many-brackets.html
1136
1137         * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for
1138         the BRANUMBER opcode.
1139
1140 2007-11-12  Darin Adler  <darin@apple.com>
1141
1142         Reviewed by Geoff.
1143
1144         - fix use of prefix and config.h, got rid of a few unneeded things in
1145           the PCRE code; no behavior changes
1146
1147         * API/JSBase.cpp: Added include of config.h.
1148         * API/JSCallbackConstructor.cpp: Ditto.
1149         * API/JSCallbackFunction.cpp: Ditto.
1150         * API/JSCallbackObject.cpp: Ditto.
1151         * API/JSClassRef.cpp: Ditto.
1152         * API/JSContextRef.cpp: Ditto.
1153         * API/JSObjectRef.cpp: Ditto.
1154         * API/JSStringRef.cpp: Ditto.
1155         * API/JSValueRef.cpp: Ditto.
1156
1157         * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround.
1158         Moved new/delete macros after includes, as they are in WebCore's prefix.
1159         Removed "config.h".
1160
1161         * pcre/dftables.cpp: (main): Changed back to not use a separate maketables
1162         function. This is needed for PCRE, but not helpful for our use. Also changed
1163         the tables to all be 128 entries long instead of 256, since only the first
1164         128 are ever used.
1165
1166         * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab,
1167         which was only being used to check hex digits. Changed all uses of TRUE and
1168         FALSE to use the C++ true and false instead.
1169         (check_escape): Just the TRUE/FALSE thing.
1170         (is_counted_repeat): Ditto.
1171         (could_be_empty_branch): Ditto.
1172         (get_othercase_range): Ditto.
1173         (compile_branch): Ditto.
1174         (compile_regex): Ditto.
1175         (is_anchored): Ditto.
1176         (is_startline): Ditto.
1177         (find_firstassertedchar): Ditto.
1178         (jsRegExpCompile): Ditto.
1179
1180         * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and
1181         FALSE to use the C++ true and false instead.
1182         (match_ref): Just the TRUE/FALSE thing.
1183         (match): Ditto. Removed some unneeded braces.
1184         (jsRegExpExecute): Just the TRUE/FALSE thing.
1185
1186         * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top
1187         of the file instead of the bottom, so they can be used. Also changed the table
1188         sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE.
1189         Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to
1190         be a macro instead of a extern int.
1191
1192         * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.
1193
1194         * pcre/pcre_tables.cpp: Made table sizes explicit.
1195
1196         * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.
1197
1198 2007-11-12  Adam Roben  <aroben@apple.com>
1199
1200         Build fix
1201
1202         * wtf/FastMalloc.h: Add missing using statement.
1203
1204 2007-11-11  Oliver Hunt  <oliver@apple.com>
1205
1206         Reviewed by Darin.
1207
1208         Add special fastZeroedMalloc function to replace a 
1209         number of fastCalloc calls where one argument was 1.
1210         
1211         This results in a 0.4% progression in SunSpider, more
1212         than making up for the earlier regression caused by 
1213         additional overflow checks.
1214
1215         * JavaScriptCore.exp:
1216         * kjs/array_instance.cpp:
1217         * kjs/property_map.cpp:
1218         * wtf/FastMalloc.cpp:
1219         * wtf/FastMalloc.h:
1220         * wtf/HashTable.h:
1221
1222 2007-11-11  Adam Roben  <aroben@apple.com>
1223
1224         Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter
1225
1226         The bug was due to a mismatch between HashMap::remove and
1227         HashTable::checkTableConsistency. HashMap::remove can delete the value
1228         stored in the HashTable (by derefing it), which is not normally
1229         allowed by HashTable. It's OK in this case because the value is about
1230         to be removed from the table, but HashTable wasn't aware of this.
1231
1232         HashMap::remove now performs the consistency check itself before
1233         derefing the value.
1234
1235         Darin noticed that the same bug would occur in HashSet, so I've fixed
1236         it there as well.
1237
1238         Reviewed by Darin.
1239
1240         * wtf/HashMap.h:
1241         (WTF::HashMap::remove): Perform the HashTable consistency check
1242         manually before calling deref.
1243         * wtf/HashSet.h:
1244         (WTF::HashSet::remove): Ditto.
1245         * wtf/HashTable.h: Made checkTableConsistency public so that HashMap
1246         and HashSet can call it.
1247         (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck):
1248         Added.
1249         (WTF::HashTable::removeAndInvalidate): Added.
1250         (WTF::HashTable::remove):
1251         (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added.
1252
1253 2007-11-11  Mark Rowe  <mrowe@apple.com>
1254
1255         Build fix.  Use the correct filename case.
1256
1257         * kjs/nodes.h:
1258
1259 2007-11-11  Geoffrey Garen  <ggaren@apple.com>
1260
1261         Reviewed by Sam Weinig.
1262         
1263         Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
1264         15% of string-validate-input.js is spent compiling the same regular expression
1265         
1266         Store a compiled representation of the regular expression in the AST.
1267         
1268         Only a .2% SunSpider speedup overall, but a 10.6% speedup on 
1269         string-validate-input.js.
1270
1271         * kjs/nodes.cpp:
1272         (KJS::RegExpNode::evaluate):
1273         * kjs/nodes.h:
1274         (KJS::RegExpNode::):
1275         * kjs/nodes2string.cpp:
1276         (KJS::RegExpNode::streamTo):
1277         * kjs/regexp.cpp:
1278         (KJS::RegExp::flags):
1279         * kjs/regexp.h:
1280         (KJS::RegExp::pattern):
1281         * kjs/regexp_object.cpp:
1282         (KJS::RegExpObjectImp::construct):
1283         (KJS::RegExpObjectImp::createRegExpImp):
1284         * kjs/regexp_object.h:
1285
1286 2007-11-11  Oliver Hunt  <oliver@apple.com>
1287
1288         Reviewed by Eric.
1289
1290         Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create
1291
1292         Unfortunately this is a very slight regression, but is unavoidable.
1293
1294         * wtf/FastMalloc.cpp:
1295
1296 2007-11-10  Eric Seidel  <eric@webkit.org>
1297
1298         Reviewed by darin.
1299         
1300         Add simple type inferencing to the parser, and create custom
1301         AddNode and LessNode subclasses based on inferred types.
1302         http://bugs.webkit.org/show_bug.cgi?id=15884
1303         
1304         SunSpider claims this is at least a 0.5% speedup.
1305
1306         * JavaScriptCore.exp:
1307         * kjs/grammar.y:
1308         * kjs/internal.cpp:
1309         (KJS::NumberImp::getPrimitiveNumber):
1310         (KJS::GetterSetterImp::getPrimitiveNumber):
1311         * kjs/internal.h:
1312         * kjs/lexer.cpp:
1313         (KJS::Lexer::lex):
1314         * kjs/nodes.cpp:
1315         (KJS::Node::Node):
1316         (KJS::StringNode::evaluate):
1317         (KJS::StringNode::evaluateToNumber):
1318         (KJS::StringNode::evaluateToBoolean):
1319         (KJS::RegExpNode::evaluate):
1320         (KJS::UnaryPlusNode::optimizeVariableAccess):
1321         (KJS::AddNode::evaluate):
1322         (KJS::AddNode::evaluateToNumber):
1323         (KJS::AddNumbersNode::inlineEvaluateToNumber):
1324         (KJS::AddNumbersNode::evaluate):
1325         (KJS::AddNumbersNode::evaluateToNumber):
1326         (KJS::AddStringsNode::evaluate):
1327         (KJS::AddStringLeftNode::evaluate):
1328         (KJS::AddStringRightNode::evaluate):
1329         (KJS::lessThan):
1330         (KJS::lessThanEq):
1331         (KJS::LessNumbersNode::evaluate):
1332         (KJS::LessStringsNode::evaluate):
1333         * kjs/nodes.h:
1334         (KJS::ExpressionNode::):
1335         (KJS::RegExpNode::):
1336         (KJS::RegExpNode::precedence):
1337         (KJS::TypeOfResolveNode::):
1338         (KJS::LocalVarTypeOfNode::):
1339         (KJS::UnaryPlusNode::):
1340         (KJS::UnaryPlusNode::precedence):
1341         (KJS::AddNode::):
1342         (KJS::AddNode::precedence):
1343         (KJS::AddNumbersNode::):
1344         (KJS::AddStringLeftNode::):
1345         (KJS::AddStringRightNode::):
1346         (KJS::AddStringsNode::):
1347         (KJS::LessNode::):
1348         (KJS::LessNode::precedence):
1349         (KJS::LessNumbersNode::):
1350         (KJS::LessStringsNode::):
1351         * kjs/nodes2string.cpp:
1352         (KJS::StringNode::streamTo):
1353         * kjs/object.cpp:
1354         * kjs/object.h:
1355         * kjs/value.h:
1356         (KJS::JSValue::getPrimitiveNumber):
1357
1358 2007-11-11  Darin Adler  <darin@apple.com>
1359
1360         - try another way of fixing dftables builds -- refactor pcre_internal.h a bit
1361
1362         * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set.
1363         Later we can break it into two files.
1364
1365         * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths.
1366         * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free.
1367         * pcre/dftables.pro: Take out now-unneeded include paths.
1368         * pcre/pcre_maketables.cpp: Use new instead of malloc.
1369
1370 2007-11-11  Darin Adler  <darin@apple.com>
1371
1372         * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding
1373         another include path.
1374
1375 2007-11-11  Darin Adler  <darin@apple.com>
1376
1377         * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
1378         by adding another include path.
1379
1380 2007-11-11  Darin Adler  <darin@apple.com>
1381
1382         Reviewed by Sam.
1383
1384         - http://bugs.webkit.org/show_bug.cgi?id=15924
1385           next round of changes to JSRegExp (formerly PCRE)
1386
1387         This is a combination of converting to C++, tweaking the API, and adding
1388         some additional optimizations.
1389
1390         Future steps will involve getting rid of the use of UTF-8 completely
1391         (we'll use UTF-16 exclusively instead), eliminating more source files,
1392         and some more speed-ups.
1393
1394         SunSpider says the current round is an 0.9% speed-up overall, and a
1395         5.3% speed-up for regexp.
1396
1397         * JavaScriptCore.exp: Updated for new entry points.
1398
1399         * JavaScriptCore.pri:
1400         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1401         * JavaScriptCore.vcproj/dftables/dftables.vcproj:
1402         * JavaScriptCore.xcodeproj/project.pbxproj:
1403         * JavaScriptCoreSources.bkl:
1404         * jscore.bkl:
1405         Updated for new source file names and ForwardingHeaders.
1406
1407         * kjs/regexp.cpp:
1408         (KJS::RegExp::RegExp): Changed to use the error message without calling
1409         strdup on it and to pass the new types and options.
1410         (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message.
1411         (KJS::RegExp::match): Pass the new types and options.
1412         * kjs/regexp.h: Update type of m_constructionError.
1413
1414         * pcre/AUTHORS: Update to reflect the status of the project -- we don't include
1415         the Google parts, and this isn't the PCRE library, per se.
1416         * pcre/COPYING: Ditto.
1417
1418         * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c.
1419         (main): Removed unneeded ctype_digit.
1420
1421         * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar.
1422
1423         * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c.
1424         Moved a lot of private stuff used only within this file here from pcre_internal.h.
1425         Renumbered the error codes.
1426         (error_text): Use a single string with embedded nulls for the error text (I got
1427         this idea from newer versions of PCRE).
1428         (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit
1429         uses with isASCIIDigit.
1430         (is_counted_repeat): Ditto.
1431         (read_repeat_counts): Ditto.
1432         (first_significant_code): Ditto.
1433         (find_fixedlength): Ditto.
1434         (could_be_empty_branch): Ditto.
1435         (compile_branch): Ditto. Also removed some code that handles changing options.
1436         JavaScript doesn't have any of the features that allow options to change.
1437         (compile_regex): Updated for change to options parameter.
1438         (is_anchored): Ditto.
1439         (find_firstassertedchar): Ditto.
1440         (jsRegExpCompile): Changed to take separate flags instead of an options int.
1441         Also changed to call new/delete instead of pcre_malloc/free.
1442         (jsRegExpFree): Ditto.
1443
1444         * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c.
1445         Added a case that uses computed goto for the opcode loop, but did not turn it on.
1446         Changed the RMATCH macro to handle returns more efficiently by putting the where
1447         pointer in the new frame instead of the old one, allowing us to branch to the
1448         return with a single statement. Switched to new/delete from pcre_malloc/free.
1449         Changed many RRETURN callers to not set the return value since it's already
1450         set correctly. Replaced the rrc variable with an is_match variable. Values other
1451         than "match" and "no match" are now handled differently. This allows us to remove
1452         the code to check for those cases in various rules.
1453         (match): All the case statements use a macro BEGIN_OPCODE instead. And all the
1454         continue statements, or break statements that break out of the outer case use
1455         a macro NEXT_OPCODE instead. Replaced a few if statements with assertions.
1456         (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused
1457         start_match field from the match block.
1458
1459         * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h
1460         in here. Removed various unused types. Converted from JSRegExpChar to UChar.
1461         Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be
1462         used in multiple places. Unfortunately we lose the comments for each opcode; we
1463         should find a place to put those back. Removed ctype_digit.
1464
1465         * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c.
1466         (pcre_maketables): Got rid of the conditional code that allows this to be compiled
1467         in -- it's only used for dftables now (and soon may be obsolete entirely).
1468         Changed code for cbit_digit to not use isdigit, and took the "_" case out of the
1469         loop. Removed ctype_digit.
1470
1471         * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c.
1472
1473         * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c.
1474         Moved _pcre_OP_lengths out of here into pcre_exec.cpp.
1475
1476         * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c.
1477         Updated for other file name changes.
1478
1479         * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c.
1480
1481         * pcre/ucpinternal.h: Updated header.
1482
1483         * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c.
1484
1485         * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to
1486         & for this operation. Also added an overload that takes an int because that's
1487         useful for PCRE. Later we could optimize for int and overload other functions in
1488         this file; stuck to this simple one for now.
1489
1490         * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper.
1491         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
1492
1493         * pcre/LICENCE: Removed.
1494         * pcre/pcre-config.h: Removed.
1495         * wtf/FastMallocPCRE.cpp: Removed.
1496
1497         * pcre/dftables.c: Renamed to cpp.
1498         * pcre/pcre_compile.c: Ditto.
1499         * pcre/pcre_exec.c: Ditto.
1500         * pcre/pcre_maketables.c: Ditto.
1501         * pcre/pcre_ord2utf8.c: Ditto.
1502         * pcre/pcre_tables.c: Ditto.
1503         * pcre/pcre_ucp_searchfuncs.c: Ditto.
1504         * pcre/pcre_xclass.c: Ditto.
1505         * pcre/ucptable.c: Ditto.
1506
1507 2007-11-11  Eric Seidel  <eric@webkit.org>
1508
1509         Reviewed by Oliver.
1510
1511         Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp
1512
1513         * kjs/nodes.cpp:
1514         (KJS::ExpressionNode::evaluateToBoolean):
1515         (KJS::LessNode::evaluateToBoolean):
1516         (KJS::GreaterNode::evaluateToBoolean):
1517         (KJS::LessEqNode::evaluateToBoolean):
1518         (KJS::GreaterEqNode::evaluateToBoolean):
1519         (KJS::InstanceOfNode::evaluateToBoolean):
1520         (KJS::InNode::evaluateToBoolean):
1521         (KJS::EqualNode::evaluateToBoolean):
1522         (KJS::NotEqualNode::evaluateToBoolean):
1523         (KJS::StrictEqualNode::evaluateToBoolean):
1524         (KJS::NotStrictEqualNode::evaluateToBoolean):
1525         (KJS::LogicalAndNode::evaluateToBoolean):
1526         (KJS::LogicalOrNode::evaluateToBoolean):
1527         (KJS::ConditionalNode::evaluateToBoolean):
1528
1529 2007-11-10  Darin Adler  <darin@apple.com>
1530
1531         Reviewed by Sam.
1532
1533         - fix http://bugs.webkit.org/show_bug.cgi?id=15927
1534           REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property
1535           and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki
1536
1537         Test: fast/js/delete-then-put.html
1538
1539         * kjs/property_map.cpp:
1540         (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working.
1541         (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this
1542         problem before.
1543
1544         - roll out a last-minute change to my evaluateToBoolean patch that was incorrect.
1545
1546         * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to
1547         optimizeForUnnecessaryResult, since the result is used in some cases.
1548
1549 2007-11-10  Adam Roben  <aroben@apple.com>
1550
1551         Windows build fix
1552
1553         Roll out some changes that were (seemingly accidentally) checked in
1554         with r27664.
1555
1556         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1557
1558 2007-11-10  Darin Adler  <darin@apple.com>
1559
1560         Reviewed by Sam.
1561
1562         - http://bugs.webkit.org/show_bug.cgi?id=15915
1563           add an evaluation path for booleans like the one we have for numbers
1564
1565         Gives 1.1% on SunSpider.
1566
1567         * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode.
1568
1569         * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult
1570         down from Node to ExpressionNode. Changed some classes to not inherit from
1571         ExpressionNode where not necessary, and removed unnneeded evaluate functions
1572         as well as evaluate functions that need not be virtual. Call the
1573         optimizeForUnnecessaryResult function on the start of a for loop too.
1574         * kjs/nodes.cpp:
1575         (KJS::ExpressionNode::evaluateToBoolean): Added.
1576         (KJS::FalseNode::evaluate): Added.
1577         (KJS::TrueNode::evaluate): Added.
1578         (KJS::NumberNode::evaluateToBoolean): Added.
1579         (KJS::StringNode::evaluateToBoolean): Added.
1580         (KJS::LocalVarAccessNode::evaluateToBoolean): Added.
1581         (KJS::BracketAccessorNode::evaluateToBoolean): Added.
1582         (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean.
1583         (KJS::LogicalNotNode::evaluateToBoolean): Added.
1584         (KJS::lessThan): Changed to return bool.
1585         (KJS::lessThanEq): Ditto.
1586         (KJS::LessNode::evaluate): Changed since lessThan returns bool.
1587         (KJS::LessNode::evaluateToBoolean): Added.
1588         (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool.
1589         (KJS::GreaterNode::evaluateToBoolean): Added.
1590         (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool.
1591         (KJS::LessEqNode::evaluateToBoolean): Added.
1592         (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool.
1593         (KJS::GreaterEqNode::evaluateToBoolean): Added.
1594         (KJS::InstanceOfNode::evaluateToBoolean): Added.
1595         (KJS::InNode::evaluateToBoolean): Added.
1596         (KJS::EqualNode::evaluateToBoolean): Added.
1597         (KJS::NotEqualNode::evaluateToBoolean): Added.
1598         (KJS::StrictEqualNode::evaluateToBoolean): Added.
1599         (KJS::NotStrictEqualNode::evaluateToBoolean): Added.
1600         (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean.
1601         (KJS::IfNode::execute): Ditto.
1602         (KJS::DoWhileNode::execute): Ditto.
1603         (KJS::WhileNode::execute): Ditto.
1604         (KJS::ForNode::execute): Ditto.
1605
1606         * kjs/nodes2string.cpp:
1607         (KJS::FalseNode::streamTo): Added.
1608         (KJS::TrueNode::streamTo): Added.
1609
1610 2007-11-09  Adam Roben  <aroben@apple.com>
1611
1612         Windows build fix
1613
1614         Reviewed by Darin.
1615
1616         * kjs/value.h:
1617         (KJS::jsNumber): Add some explicit casts.
1618
1619 2007-11-08  Darin Adler  <darin@apple.com>
1620
1621         - fix build
1622
1623         * kjs/grammar.y:
1624         * kjs/nodes.h:
1625         * kjs/property_map.cpp:
1626
1627 2007-11-08  Darin Adler  <darin@apple.com>
1628
1629         - roll out accidentally-checked in changes
1630
1631         * kjs/nodes.cpp: Back to previous version.
1632         * kjs/nodes.h: Ditto.
1633         * kjs/grammar.y: Ditto.
1634
1635 2007-11-08  Darin Adler  <darin@apple.com>
1636
1637         Reviewed by Maciej.
1638
1639         - http://bugs.webkit.org/show_bug.cgi?id=15912
1640           fasta spends a lot of time in qsort
1641
1642         * kjs/property_map.cpp:
1643         (KJS::PropertyMap::getEnumerablePropertyNames):
1644         Use insertion sort instead of qsort for small sets of property names.
1645         We can probably do some even-better speedups of for/in, but this nets
1646         0.6% overall and 6.7% on fasta.
1647
1648 2007-11-08  Darin Adler  <darin@apple.com>
1649
1650         Reviewed by Maciej.
1651
1652         - http://bugs.webkit.org/show_bug.cgi?id=15906
1653           getting characters by indexing into a string is very slow
1654
1655         This fixes one source of the slowness -- the conversion to an unused
1656         Identifier as we call the get function from the slot -- but doesn't
1657         fix others, such as the fact that we have to allocate a new UString::Rep
1658         for every single character.
1659
1660         Speeds up string-base64 30%, and at least 0.5% overall.
1661         But does slow down access-fannkuch quite a bit. Might be worth
1662         revisiting in the future to see what we can do about that (although
1663         I did look at a profile for a while).
1664
1665         * kjs/property_slot.h: Add a new marker for "numeric" property slots;
1666         slots where we don't need to pass the identifier to the get function.
1667         (KJS::PropertySlot::getValue): Added code to call the numeric get function.
1668         (KJS::PropertySlot::setCustomNumeric): Added.
1669         * kjs/string_object.cpp:
1670         (KJS::StringInstance::indexGetter): Changed to use substr() instead
1671         of constructing a wholly new UString each time.
1672         (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but
1673         takes advantage of setCustomNumeric to avoid creating an Identifier.
1674         (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric.
1675
1676 2007-11-08  Darin Adler  <darin@apple.com>
1677
1678         Reviewed by Oliver.
1679
1680         - http://bugs.webkit.org/show_bug.cgi?id=15904
1681           more speed-ups possible by tightening up int version of JSImmediate
1682
1683         1% improvement of SunSpider
1684
1685         * kjs/JSImmediate.h: Eliminate the now-unneeded FPBitValues struct template.
1686         (KJS::JSImmediate::from): Overload for most numeric types; many types can
1687         do fewer branches and checks.
1688         (KJS::JSImmediate::getUInt32): Removed unneeded check for undefined.
1689         (KJS::JSImmediate::getTruncatedInt32): Ditto.
1690         (KJS::JSImmediate::getTruncatedUInt32): Ditto. There's no difference any more
1691         between getUInt32 and getTruncatedUInt32, so that's worth a rename and merge later.
1692
1693         * kjs/grammar.y: Update since fromDouble is now just from.
1694         * kjs/nodes.h: Ditto.
1695
1696         * kjs/value.h: (KJS::jsNumber): Overload for most numeric types.
1697
1698 2007-11-08  Kevin Ollivier  <kevino@theolliviers.com>
1699
1700         Bakefiles for building JavaScriptCore, needed by wx port.
1701
1702         Reviewed by Mark Rowe.
1703
1704         * JavaScriptCoreSources.bkl: Added.
1705         * jscore.bkl: Added.
1706
1707 2007-11-08  Oliver Hunt  <oliver@apple.com>
1708
1709         Reviewed by Maciej.
1710
1711         Fix regression caused by earlier bitwise and optimisation.  1 & undefined != 1.
1712
1713         The implementation of JSImmediate::areBothImmediateNumbers relies on 
1714         (JSImmediate::getTag(immediate1) & JSImmediate::getTag(immediate2)) having 
1715         a unique result when both immediate values are numbers.
1716
1717         The regression was due to UndefinedType & NumberType returning NumberType (3 & 1).
1718         By swapping the value of NumberType and UndefinedType this ceases to be a problem.
1719
1720         * kjs/JSType.h:
1721         (KJS::):
1722
1723 2007-11-08  Darin Adler  <darin@apple.com>
1724
1725         - fix build
1726
1727         * kjs/nodes.h: Add missing parameter name.
1728
1729 2007-11-08  Eric Seidel  <eric@webkit.org>
1730
1731         Reviewed by darin.
1732
1733         Add ExpressionNode subclass of Node, use it.
1734
1735         * kjs/grammar.y:
1736         * kjs/nodes.cpp:
1737         (KJS::ForInNode::ForInNode):
1738         * kjs/nodes.h:
1739         (KJS::ExpressionNode::):
1740         (KJS::NullNode::):
1741         (KJS::NullNode::precedence):
1742         (KJS::BooleanNode::):
1743         (KJS::BooleanNode::precedence):
1744         (KJS::RegExpNode::):
1745         (KJS::RegExpNode::precedence):
1746         (KJS::ThisNode::):
1747         (KJS::ThisNode::precedence):
1748         (KJS::ResolveNode::):
1749         (KJS::ElementNode::):
1750         (KJS::ArrayNode::):
1751         (KJS::PropertyNode::):
1752         (KJS::PropertyNode::precedence):
1753         (KJS::PropertyNode::name):
1754         (KJS::PropertyListNode::):
1755         (KJS::ObjectLiteralNode::):
1756         (KJS::ObjectLiteralNode::precedence):
1757         (KJS::BracketAccessorNode::):
1758         (KJS::DotAccessorNode::):
1759         (KJS::DotAccessorNode::precedence):
1760         (KJS::ArgumentListNode::):
1761         (KJS::ArgumentsNode::):
1762         (KJS::NewExprNode::):
1763         (KJS::NewExprNode::precedence):
1764         (KJS::FunctionCallValueNode::):
1765         (KJS::FunctionCallValueNode::precedence):
1766         (KJS::FunctionCallResolveNode::):
1767         (KJS::FunctionCallBracketNode::):
1768         (KJS::FunctionCallBracketNode::precedence):
1769         (KJS::FunctionCallDotNode::):
1770         (KJS::FunctionCallDotNode::precedence):
1771         (KJS::PrePostResolveNode::):
1772         (KJS::PostfixBracketNode::):
1773         (KJS::PostfixBracketNode::precedence):
1774         (KJS::PostIncBracketNode::):
1775         (KJS::PostIncBracketNode::isIncrement):
1776         (KJS::PostDecBracketNode::):
1777         (KJS::PostDecBracketNode::isIncrement):
1778         (KJS::PostfixDotNode::):
1779         (KJS::PostfixDotNode::precedence):
1780         (KJS::PostIncDotNode::):
1781         (KJS::PostIncDotNode::isIncrement):
1782         (KJS::PostDecDotNode::):
1783         (KJS::PostDecDotNode::isIncrement):
1784         (KJS::PostfixErrorNode::):
1785         (KJS::PostfixErrorNode::precedence):
1786         (KJS::DeleteResolveNode::):
1787         (KJS::DeleteBracketNode::):
1788         (KJS::DeleteBracketNode::precedence):
1789         (KJS::DeleteDotNode::):
1790         (KJS::DeleteDotNode::precedence):
1791         (KJS::DeleteValueNode::):
1792         (KJS::DeleteValueNode::precedence):
1793         (KJS::VoidNode::):
1794         (KJS::VoidNode::precedence):
1795         (KJS::TypeOfResolveNode::):
1796         (KJS::TypeOfValueNode::):
1797         (KJS::PrefixBracketNode::):
1798         (KJS::PrefixBracketNode::precedence):
1799         (KJS::PreIncBracketNode::):
1800         (KJS::PreIncBracketNode::isIncrement):
1801         (KJS::PreDecBracketNode::):
1802         (KJS::PreDecBracketNode::isIncrement):
1803         (KJS::PrefixDotNode::):
1804         (KJS::PrefixDotNode::precedence):
1805         (KJS::PreIncDotNode::):
1806         (KJS::PreIncDotNode::isIncrement):
1807         (KJS::PreDecDotNode::):
1808         (KJS::PreDecDotNode::isIncrement):
1809         (KJS::PrefixErrorNode::):
1810         (KJS::PrefixErrorNode::precedence):
1811         (KJS::UnaryPlusNode::):
1812         (KJS::UnaryPlusNode::precedence):
1813         (KJS::NegateNode::):
1814         (KJS::NegateNode::precedence):
1815         (KJS::BitwiseNotNode::):
1816         (KJS::BitwiseNotNode::precedence):
1817         (KJS::LogicalNotNode::):
1818         (KJS::LogicalNotNode::precedence):
1819         (KJS::AddNode::):
1820         (KJS::AddNode::precedence):
1821         (KJS::LeftShiftNode::):
1822         (KJS::LeftShiftNode::precedence):
1823         (KJS::RightShiftNode::):
1824         (KJS::RightShiftNode::precedence):
1825         (KJS::UnsignedRightShiftNode::):
1826         (KJS::UnsignedRightShiftNode::precedence):
1827         (KJS::LessNode::):
1828         (KJS::LessNode::precedence):
1829         (KJS::GreaterNode::):
1830         (KJS::GreaterNode::precedence):
1831         (KJS::LessEqNode::):
1832         (KJS::LessEqNode::precedence):
1833         (KJS::GreaterEqNode::):
1834         (KJS::GreaterEqNode::precedence):
1835         (KJS::InstanceOfNode::):
1836         (KJS::InstanceOfNode::precedence):
1837         (KJS::InNode::):
1838         (KJS::InNode::precedence):
1839         (KJS::EqualNode::):
1840         (KJS::EqualNode::precedence):
1841         (KJS::NotEqualNode::):
1842         (KJS::NotEqualNode::precedence):
1843         (KJS::StrictEqualNode::):
1844         (KJS::StrictEqualNode::precedence):
1845         (KJS::NotStrictEqualNode::):
1846         (KJS::NotStrictEqualNode::precedence):
1847         (KJS::BitAndNode::):
1848         (KJS::BitAndNode::precedence):
1849         (KJS::BitOrNode::):
1850         (KJS::BitOrNode::precedence):
1851         (KJS::BitXOrNode::):
1852         (KJS::BitXOrNode::precedence):
1853         (KJS::LogicalAndNode::):
1854         (KJS::LogicalAndNode::precedence):
1855         (KJS::LogicalOrNode::):
1856         (KJS::LogicalOrNode::precedence):
1857         (KJS::ConditionalNode::):
1858         (KJS::ConditionalNode::precedence):
1859         (KJS::ReadModifyResolveNode::):
1860         (KJS::ReadModifyResolveNode::precedence):
1861         (KJS::AssignResolveNode::):
1862         (KJS::AssignResolveNode::precedence):
1863         (KJS::ReadModifyBracketNode::):
1864         (KJS::ReadModifyBracketNode::precedence):
1865         (KJS::AssignBracketNode::):
1866         (KJS::AssignBracketNode::precedence):
1867         (KJS::AssignDotNode::):
1868         (KJS::AssignDotNode::precedence):
1869         (KJS::ReadModifyDotNode::):
1870         (KJS::ReadModifyDotNode::precedence):
1871         (KJS::AssignErrorNode::):
1872         (KJS::AssignErrorNode::precedence):
1873         (KJS::CommaNode::):
1874         (KJS::CommaNode::precedence):
1875         (KJS::AssignExprNode::):
1876         (KJS::AssignExprNode::precedence):
1877         (KJS::ExprStatementNode::):
1878         (KJS::IfNode::):
1879         (KJS::DoWhileNode::):
1880         (KJS::WhileNode::):
1881         (KJS::ReturnNode::):
1882         (KJS::WithNode::):
1883         (KJS::ThrowNode::):
1884         (KJS::ParameterNode::):
1885         (KJS::CaseClauseNode::):
1886         (KJS::CaseClauseNode::precedence):
1887         (KJS::ClauseListNode::):
1888         (KJS::SwitchNode::):
1889
1890 2007-11-08  Oliver Hunt  <oliver@apple.com>
1891
1892         Reviewed by Sam.
1893
1894         Add a fast path for bitwise-and of two immediate numbers for a 0.7% improvement in SunSpider (4% bitop improvement).
1895
1896         This only improves bitwise-and performance, as the additional logic required 
1897         for similar code paths on or, xor, and shifting requires additional operations
1898         and branches that negate (and in certain cases, regress) any advantage we might
1899         otherwise receive.
1900
1901         This improves performance on all bitop tests, the cryptography tests, as well as 
1902         the string-base64 and string-unpack-code tests.  No significant degradation on 
1903         any other tests.
1904
1905         * kjs/JSImmediate.h:
1906         (KJS::JSImmediate::areBothImmediateNumbers):
1907         (KJS::JSImmediate::andImmediateNumbers):
1908         * kjs/nodes.cpp:
1909         (KJS::BitAndNode::evaluate):
1910         * kjs/value.h:
1911         (KJS::jsNumberFromAnd):
1912
1913 2007-11-08  Adam Roben  <aroben@apple.com>
1914
1915         Stop using KJS inside of MathExtras.h
1916
1917         Reviewed by Darin.
1918
1919         * wtf/MathExtras.h: Removed an unused header, and a now-unused
1920         forward-declaration.
1921         (wtf_atan2): Use std::numeric_limits intead of KJS.
1922
1923 2007-11-08  Sam Weinig  <sam@webkit.org>
1924
1925         Windows build fix.
1926
1927         * kjs/date_object.cpp:
1928         (KJS::DateProtoFuncToLocaleString::callAsFunction): Fix unused arg warning.
1929         (KJS::DateProtoFuncToLocaleDateString::callAsFunction): ditto
1930         (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): ditto
1931
1932 2007-11-08  Mark Rowe  <mrowe@apple.com>
1933
1934         Gtk build fix.
1935
1936         * kjs/lookup.h: Add missing include.
1937
1938 2007-11-08  Sam Weinig  <sam@webkit.org>
1939
1940         Reviewed by Darin.
1941
1942         Convert JavaScript internal function objects to use one class per
1943         function.  This avoids a switch statement inside what used to be
1944         the shared function classes and will allow Shark to better analyze
1945         the code.
1946
1947         To make this switch, the value property of the HashEntry was changed
1948         to a union of an intptr_t (which is used to continue handle valueGetters)
1949         and function pointer which points to a static constructor for the
1950         individual new function objects.
1951
1952         SunSpider claims this is a 1.0% speedup.
1953
1954         * kjs/array_object.cpp:
1955         (KJS::ArrayPrototype::getOwnPropertySlot):
1956         (KJS::getProperty):
1957         (KJS::ArrayProtoFuncToString::callAsFunction):
1958         (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
1959         (KJS::ArrayProtoFuncJoin::callAsFunction):
1960         (KJS::ArrayProtoFuncConcat::callAsFunction):
1961         (KJS::ArrayProtoFuncPop::callAsFunction):
1962         (KJS::ArrayProtoFuncPush::callAsFunction):
1963         (KJS::ArrayProtoFuncReverse::callAsFunction):
1964         (KJS::ArrayProtoFuncShift::callAsFunction):
1965         (KJS::ArrayProtoFuncSlice::callAsFunction):
1966         (KJS::ArrayProtoFuncSort::callAsFunction):
1967         (KJS::ArrayProtoFuncSplice::callAsFunction):
1968         (KJS::ArrayProtoFuncUnShift::callAsFunction):
1969         (KJS::ArrayProtoFuncFilter::callAsFunction):
1970         (KJS::ArrayProtoFuncMap::callAsFunction):
1971         (KJS::ArrayProtoFuncEvery::callAsFunction):
1972         (KJS::ArrayProtoFuncForEach::callAsFunction):
1973         (KJS::ArrayProtoFuncSome::callAsFunction):
1974         (KJS::ArrayProtoFuncIndexOf::callAsFunction):
1975         (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
1976         * kjs/array_object.h:
1977         (KJS::ArrayPrototype::classInfo):
1978         * kjs/create_hash_table:
1979         * kjs/date_object.cpp:
1980         (KJS::DatePrototype::getOwnPropertySlot):
1981         (KJS::DateProtoFuncToString::callAsFunction):
1982         (KJS::DateProtoFuncToUTCString::callAsFunction):
1983         (KJS::DateProtoFuncToDateString::callAsFunction):
1984         (KJS::DateProtoFuncToTimeString::callAsFunction):
1985         (KJS::DateProtoFuncToLocaleString::callAsFunction):
1986         (KJS::DateProtoFuncToLocaleDateString::callAsFunction):
1987         (KJS::DateProtoFuncToLocaleTimeString::callAsFunction):
1988         (KJS::DateProtoFuncValueOf::callAsFunction):
1989         (KJS::DateProtoFuncGetTime::callAsFunction):
1990         (KJS::DateProtoFuncGetFullYear::callAsFunction):
1991         (KJS::DateProtoFuncGetUTCFullYear::callAsFunction):
1992         (KJS::DateProtoFuncToGMTString::callAsFunction):
1993         (KJS::DateProtoFuncGetMonth::callAsFunction):
1994         (KJS::DateProtoFuncGetUTCMonth::callAsFunction):
1995         (KJS::DateProtoFuncGetDate::callAsFunction):
1996         (KJS::DateProtoFuncGetUTCDate::callAsFunction):
1997         (KJS::DateProtoFuncGetDay::callAsFunction):
1998         (KJS::DateProtoFuncGetUTCDay::callAsFunction):
1999         (KJS::DateProtoFuncGetHours::callAsFunction):
2000         (KJS::DateProtoFuncGetUTCHours::callAsFunction):
2001         (KJS::DateProtoFuncGetMinutes::callAsFunction):
2002         (KJS::DateProtoFuncGetUTCMinutes::callAsFunction):
2003         (KJS::DateProtoFuncGetSeconds::callAsFunction):
2004         (KJS::DateProtoFuncGetUTCSeconds::callAsFunction):
2005         (KJS::DateProtoFuncGetMilliSeconds::callAsFunction):
2006         (KJS::DateProtoFuncGetUTCMilliseconds::callAsFunction):
2007         (KJS::DateProtoFuncGetTimezoneOffset::callAsFunction):
2008         (KJS::DateProtoFuncSetTime::callAsFunction):
2009         (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
2010         (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
2011         (KJS::DateProtoFuncSetSeconds::callAsFunction):
2012         (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
2013         (KJS::DateProtoFuncSetMinutes::callAsFunction):
2014         (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
2015         (KJS::DateProtoFuncSetHours::callAsFunction):
2016         (KJS::DateProtoFuncSetUTCHours::callAsFunction):
2017         (KJS::DateProtoFuncSetDate::callAsFunction):
2018         (KJS::DateProtoFuncSetUTCDate::callAsFunction):
2019         (KJS::DateProtoFuncSetMonth::callAsFunction):
2020         (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
2021         (KJS::DateProtoFuncSetFullYear::callAsFunction):
2022         (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
2023         (KJS::DateProtoFuncSetYear::callAsFunction):
2024         (KJS::DateProtoFuncGetYear::callAsFunction):
2025         * kjs/date_object.h:
2026         * kjs/lookup.cpp:
2027         (KJS::Lookup::find):
2028         * kjs/lookup.h:
2029         (KJS::HashEntry::):
2030         (KJS::staticFunctionGetter):
2031         (KJS::staticValueGetter):
2032         (KJS::getStaticPropertySlot):
2033         (KJS::getStaticFunctionSlot):
2034         (KJS::lookupPut):
2035         * kjs/math_object.cpp:
2036         (KJS::MathObjectImp::getOwnPropertySlot):
2037         (KJS::MathProtoFuncAbs::callAsFunction):
2038         (KJS::MathProtoFuncACos::callAsFunction):
2039         (KJS::MathProtoFuncASin::callAsFunction):
2040         (KJS::MathProtoFuncATan::callAsFunction):
2041         (KJS::MathProtoFuncATan2::callAsFunction):
2042         (KJS::MathProtoFuncCeil::callAsFunction):
2043         (KJS::MathProtoFuncCos::callAsFunction):
2044         (KJS::MathProtoFuncExp::callAsFunction):
2045         (KJS::MathProtoFuncFloor::callAsFunction):
2046         (KJS::MathProtoFuncLog::callAsFunction):
2047         (KJS::MathProtoFuncMax::callAsFunction):
2048         (KJS::MathProtoFuncMin::callAsFunction):
2049         (KJS::MathProtoFuncPow::callAsFunction):
2050         (KJS::MathProtoFuncRandom::callAsFunction):
2051         (KJS::MathProtoFuncRound::callAsFunction):
2052         (KJS::MathProtoFuncSin::callAsFunction):
2053         (KJS::MathProtoFuncSqrt::callAsFunction):
2054         (KJS::MathProtoFuncTan::callAsFunction):
2055         * kjs/math_object.h:
2056         (KJS::MathObjectImp::classInfo):
2057         (KJS::MathObjectImp::):
2058         * kjs/string_object.cpp:
2059         (KJS::StringPrototype::getOwnPropertySlot):
2060         (KJS::StringProtoFuncToString::callAsFunction):
2061         (KJS::StringProtoFuncValueOf::callAsFunction):
2062         (KJS::StringProtoFuncCharAt::callAsFunction):
2063         (KJS::StringProtoFuncCharCodeAt::callAsFunction):
2064         (KJS::StringProtoFuncConcat::callAsFunction):
2065         (KJS::StringProtoFuncIndexOf::callAsFunction):
2066         (KJS::StringProtoFuncLastIndexOf::callAsFunction):
2067         (KJS::StringProtoFuncMatch::callAsFunction):
2068         (KJS::StringProtoFuncSearch::callAsFunction):
2069         (KJS::StringProtoFuncReplace::callAsFunction):
2070         (KJS::StringProtoFuncSlice::callAsFunction):
2071         (KJS::StringProtoFuncSplit::callAsFunction):
2072         (KJS::StringProtoFuncSubstr::callAsFunction):
2073         (KJS::StringProtoFuncSubstring::callAsFunction):
2074         (KJS::StringProtoFuncToLowerCase::callAsFunction):
2075         (KJS::StringProtoFuncToUpperCase::callAsFunction):
2076         (KJS::StringProtoFuncToLocaleLowerCase::callAsFunction):
2077         (KJS::StringProtoFuncToLocaleUpperCase::callAsFunction):
2078         (KJS::StringProtoFuncLocaleCompare::callAsFunction):
2079         (KJS::StringProtoFuncBig::callAsFunction):
2080         (KJS::StringProtoFuncSmall::callAsFunction):
2081         (KJS::StringProtoFuncBlink::callAsFunction):
2082         (KJS::StringProtoFuncBold::callAsFunction):
2083         (KJS::StringProtoFuncFixed::callAsFunction):
2084         (KJS::StringProtoFuncItalics::callAsFunction):
2085         (KJS::StringProtoFuncStrike::callAsFunction):
2086         (KJS::StringProtoFuncSub::callAsFunction):
2087         (KJS::StringProtoFuncSup::callAsFunction):
2088         (KJS::StringProtoFuncFontcolor::callAsFunction):
2089         (KJS::StringProtoFuncFontsize::callAsFunction):
2090         (KJS::StringProtoFuncAnchor::callAsFunction):
2091         (KJS::StringProtoFuncLink::callAsFunction):
2092         * kjs/string_object.h:
2093
2094 2007-11-08  Adam Roben  <aroben@apple.com>
2095
2096         Windows build fix
2097
2098         Reviewed by Sam and Ada.
2099
2100         * wtf/MathExtras.h: Get rid of a circular #include dependency to fix
2101         the build.
2102
2103 2007-11-08  Adam Roben  <aroben@apple.com>
2104
2105         Fix a precedence warning on Windows
2106
2107         * kjs/JSImmediate.h:
2108         (KJS::JSImmediate::toBoolean):
2109
2110 2007-11-08  Mark Rowe  <mrowe@apple.com>
2111
2112         Build fix for JavaScriptGlue.
2113
2114         * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX.
2115
2116 2007-11-08  Darin Adler  <darin@apple.com>
2117
2118         - Windows build fix
2119
2120         * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit".
2121
2122 2007-11-08  Oliver Hunt  <oliver@apple.com>
2123
2124         Reviewed by Darin.
2125
2126         Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider.
2127
2128         Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but
2129         we should now have faster array access, faster immediate to double conversion, and the 
2130         potential to further improve bitwise operators in future.
2131
2132         This also removes the need for unions to avoid strict aliasing problems when extracting 
2133         a value from immediates.
2134
2135         * kjs/JSImmediate.h:
2136         (KJS::):
2137         (KJS::JSImmediate::trueImmediate):
2138         (KJS::JSImmediate::falseImmediate):
2139         (KJS::JSImmediate::undefinedImmediate):
2140         (KJS::JSImmediate::nullImmediate):
2141         (KJS::JSImmediate::toBoolean):
2142         * kjs/value.h:
2143         (KJS::jsNaN):
2144
2145 2007-11-07  Eric Seidel  <eric@webkit.org>
2146
2147         Reviewed by Darin and Oliver.
2148         
2149         Add evaluateToNumber parallel evaluation tree to speed up number operations.
2150         Make ImmediateNumberNode a subclass of NumberNode.
2151         Share evaluate logic between evaluate and evaluateToNumber using inline functions
2152         There is still a lot of improvement to be made here.
2153         
2154         SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0%
2155         Given the huge win that this prepares us for with simple type inferencing I see the small
2156         regression in base64 being worth the substantial overall improvement.
2157
2158         * kjs/grammar.y:
2159         * kjs/nodes.cpp:
2160         (KJS::Node::evaluateToNumber):
2161         (KJS::NumberNode::evaluate):
2162         (KJS::NumberNode::evaluateToNumber):
2163         (KJS::StringNode::evaluateToNumber):
2164         (KJS::LocalVarAccessNode::inlineEvaluate):
2165         (KJS::LocalVarAccessNode::evaluate):
2166         (KJS::LocalVarAccessNode::evaluateToNumber):
2167         (KJS::BracketAccessorNode::inlineEvaluate):
2168         (KJS::BracketAccessorNode::evaluate):
2169         (KJS::BracketAccessorNode::evaluateToNumber):
2170         (KJS::NegateNode::evaluate):
2171         (KJS::NegateNode::evaluateToNumber):
2172         (KJS::MultNode::inlineEvaluateToNumber):
2173         (KJS::MultNode::evaluate):
2174         (KJS::MultNode::evaluateToNumber):
2175         (KJS::DivNode::inlineEvaluateToNumber):
2176         (KJS::DivNode::evaluate):
2177         (KJS::DivNode::evaluateToNumber):
2178         (KJS::ModNode::inlineEvaluateToNumber):
2179         (KJS::ModNode::evaluate):
2180         (KJS::ModNode::evaluateToNumber):
2181         (KJS::throwOutOfMemoryErrorToNumber):
2182         (KJS::addSlowCaseToNumber):
2183         (KJS::add):
2184         (KJS::addToNumber):
2185         (KJS::AddNode::evaluateToNumber):
2186         (KJS::SubNode::inlineEvaluateToNumber):
2187         (KJS::SubNode::evaluate):
2188         (KJS::SubNode::evaluateToNumber):
2189         (KJS::valueForReadModifyAssignment):
2190         (KJS::ReadModifyLocalVarNode::evaluate):
2191         (KJS::ReadModifyResolveNode::evaluate):
2192         (KJS::ReadModifyDotNode::evaluate):
2193         (KJS::ReadModifyBracketNode::evaluate):
2194         * kjs/nodes.h:
2195         (KJS::Node::):
2196         (KJS::NumberNode::):
2197         (KJS::ImmediateNumberNode::):
2198         (KJS::AddNode::precedence):
2199         * kjs/nodes2string.cpp:
2200         (KJS::NumberNode::streamTo):
2201
2202 2007-11-07  Mark Rowe  <mrowe@apple.com>
2203
2204         Reviewed by Eric.
2205
2206         Fix up initialization after being mangled in r27572, and remove the
2207         ternary expression as extraCost will always be zero for the numeric
2208         heap.
2209
2210         * kjs/collector.cpp:
2211         (KJS::Collector::heapAllocate):
2212
2213 2007-11-07  Mark Rowe  <mrowe@apple.com>
2214
2215         Gtk build fix.
2216
2217         * kjs/regexp_object.cpp:
2218
2219 2007-11-07  Geoffrey Garen  <ggaren@apple.com>
2220
2221         Reviewed by Beth Dakin.
2222         
2223         Eliminated a bogus (though compiled-out) branch in the collector.
2224
2225         * kjs/collector.cpp:
2226         (KJS::Collector::heapAllocate):
2227
2228 2007-11-06  Geoffrey Garen  <ggaren@apple.com>
2229
2230         Reviewed by Darin Adler.
2231         
2232         Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861 
2233         5.8% of string-validate-input.js is spent creating RegExpImps
2234
2235         Put RegExpImp properties into a static hashtable to avoid a slew of
2236         PropertyMap churn when creating a RegExpImp.
2237         
2238         Factored important bits of regular expression implementation out of
2239         RegExpImp (the JS object) and into RegExp (the PCRE wrapper class), 
2240         making RegExp a ref-counted class. (This will help later.)
2241
2242         Removed PCRE_POSIX support because I didn't quite know how to test it 
2243         and keep it working with these changes.
2244         
2245         1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js.
2246
2247         * kjs/regexp.h: A few interface changes:
2248         1. Renamed "subpatterns()" => "numSubpatterns()"
2249         2. Made flag enumeration private and replaced it with public getters for
2250         specific flags.
2251         3. Made RegExp ref-counted so RegExps can be shared by RegExpImps.
2252         4. Made RegExp take a string of flags instead of an int, eliminating 
2253         duplicated flag parsing code elsewhere.
2254
2255         * kjs/regexp_object.cpp:
2256         (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile: 
2257         - Fixed a bug where compile(undefined) would throw an exception. 
2258         - Removed some now-redundant code.
2259         - Used RegExp sharing to eliminate an allocation and a bunch of 
2260         PropertyMap thrash. (Not a big win since compile is a deprecated 
2261         function. I mainly did this to test the plubming.)
2262
2263 2007-11-07  Simon Hausmann  <hausmann@kde.org>
2264
2265         Reviewed by nobody, Qt/Windows build fix.
2266
2267         JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in
2268         testkjs.pro, too, where it's included from.
2269
2270         * kjs/testkjs.pro:
2271
2272 2007-11-07  Simon Hausmann  <shausman@trolltech.com>
2273
2274         Reviewed by Lars.
2275
2276         Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool.
2277
2278         * JavaScriptCore.pri:
2279         * pcre/pcre.pri:
2280
2281 2007-11-07  Lars Knoll  <lars@trolltech.com>
2282
2283         Reviewed by Simon.
2284
2285         fix umemcasecmp
2286         
2287         Pretty embarrassing bug. Has the potential to fix quite a few test failures.
2288
2289         * wtf/unicode/qt4/UnicodeQt4.h:
2290         (WTF::Unicode::umemcasecmp):
2291
2292 2007-11-06  Maciej Stachowiak  <mjs@apple.com>
2293
2294         Reviewed by Eric.        
2295         
2296         - only collect when the heap is full, unless we have lots of extra cost garbage
2297         
2298         1.1% SunSpider speedup.
2299         
2300         This shouldn't hit memory use much since the extra space in those
2301         blocks hangs around either way.
2302
2303         * kjs/collector.cpp:
2304         (KJS::Collector::heapAllocate):
2305         (KJS::Collector::collect): Fix logic error that reversed the sense of collect's 
2306         return value.
2307
2308 2007-11-06  Oliver Hunt  <oliver@apple.com>
2309
2310         Reviewed by Maciej.
2311
2312         Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider
2313         
2314         We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical
2315         'for (...; ...; ++<var>) ...'.
2316
2317         * kjs/nodes.cpp:
2318         (KJS::PostIncResolveNode::optimizeForUnnecessaryResult):
2319         (KJS::PostIncLocalVarNode::evaluate):
2320         (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult):
2321         (KJS::PostDecResolveNode::optimizeForUnnecessaryResult):
2322         (KJS::PostDecLocalVarNode::evaluate):
2323         (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult):
2324         * kjs/nodes.h:
2325         (KJS::PrePostResolveNode::):
2326         (KJS::PostIncResolveNode::):
2327         (KJS::PostIncLocalVarNode::):
2328         (KJS::PostDecResolveNode::):
2329         (KJS::PostDecLocalVarNode::):
2330         (KJS::PreIncResolveNode::):
2331         (KJS::PreDecResolveNode::):
2332         (KJS::ForNode::ForNode):
2333
2334 2007-11-06  Eric Seidel  <eric@webkit.org>
2335
2336         Reviewed by darin.
2337
2338         This fixes a regressed layout test for string + object
2339         
2340         SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower.
2341
2342         * kjs/nodes.cpp:
2343         (KJS::add): remove erroneous "fast path" for string + *
2344
2345 2007-11-06  Geoffrey Garen  <ggaren@apple.com>
2346
2347         Reviewed by Eric Seidel.
2348         
2349         Added toJSNumber, a fast path for converting a JSValue to a JS number,
2350         and deployed it in postfix expressions. In the fast case this 
2351         eliminates a call to jsNumber.
2352         
2353         0.4% speedup on SunSpider.
2354
2355         * ChangeLog:
2356         * kjs/nodes.cpp:
2357         (KJS::PostIncResolveNode::evaluate):
2358         (KJS::PostIncLocalVarNode::evaluate):
2359         (KJS::PostDecResolveNode::evaluate):
2360         (KJS::PostDecLocalVarNode::evaluate):
2361         (KJS::PostIncBracketNode::evaluate):
2362         (KJS::PostDecBracketNode::evaluate):
2363         (KJS::PostIncDotNode::evaluate):
2364         (KJS::PostDecDotNode::evaluate):
2365         (KJS::UnaryPlusNode::evaluate):
2366         * kjs/value.h:
2367         (KJS::JSValue::toJSNumber):
2368
2369 2007-11-06  Darin Adler  <darin@apple.com>
2370
2371         Reviewed by Maciej.
2372
2373         - http://bugs.webkit.org/show_bug.cgi?id=15846
2374           REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html
2375
2376         There was a mistake in the algorithm used to find an empty slot in the property
2377         map entries vector; when we were putting in a new property value and not overwriting
2378         an existing deleted sentinel, we would enlarge the entries vector, but would not
2379         overwrite the stale data that's in the new part. It was easy to pin this down by
2380         turning on property map consistency checks -- I never would have landed with this
2381         bug if I had run the regression tests once with consistency checks on!
2382
2383         * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where
2384         foundDeletedElement is false to always use the item at the end of the entries vector.
2385         Also allowed me to merge with the logic for the "no deleted sentinels at all" case.
2386
2387 2007-11-06  Oliver Hunt  <oliver@apple.com>
2388
2389         RS=Darin.
2390
2391         Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider.
2392
2393         * kjs/nodes.cpp:
2394         (KJS::add):
2395
2396 2007-11-06  Oliver Hunt  <oliver@apple.com>
2397
2398         Reviewed by Darin.
2399
2400         Replace boolean comparisons in AddNode with mask
2401         comparisons for a 0.2% improvement in sunspider.
2402
2403         * JavaScriptCore.xcodeproj/project.pbxproj:
2404         * kjs/nodes.cpp:
2405         (KJS::add):
2406
2407 2007-11-06  Eric Seidel  <eric@webkit.org>
2408
2409         Reviewed by darin.
2410         
2411         SunSpider claims this is a 1.1% speedup.
2412
2413         * kjs/nodes.cpp:
2414         (KJS::throwOutOfMemoryError): Added, non inline.
2415         (KJS::addSlowCase): renamed from add(), non inline.
2416         (KJS::add): add fast path for String + String, Number + Number and String + *
2417
2418 2007-11-06  Eric Seidel  <eric@webkit.org>
2419
2420         Reviewed by mjs.
2421         
2422         Avoid more UString creation.
2423         
2424         SunSpider claims this is a 0.4% speedup.
2425
2426         * kjs/regexp_object.cpp:
2427         (KJS::RegExpObjectImp::construct): use UString::find(UChar)
2428
2429 2007-11-05  Mark Rowe  <mrowe@apple.com>
2430
2431         Mac build fix.
2432
2433         * kjs/array_object.cpp:
2434         (KJS::ArrayProtoFunc::callAsFunction):
2435
2436 2007-11-05  Adam Roben  <aroben@apple.com>
2437
2438         Windows build fix
2439
2440         * kjs/list.h:
2441
2442 2007-11-05  Mark Rowe  <mrowe@apple.com>
2443
2444         Build fix.  Add missing #include.
2445
2446         * kjs/operations.cpp:
2447
2448 2007-11-05  Eric Seidel  <eric@webkit.org>
2449
2450         Reviewed by mjs.
2451         
2452         Remove another call to toString(exec)
2453         
2454         SunSpider claims this is a 0.5% speedup.
2455
2456         * kjs/operations.cpp:
2457         (KJS::equal): remove another toString
2458
2459 2007-11-05  Eric Seidel  <eric@webkit.org>
2460
2461         * kjs/operations.cpp:
2462         (KJS::equal): correct broken change.
2463
2464 2007-11-05  Eric Seidel  <eric@webkit.org>
2465
2466         Reviewed by mjs.
2467
2468         Remove one more call to toString(exec).
2469         
2470         SunSpider claims this is a 0.7% speedup.
2471
2472         * kjs/operations.cpp:
2473         (KJS::equal): remove a call to toString()
2474
2475 2007-11-05  Mark Rowe  <mrowe@apple.com>
2476
2477         Gtk build fix.
2478
2479         * pcre/pcre.pri:
2480
2481 2007-11-05  Mark Rowe  <mrowe@apple.com>
2482
2483         Gtk build fix.
2484
2485         * kjs/list.cpp:
2486
2487 2007-11-05  Geoffrey Garen  <ggaren@apple.com>
2488
2489         Touched a file to test my new HTTP access.
2490
2491         * kjs/scope_chain.cpp:
2492
2493 2007-11-05  Alp Toker  <alp@atoker.com>
2494
2495         Unreviewed build fix for qmake-based ports.
2496
2497         Someone with a better understanding of qmake still needs to sort out
2498         the INCLUDEPATH/DEPENDPATH mess.
2499
2500         * JavaScriptCore.pri:
2501
2502 2007-11-05  Geoffrey Garen  <ggaren@apple.com>
2503
2504         Reviewed by Darin Adler.
2505         
2506         http://bugs.webkit.org/show_bug.cgi?id=15835
2507
2508         Switched List implementation from a custom heap allocator to an inline
2509         Vector, for a disappointing .5% SunSpider speedup.
2510         
2511         Also renamed List::slice to List::getSlice because "get" is the 
2512         conventional prefix for functions returning a value through an out 
2513         parameter.
2514
2515         * kjs/array_object.cpp:
2516         (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function
2517         calls and memory accesses.
2518
2519         * kjs/bool_object.cpp:
2520         (BooleanObjectImp::construct): Removed questionable use of iterator.
2521
2522         * kjs/list.cpp:
2523         * kjs/list.h: New List class, implemented in terms of Vector. Two 
2524         interesting differences:
2525             1. The inline capacity is 8, not 5. Many of the Lists constructed 
2526             during a SunSpider run are larger than 5; almost none are larger
2527             than 8.
2528
2529             2. The growth factor is 4, not 2. Since we can guarantee that Lists
2530             aren't long-lived, we can grow them more aggressively, to avoid
2531             excessive copying.
2532
2533         * kjs/regexp_object.cpp:
2534         (RegExpObjectImp::construct): Removed redundant function calls.
2535
2536         * kjs/string_object.cpp:
2537         (KJS::StringObjectImp::construct): Removed questionable use of iterator.
2538
2539         * wtf/Vector.h:
2540         (WTF::::uncheckedAppend): Added a fast, unchecked version of append.
2541
2542 2007-11-05  Mark Rowe  <mrowe@apple.com>
2543
2544         Reviewed by Alp Toker.
2545
2546         Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies.
2547
2548         * JavaScriptCore.pri:
2549         * pcre/pcre.pri:
2550
2551 2007-11-04  Darin Adler  <darin@apple.com>
2552
2553         Reviewed by Maciej.
2554
2555         - http://bugs.webkit.org/show_bug.cgi?id=15826
2556           optimize opcode loop and case insensitive ASCII compares for a 30% speedup
2557
2558         SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests.
2559
2560         * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
2561
2562         * pcre/pcre_compile.c:
2563         (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also
2564         added OP_NOT since there was no reason it should not be in here.
2565         (could_be_empty_branch): Ditto.
2566         (compile_branch): Streamlined all the single-character cases; there was a bit of
2567         duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed.
2568         But in particular, compile to those opcodes when the single character match is
2569         ASCII.
2570         (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
2571
2572         * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from
2573         the matchframe, after I discovered that none of them needed to be saved and restored
2574         across recursive match calls. Also eliminated the ignored result field from the
2575         matchframe, since I discovered that rrc ("recursive result code") was already the
2576         exact same thing. Moved the handling of opcodes higher than OP_BRA into the default
2577         statement of the switch instead of doing them before the switch. This removes a
2578         branch from each iteration of the opcode interpreter, just as removal of "op"
2579         removed at least one store from each iteration. Last, but not least, add the
2580         OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a
2581         surrogate pair and the letter case can be handled efficiently.
2582
2583 2007-11-04  Darin Adler  <darin@apple.com>
2584
2585         * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.
2586
2587 2007-11-03  Darin Adler  <darin@apple.com>
2588
2589         - fix non-Mac builds; remove some more unused PCRE stuff
2590
2591         * pcre/pcre_compile.c:
2592         (compile_branch): Removed branch chain and some unused ESC values.
2593         (compile_regex): Ditto.
2594         (jsRegExpCompile): Ditto.
2595         * pcre/pcre_exec.c:
2596         (match): Removed unused branch targets. Don't use macros any more.
2597         (jsRegExpExecute): More of the same.
2598
2599         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files.
2600         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
2601         * pcre/pcre.pri: Ditto.
2602
2603         * pcre/MERGING: Removed.
2604         * pcre/pcre_fullinfo.c: Removed.
2605         * pcre/pcre_get.c: Removed.
2606         * pcre/pcre_internal.h:
2607         * pcre/ucp.h: Removed.
2608
2609 2007-11-03  Darin Adler  <darin@apple.com>
2610
2611         Reviewed by Maciej.
2612
2613         - http://bugs.webkit.org/show_bug.cgi?id=15821
2614           remove unused PCRE features for speed
2615
2616         A first step toward removing the PCRE features we don't use.
2617         This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on
2618         the SunSpider regular expression test.
2619
2620         Replaced the public interface with one that doesn't use the
2621         name PCRE. Removed code we don't need for JavaScript and various
2622         configurations we don't use. This is in preparation for still
2623         more changes in the future. We'll probably switch to C++ and
2624         make some even more significant changes to the regexp engine
2625         to get some additional speed.
2626
2627         There's probably additional unused stuff that I haven't
2628         deleted yet.
2629
2630         This does mean that our PCRE is now a fork, but I think that's
2631         not really a big deal.
2632
2633         * JavaScriptCore.exp: Remove the 5 old entry points and add
2634         the 3 new entry points for WebCore's direct use of the regular
2635         expression engine.
2636
2637         * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip
2638         its sense and now there's a USE(POSIX_REGEX) instead, which should
2639         probably not be set by anyone. Maybe later we'll just get rid of it
2640         altogether.
2641
2642         * kjs/regexp.h:
2643         * kjs/regexp.cpp:
2644         (KJS::RegExp::RegExp): Switch to new jsRegExp function names and
2645         defines. Cut down on the number of functions used.
2646         (KJS::RegExp::~RegExp): Ditto.
2647         (KJS::RegExp::match): Ditto.
2648
2649         * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta,
2650         which are unused.
2651
2652         * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const,
2653         size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE,
2654         POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8,
2655         and JAVASCRIPT. These are all no longer configurable in our copy
2656         of the library.
2657
2658         * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE
2659         version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE,
2660         the include of <stdlib.h>, and most of the constants and
2661         functions defined in this header. Changed the naming scheme to
2662         use a JSRegExp prefix rather than a pcre prefix. In the future,
2663         we'll probably change this to be a C++ header.
2664
2665         * pcre/pcre_compile.c: Removed all unused code branches,
2666         including many whole functions and various byte codes.
2667         Kept changes outside of removal to a minimum.
2668         (check_escape):
2669         (first_significant_code):
2670         (find_fixedlength):
2671         (find_recurse):
2672         (could_be_empty_branch):
2673         (compile_branch):
2674         (compile_regex):
2675         (is_anchored):
2676         (is_startline):
2677         (find_firstassertedchar):
2678         (jsRegExpCompile): Renamed from pcre_compile2 and changed the
2679         parameters around a bit.
2680         (jsRegExpFree): Added.
2681
2682         * pcre/pcre_exec.c: Removed many unused opcodes and variables.
2683         Also started tearing down the NO_RECURSE mechanism since it's
2684         now the default. In some cases there were things in the explicit
2685         frame that could be turned into plain old local variables and
2686         other small like optimizations.
2687         (pchars):
2688         (match_ref):
2689         (match): Changed parameters quite a bit since it's now not used
2690         recursively.
2691         (jsRegExpExecute): Renamed from pcre_exec.
2692
2693         * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR,
2694         PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED,
2695         PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS,
2696         PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes,
2697         _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop,
2698         and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here.
2699
2700         * pcre/pcre_maketables.c: Changed to only compile in dftables.
2701         Also got rid of many of the tables that we don't use.
2702
2703         * pcre/pcre_tables.c: Removed the unused Unicode property tables.
2704
2705         * pcre/pcre_ucp_searchfuncs.c: Removed everything except for
2706         _pcre_ucp_othercase.
2707
2708         * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support
2709         for classes based on Unicode properties.
2710
2711         * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good
2712         to eliminate this completely, but we need the regular expression
2713         code to be C++ first.
2714
2715         * pcre/pcre_fullinfo.c:
2716         * pcre/pcre_get.c:
2717         * pcre/ucp.h:
2718         Files that are no longer needed. I didn't remove them with this
2719         check-in, because I didn't want to modify all the project files.
2720
2721 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
2722
2723         Reviewed by Sam.
2724         
2725         - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup
2726
2727         It turns out that doing this check costs more than it saves.
2728         
2729         * kjs/JSImmediate.h:
2730         (KJS::JSImmediate::fromDouble):
2731
2732 2007-11-03  Sam Weinig  <sam@webkit.org>
2733
2734         Reviewed by Oliver.
2735
2736         Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
2737         The variable had been kept around for binary compatibility, but since nothing
2738         else is there is no point in continuing to keep it around.
2739
2740         * API/JSCallbackConstructor.cpp:
2741         (KJS::):
2742         * API/JSCallbackFunction.cpp:
2743         (KJS::):
2744         * API/JSCallbackObject.cpp:
2745         (KJS::):
2746         * bindings/objc/objc_runtime.mm:
2747         * bindings/runtime_array.cpp:
2748         * bindings/runtime_object.cpp:
2749         * kjs/array_instance.cpp:
2750         (KJS::):
2751         * kjs/array_object.cpp:
2752         (KJS::):
2753         * kjs/bool_object.cpp:
2754         * kjs/date_object.cpp:
2755         (KJS::):
2756         * kjs/error_object.cpp:
2757         * kjs/function.cpp:
2758         (KJS::):
2759         * kjs/internal.cpp:
2760         (KJS::):
2761         * kjs/lookup.h:
2762         * kjs/math_object.cpp:
2763         * kjs/number_object.cpp:
2764         * kjs/object.h:
2765         * kjs/regexp_object.cpp:
2766         * kjs/string_object.cpp:
2767         (KJS::):
2768
2769 2007-11-03  Kevin McCullough  <kmccullough@apple.com>
2770
2771         - Updated testkjs results to make the build bots green until we
2772         can fix the tests that are failing.  The new failures are in DST.
2773
2774         * tests/mozilla/expected.html:
2775
2776 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
2777
2778         Reviewed by Adam.
2779         
2780         - don't print the var twice for ForInNodes with a var declaration
2781
2782         * kjs/nodes2string.cpp:
2783         (KJS::ForInNode::streamTo):
2784
2785 2007-11-03  Darin Adler  <darin@apple.com>
2786
2787         * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of
2788         C-incompatible declaration.
2789
2790 2007-11-03  Mark Rowe  <mrowe@apple.com>
2791
2792         Gtk build fix.
2793
2794         * kjs/nodes.cpp:  Add missing include.
2795
2796 2007-11-03  Darin Adler  <darin@apple.com>
2797
2798         Reviewed by Maciej.
2799
2800         - fix http://bugs.webkit.org/show_bug.cgi?id=15814
2801           <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails
2802
2803         These changes cause us to match the JavaScript specification and pass the
2804         fast/js/kde/encode_decode_uri.html test.
2805
2806         * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its
2807         new strict mode, throwing an exception if there are malformed UTF-16 surrogate
2808         pairs in the text.
2809
2810         * kjs/ustring.h: Added a strict version of the UTF-8 string conversion.
2811         * kjs/ustring.cpp:
2812         (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while
2813         those might be illegal in some sense, they aren't supposed to get any special
2814         handling in the place where this function is currently used.
2815         (KJS::UString::UTF8String): Added the strictness.
2816
2817 2007-11-03  Darin Adler  <darin@apple.com>
2818
2819         Reviewed by Maciej.
2820
2821         - http://bugs.webkit.org/show_bug.cgi?id=15812
2822           some JavaScript tests (from the Mozilla test suite) are failing
2823
2824         Two or three fixes get 7 more of the Mozilla tests passing.
2825         This gets us down from 61 failing tests to 54.
2826
2827         * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp):
2828         Made this inline and gave it a more specific type. Some day we should
2829         probably do that for all of these -- might even get a bit of a speed
2830         boost from it.
2831         * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's
2832         inline in the header.
2833
2834         * kjs/regexp_object.h:
2835         * kjs/regexp_object.cpp:
2836         (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the
2837         switch statement into the RegExpImp object, so they can be shared with
2838         RegExpImp::callAsFunction.
2839         (KJS::RegExpImp::match): Added. Common code used by both test and exec.
2840         (KJS::RegExpImp::test): Added.
2841         (KJS::RegExpImp::exec): Added.
2842         (KJS::RegExpImp::implementsCall): Added.
2843         (KJS::RegExpImp::callAsFunction): Added.
2844         (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize
2845         lastInput to null rather than empty string -- we take advantage of the
2846         difference in RegExpImp::match.
2847         (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables
2848         just to get at a field like this.
2849
2850         * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match
2851         the JavaScript specification. If there are not 4 hex digits after the \u,
2852         then it's processed as if it wasn't an escape sequence at all.
2853
2854         * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition
2855         for JavaScript (4 specific Unicode values).
2856         * pcre/pcre_exec.c:
2857         (match): Changed all call sites to use IS_NEWLINE.
2858         (pcre_exec): Ditto.
2859
2860         * tests/mozilla/expected.html: Updated to expect 7 more successful tests.
2861
2862 2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>
2863
2864         Sort files(...); sections of Xcode project files.
2865
2866         Rubber-stamped by Darin.
2867
2868         * JavaScriptCore.xcodeproj/project.pbxproj:
2869
2870 2007-11-03  Maciej Stachowiak  <mjs@apple.com>
2871
2872         Reviewed by Oliver.
2873         
2874         - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup
2875
2876         * kjs/grammar.y:
2877         * kjs/nodes.cpp:
2878         (KJS::VarDeclNode::optimizeVariableAccess):
2879         (KJS::VarDeclNode::getDeclarations):
2880         (KJS::VarDeclNode::handleSlowCase):
2881         (KJS::VarDeclNode::evaluateSingle):
2882         (KJS::VarDeclNode::evaluate):
2883         (KJS::VarStatementNode::execute):
2884         * kjs/nodes.h:
2885         (KJS::VarDeclNode::):
2886         (KJS::VarStatementNode::):
2887         * kjs/nodes2string.cpp:
2888         (KJS::VarDeclNode::streamTo):
2889
2890 2007-11-03  Alexey Proskuryakov  <ap@webkit.org>
2891
2892         Reviewed by Darin.
2893
2894         http://bugs.webkit.org/show_bug.cgi?id=15800
2895         REGRESSION (r27303): RegExp leaks
2896
2897         * kjs/regexp_object.h:
2898         (KJS::RegExpImp::setRegExp):
2899         (KJS::RegExpImp::regExp):
2900         (KJS::RegExpImp::classInfo):
2901         * kjs/regexp_object.cpp:
2902         (RegExpImp::RegExpImp):
2903         (RegExpImp::~RegExpImp):
2904         Renamed reg member variable to m_regExp, changed it to use OwnPtr.
2905
2906 2007-11-02  Maciej Stachowiak  <mjs@apple.com>
2907
2908         Reviewed by Oliver.
2909         
2910         - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >.
2911
2912         * kjs/grammar.y:
2913         * kjs/nodes.cpp:
2914         (KJS::statementListPushFIFO):
2915         (KJS::statementListGetDeclarations):
2916         (KJS::statementListInitializeDeclarationStacks):
2917         (KJS::statementListInitializeVariableAccessStack):
2918         (KJS::statementListExecute):
2919         (KJS::BlockNode::BlockNode):
2920         (KJS::FunctionBodyNode::FunctionBodyNode):
2921         (KJS::ProgramNode::ProgramNode):
2922         * kjs/nodes.h:
2923         (KJS::CaseClauseNode::):
2924
2925 2007-11-02  Darin Adler  <darin@apple.com>
2926
2927         Reviewed by Maciej.
2928
2929         - http://bugs.webkit.org/show_bug.cgi?id=15791
2930           change property map data structure for less memory use, better speed
2931
2932         The property map now has an array of indices and a separate array of
2933         property map entries. This slightly slows down lookup because of a second
2934         memory acess, but makes property maps smaller and faster to iterate in
2935         functions like mark().
2936
2937         SunSpider says this is 1.2% faster, although it makes the bitwise-end test
2938         more than 10% slower. To fix that we'll need to optimize global variable lookup.
2939
2940         * kjs/property_map.cpp:
2941         (KJS::PropertyMapEntry::PropertyMapEntry):
2942         (KJS::PropertyMapHashTable::entries):
2943         (KJS::PropertyMapHashTable::allocationSize):
2944         (KJS::SavedProperties::SavedProperties):
2945         (KJS::SavedProperties::~SavedProperties):
2946         (KJS::PropertyMap::checkConsistency):
2947         (KJS::PropertyMap::~PropertyMap):
2948         (KJS::PropertyMap::clear):
2949         (KJS::PropertyMap::get):
2950         (KJS::PropertyMap::getLocation):
2951         (KJS::PropertyMap::put):
2952         (KJS::PropertyMap::insert):
2953         (KJS::PropertyMap::createTable):
2954         (KJS::PropertyMap::rehash):
2955         (KJS::PropertyMap::remove):
2956         (KJS::PropertyMap::mark):
2957         (KJS::comparePropertyMapEntryIndices):
2958         (KJS::PropertyMap::containsGettersOrSetters):
2959         (KJS::PropertyMap::getEnumerablePropertyNames):
2960         (KJS::PropertyMap::save):
2961         (KJS::PropertyMap::restore):
2962         * kjs/property_map.h:
2963
2964 2007-11-02  Darin Adler  <darin@apple.com>
2965
2966         Reviewed by Maciej.
2967
2968         - http://bugs.webkit.org/show_bug.cgi?id=15807
2969           HashMap needs a take() function that combines get and remove
2970
2971         * wtf/HashMap.h: Added take function. Simplistic implementation for now,
2972         but still does only one hash table lookup.
2973
2974         * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than
2975         a find followed by a remove.
2976
2977 2007-11-02  David Carson  <dacarson@gmail.com>
2978
2979         Reviewed by Darin.
2980
2981         Fix compiler warning "warning: suggest parentheses around && within ||"
2982         http://bugs.webkit.org/show_bug.cgi?id=15764
2983
2984         * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses.
2985
2986 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
2987
2988         Reviewed by Maciej Stachowiak.
2989         
2990         In preparation for making List a simple stack-allocated Vector:
2991
2992         Removed all instances of List copying and/or assignment, and made List 
2993         inherit from Noncopyable.
2994         
2995         Functions that used to return a List by copy now take List& out 
2996         parameters.
2997         
2998         Layout tests and JS tests pass.
2999
3000         * kjs/list.cpp:
3001         (KJS::List::slice): Replaced copyTail with a more generic slice 
3002         alternative. (JavaScriptCore only calls slice(1), but WebCore calls 
3003         slice(2)).
3004
3005 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
3006
3007         Reviewed by Maciej Stachowiak.
3008
3009         Fixed http://bugs.webkit.org/show_bug.cgi?id=15785
3010         REGRESSION(r27344): Crash on load at finance.yahoo.com
3011         
3012         Reverted a small portion of my last check-in. (The speedup and the List 
3013         removal are still there, though.)
3014         
3015         ActivationImp needs to hold a pointer to its function, and mark that 
3016         pointer (rather than accessing its function through its ExecState, and 
3017         counting on the active scope to mark its function) because a closure 
3018         can cause an ActivationImp to outlive its ExecState along with any 
3019         active scope.
3020
3021         * kjs/ExecState.cpp:
3022         (KJS::ExecState::ExecState):
3023         * kjs/function.cpp:
3024         (KJS::FunctionImp::~FunctionImp):
3025         (KJS::ActivationImp::ActivationImp):
3026         * kjs/function.h:
3027         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
3028
3029         Also made HashTable a little more crash-happy in debug builds, so 
3030         problems like this will show up earlier:
3031         
3032         * wtf/HashTable.h:
3033         (WTF::HashTable::~HashTable):
3034
3035 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
3036
3037         Reviewed by Adam Roben.
3038         
3039         Addressed some of Darin's review comments.
3040         
3041         Used perl -p, which is the shorthand while(<>) {}.
3042         
3043         Made sure not to suppress bison's output.
3044         
3045         Added line to removed bison_out.txt, since this script removes other 
3046         intermediate files, too.
3047
3048         * DerivedSources.make:
3049
3050 2007-11-01  Geoffrey Garen  <ggaren@apple.com>
3051
3052         Reviewed by Oliver Hunt.
3053         
3054         Removed List from ActivationImp, in preparation for making all lists
3055         stack-allocated.
3056         
3057         Tests pass.
3058         
3059         1.0% speedup on SunSpider, presumably due to reduced List refcount thrash.
3060
3061         * kjs/ExecState.cpp:
3062         (KJS::ExecState::ExecState):
3063         (KJS::ExecState::~ExecState):
3064         * kjs/function.cpp:
3065         (KJS::ActivationImp::ActivationImp):
3066         (KJS::ActivationImp::createArgumentsObject):
3067         * kjs/function.h:
3068         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
3069
3070 2007-11-01  Adam Roben  <aroben@apple.com>
3071
3072         Use jsNumberCell instead of jsNumber when converting double constants to JSValues
3073
3074         This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and
3075         ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC.
3076
3077         It also gets rid of an MSVC warning that we previously had to silence.
3078
3079         Reviewed by Geoff.
3080
3081         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn
3082         back on the "overflow in constant arithmetic" warning.
3083         * kjs/number_object.cpp:
3084         (NumberObjectImp::getValueProperty): Use jsNumberCell instead of
3085         jsNumber.
3086
3087 2007-10-31  Adam Roben  <aroben@apple.com>
3088
3089         Windows build fix
3090
3091         * kjs/ExecState.h:
3092
3093 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
3094
3095         Reviewed by Oliver.
3096         
3097         - shave some cycles off of local storage access for a 1% SunSpider speedup
3098         
3099         Keep the LocalStorage pointer in the ExecState, instead of getting
3100         it from the ActivationImp all the time.
3101
3102         * kjs/ExecState.cpp:
3103         (KJS::ExecState::updateLocalStorage):
3104         * kjs/ExecState.h:
3105         (KJS::ExecState::localStorage):
3106         * kjs/nodes.cpp:
3107         (KJS::LocalVarAccessNode::evaluate):
3108         (KJS::LocalVarFunctionCallNode::evaluate):
3109         (KJS::PostIncLocalVarNode::evaluate):
3110         (KJS::PostDecLocalVarNode::evaluate):
3111         (KJS::LocalVarTypeOfNode::evaluate):
3112         (KJS::PreIncLocalVarNode::evaluate):
3113         (KJS::PreDecLocalVarNode::evaluate):
3114         (KJS::ReadModifyLocalVarNode::evaluate):
3115         (KJS::AssignLocalVarNode::evaluate):
3116         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
3117
3118 2007-10-31  Adam Roben  <aroben@apple.com>
3119
3120         Fix a crash on launch due to a static initializer race
3121
3122         We now use fast inline assembler spinlocks which can be statically
3123         initialized at compile time.
3124
3125         As a side benefit, this speeds up SunSpider by 0.4%.
3126
3127         Reviewed by Oliver.
3128
3129         * wtf/FastMalloc.cpp:
3130         * wtf/TCSpinLock.h:
3131         (TCMalloc_SpinLock::Lock):
3132         (TCMalloc_SpinLock::Unlock):
3133         (TCMalloc_SlowLock):
3134         * wtf/TCSystemAlloc.cpp:
3135
3136 2007-10-31  Kevin McCullough  <kmccullough@apple.com>
3137
3138         Reviewed by Sam.
3139
3140         - Corrected spelling.
3141
3142         * wtf/HashTraits.h:
3143
3144 2007-10-31  Mark Rowe  <mrowe@apple.com>
3145
3146         Further Gtk build fixage.
3147
3148         * kjs/regexp_object.cpp:
3149
3150 2007-10-31  Mark Rowe  <mrowe@apple.com>
3151
3152         Gtk build fix.
3153
3154         * kjs/regexp.h:
3155
3156 2007-10-31  Darin Adler  <darin@apple.com>
3157
3158         Reviewed by Maciej.
3159
3160         - fix http://bugs.webkit.org/show_bug.cgi?id=15749
3161           RegExp/RegExpObjectImp cause needless UString creation
3162
3163         Speeds things up 0.4% according to SunSpider.
3164
3165         * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX),
3166         because this library doesn't use the real PCRE -- it uses its
3167         own PCRE that works on UTF-16.
3168
3169         * kjs/regexp.h: Removed a few unused functions. Changed the ifdef.
3170         Use Noncopyable. Change the return value of match.
3171         * kjs/regexp.cpp:
3172         (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost.
3173         (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX.
3174         (KJS::RegExp::match): Change to return the position as an int and the
3175         ovector as a OwnArrayPtr<int> for efficiency and clearer storage management.
3176
3177         * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer
3178         require a result string.
3179         * kjs/regexp_object.cpp:
3180         (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch.
3181         (RegExpObjectImp::performMatch): Change so it doesn't return a string.
3182         (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of
3183         the main result with the backreferences; now it doesn't need to take
3184         a result parameter.
3185         (RegExpObjectImp::getBackref): Minor tweaks.
3186         (RegExpObjectImp::getLastParen): Ditto.
3187         (RegExpObjectImp::getLeftContext): Ditto.
3188         (RegExpObjectImp::getRightContext): Ditto.
3189         (RegExpObjectImp::getValueProperty): Change LastMatch case to call
3190         getBackref(0) so we don't need a separate getLastMatch function.
3191
3192         * kjs/string_object.cpp:
3193         (KJS::replace): Update to use new performMatch, including merging the
3194         matched string section with the other substrings.
3195         (KJS::StringProtoFunc::callAsFunction): Update functions to use the
3196         new performMatch and match. Also change to use OwnArrayPtr.
3197
3198 2007-10-31  Oliver Hunt  <oliver@apple.com>
3199
3200         * kjs/nodes.h: include OwnPtr.h
3201
3202 2007-10-31  Oliver Hunt  <oliver@apple.com>
3203
3204         Reviewed by Maciej.
3205
3206         Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider
3207
3208         * kjs/grammar.y:
3209         * kjs/nodes.cpp:
3210         (KJS::statementListPushFIFO):
3211         (KJS::statementListGetDeclarations):
3212         (KJS::statementListInitializeDeclarationStacks):
3213         (KJS::statementListInitializeVariableAccessStack):
3214         (KJS::statementListExecute):
3215         (KJS::BlockNode::optimizeVariableAccess):
3216         (KJS::BlockNode::BlockNode):
3217         (KJS::BlockNode::getDeclarations):
3218         (KJS::BlockNode::execute):
3219         (KJS::CaseClauseNode::optimizeVariableAccess):
3220         (KJS::CaseClauseNode::getDeclarations):
3221         (KJS::CaseClauseNode::evalStatements):
3222         (KJS::FunctionBodyNode::initializeDeclarationStacks):
3223         (KJS::FunctionBodyNode::optimizeVariableAccess):
3224         * kjs/nodes.h:
3225         * kjs/nodes2string.cpp:
3226         (KJS::statementListStreamTo):
3227         (KJS::BlockNode::streamTo):
3228         (KJS::CaseClauseNode::streamTo):
3229
3230 2007-10-30  Mark Rowe  <mrowe@apple.com>
3231
3232         * kjs/property_map.cpp: Added a missing using directive to fix the build
3233         for non-Mac ports. Mac worked only because it does the AllInOneFile compile.
3234
3235 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
3236
3237         * kjs/property_map.cpp: Include HashTable.h the right way to fix the build
3238         for non-Mac ports.
3239
3240 2007-10-31  Alexey Proskuryakov  <ap@webkit.org>
3241
3242         Reviewed by Darin.
3243
3244         http://bugs.webkit.org/show_bug.cgi?id=11001
3245         WebKit doesn't support RegExp.compile method
3246
3247         Test: fast/js/regexp-compile.html
3248
3249         * kjs/regexp_object.cpp:
3250         (RegExpPrototype::RegExpPrototype):
3251         (RegExpProtoFunc::callAsFunction):
3252         * kjs/regexp_object.h:
3253         (KJS::RegExpProtoFunc::):
3254         Added RegExp.compile.
3255
3256         * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes.
3257
3258 2007-10-31  Maciej Stachowiak  <mjs@apple.com>
3259
3260         Reviewed by Oliver.
3261         
3262         - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup
3263         
3264         Integer divide sucks. Fortunately, a bunch of shifts and XORs
3265         biased towards the high bits is sufficient to provide a good
3266         double hash. Besides the SunSpider win, I used the dump statistics
3267         mode for both to verify that collisions did not increase and that
3268         the longest collision chain is not any longer.
3269
3270         * kjs/property_map.cpp:
3271         (KJS::doubleHash):
3272         (KJS::PropertyMap::get):
3273         (KJS::PropertyMap::getLocation):
3274         (KJS::PropertyMap::put):
3275         (KJS::PropertyMap::insert):
3276         (KJS::PropertyMap::remove):
3277         (KJS::PropertyMap::checkConsistency):
3278         * wtf/HashTable.h:
3279         (WTF::doubleHash):
3280         (WTF::::lookup):
3281         (WTF::::lookupForWriting):
3282         (WTF::::fullLookupForWriting):
3283         (WTF::::add):
3284
3285 2007-10-30  Adam Roben  <aroben@apple.com>
3286
3287         * kjs/collector.h: Make HeapType public so it can be used for non-member
3288         things like the HeapConstants struct template. Fixes the build on Windows.
3289
3290 2007-10-30  Adam Roben  <aroben@apple.com>
3291
3292         Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows
3293
3294         Speeds up SunSpider by 0.4%.
3295
3296         Reviewed by Steve and Maciej.
3297
3298         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
3299         a warning during LTCG in release builds about double -> float
3300         conversion.
3301         * wtf/AlwaysInline.h:
3302         * wtf/FastMalloc.h:
3303
3304 2007-10-30  Adam Roben  <aroben@apple.com>
3305
3306         Use GetCurrentThreadId instead of pthread_self in FastMalloc
3307
3308         Speeds up SunSpider by 0.3%.
3309
3310         Reviewed by Steve.
3311
3312         * wtf/FastMalloc.cpp:
3313         (WTF::TCMalloc_ThreadCache::InitTSD):
3314         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
3315
3316 2007-10-30  Adam Roben  <aroben@apple.com>
3317
3318         Switch to a Win32 critical section implementation of spinlocks
3319         
3320         Speeds up SunSpider by 0.4%.
3321         
3322         Reviewed by Steve.
3323         
3324         * wtf/FastMalloc.cpp:
3325         * wtf/TCSpinLock.h:
3326         (TCMalloc_SpinLock::TCMalloc_SpinLock):
3327         (TCMalloc_SpinLock::Init):
3328         (TCMalloc_SpinLock::Finalize):
3329         (TCMalloc_SpinLock::Lock):
3330         (TCMalloc_SpinLock::Unlock):
3331         * wtf/TCSystemAlloc.cpp:
3332
3333 2007-10-30  Adam Roben  <aroben@apple.com>
3334
3335         Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta
3336
3337         http://bugs.webkit.org/show_bug.cgi?id=15586
3338
3339         Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll
3340
3341         Use Win32 TLS functions instead of __declspec(thread), which breaks
3342         delay-loading.
3343
3344         Reviewed by Steve.
3345
3346         * wtf/FastMalloc.cpp:
3347         (WTF::getThreadHeap):
3348         (WTF::TCMalloc_ThreadCache::InitModule):
3349
3350 2007-10-30  Maciej Stachowiak  <mjs@apple.com>
3351
3352         Reviewed by Oliver.
3353         
3354         - allocate numbers in half-size cells, for an 0.5% SunSpider speedup
3355         http://bugs.webkit.org/show_bug.cgi?id=15772
3356         
3357         We do this by using a single mark bit per two number cells, and
3358         tweaking marking.
3359         
3360         Besides being an 0.5% win overall, this is a 7.1% win on morph.
3361
3362         * kjs/collector.cpp:
3363         (KJS::):
3364         (KJS::Collector::heapAllocate):
3365         (KJS::Collector::markStackObjectsConservatively):
3366         (KJS::Collector::sweep):
3367         * kjs/collector.h:
3368         (KJS::SmallCollectorCell::):
3369
3370 2007-10-30  Geoffrey Garen  <ggaren@apple.com>
3371
3372         Reviewed by Adam Roben, Sam Weinig.
3373         
3374         Made conflicts in grammar.y a persistent build failure.
3375
3376         * DerivedSources.make:
3377
3378 2007-10-30  Kevin McCullough  <kmccullough@apple.com>
3379
3380         Reviewed by Adam and Geoff.
3381
3382         - Added a new cast so all the casts are in the same place.
3383
3384         * API/APICast.h:
3385         (toGlobalRef):
3386
3387 2007-10-30  Geoffrey Garen  <ggaren@apple.com>
3388
3389         Reviewed by Darin Adler.
3390
3391         Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457
3392         
3393         JS tests, including 
3394
3395             ecma_2/Statements/dowhile-001.js
3396             ecma_2/Statements/dowhile-002.js
3397             ecma_2/Statements/dowhile-003.js
3398             ecma_2/Statements/dowhile-004.js
3399             ecma_2/Statements/dowhile-005.js
3400             ecma_2/Statements/dowhile-006.js
3401             ecma_2/Statements/dowhile-007.js
3402             js1_2/statements/do_while.js
3403
3404         and layout tests, including
3405
3406             do-while-expression-value.html
3407             do-while-semicolon.html
3408             do-while-without-semicolon.html
3409         
3410         pass.
3411         
3412         * kjs/grammar.y: Use the explicit "error" production, as we do with other
3413         automatic semicolon insertions, to disambiguate "do { } while();" from
3414         "do { } while()" followed by ";" (the empty statement).
3415
3416 2007-10-29  Oliver Hunt  <oliver@apple.com>
3417
3418         Reviewed by Maciej.
3419
3420         Debranching remaining assignment nodes, and miscellaneous cleanup
3421         
3422         Split read-modify code paths out of AssignBracketNode and AssignDotNode
3423         Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode 
3424         and ReadModifyResolveNode evaluate methods
3425
3426         Leads to a 1% gain in SunSpider.
3427
3428         * kjs/grammar.y:
3429         * kjs/nodes.cpp:
3430         (KJS::ReadModifyLocalVarNode::evaluate):
3431         (KJS::ReadModifyResolveNode::evaluate):
3432         (KJS::AssignDotNode::evaluate):
3433         (KJS::ReadModifyDotNode::optimizeVariableAccess):
3434         (KJS::ReadModifyDotNode::evaluate):
3435         (KJS::AssignBracketNode::evaluate):
3436         (KJS::ReadModifyBracketNode::optimizeVariableAccess):
3437         (KJS::ReadModifyBracketNode::evaluate):
3438         * kjs/nodes.h:
3439         (KJS::AssignBracketNode::):
3440         (KJS::AssignBracketNode::precedence):
3441         (KJS::AssignDotNode::):
3442         (KJS::AssignDotNode::precedence):
3443         * kjs/nodes2string.cpp:
3444         (KJS::ReadModifyBracketNode::streamTo):
3445         (KJS::AssignBracketNode::streamTo):
3446         (KJS::ReadModifyDotNode::streamTo):
3447         (KJS::AssignDotNode::streamTo):
3448
3449 2007-10-29  Oliver Hunt  <oliver@apple.com>
3450
3451         Debranching various Node::evaluate implementations
3452         
3453         Reviewed by Maciej.
3454         
3455         Split the read-modify-write assignment cases out of AssignResolveNode and into ReadModifyResolveNode
3456         Split the increment and decrement cases for Prefix- and Postfix- ResolveNode, BracketNode, and DotNode
3457         
3458         Gains 1.6% on SunSpider
3459
3460         * JavaScriptCore.xcodeproj/project.pbxproj:
3461         * kjs/grammar.y:
3462         * kjs/nodes.cpp:
3463         (KJS::PostIncResolveNode::optimizeVariableAccess):
3464         (KJS::PostIncResolveNode::evaluate):
3465         (KJS::PostIncLocalVarNode::evaluate):
3466         (KJS::PostDecResolveNode::optimizeVariableAccess):
3467         (KJS::PostDecResolveNode::evaluate):
3468         (KJS::PostDecLocalVarNode::evaluate):
3469         (KJS::PostIncBracketNode::evaluate):
3470         (KJS::PostDecBracketNode::evaluate):
3471         (KJS::PostIncDotNode::evaluate):
3472         (KJS::PostDecDotNode::evaluate):
3473         (KJS::PreIncResolveNode::optimizeVariableAccess):
3474         (KJS::PreIncLocalVarNode::evaluate):
3475         (KJS::PreIncResolveNode::evaluate):
3476         (KJS::PreDecResolveNode::optimizeVariableAccess):
3477         (KJS::PreDecLocalVarNode::evaluate):
3478         (KJS::PreDecResolveNode::evaluate):
3479         (KJS::PreIncBracketNode::evaluate):
3480         (KJS::PreDecBracketNode::evaluate):
3481         (KJS::PreIncDotNode::evaluate):
3482         (KJS::PreDecDotNode::evaluate):
3483         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
3484         (KJS::AssignResolveNode::optimizeVariableAccess):
3485         (KJS::AssignLocalVarNode::evaluate):
3486         (KJS::AssignResolveNode::evaluate):
3487         * kjs/nodes.h:
3488         (KJS::PostDecResolveNode::):
3489         (KJS::PostDecResolveNode::precedence):
3490         (KJS::PostDecLocalVarNode::):
3491         (KJS::PostfixBracketNode::):
3492         (KJS::PostfixBracketNode::precedence):
3493         (KJS::PostIncBracketNode::):
3494         (KJS::PostIncBracketNode::isIncrement):
3495         (KJS::PostDecBracketNode::):
3496         (KJS::PostDecBracketNode::isIncrement):
3497         (KJS::PostfixDotNode::):
3498         (KJS::PostfixDotNode::precedence):
3499         (KJS::PostIncDotNode::):
3500         (KJS::PostIncDotNode::isIncrement):
3501         (KJS::PostDecDotNode::):
3502         (KJS::PreIncResolveNode::):
3503         (KJS::PreDecResolveNode::):
3504         (KJS::PreDecResolveNode::precedence):
3505         (KJS::PreDecLocalVarNode::):
3506         (KJS::PrefixBracketNode::):
3507         (KJS::PrefixBracketNode::precedence):
3508         (KJS::PreIncBracketNode::):
3509         (KJS::PreIncBracketNode::isIncrement):
3510         (KJS::PreDecBracketNode::):
3511         (KJS::PreDecBracketNode::isIncrement):
3512         (KJS::PrefixDotNode::):
3513         (KJS::PrefixDotNode::precedence):
3514         (KJS::PreIncDotNode::):
3515         (KJS::PreIncDotNode::isIncrement):
3516         (KJS::PreDecDotNode::):
3517         (KJS::ReadModifyResolveNode::):
3518         (KJS::ReadModifyLocalVarNode::):
3519         (KJS::AssignResolveNode::):
3520         (KJS::AssignResolveNode::precedence):
3521         * kjs/nodes2string.cpp:
3522         (KJS::PostIncResolveNode::streamTo):
3523         (KJS::PostDecResolveNode::streamTo):
3524         (KJS::PostfixBracketNode::streamTo):
3525         (KJS::PostfixDotNode::streamTo):
3526         (KJS::PreIncResolveNode::streamTo):
3527         (KJS::PreDecResolveNode::streamTo):
3528         (KJS::ReadModifyResolveNode::streamTo):
3529         (KJS::AssignResolveNode::streamTo):
3530
3531 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
3532
3533         Not reviewed, build fix.
3534         
3535         - Include Vector.h in a way that actually works.
3536
3537         * kjs/LocalStorage.h:
3538
3539 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
3540
3541         Not reviewed, build fix.
3542         
3543         - Install LocalStorage.h as a private header.
3544
3545         * JavaScriptCore.xcodeproj/project.pbxproj:
3546
3547 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
3548
3549         Reviewed by Darin.
3550         
3551         - Define good VectorTraits for LocalStorage entry for 0.5% speed improvement on SunSpider.
3552
3553         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3554         * JavaScriptCore.xcodeproj/project.pbxproj:
3555         * kjs/LocalStorage.h: Added.
3556         (KJS::LocalStorageEntry::LocalStorageEntry):
3557         (WTF::):
3558         * kjs/function.h:
3559         * kjs/nodes.cpp:
3560         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
3561
3562 2007-10-29  Geoffrey Garen  <ggaren@apple.com>
3563
3564         Reviewed by Oliver Hunt.
3565         
3566         Some small tweaks that I notice while reviewing Oliver's last patch.
3567         
3568         Includes removal of an unnecessary KJS_CHECKEXCEPTIONVALUE.
3569         
3570         No change in SunSpider because SunSpider doesn't take the code path that
3571         would execute the unnecessary KJS_CHECKEXCEPTIONVALUE much.
3572
3573         * kjs/nodes.cpp:
3574         (KJS::LocalVarPostfixNode::evaluate):
3575         (KJS::TypeOfResolveNode::optimizeVariableAccess):
3576         (KJS::LocalVarTypeOfNode::evaluate):
3577         (KJS::PrefixResolveNode::optimizeVariableAccess):
3578         (KJS::LocalVarPrefixNode::evaluate):
3579         (KJS::AssignResolveNode::optimizeVariableAccess):
3580         (KJS::LocalVarAssignNode::evaluate):
3581         * kjs/nodes.h:
3582         (KJS::LocalVarTypeOfNode::):
3583         (KJS::PrefixResolveNode::):
3584         (KJS::LocalVarPrefixNode::):
3585         (KJS::AssignResolveNode::):
3586         (KJS::LocalVarAssignNode::):
3587
3588 2007-10-29  Eric Seidel  <eric@webkit.org>
3589
3590         Reviewed by Maciej.
3591         
3592         SunSpider claims this was a 0.7% speedup.
3593
3594         * kjs/string_object.cpp:
3595         (KJS::StringProtoFunc::callAsFunction): avoid mallocing a jsString in the common case
3596
3597 2007-10-29  Maciej Stachowiak  <mjs@apple.com>
3598
3599         Reviewed by Mark.
3600         
3601         - re-enable asserts for access to empty or deleted keys
3602
3603         * wtf/HashTable.h:
3604         (WTF::::lookup):
3605         (WTF::::lookupForWriting):
3606         (WTF::::fullLookupForWriting):
3607         (WTF::::add):
3608
3609 2007-10-29  Eric Seidel  <eric@webkit.org>
3610
3611         Build fix only, no review.
3612
3613         * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot
3614
3615 2007-10-29  Mark Rowe  <mrowe@apple.com>
3616
3617         Gtk build fix.  Move struct declarations into nodes.h.
3618
3619         * kjs/grammar.y:
3620         * kjs/nodes.h:
3621
3622 2007-10-29  Eric Seidel  <eric@webkit.org>
3623
3624         Reviewed by darin.
3625         
3626         Give StringInstance a getOwnPropertySlot(ExecState, unsigned, PropertySlot) fastpath, just like Arrays.
3627         Make it a compile time error to use toString(ExecState) on a StringInstance
3628         
3629         SunSpider claims this was a 6.6% speedup overall (22% on string-base64)
3630
3631         * kjs/internal.h:
3632         (KJS::StringImp::getLength):
3633         * kjs/string_object.cpp:
3634         (KJS::StringInstance::lengthGetter):
3635         (KJS::StringInstance::inlineGetOwnPropertySlot):
3636         (KJS::StringInstance::getOwnPropertySlot):
3637         * kjs/string_object.h:
3638
3639 2007-10-28  Oliver Hunt  <oliver@apple.com>
3640
3641         Reviewed by Darin.
3642
3643         Add nodes to allow Assignment, TypeOf, and prefix operators to 
3644         make use of the new optimised local variable look up.
3645
3646         5% gain on sunspider
3647
3648         * kjs/nodes.cpp:
3649         (KJS::TypeOfResolveNode::optimizeVariableAccess):
3650         (KJS::LocalTypeOfAccessNode::evaluate):
3651         (KJS::PrefixResolveNode::optimizeVariableAccess):
3652         (KJS::PrefixLocalAccessNode::evaluate):
3653         (KJS::AssignResolveNode::optimizeVariableAccess):
3654         (KJS::AssignLocalAccessNode::evaluate):
3655         * kjs/nodes.h:
3656         (KJS::TypeOfResolveNode::):
3657         (KJS::TypeOfResolveNode::precedence):
3658         (KJS::LocalTypeOfAccessNode::):
3659         (KJS::PrefixResolveNode::):
3660         (KJS::PrefixResolveNode::precedence):
3661         (KJS::PrefixLocalAccessNode::):
3662         (KJS::AssignResolveNode::):
3663         (KJS::AssignLocalAccessNode::):
3664
3665 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
3666
3667         Reviewed by Darin.
3668         
3669         - avoid creating and then breaking circular lists in the parser, instead track head and tail pointers at parse time
3670         http://bugs.webkit.org/show_bug.cgi?id=15748
3671         
3672         Not a significant speedup or slowdown on SunSpider.
3673
3674         * kjs/Parser.cpp:
3675         (KJS::clearNewNodes):
3676         * kjs/Parser.h:
3677         * kjs/grammar.y:
3678         * kjs/nodes.cpp:
3679         (KJS::BlockNode::BlockNode):
3680         (KJS::CaseBlockNode::CaseBlockNode):
3681         (KJS::FunctionBodyNode::FunctionBodyNode):
3682         (KJS::SourceElementsNode::SourceElementsNode):
3683         (KJS::ProgramNode::ProgramNode):
3684         * kjs/nodes.h:
3685         (KJS::ElementNode::):
3686         (KJS::ArrayNode::):
3687         (KJS::PropertyListNode::):
3688         (KJS::ObjectLiteralNode::):
3689         (KJS::ArgumentListNode::):
3690         (KJS::ArgumentsNode::):
3691         (KJS::VarDeclListNode::):
3692         (KJS::VarStatementNode::):
3693         (KJS::ForNode::):
3694         (KJS::ParameterNode::):
3695         (KJS::FuncExprNode::):
3696         (KJS::FuncDeclNode::):
3697         (KJS::SourceElementsNode::):
3698         (KJS::CaseClauseNode::):
3699         (KJS::ClauseListNode::):
3700
3701 2007-10-28  Mark Rowe  <mrowe@apple.com>
3702
3703         Disable assertions in a manner that doesn't break the Qt Windows build.
3704
3705         * wtf/HashTable.h:
3706         (WTF::::lookup):
3707         (WTF::::lookupForWriting):
3708         (WTF::::fullLookupForWriting):
3709
3710 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
3711
3712         Temporarily disabling some ASSERTs I introduced in my last check-in 
3713         because of http://bugs.webkit.org/show_bug.cgi?id=15747
3714         Lots of layout tests fail the !HashTranslator::equal(KeyTraits::emptyValue() ASSERT
3715
3716         * wtf/HashTable.h:
3717         (WTF::::lookup):
3718         (WTF::::lookupForWriting):
3719         (WTF::::fullLookupForWriting):
3720         (WTF::::add):
3721
3722 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
3723
3724         Reviewed by Darin Adler.
3725         
3726         Fixed http://bugs.webkit.org/show_bug.cgi?id=15746
3727         #ifndef ASSERT_DISABLED is no good!
3728         
3729         Replaced with #if !ASSERT_DISABLED.
3730
3731         * wtf/HashTable.h:
3732         (WTF::::lookup):
3733         (WTF::::lookupForWriting):
3734         (WTF::::fullLookupForWriting):
3735         (WTF::::add):
3736
3737 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
3738
3739         Reviewed by Darin Adler.
3740         
3741         Added FunctionCallResolveNode, PostfixResolveNode, and DeleteResolveNode
3742         to the AST transfom that replaces slow resolve nodes with fast local 
3743         variable alternatives.
3744         
3745         2.5% speedup on SunSpider.
3746         
3747         Also added some missing copyright notices.
3748         
3749         * kjs/nodes.cpp:
3750         (KJS::FunctionCallResolveNode::optimizeVariableAccess):
3751         (KJS::FunctionCallResolveNode::evaluate):
3752         (KJS::LocalVarFunctionCallNode::evaluate):
3753         (KJS::PostfixResolveNode::optimizeVariableAccess):
3754         (KJS::PostfixResolveNode::evaluate):
3755         (KJS::LocalVarPostfixNode::evaluate):
3756         (KJS::DeleteResolveNode::optimizeVariableAccess):
3757         (KJS::DeleteResolveNode::evaluate):
3758         (KJS::LocalVarDeleteNode::evaluate):
3759         * kjs/nodes.h:
3760         (KJS::FunctionCallResolveNode::):
3761         (KJS::LocalVarFunctionCallNode::LocalVarFunctionCallNode):
3762         (KJS::PostfixResolveNode::):
3763         (KJS::LocalVarPostfixNode::LocalVarPostfixNode):
3764         (KJS::DeleteResolveNode::):
3765         (KJS::LocalVarDeleteNode::LocalVarDeleteNode):
3766
3767 2007-10-28  Eric Seidel  <eric@webkit.org>
3768
3769         Reviewed by darin.
3770         
3771         Inline UString::Rep::deref() for a 0.8% improvement in SunSpider
3772         Add virtual keyword to a few virtual functions previously unmarked.
3773
3774         * kjs/internal.h:
3775         (KJS::StringImp::type):
3776         (KJS::NumberImp::type):
3777         * kjs/ustring.h:
3778         (KJS::UString::Rep::deref):
3779
3780 2007-10-28  Darin Adler  <darin@apple.com>
3781
3782         - fix "broken everything" from the storage leak fix
3783
3784         * wtf/RefPtr.h: (WTF::RefPtr::RefPtr): Added a PlacementNewAdopt constructor.
3785         * kjs/ustring.h: (KJS::UString::UString): Pass PlacementNewAdopt along to RefPtr.
3786
3787 2007-10-28  Darin Adler  <darin@apple.com>
3788
3789         Reviewed by Adam.
3790
3791         - turn on unused parameter waring on Mac OS X because it's already on elsewhere
3792
3793         * Configurations/Base.xcconfig: Took out -wno-unused-parameter.
3794
3795         * API/JSNode.c:
3796         * API/JSNodeList.c:
3797         * API/minidom.c:
3798         * API/testapi.c:
3799         Fixed unused variables by using them or marked them with UNUSED_PARAM.
3800
3801         * kjs/CollectorHeapIntrospector.h: (KJS::CollectorHeapIntrospector::zoneCalloc):
3802         Removed parameter names to indicate they are unused.
3803
3804 2007-10-28  Darin Adler  <darin@apple.com>
3805
3806         Reviewed by Maciej.
3807
3808         - fix a storage leak where we ref the UString every time we replace
3809           a ResolveNode with a LocalVarAccessNode
3810
3811         * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
3812         that takes PlacementNewAdopt.
3813
3814         * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
3815         with PlacementNewAdopt instead of the old value of ident.
3816
3817         * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
3818         takes PlacementNewAdopt.
3819
3820 2007-10-28  Darin Adler  <darin@apple.com>
3821
3822         - Windows build fix; get rid of unused parameter
3823
3824         * kjs/nodes.cpp: (KJS::ResolveNode::optimizeVariableAccess): Don't pass it.
3825         * kjs/nodes.h: (KJS::LocalVarAccessNode::LocalVarAccessNode): Remove it.
3826         The assertions weren't all that helpful.
3827
3828 2007-10-28  Mark Rowe  <mrowe@apple.com>
3829
3830         Gtk build fix.  Add include of MathExtras.h.
3831
3832         * kjs/string_object.cpp:
3833
3834 2007-10-28  Mark Rowe  <mrowe@apple.com>
3835
3836         Reviewed by Maciej and Tim.
3837
3838         Replace uses of isNaN and isInf with isnan and isinf, and
3839         remove isNaN and isInf.
3840
3841         * kjs/config.h: Remove unused HAVE_'s.
3842         * kjs/date_object.cpp:
3843         (KJS::DateInstance::getTime):
3844         (KJS::DateInstance::getUTCTime):
3845         (KJS::DateProtoFunc::callAsFunction):
3846         (KJS::DateObjectImp::construct):
3847         (KJS::DateObjectFuncImp::callAsFunction):
3848         * kjs/function.cpp:
3849         (KJS::GlobalFuncImp::callAsFunction):
3850         * kjs/math_object.cpp:
3851         (MathFuncImp::callAsFunction):
3852         * kjs/nodes2string.cpp:
3853         (KJS::isParserRoundTripNumber):
3854         * kjs/number_object.cpp:
3855         (NumberProtoFunc::callAsFunction):
3856         * kjs/operations.cpp:
3857         * kjs/operations.h:
3858         * kjs/string_object.cpp:
3859         (KJS::StringProtoFunc::callAsFunction):
3860         * kjs/ustring.cpp:
3861         (KJS::UString::from):
3862         * kjs/value.cpp:
3863         (KJS::JSValue::toInteger):
3864         (KJS::JSValue::toInt32SlowCase):
3865         (KJS::JSValue::toUInt32SlowCase):
3866
3867 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
3868
3869         Build fix: use the new-fangled missingSymbolMarker().
3870
3871         * kjs/nodes.cpp:
3872         (KJS::ResolveNode::optimizeVariableAccess):
3873         * kjs/nodes.h:
3874         (KJS::LocalVarAccessNode::LocalVarAccessNode):
3875
3876 2007-10-28  Geoffrey Garen  <ggaren@apple.com>
3877
3878         Reviewed by Maciej Stachowiak, Darin Adler.
3879         
3880         Much supporting work done by Maciej Stachowiak, Maks Orlovich, and 
3881         Cameron Zwarich.
3882         
3883         AST transfom to replace slow resolve nodes with fast local variable
3884         alternatives that do direct memory access. Currently, only ResolveNode
3885         provides a fast local variable alternative. 6 others are soon to come.
3886         
3887         16.7% speedup on SunSpider.
3888         
3889         Most of this patch is just scaffolding to support iterating all the 
3890         resolve nodes in the AST through optimizeResolveNodes(). In 
3891         optimizeResolveNodes(), most classes just push their child nodes onto 
3892         the processing stack, while ResolveNodes actually replace themselves in 
3893         the tree with more optimized alternatives, if possible.
3894
3895         Here are the interesting bits:
3896
3897         * kjs/nodes.h: Added PlacementNewAdoptTag, along with implementations 
3898         in Node and ResolveNode. This tag allows you to use placement new to 
3899         swap out a base class Node in favor of a subclass copy that holds the
3900         same data. (Without this tag, default initialization would NULL out
3901         RefPtrs, change line numbers, etc.)
3902
3903         * kjs/nodes.cpp:
3904         (KJS::ResolveNode::evaluate): Since we're taking the slow path, ASSERT
3905         that the fast path is impossible, to make sure we didn't leave anything
3906         on the table.
3907
3908         (KJS::FunctionBodyNode::optimizeResolveNodes): Here's where the AST 
3909         transformation happens.
3910         
3911         (KJS::ResolveNode::optimizeResolveNodes): Here's where the ResolveNode
3912         optimization happens.
3913
3914         * kjs/function.h: Added symbolTable() accessor for, for the sake of 
3915         an ASSERT.
3916
3917 2007-10-28  Mark Rowe  <mrowe@apple.com>
3918
3919         Reviewed by Maciej.
3920
3921         Fix "AllInOneFile.o has a global initializer in it".
3922
3923         Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
3924         We can avoid this by moving it inside an inline function.
3925
3926         * kjs/SymbolTable.h:
3927         (KJS::missingSymbolMarker):
3928         * kjs/function.cpp:
3929         (KJS::ActivationImp::getOwnPropertySlot):
3930         (KJS::ActivationImp::put):
3931
3932 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
3933
3934         Reviewed by Mark.
3935         
3936         - Added assertions to protect against adding empty or deleted keys to a HashTable
3937
3938         * wtf/HashTable.h:
3939         (WTF::HashTable::lookup):
3940         (WTF::HashTable::lookupForWriting):
3941         (WTF::HashTable::fullLookupForWriting):
3942         (WTF::HashTable::add):
3943
3944 2007-10-28  Darin Adler  <darin@apple.com>
3945
3946         - fix GTK build
3947
3948         * kjs/nodes2string.cpp: (KJS::isParserRoundTripNumber):
3949         Use isNaN and isInf instead of isnan and isinf.
3950
3951 2007-10-28  Darin Adler  <darin@apple.com>
3952
3953         Reviewed by Maciej.
3954
3955         - http://bugs.webkit.org/show_bug.cgi?id=15735
3956           remove GroupNode to simplify AST and possibly get a modest speedup
3957
3958         This patch removes 4 node types: GroupNode, PropertyNameNode,
3959         FunctionCallParenBracketNode, and FunctionCallParenDotNode.
3960
3961         To remove GroupNode, we add knowledge of precedence to the tree nodes,
3962         and use that when serializing to determine where parentheses are needed.
3963         This means we no longer have to represent parentheses in the tree.
3964
3965         The precedence values are named after productions in the grammar from the
3966         JavaScript standard.
3967
3968         SunSpider says this is an 0.4% speedup.
3969
3970         * kjs/function.h:
3971         * kjs/function.cpp: Removed escapeStringForPrettyPrinting -- it's part of
3972         serialization, so I moved it to the file that takes care of that.
3973
3974         * kjs/grammar.y: Changed makeGetterOrSetterPropertyNode to use 0 to
3975         indicate failure instead of a separate boolean. Got rid of PropertyNameNode
3976         by merging the PropertyName rule into the Property rule (which was easier
3977         than figuring out how to pass the Identifier from one node to another).
3978         Got rid of GroupNode, nodeInsideAllParens(), FunctionCallParenBracketNode,
3979         and FunctionCallParenDotNode.
3980
3981         * kjs/nodes.h: Removed unused forward declarations and Operator values.
3982         Added Precedence enum, and precedence function to all nodes. Removed
3983         nodeInsideAllParens. Added streamBinaryOperator function for serialization.
3984         Removed GroupNode and PropertyNameNode. Made PropertyNode store an Identifier.
3985         Removed FunctionCallParenBracketNode and FunctionCallParenDotNode.
3986
3987         * kjs/nodes.cpp: Removed Node::nodinsideAllParens, GroupNode, and PropertyNameNode.
3988         (KJS::PropertyListNode::evaluate): Changed code to get name directly instead
3989         of converting it from an Identifier to a jsString then back to a UString
3990         then into an Identifier again!
3991
3992         * kjs/nodes2string.cpp: Changed special-token implementation to use a separate
3993         function for each of Endl, Indent, Unindent, and DotExpr instead of using a
3994         single function with a switch. Added a precedence that you can stream in, to
3995         cause the next node serialized to add parentheses based on that precedence value.
3996         (KJS::operatorString): Moved to the top of the file.
3997         (KJS::escapeStringForPrettyPrinting): Moved here from function.cpp. Removed old
3998         workaround for snprintf, since StringExtras.h takes care of that.
3999         (KJS::operator<<): Made the char and char* versions faster by using UString's
4000         character append functions instead of constructing a UString. Added the logic
4001         to the Node* version to add parentheses if needed.
4002         (KJS::Node::streamLeftAssociativeBinaryOperator): Added helper function.
4003         (KJS::ElementNode::streamTo): Use PrecAssignment for the elements.
4004         (KJS::BracketAccessorNode::streamTo): Use PrecCall for the expression before
4005         the bracket.
4006         (KJS::DotAccessorNode::streamTo): Use PrecCall for the expression before the dot.
4007         (KJS::ArgumentListNode::streamTo): Use PrecAssignment for the arguments.
4008         (KJS::NewExprNode::streamTo): Use PrecMember for the expression.
4009         (KJS::FunctionCallValueNode::streamTo): Use PrecCall.
4010         (KJS::FunctionCallBracketNode::streamTo): Ditto.
4011         (KJS::FunctionCallDotNode::streamTo): Ditto.
4012         (KJS::PostfixBracketNode::streamTo): Ditto.
4013         (KJS::PostfixDotNode::streamTo): Ditto.
4014         (KJS::PostfixErrorNode::streamTo): Use PrecLeftHandSide.
4015         (KJS::DeleteBracketNode::streamTo): Use PrecCall.
4016         (KJS::DeleteDotNode::streamTo): Ditto.
4017         (KJS::DeleteValueNode::streamTo): Use PrecUnary.
4018         (KJS::VoidNode::streamTo): Ditto.
4019         (KJS::TypeOfValueNode::streamTo): Ditto.
4020         (KJS::PrefixBracketNode::streamTo): Use PrecCall.
4021         (KJS::PrefixDotNode::streamTo): Ditto.
4022         (KJS::PrefixErrorNode::streamTo): Use PrecUnary.
4023         (KJS::UnaryPlusNode::streamTo): Ditto.
4024         (KJS::NegateNode::streamTo): Ditto.
4025         (KJS::BitwiseNotNode::streamTo): Ditto.
4026         (KJS::LogicalNotNode::streamTo): Ditto.
4027         (KJS::MultNode::streamTo): Use streamLeftAssociativeBinaryOperator.
4028         (KJS::DivNode::streamTo): Ditto.
4029         (KJS::ModNode::streamTo): Ditto.
4030         (KJS::AddNode::streamTo): Ditto.
4031         (KJS::SubNode::streamTo): Ditto.
4032         (KJS::LeftShiftNode::streamTo): Ditto.
4033         (KJS::RightShiftNode::streamTo): Ditto.
4034         (KJS::UnsignedRightShiftNode::streamTo): Ditto.
4035         (KJS::LessNode::streamTo): Ditto.
4036         (KJS::GreaterNode::streamTo): Ditto.
4037         (KJS::LessEqNode::streamTo): Ditto.
4038         (KJS::GreaterEqNode::streamTo): Ditto.
4039         (KJS::InstanceOfNode::streamTo): Ditto.
4040         (KJS::InNode::streamTo): Ditto.
4041         (KJS::EqualNode::streamTo): Ditto.
4042         (KJS::NotEqualNode::streamTo): Ditto.
4043         (KJS::StrictEqualNode::streamTo): Ditto.
4044         (KJS::NotStrictEqualNode::streamTo): Ditto.
4045         (KJS::BitAndNode::streamTo): Ditto.
4046         (KJS::BitXOrNode::streamTo): Ditto.
4047         (KJS::BitOrNode::streamTo): Ditto.
4048         (KJS::LogicalAndNode::streamTo): Ditto.
4049         (KJS::LogicalOrNode::streamTo): Ditto.
4050         (KJS::ConditionalNode::streamTo): Ditto.
4051         (KJS::AssignResolveNode::streamTo): Use PrecAssignment for the right side.
4052         (KJS::AssignBracketNode::streamTo): Use PrecCall for the expression before
4053         the bracket and PrecAssignment for the right side.
4054         (KJS::AssignDotNode::streamTo): Ditto.
4055         (KJS::AssignErrorNode::streamTo): Use PrecLeftHandSide for the left side
4056         and PrecAssignment for the right side.
4057         (KJS::CommaNode::streamTo): Use PrecAssignment for both expressions.
4058         (KJS::AssignExprNode::streamTo): Use PrecAssignment.
4059
4060 2007-10-28  Kevin Ollivier  <kevino@theolliviers.com>
4061
4062         Define wx port and set wx port USE options.
4063
4064         Reviewed by Adam Roben.
4065
4066         * wtf/Platform.h:
4067
4068 2007-10-28  Mark Rowe  <mrowe@apple.com>
4069
4070         We don't include "config.h" in headers.
4071
4072         * bindings/jni/jni_instance.h:
4073         * kjs/regexp.h:
4074         * wtf/TCPageMap.h:
4075         * wtf/TCSpinLock.h:
4076
4077 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
4078
4079         Rubber stamped by Mark.
4080         
4081         - avoid using non-portable SIZE_T_MAX in favor of std::numeric_limits
4082
4083         * kjs/SymbolTable.h:
4084         (KJS::SymbolTableIndexHashTraits::emptyValue):
4085         * kjs/function.cpp:
4086         (KJS::ActivationImp::getOwnPropertySlot):
4087         (KJS::ActivationImp::put):
4088
4089 2007-10-28  Maciej Stachowiak  <mjs@apple.com>
4090
4091         Reviewed by Eric.
4092         
4093         - switch SymbolTable to be a HashMap instead of a PropertyMap for 3% SunSpider speedup
4094
4095         * kjs/SymbolTable.h:
4096         (KJS::IdentifierRepHash::hash): Special hash function for identifier reps.
4097         (KJS::IdentifierRepHash::equal): ditto
4098         (KJS::SymbolTableIndexHashTraits::emptyValue): Special HashTraits for the index value.
4099         (KJS::SymbolTable): change to a typedef for a HashMap.
4100         * kjs/function.cpp:
4101         (KJS::ActivationImp::getOwnPropertySlot): Adjusted for new SymbolTable API.
4102         (KJS::ActivationImp::deleteProperty): ditto
4103         (KJS::ActivationImp::put): ditto
4104
4105         * kjs/nodes.cpp:
4106         (KJS::FunctionBodyNode::initializesymbolTable): Adjusted, since
4107         you now have to store a UString::rep, not an identifier.
4108
4109 2007-10-27  Maciej Stachowiak  <mjs@apple.com>
4110
4111         Reviewed by Oliver.
4112         
4113         - numerous HashTable performance improvements
4114         
4115         This does not quite add up to a measurable win on SunSpider, but it allows a
4116         follow-on > 3% improvement and probably helps WebCore too.
4117         
4118         I made the following improvements, among others:
4119         
4120         - Made HashFunctions note whether it is ok to compare a real value with the equal() function
4121         to the empty or deleted value, and used this to optimize the comparisons done in hash lookup.
4122         
4123         - Specialized lookup so it doesn't have to do so many extra branches and build so many extra
4124         std::pairs for cases that don't need them. There are now four versions, one for read-only access,
4125         two for writing, and one folded directly into add() (these all were improvments).
4126         
4127         - Made HashMap::get() use lookup() directly instead of find() to avoid having to build iterators.
4128         
4129         - Made a special constructor for iterators that knows it points to
4130         a valid filled cell and so skips updating itself.
4131
4132         - Reordered memory accesses in the various lookup functions for better code generation
4133         
4134         - Made simple translators avoid passing a hash code around
4135         
4136         - Other minor tweaks
4137         
4138         * wtf/HashTable.h:
4139         (WTF::):
4140         (WTF::HashTableConstIterator::HashTableConstIterator):
4141         (WTF::HashTableIterator::HashTableIterator):
4142         (WTF::IdentityHashTranslator::translate):
4143         (WTF::HashTable::end):
4144         (WTF::HashTable::lookup):
4145         (WTF::HashTable::lookupForWriting):
4146         (WTF::HashTable::makeKnownGoodIterator):
4147         (WTF::HashTable::makeKnownGoodConstIterator):
4148         (WTF::::lookup):
4149         (WTF::::lookupForWriting):
4150         (WTF::::fullLookupForWriting):
4151         (WTF::::add):
4152         (WTF::::addPassingHashCode):
4153         (WTF::::reinsert):
4154         (WTF::::find):
4155         (WTF::::contains):
4156         * kjs/identifier.cpp:
4157         (WTF::):
4158         * wtf/HashFunctions.h:
4159         (WTF::):