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