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