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