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