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