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