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