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