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