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