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