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