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