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