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