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