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