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