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