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