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