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