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