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