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