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