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