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