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