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