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