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