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