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