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