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