Separating all of the simple binary expression nodes into multiple classes
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2007-10-23  Oliver Hunt  <oliver@apple.com>
2
3         Reviewed by Maciej.
4
5         Separating all of the simple (eg. non-read-modify-write) binary operators
6         into separate classes in preparation for further JS optimisations.
7         
8         Happily this produces a 0.8% to 1.0% performance increase in SunSpider with
9         no further work.
10
11         * JavaScriptCore.xcodeproj/project.pbxproj:
12         * kjs/grammar.y:
13         * kjs/nodes.cpp:
14         (KJS::MultNode::evaluate):
15         (KJS::DivNode::evaluate):
16         (KJS::ModNode::evaluate):
17         (KJS::AddNode::evaluate):
18         (KJS::SubNode::evaluate):
19         (KJS::LeftShiftNode::evaluate):
20         (KJS::RightShiftNode::evaluate):
21         (KJS::UnsignedRightShiftNode::evaluate):
22         (KJS::LessNode::evaluate):
23         (KJS::GreaterNode::evaluate):
24         (KJS::LessEqNode::evaluate):
25         (KJS::GreaterEqNode::evaluate):
26         (KJS::InstanceOfNode::evaluate):
27         (KJS::InNode::evaluate):
28         (KJS::EqualNode::evaluate):
29         (KJS::NotEqualNode::evaluate):
30         (KJS::StrictEqualNode::evaluate):
31         (KJS::NotStrictEqualNode::evaluate):
32         (KJS::BitAndNode::evaluate):
33         (KJS::BitXOrNode::evaluate):
34         (KJS::BitOrNode::evaluate):
35         (KJS::LogicalAndNode::evaluate):
36         (KJS::LogicalOrNode::evaluate):
37         * kjs/nodes.h:
38         (KJS::MultNode::):
39         (KJS::DivNode::):
40         (KJS::ModNode::):
41         (KJS::AddNode::):
42         (KJS::SubNode::):
43         (KJS::LeftShiftNode::):
44         (KJS::RightShiftNode::):
45         (KJS::UnsignedRightShiftNode::):
46         (KJS::LessNode::):
47         (KJS::GreaterNode::):
48         (KJS::LessEqNode::):
49         (KJS::GreaterEqNode::):
50         (KJS::InstanceOfNode::):
51         (KJS::InNode::):
52         (KJS::EqualNode::):
53         (KJS::NotEqualNode::):
54         (KJS::StrictEqualNode::):
55         (KJS::NotStrictEqualNode::):
56         (KJS::BitAndNode::):
57         (KJS::BitOrNode::):
58         (KJS::BitXOrNode::):
59         (KJS::LogicalAndNode::):
60         (KJS::LogicalOrNode::):
61         * kjs/nodes2string.cpp:
62         (MultNode::streamTo):
63         (DivNode::streamTo):
64         (ModNode::streamTo):
65         (AddNode::streamTo):
66         (SubNode::streamTo):
67         (LeftShiftNode::streamTo):
68         (RightShiftNode::streamTo):
69         (UnsignedRightShiftNode::streamTo):
70         (LessNode::streamTo):
71         (GreaterNode::streamTo):
72         (LessEqNode::streamTo):
73         (GreaterEqNode::streamTo):
74         (InstanceOfNode::streamTo):
75         (InNode::streamTo):
76         (EqualNode::streamTo):
77         (NotEqualNode::streamTo):
78         (StrictEqualNode::streamTo):
79         (NotStrictEqualNode::streamTo):
80         (BitAndNode::streamTo):
81         (BitXOrNode::streamTo):
82         (BitOrNode::streamTo):
83         (LogicalAndNode::streamTo):
84
85 2007-10-23  Darin Adler  <darin@apple.com>
86
87         Reviewed by Maciej.
88
89         - fix http://bugs.webkit.org/show_bug.cgi?id=15639
90           fix Math.abs(0), Math.ceil(-0), and Math.floor(-0)
91
92         Test: fast/js/math.html
93
94         * kjs/math_object.cpp: (MathFuncImp::callAsFunction):
95         Fix abs to look at the sign bit. Add a special case for values in the range
96         between -0 and -1 and a special case for ceil and for -0 for floor.
97
98 2007-10-23  Darin Adler  <darin@apple.com>
99
100         Reviewed by Eric.
101
102         - streamline exception handling code for a >1% speed-up of SunSpider
103
104         * kjs/nodes.cpp: Changed macros to use functions for everything that's not
105         part of normal execution. We'll take function call overhead when propagating
106         an exception or out of memory.
107         (KJS::createOutOfMemoryCompletion): Added.
108         (KJS::substitute): Use append instead of the relatively inefficient + operator.
109         (KJS::Node::rethrowException): Added.
110         * kjs/nodes.h: Added rethrowException.
111
112 2007-10-22  Darin Adler  <darin@apple.com>
113
114         Reviewed by Maciej.
115
116         - fix http://bugs.webkit.org/show_bug.cgi?id=15636
117           some JavaScriptCore regression tests are failing due to numeric conversion
118
119         This should restore correctness and make speed better too, restoring some
120         of the optimization we lost in my last check-in.
121
122         * kjs/JSImmediate.h:
123         (KJS::JSImmediate::getTruncatedInt32): Added. Uses the range checking idiom
124         I used in my patch yesterday.
125         (KJS::JSImmediate::getTruncatedUInt32): Ditto.
126
127         * kjs/internal.h: Removed getInt32 and added getTruncatedInt/UInt32.
128         * kjs/internal.cpp:
129         (KJS::NumberImp::getUInt32): Changed to always use double, since I can't find
130         a way to write this more efficiently for float.
131         (KJS::NumberImp::getTruncatedInt32): Added.
132         (KJS::NumberImp::getTruncatedUInt32): Added.
133
134         * kjs/value.h: Removed getInt32 and added getTruncatedInt/UInt32.
135         (KJS::JSValue::getUInt32):
136         (KJS::JSValue::getTruncatedInt32): Added.
137         (KJS::JSValue::getTruncatedUInt32): Added.
138         (KJS::JSValue::toInt32): Changed getInt32 call to getTruncatedInt32.
139         (KJS::JSValue::toUInt32): Changed getUInt32 call to getTruncatedUInt32.
140         * kjs/value.cpp:
141         (KJS::JSCell::getTruncatedInt32): Added.
142         (KJS::JSCell::getTruncatedUInt32): Added.
143         (KJS::JSValue::toInteger): Changed getUInt32 call to getTruncatedInt32.
144         (KJS::JSValue::toInt32SlowCase): Removed extra getInt32 call I accidentally
145         had left in here.
146         (KJS::JSValue::toUInt32SlowCase): Ditto.
147         (KJS::JSValue::toUInt16): Changed getUInt32 call to getTruncatedUInt32.
148
149         * JavaScriptCore.exp: Updated.
150
151 2007-10-22  Darin Adler  <darin@apple.com>
152
153         Reviewed by Geoff.
154
155         - fix http://bugs.webkit.org/show_bug.cgi?id=15632
156           js1_5/Array/array-001.js test failing
157
158         One of the JavaScriptCore tests was failing; it failed because of
159         my change to NumberImp::getUInt32. The incorrect code I copied was
160         from JSImmediate::getUInt32, and was a pre-existing bug.
161
162         This patch fixes correctness, but will surely slow down SunSpider.
163         We may be able to code this tighter and get the speed back.
164
165         * kjs/JSImmediate.h:
166         (KJS::JSImmediate::getInt32): Renamed from toInt32 to more accurately
167         reflect the fact that this function only returns true if the value is
168         accurate (no fractional part, etc.). Changed code so that it returns
169         false when the value has a fraction.
170         (KJS::JSImmediate::getUInt32): Ditto.
171
172         * kjs/internal.cpp:
173         (KJS::NumberImp::getInt32): Changed code so that it returns false when
174         the value has a fraction. Restores the old behavior.
175         (KJS::NumberImp::getUInt32): Ditto.
176
177         * kjs/value.h:
178         (KJS::JSValue::getInt32): Updated for name change.
179         (KJS::JSValue::getUInt32): Ditto.
180         (KJS::JSValue::toInt32): Ditto.
181         (KJS::JSValue::toUInt32): Ditto.
182
183 2007-10-22  Darin Adler  <darin@apple.com>
184
185         Reviewed by Brady.
186
187         - fix crash seen when running JavaScriptCore tests
188
189         * kjs/array_instance.cpp: (KJS::ArrayInstance::mark):
190         Copy and paste error: I accidentally had code here that was
191         making a copy of the HashMap -- that's illegal inside a mark
192         function and was unnecessary. The other callsite was modifying
193         the map as it iterated it, but this function is not.
194
195 2007-10-22  Maciej Stachowiak  <mjs@apple.com>
196
197         Reviewed by Oliver.
198         
199         - Avoid moving floats into integer registers in jsNumber() for 3% speedup on SunSpider
200         http://bugs.webkit.org/show_bug.cgi?id=15627
201
202         * kjs/JSImmediate.h:
203         (KJS::JSImmediate::fromDouble): Avoid moving floats to integer
204         registers since this is very slow.
205
206 2007-10-22  Darin Adler  <darin@apple.com>
207
208         Reviewed by Eric Seidel.
209
210         - http://bugs.webkit.org/show_bug.cgi?id=15617
211           improve speed of integer conversions
212
213         Makes SunSpider 6% faster.
214
215         * kjs/JSImmediate.h: Added toInt32 and toUInt32, with separate versions for
216         32-bit and 64-bit.
217         * kjs/value.h:
218         (KJS::JSValue::getUInt32): Call JSImmediate::toUInt32.
219
220         * kjs/internal.h: Added getInt32.
221         * kjs/internal.cpp:
222         (KJS::NumberImp::getInt32): Added.
223         (KJS::NumberImp::getUInt32): Replaced with more-optimal implementation
224         stolen from JSValue.
225
226         * kjs/value.h:
227         (KJS::jsNumber): Marked ALWAYS_INLINE, because this wasn't getting
228         inlined.
229         (KJS::JSValue::getInt32): Added.
230         (KJS::JSValue::getUInt32): Changed to call the new JSImmediate::toUInt32
231         to avoid converting from float to double.
232         (KJS::JSValue::toInt32): Made inline, separated out the slow case.
233         (KJS::JSValue::toUInt32): Ditto.
234         * kjs/value.cpp:
235         (KJS::JSCell::getInt32): Added.
236         (KJS::JSValue::toInt32SlowCase): Renamed from toInt32. Changed to use the
237         new getInt32. Added a faster case for in-range numbers.
238         (KJS::JSValue::toUInt32SlowCase): Ditto.
239         (KJS::JSValue::toUInt16): Added a faster case for in-range numbers.
240
241         * JavaScriptCore.exp: Updated for changes.
242
243 2007-10-22  Adam Roben  <aroben@apple.com>
244
245         Windows build fix
246
247         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn off
248         warning about implicit conversion to bool.
249
250 2007-10-22  Mark Rowe  <mrowe@apple.com>
251
252         Gtk build fix.
253
254         * kjs/array_instance.cpp:
255
256 2007-10-22  Darin Adler  <darin@apple.com>
257
258         Reviewed by Maciej.
259
260         - http://bugs.webkit.org/show_bug.cgi?id=15606
261           make cut-off for sparse vs. dense arrays smarter for speed with large arrays
262
263         Makes the morph test in SunSpider 26% faster, and the overall
264         benchmark 3% faster.
265
266         This also fixes some small problems we had with the distinction
267         between nonexistent and undefined values in arrays.
268
269         * kjs/array_instance.h: Tweaked formatting and naming.
270         * kjs/array_instance.cpp: Copied from kjs/array_object.cpp.
271         (KJS::storageSize): Added. Computes the size of the storage given a vector length.
272         (KJS::increasedVectorLength): Added. Implements the rule for resizing the vector.
273         (KJS::isDenseEnoughForVector): Added.
274         (KJS::ArrayInstance::ArrayInstance): Initialize the new fields.
275         (KJS::ArrayInstance::~ArrayInstance): Since m_storage is now never 0, delete it.
276         (KJS::ArrayInstance::getItem): Updated for name changes.
277         (KJS::ArrayInstance::lengthGetter): Ditto.
278         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Added. Allows both versions of
279         getOwnPropertySlot to share more code.
280         (KJS::ArrayInstance::getOwnPropertySlot): Just refactored, no code change.
281         (KJS::ArrayInstance::put): Added logic for extending the vector as long as the
282         array is dense enough. Also keep m_numValuesInVector up to date.
283         (KJS::ArrayInstance::deleteProperty): Added code to keep m_numValuesInVector
284         up to date.
285         (KJS::ArrayInstance::getPropertyNames): Fixed bug where this would omit names
286         for array indices with undefined values.
287         (KJS::ArrayInstance::increaseVectorLength): Renamed from resizeStorage. Also
288         simplified to only handle getting larger.
289         (KJS::ArrayInstance::setLength): Added code to update m_numValuesInVector, to
290         zero out the unused part of the vector and to delete the map if it's no longer
291         needed.
292         (KJS::ArrayInstance::mark): Tweaked formatting.
293         (KJS::compareByStringForQSort): Ditto.
294         (KJS::ArrayInstance::sort): Ditto.
295         (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
296         Ditto.
297         (KJS::compareWithCompareFunctionForQSort): Ditto.
298         (KJS::ArrayInstance::compactForSorting): Fixed bug where this would turn
299         undefined values into nonexistent values in some cases.
300
301         * kjs/array_object.h: Removed MAX_ARRAY_INDEX.
302         * kjs/array_object.cpp: Removed ArrayInstance. Moved to a separate file.
303
304         * JavaScriptCore.pri: Added array_instance.cpp.
305         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
306         * kjs/AllInOneFile.cpp: Ditto.
307
308 2007-10-22  Andrew Wellington  <proton@wiretapped.net>
309
310         Reviewed by Mark Rowe.
311         
312         Fix for local database support after r26879
313         Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set
314
315         * Configurations/JavaScriptCore.xcconfig:
316
317 2007-10-22  Simon Hausmann  <hausmann@kde.org>
318
319         Reviewed by Alp.
320
321         Build fix for the non-qmake builds.
322
323         * wtf/Platform.h: Default to enabling the database features unless
324         otherwise specified. (similar to ENABLE_ICONDATABASE)
325
326 2007-10-22  Holger Freyther  <zecke@selfish.org>
327
328         Reviewed by Simon Hausmann <hausmann@kde.org>.
329
330         * Do not build testkjs as an application bundle. This is
331         needed for run-javascriptcore-tests on OSX.
332         * Also, based on r26633, allow to test the WebKit/Qt port on OSX.
333         * Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
334         as we do not have -rpath on OSX.
335
336         * kjs/testkjs.pro:
337
338 2007-10-21  Mark Rowe  <mrowe@apple.com>
339
340         Reviewed by Alp.
341
342         http://bugs.webkit.org/show_bug.cgi?id=15575
343         Bug 15575: [GTK] Implement threading using GThread
344
345         * wtf/Platform.h: Do not enable pthreads for Gtk.
346
347 2007-10-21  Mark Rowe  <mrowe@apple.com>
348
349         Reviewed by Mitz.
350
351         Fix http://bugs.webkit.org/show_bug.cgi?id=15603
352         Bug 15603: Regression(r26847): Crash when sorting an empty array from JavaScript
353
354         * kjs/array_object.cpp:
355         (KJS::freeStorage): Reinstate null-check that was removed in r26847.
356
357 2007-10-21  Darin Adler  <darin@apple.com>
358
359         - fix Windows build
360
361         * kjs/array_instance.h: Removed unused ExecState parameter.
362         * kjs/array_object.cpp:
363         (KJS::ArrayInstance::put): Ditto.
364         (KJS::ArrayInstance::setLength): Ditto.
365
366 2007-10-21  Darin Adler  <darin@apple.com>
367
368         * kjs/array_object.cpp: (KJS::ArrayInstance::put):
369         Add missing assignment that was causing regression test crash.
370
371 2007-10-21  Darin Adler  <darin@apple.com>
372
373         Reviewed by Maciej.
374
375         - http://bugs.webkit.org/show_bug.cgi?id=15585
376           speed up sparse arrays by using a custom map
377     
378         Speeds up SunSpider by 10%.
379
380         * kjs/array_object.cpp:
381         (allocateStorage): Leave room for an additional pointer.
382         (reallocateStorage): Ditto.
383         (freeStorage): Ditto.
384         (ArrayInstance::~ArrayInstance): Delete the overflow map if present.
385         (ArrayInstance::getItem): Read values from the overflow map if present.
386         Removed the check of length, since it slows down the common case.
387         (ArrayInstance::getOwnPropertySlot): Ditto. Also removed the fallback
388         to the property map.
389         (ArrayInstance::put): Write values into the overflow map as needed.
390         Also create overflow map when needed.
391         (ArrayInstance::deleteProperty): Remove values from the overflow map
392         as appropriate.
393         (ArrayInstance::getPropertyNames): Add a name for each identifier in
394         the property map. This is extremely inefficient.
395         (ArrayInstance::setLength): Remove any values in the overflow map
396         that are past the new length, as we formerly did with the property map.
397         (ArrayInstance::mark): Mark any values in the overflow map.
398         (compareByStringForQSort): Removed unneeded undefined case, since
399         compactForSorting guarantees we will have no undefined values.
400         (compareWithCompareFunctionForQSort): Ditto.
401         (ArrayInstance::compactForSorting): Copy all the values out of the
402         overflow map and destroy it.
403
404         * kjs/property_map.h: Removed now-unused getSparseArrayPropertyNames.
405         * kjs/property_map.cpp: Ditto.
406
407 2007-10-20  Darin Adler  <darin@apple.com>
408
409         Reviewed by Maciej.
410
411         - http://bugs.webkit.org/show_bug.cgi?id=15579
412           stop churning identifier reference counts copying Completion objects
413
414         * kjs/completion.h: Replace the Identifier with an Identifier*.
415         * kjs/nodes.cpp:
416         (ForInNode::execute): Update for change to Completion constructor.
417         (ContinueNode::execute): Ditto.
418         (BreakNode::execute): Ditto.
419
420 2007-10-20  Mark Rowe  <mrowe@apple.com>
421
422         Reviewed by Alp.
423
424         Gtk changes needed to enable HTML 5 client-side database storage.
425
426         * wtf/Platform.h: Have Gtk use pthreads for now.
427
428 2007-10-20  Geoffrey Garen  <ggaren@apple.com>
429
430         Reviewed by Maciej Stachowiak.
431
432         Fixed http://bugs.webkit.org/show_bug.cgi?id=15570
433         Store gathered declaration nodes in the function body node.
434         
435         This means that you only have to gather the declaration nodes the first 
436         time the function executes. Performance gain of 2.10% on SunSpider, 
437         0.90% on command-line JS iBench.
438
439         * kjs/nodes.cpp: Split declaration stack initialization code off into 
440         initializeDeclarationStacks().
441         (FunctionBodyNode::FunctionBodyNode):
442         (FunctionBodyNode::initializeDeclarationStacks):
443         (FunctionBodyNode::processDeclarations):
444
445         * kjs/nodes.h: Changed DeclarationStacks structure to hold references, 
446         since the actual Vectors are now stored either on the stack or in the 
447         function body node.
448
449 2007-10-19  Geoffrey Garen  <ggaren@apple.com>
450
451         Reviewed by Darin Adler.
452         
453         http://bugs.webkit.org/show_bug.cgi?id=15559
454         Moved processDeclarations call into FunctionBodyNode::execute
455
456         To improve encapsulation, moved processDeclarations call into
457         FunctionBodyNode::execute. Also marked processDeclarations 
458         ALWAYS_INLINE, since it has only 1 caller now. This is a .71% speedup 
459         on command-line JS iBench.
460
461         * kjs/function.cpp:
462         (KJS::FunctionImp::callAsFunction):
463         (KJS::GlobalFuncImp::callAsFunction):
464         * kjs/function.h:
465         * kjs/interpreter.cpp:
466         (KJS::Interpreter::evaluate):
467         * kjs/nodes.cpp:
468         (FunctionBodyNode::execute):
469         * kjs/nodes.h:
470
471 2007-10-19  Brady Eidson  <beidson@apple.com>
472
473         Reviewed by Sam
474
475         Queue -> Deque! and small style tweaks
476
477         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
478         * JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
479         * wtf/Deque.h: Added.
480         (WTF::DequeNode::DequeNode):
481         (WTF::Deque::Deque):
482         (WTF::Deque::~Deque):
483         (WTF::Deque::size):
484         (WTF::Deque::isEmpty):
485         (WTF::Deque::append):
486         (WTF::Deque::prepend):
487         (WTF::Deque::first):
488         (WTF::Deque::last):
489         (WTF::Deque::removeFirst):
490         (WTF::Deque::clear):
491         * wtf/Queue.h: Removed.
492
493
494 2007-10-19  Brady Eidson <beidson@apple.com>
495
496         Reviewed by Oliver
497
498         Added a simple LinkedList based Queue to wtf
499         We can make a better, more sophisticated an efficient one later, but have
500         needed one for some time, now!
501
502         * JavaScriptCore.xcodeproj/project.pbxproj:
503         * wtf/Queue.h: Added.
504         (WTF::QueueNode::QueueNode):
505         (WTF::Queue::Queue):
506         (WTF::Queue::~Queue):
507         (WTF::Queue::size):
508         (WTF::Queue::isEmpty):
509         (WTF::Queue::append):
510         (WTF::Queue::prepend):
511         (WTF::Queue::first):
512         (WTF::Queue::last):
513         (WTF::Queue::removeFirst):
514         (WTF::Queue::clear):
515
516 2007-10-19  Nikolas Zimmermann  <zimmermann@kde.org>
517
518         Reviewed by Anders.
519
520         Try to fix Qt/Win build slave, by including windows.h also on Qt/Win.
521
522         * kjs/testkjs.cpp: Change PLATFORM(WIN) to PLATFORM(WIN_OS)
523
524 2007-10-19  Simon Hausmann  <hausmann@kde.org>
525
526         Reviewed by Lars.
527
528         Fix compilation on Windows when wchar_t is a typedef instead of a native type (triggered by -Zc:wchar_t-).
529         Don't provide the wchar_t overloads then as they conflict with the unsigned short ones.
530
531         * wtf/ASCIICType.h:
532         (WTF::isASCIIAlpha):
533         (WTF::isASCIIAlphanumeric):
534         (WTF::isASCIIDigit):
535         (WTF::isASCIIHexDigit):
536         (WTF::isASCIILower):
537         (WTF::isASCIISpace):
538         (WTF::toASCIILower):
539         (WTF::toASCIIUpper):
540
541 2007-10-19  Simon Hausmann  <hausmann@kde.org>
542
543         Reviewed by Lars.
544
545         Another build fix for the windows/qt build: Apply the same fix as in revision 26686 also to kjs/config.h to disable the disallowctype feature.
546
547         * kjs/config.h:
548
549 2007-10-18  Maciej Stachowiak  <mjs@apple.com>
550
551         Reviewed by Adam.
552         
553         - use __declspec(thread) for fast thread-local storage on Windows
554         
555         - 2.2% speedup on sunspider (on Windows)
556         - 7% speedup on the string section
557         - 6% speedup on JS iBench
558         
559         - fixed <rdar://problem/5473084> PLT on Windows got 2.5% slower between r25406 and r25422
560         - fixed at least some of <rdar://5527965? i-Bench JS was 14% slower in 310A11 than 310A10
561         
562         
563         * wtf/FastMalloc.cpp:
564         (WTF::getThreadHeap):
565         (WTF::setThreadHeap):
566         (WTF::TCMalloc_ThreadCache::GetCache):
567         (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
568         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
569
570 2007-10-17  Darin Adler  <darin@apple.com>
571
572         Reviewed by Mark Rowe.
573
574         - fix http://bugs.webkit.org/show_bug.cgi?id=15543
575           <rdar://problem/5545639> REGRESSION (r26697):
576           GoogleDocs: Can't create new documents or open existing ones
577
578         Test: fast/js/regexp-non-character.html
579
580         * pcre/pcre_compile.c: (check_escape): Take out the checks for valid characters
581         in the \u sequences -- not needed and actively harmful.
582
583 2007-10-17  Anders Carlsson  <andersca@apple.com>
584
585         Reviewed by Oliver.
586
587         * wtf/Platform.h:
588         #define USE_PTHREADS on Mac.
589
590 2007-10-17  Geoffrey Garen  <ggaren@apple.com>
591
592         Reviewed by Darin Adler.
593         
594         Merged DeclaredFunctionImp into FunctionImp (the base class) because 
595         the distinction between the two was unused.
596         
597         Removed codeType() from FunctionImp because FunctionImp and its 
598         subclasses all returned FunctionCode, so it was unused, practically 
599         speaking.
600         
601         Removed a different codeType() from GlobalFuncImp because it was unused.
602         (Perhaps it was vestigial from a time when GlobalFuncImp used to 
603         inherit from FunctionImp.)
604
605         * bindings/runtime_method.cpp:
606         * bindings/runtime_method.h:
607         * kjs/function.cpp:
608         (KJS::):
609         (KJS::FunctionImp::FunctionImp):
610         (KJS::FunctionImp::callAsFunction):
611         (KJS::FunctionImp::construct):
612         (KJS::FunctionImp::execute):
613         (KJS::FunctionImp::processVarDecls):
614         * kjs/function.h:
615         (KJS::FunctionImp::implementsConstruct):
616         (KJS::FunctionImp::scope):
617         * kjs/function_object.cpp:
618         (FunctionProtoFunc::callAsFunction):
619         (FunctionObjectImp::construct):
620         * kjs/nodes.cpp:
621         (FuncDeclNode::processFuncDecl):
622         (FuncExprNode::evaluate):
623
624 2007-10-17  Adam Roben  <aroben@apple.com>
625
626         Windows build fix part 2.
627
628         Fix was by Darin, reviewed by Anders and Adam.
629
630         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
631         FastMallocPCRE.cpp to the project, and let Visual Studio have its way
632         with the post-build step.
633         * pcre/pcre.h: Don't DLL export the entry points just because this
634         is Win32 -- this is an internal copy of PCRE and should be private.
635         * pcre/pcre_compile.c: Fix an uninitialized variable warning --
636         there's no real problem but it's better to quiet the compiler by
637         tweaking the code slightly than turn off the warning entirely.
638
639 2007-10-17  Adam Roben  <aroben@apple.com>
640
641         Windows build fix.
642
643         Reviewed by Anders.
644
645         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
646         some mismatched signed/unsigned comparison warnings.
647         * pcre/pcre_exec.c:
648         (match): #if-out some labels that don't seem to exist.
649
650 2007-10-17  Mark Rowe  <mrowe@apple.com>
651
652         Gtk build fix.
653
654         * JavaScriptCore.pri: Add FastMallocPCRE.cpp.
655         * pcre/pcre_get. #if out two functions that depend on pcre_get_stringnumber, which
656         is currently unavailable for UTF-16.
657
658 2007-10-16  Darin Adler  <darin@apple.com>
659
660         Reviewed by Geoff.
661
662         - merged PCRE changes between 6.4 and 6.5
663
664         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
665         * JavaScriptCore.xcodeproj/project.pbxproj:
666         Removed pcre_config.c, pcre_globals.c, pcre_info.c, pcre_maketables.c,
667         pcre_printint.src, pcre_refcount.c, pcre_study.c, pcre_try_flipped.c,
668         pcre_ucp_findchar.c, pcre_version.c, and ucptable.c. Added pcre_ucp_searchfuncs.c.
669
670         * pcre/AUTHORS:
671         * pcre/LICENCE:
672         * pcre/MERGING:
673         * pcre/dftables.c:
674         * pcre/pcre-config.h:
675         * pcre/pcre.h:
676         * pcre/pcre.pri:
677         * pcre/pcre_compile.c:
678         * pcre/pcre_exec.c:
679         * pcre/pcre_fullinfo.c:
680         * pcre/pcre_get.c:
681         * pcre/pcre_internal.h:
682         * pcre/pcre_maketables.c:
683         * pcre/pcre_ord2utf8.c:
684         * pcre/pcre_tables.c:
685         * pcre/pcre_ucp_searchfuncs.c: Copied from pcre/pcre_ucp_findchar.c.
686         * pcre/pcre_xclass.c:
687         * pcre/ucp.h:
688         * pcre/ucpinternal.h:
689         * pcre/ucptable.c:
690         Updated with new versions from the PCRE 6.5 release, merged with changes.
691
692         * pcre/pcre_config.c: Removed.
693         * pcre/pcre_globals.c: Removed.
694         * pcre/pcre_info.c: Removed.
695         * pcre/pcre_printint.src: Removed.
696         * pcre/pcre_refcount.c: Removed.
697         * pcre/pcre_study.c: Removed.
698         * pcre/pcre_try_flipped.c: Removed.
699         * pcre/pcre_ucp_findchar.c: Removed.
700         * pcre/pcre_version.c: Removed.
701
702 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
703
704         Reviewed by Darin Adler.
705
706         Removed KJS_VERBOSE because it was getting in the way of readability, 
707         and the messages didn't seem very helpful.
708
709         * kjs/function.cpp:
710         (KJS::FunctionImp::callAsFunction):
711         (KJS::FunctionImp::passInParameters):
712         * kjs/lookup.h:
713         (KJS::lookupPut):
714         * kjs/object.cpp:
715         (KJS::JSObject::put):
716         * kjs/value.h:
717
718 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
719
720         Reviewed by Darin Adler.
721         
722         Removed the Parameter class because it was a redundant wrapper around 
723         Identifier.
724
725         * kjs/function.cpp:
726         (KJS::FunctionImp::passInParameters):
727         (KJS::FunctionImp::getParameterName):
728         * kjs/nodes.cpp:
729         (FunctionBodyNode::addParam):
730         * kjs/nodes.h:
731         (KJS::FunctionBodyNode::):
732
733 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
734
735         Reviewed by Darin Adler.
736         
737         Global replace of assert with ASSERT.
738
739 2007-10-16  Adam Roben  <aroben@apple.com>
740
741         Make testkjs not delay-load WebKit
742
743         Soon, delay-loading WebKit will be impossible (because we will be
744         using __declspec(thread) for thread-local storage). This change
745         prepares testkjs for the future.
746
747         Reviewed by Sam.
748
749         * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed WebKitInitializer,
750         added FindSafari.
751         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Don't link against
752         WebKitInitializer, don't delay-load WebKit.
753         * kjs/testkjs.cpp: Don't use WebKitInitializer.
754
755 2007-10-16  Adam Roben  <aroben@apple.com>
756
757         Updated testkjs for the rename of WebKit_debug.dll to WebKit.dll for the Debug configuration
758
759         Reviewed by Kevin McCullough.
760
761         * JavaScriptCore.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
762         * JavaScriptCore.vcproj/debug_internal.vsprops: Ditto.
763         * JavaScriptCore.vcproj/release.vsprops: Ditto.
764         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Use
765         WebKitDLLConfigSuffix when referring to WebKit.dll, and fixed a typo
766         in the name of icuuc36[_debug].dll.
767
768 2007-10-16  Geoffrey Garen  <ggaren@apple.com>
769
770         Reviewed by Maciej Stachowiak.
771         
772         Re-structured variable and function declaration code.
773         
774         Command-line JS iBench shows no regression.
775         
776         Here are the changes:
777
778         1. Function declarations are now processed at the same time as var 
779         declarations -- namely, immediately upon entry to an execution context. 
780         This does not match Firefox, which waits to process a function
781         declaration until the declaration's containing block executes, but it 
782         does match IE and the ECMA spec. (10.1.3 states that var and function 
783         declarations should be processed at the same time -- namely, "On 
784         entering an execution context." 12.2 states that "A Block does not 
785         define a new execution scope.")
786
787         2. Declaration processing proceeds iteratively now, rather than 
788         recursively, storing the nodes is finds in stacks. This will later 
789         facilitate an optimization to hold on to the gathered declaration nodes, 
790         rather than re-fetching them in every function call. 
791         [ http://bugs.webkit.org/show_bug.cgi?id=14868 ]
792
793         Modified these tests because they expected the incorrect Mozilla 
794         behavior described above:
795
796         * tests/mozilla/ecma_3/Function/scope-001.js:
797         * tests/mozilla/js1_5/Scope/regress-184107.js:
798
799 2007-10-16  Darin Adler  <darin@apple.com>
800
801         - try to fix the GTK build
802
803         * kjs/ustring.cpp: Include ASCIICType.h, not ASCIICtype.h.
804
805 2007-10-16  Darin Adler  <darin@apple.com>
806
807         - try to fix the Windows build
808
809         * kjs/date_object.cpp: (KJS::parseDate): A couple instances of isspace were
810         in here. Not sure why it wasn't failing elsewhere. Changed to isASCIISpace.
811
812 2007-10-16  Darin Adler  <darin@apple.com>
813
814         - try to fix the GTK build
815
816         * kjs/ustring.cpp: Include ASCIICType.h.
817
818 2007-10-16  Darin Adler  <darin@apple.com>
819
820         Reviewed by Maciej and Geoff (and looked over by Eric).
821
822         - http://bugs.webkit.org/show_bug.cgi?id=15519
823           eliminate use of <ctype.h> for processing ASCII
824
825         * wtf/ASCIICType.h: Added.
826         * wtf/DisallowCType.h: Added.
827
828         * kjs/config.h: Include DisallowCType.h.
829
830         * kjs/date_object.cpp:
831         (KJS::skipSpacesAndComments):
832         (KJS::findMonth):
833         (KJS::parseDate):
834         * kjs/function.cpp:
835         (KJS::decode):
836         * kjs/ustring.cpp:
837         (KJS::UString::toDouble):
838         Use ASCIICType.h functions instead of ctype.h ones.
839
840 2007-10-14  Maciej Stachowiak  <mjs@apple.com>
841
842         Reviewed by Darin.
843
844         - fixes for "New JavaScript benchmark"
845         http://bugs.webkit.org/show_bug.cgi?id=15515
846         
847         * kjs/testkjs.cpp:
848         (TestFunctionImp::callAsFunction): Implement "load" for compatibility
849         with SpiderMonkey.
850         (TestFunctionImp::): ditto
851         (doIt): ditto
852         (kjsmain): Drop useless --> from output.
853
854 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
855
856         Removed unnecessary #include.
857
858         * API/JSObjectRef.cpp:
859
860 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
861
862         Double-reverse build fix. My tree was out of date.
863
864         * kjs/nodes.cpp:
865         (NumberNode::evaluate):
866
867 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
868
869         Build fix.
870
871         * kjs/nodes.cpp:
872         (NumberNode::evaluate):
873
874 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
875
876         Reviewed by Darin Adler.
877         
878         Removed surprising self-named "hack" that made nested functions 
879         available as named properties of their containing functions, and placed
880         containing function objects in the scope chains of nested functions.
881         
882         There were a few reasons to remove this "hack:"
883
884         1. It contradicted FF, IE, and the ECMA spec.
885
886         2. It incurred a performance penalty, since merely parsing a function 
887         required parsing its body for nested functions (and so on).
888
889         3. SVN history contains no explanation for why it was added. It was just
890         legacy code in a large merge a long, long time ago.
891
892         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
893
894         * kjs/nodes.cpp:
895         (FuncDeclNode::processFuncDecl):
896
897 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
898
899         Reviewed by Darin Adler.
900         
901         Removed the concept of AnonymousCode. It was unused, and it doesn't
902         exist in the ECMA spec.
903         
904         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
905
906         * kjs/Context.cpp:
907         (KJS::Context::Context):
908         * kjs/function.h:
909         (KJS::):
910         * kjs/nodes.cpp:
911         (ReturnNode::execute):
912
913 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
914
915         Reviewed by Darin Adler.
916         
917         Made function parameters DontDelete. This matches FF and the vague
918         description in ECMA 10.1.3. It's also required in order to make
919         symbol table based lookup of function parameters valid. (If the 
920         parameters aren't DontDelete, you can't guarantee that you'll find
921         them later in the symbol table.)
922
923         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
924
925         * kjs/function.cpp:
926         (KJS::FunctionImp::passInParameters):
927
928 2007-10-15  Geoffrey Garen  <ggaren@apple.com>
929
930         Reviewed by Maciej Stachowiak.
931         
932         Some Vector optimizations. These are especially important when using
933         Vector as a stack for implementing recursive algorithms iteratively.
934         
935         [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
936
937         1. Added shrink(), which is a version of resize() that you can call
938         to save a branch / improve code generation and inlining when you know 
939         that the vector is not getting bigger.
940         
941         2. Changed subclassing relationship in VectorBuffer to remove a call to
942         fastFree() in the destructor for the inlineCapacity != 0 template
943         specialization. This brings inline Vectors one step closer to true
944         stack-allocated arrays.
945         
946         Also changed abort() to CRASH(), since the latter works better.
947
948         * wtf/Vector.h:
949         (WTF::VectorBufferBase::allocateBuffer):
950         (WTF::VectorBufferBase::deallocateBuffer):
951         (WTF::VectorBufferBase::VectorBufferBase):
952         (WTF::VectorBufferBase::~VectorBufferBase):
953         (WTF::):
954         (WTF::VectorBuffer::VectorBuffer):
955         (WTF::VectorBuffer::~VectorBuffer):
956         (WTF::VectorBuffer::deallocateBuffer):
957         (WTF::VectorBuffer::releaseBuffer):
958         (WTF::Vector::clear):
959         (WTF::Vector::removeLast):
960         (WTF::::operator):
961         (WTF::::fill):
962         (WTF::::shrink):
963
964 2007-10-12  Geoffrey Garen  <ggaren@apple.com>
965
966         Reviewed by Maciej Stachowiak.
967         
968         Fixed http://bugs.webkit.org/show_bug.cgi?id=15490
969         Iteration statements sometimes incorrectly evaluate to the empty value 
970         (KDE r670547). 
971         
972         [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
973         
974         This patch is a merge of KDE r670547, with substantial modification 
975         for performance.
976         
977         It fixes do-while statements to evaluate to a value. (They used
978         to evaluate to the empty value in all cases.) 
979
980         It also fixes SourceElementsNode to maintain the value of abnormal 
981         completions like "break" and "continue."
982         
983         It also re-works the main execution loop in SourceElementsNode so that
984         it (1) makes a little more sense and (2) avoids unnecessary work. This 
985         is a .28% speedup on command-line JS iBench.
986
987         * kjs/nodes.cpp:
988         (DoWhileNode::execute):
989         (SourceElementsNode::execute):
990
991 2007-10-15  Simon Hausmann  <hausmann@kde.org>
992
993         Reviewed by Lars.
994
995         Fix compilation with gcc 4.3 by including 'limits' due to the use of std::numeric_limits.
996
997         * wtf/HashTraits.h:
998
999 2007-10-5  Kevin Ollivier  <kevino@theolliviers.com>
1000  
1001         Reviewed by Adam.
1002         
1003         Add support for MSVC7, and fix cases where PLATFORM(WIN) should
1004         be PLATFORM(WIN_OS) for other ports building on Windows.
1005  
1006         * kjs/DateMath.cpp:
1007         (KJS::getDSTOffsetSimple):
1008         * kjs/JSImmediate.h:
1009         * wtf/Assertions.cpp:
1010         * wtf/Assertions.h:
1011         * wtf/Platform.h:
1012         * wtf/StringExtras.h:
1013         (snprintf):
1014         (vsnprintf):
1015
1016 2007-10-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1017
1018         Reviewed by Darin.
1019
1020         Adds NegateNode optimization from KJS. The relevant revision in KDE
1021         is 666736.
1022
1023         * kjs/grammar.y:
1024         * kjs/nodes.cpp:
1025         (NumberNode::evaluate):
1026         * kjs/nodes.h:
1027         (KJS::Node::):
1028         (KJS::NumberNode::):
1029         * kjs/nodes2string.cpp:
1030         (NumberNode::streamTo):
1031
1032 2007-10-14  Jason Foreman  <jason@threeve.org>
1033
1034         Reviewed by Maciej.
1035
1036         Fix http://bugs.webkit.org/show_bug.cgi?id=15145
1037         
1038         Ensure that if adjusting n to minimize the difference of n*intPow10(e-p+1) to x,
1039         that the property n < intPow10(p) is maintained.
1040
1041         * kjs/number_object.cpp:
1042         (NumberProtoFunc::callAsFunction):
1043
1044 == Rolled over to ChangeLog-2007-10-14 ==