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