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