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