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