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