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