8727df15557854d452bdfff42a0b01898ccb4246
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2007-04-23  Maciej Stachowiak  <mjs@apple.com>
2  
3         Reviewed by Darin.
4
5         - shrink RegexpObjectImp by 4 bytes
6         
7         Somewhat inexplicably, this seems to be a .33% speedup on JS iBench.
8         
9         * kjs/regexp_object.cpp:
10         (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate):
11         (RegExpObjectImp::RegExpObjectImp):
12         (RegExpObjectImp::performMatch):
13         (RegExpObjectImp::arrayOfMatches):
14         (RegExpObjectImp::getBackref):
15         (RegExpObjectImp::getLastMatch):
16         (RegExpObjectImp::getLastParen):
17         (RegExpObjectImp::getLeftContext):
18         (RegExpObjectImp::getRightContext):
19         (RegExpObjectImp::getValueProperty):
20         (RegExpObjectImp::putValueProperty):
21         * kjs/regexp_object.h:
22
23 2007-04-23  Maciej Stachowiak  <mjs@apple.com>
24
25         Reviewed by Oliver.
26         
27         - change to 1-bit bitfields instead of 8-bit, this turns out to lead to a .51% speedup on JS iBench
28         
29         The 1-bit bitfields are actually faster than just plain bools, at least on Intel (go figure).
30
31         * kjs/property_map.h:
32
33 2007-04-23  Maciej Stachowiak  <mjs@apple.com>
34
35         Reviewed by Darin.
36        
37         - shrink ArrayInstance objects by 4 bytes
38         http://bugs.webkit.org/show_bug.cgi?id=13386
39         
40         I did this by storing the capacity before the beginning of the storage array. It turns out
41         it is rarely needed and is by definition 0 when the storage array is null.
42  
43         * kjs/array_instance.h:
44         (KJS::ArrayInstance::capacity): Get it from the secret stash
45         * kjs/array_object.cpp:
46         (allocateStorage): New function to encapsulate allocating the storage with extra space ahead
47         for the capacity.
48         (reallocateStorage): ditto for realloc
49         (ArrayInstance::ArrayInstance):
50         (ArrayInstance::~ArrayInstance):
51         (ArrayInstance::resizeStorage):
52
53 2007-04-23  Darin Adler  <darin@apple.com>
54
55         Reviewed by Maciej.
56
57         - fix <rdar://problem/4840688> REGRESSION (r10588, r10621): JavaScript won't parse
58           modifications of non-references (breaks 300themovie.warnerbros.com, fedex.com)
59
60         Despite the ECMAScript specification's claim that you can treat these as syntax
61         errors, doing so creates some website incompatibilities. So this patch turns them back
62         into evaluation errors instead.
63
64         Test: fast/js/modify-non-references.html
65
66         * kjs/grammar.y: Change makeAssignNode, makePrefixNode, and makePostfixNode so that they
67         never fail to parse. Update rules that use them. Fix a little bit of indenting. Use
68         new PostfixErrorNode, PrefixErrorNode, and AssignErrorNode classes.
69
70         * kjs/nodes.h: Added an overload of throwError that takes a char* argument.
71         Replaced setExceptionDetailsIfNeeded and debugExceptionIfNeeded with handleException,
72         which does both. Added PostfixErrorNode, PrefixErrorNode, and AssignErrorNode classes.
73
74         * kjs/nodes.cpp: Changed exception macros to use handleException; simpler and smaller
75         code size than the two functions that we used before.
76         (Node::throwError): Added the overload mentioned above.
77         (Node::handleException): Added. Contains the code from both setExceptionDetailsIfNeeded
78         and debugExceptionIfNeeded.
79         (PostfixErrorNode::evaluate): Added. Throws an exception.
80         (PrefixErrorNode::evaluate): Ditto.
81         (AssignErrorNode::evaluate): Ditto.
82         (ThrowNode::execute): Call handleException instead of debugExceptionIfNeeded; this
83         effectively adds a call to setExceptionDetailsIfNeeded, which may help with getting
84         the correct file and line number for these exceptions.
85
86         * kjs/nodes2string.cpp:
87         (PostfixErrorNode::streamTo): Added.
88         (PrefixErrorNode::streamTo): Added.
89         (AssignErrorNode::streamTo): Added.
90
91 2007-04-23  Maciej Stachowiak  <mjs@apple.com>
92
93         Reviewed by Darin.
94         
95         - fix test failures / crashes on PPC
96
97         * kjs/property_map.h: Make the bool fields explicitly 8-bit bitfields, since bool is a full
98         word there otherwise :-(
99
100 2007-04-23  Maciej Stachowiak  <mjs@apple.com>
101
102         Reviewed by Darin.
103         
104         - fix more test case failures
105
106         * bindings/runtime_array.cpp:
107         (RuntimeArray::RuntimeArray): inherit from JSObject instead of ArrayInstance; it turns
108         out that this class only needs the prototype and classInfo from ArrayInstance, not the
109         actual class itself, and it was too big otherwise.
110         (RuntimeArray::getOwnPropertySlot):
111         * bindings/runtime_array.h:
112
113 2007-04-23  Maciej Stachowiak  <mjs@apple.com>
114
115         Reviewed by Darin.
116         
117         - fix some test failures
118
119         * bindings/runtime_method.cpp:
120         (RuntimeMethod::RuntimeMethod): inherit from InternalFunctionImp instead of FunctionImpl,
121         otherwise this is too big
122         (RuntimeMethod::getOwnPropertySlot):
123         * bindings/runtime_method.h:
124
125 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
126
127         Reviewed by Darin.
128         
129         - discard the arguments List for an ActivationImp when the corresponding Context is destroyed (1.7% speedup)
130         http://bugs.webkit.org/show_bug.cgi?id=13385
131
132         Based an idea by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>. His patch to do 
133         this also had many other List changes and I found this much simpler subset of the changes
134         was actually a hair faster.
135         
136         This optimization is valid because the arguments list is only kept around to
137         lazily make the arguments object. If it's not made by the time the function
138         exits, it never will be, since any function that captures the continuation will
139         have its own local arguments variable in scope.
140         
141         Besides the 1.7% speed improvement, it shrinks List by 4 bytes
142         (which in turn shrinks ActivationImp by 4 bytes).
143         
144         * kjs/Context.cpp:
145         (KJS::Context::~Context): Clear the activation's arguments list.
146         * kjs/function.cpp:
147         (KJS::ActivationImp::ActivationImp): Adjusted for list changes.
148         (KJS::ActivationImp::mark): No need to mark, lists are always protected (this doesn't
149         cause a ref-cycle for reasons stated above).
150         (KJS::ActivationImp::createArgumentsObject): Clear arguments list.
151         * kjs/function.h:
152         * kjs/list.cpp:
153         (KJS::List::List): No more needsMarking boolean
154         (KJS::List::operator=): ditto
155         * kjs/list.h:
156         (KJS::List::List): ditto
157         (KJS::List::reset): ditto
158         (KJS::List::deref): ditto
159
160 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
161
162         Reviewed by Darin.
163         
164         - shrink PropertyMap by 8 bytes and therefore shrink CELL_SIZE to 40 (for 32-bit; 
165         similar shrinkage for 64-bit)
166         http://bugs.webkit.org/show_bug.cgi?id=13384
167
168         Inspired by similar changes by Christopher E. Hyde <C.Hyde@parableuk.force9.co.uk>
169         done in the kjs-tweaks branch of KDE's kjs. However, this version is somewhat 
170         cleaner style-wise and avoids some of the negative speed impact (at least on gcc/x86) 
171         of his version.
172         
173         This is nearly a wash performance-wise, maybe a slight slowdown, but worth doing
174         to eventually reach cell size 32.
175         
176         * kjs/collector.cpp:
177         (KJS::):
178         * kjs/property_map.cpp:
179         (KJS::PropertyMap::~PropertyMap):
180         (KJS::PropertyMap::clear):
181         (KJS::PropertyMap::get):
182         (KJS::PropertyMap::getLocation):
183         (KJS::PropertyMap::put):
184         (KJS::PropertyMap::insert):
185         (KJS::PropertyMap::expand):
186         (KJS::PropertyMap::rehash):
187         (KJS::PropertyMap::remove):
188         (KJS::PropertyMap::mark):
189         (KJS::PropertyMap::containsGettersOrSetters):
190         (KJS::PropertyMap::getEnumerablePropertyNames):
191         (KJS::PropertyMap::getSparseArrayPropertyNames):
192         (KJS::PropertyMap::save):
193         (KJS::PropertyMap::checkConsistency):
194         * kjs/property_map.h:
195         (KJS::PropertyMap::hasGetterSetterProperties):
196         (KJS::PropertyMap::setHasGetterSetterProperties):
197         (KJS::PropertyMap::):
198         (KJS::PropertyMap::PropertyMap):
199
200 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
201
202         Reviewed by Darin.
203         
204         - change blocks to 64k in size, and use various platform-specific calls to allocate at 64k-aligned addresses
205         http://bugs.webkit.org/show_bug.cgi?id=13383
206         
207         * kjs/collector.cpp:
208         (KJS::allocateBlock): New function to allocate 64k of 64k-aligned memory
209         (KJS::freeBlock): Corresponding free
210         (KJS::Collector::allocate):
211         (KJS::Collector::collect):
212
213 2007-04-22  Maciej Stachowiak  <mjs@apple.com>
214
215         Reviewed by Darin and Geoff.
216         
217         - remove the concept of oversize objects, now that there aren't any (for now
218         only enforced with an assert).
219         http://bugs.webkit.org/show_bug.cgi?id=13382
220
221         This change is a .66% speedup on JS iBench for 32-bit platforms, probably much more
222         for 64-bit since it finally gives a reasonable cell size, but I did not test that.
223         
224         * kjs/collector.cpp:
225         (KJS::): Use different cell size for 32-bit and 64-bit, now that there is no
226         oversize allocation.
227         (KJS::Collector::allocate): Remove oversize allocator.
228         (KJS::Collector::markStackObjectsConservatively): Don't check oversize objects.
229         (KJS::Collector::markMainThreadOnlyObjects): Ditto.
230         (KJS::Collector::collect): Ditto.
231
232 2007-04-21  Mitz Pettel  <mitz@webkit.org>
233
234         Reviewed by Adam.
235
236         - fix http://bugs.webkit.org/show_bug.cgi?id=13428
237           REGRESSION (r20973-r20976): Failing ecma/Array/15.4.4.5-3.js
238
239         - fix http://bugs.webkit.org/show_bug.cgi?id=13429
240           REGRESSION (r20973-r20976): Crashing in fast/dom/plugin-attributes-enumeration.html
241
242         * kjs/array_object.cpp:
243         (ArrayInstance::sort): Free the old storage, not the new one.
244
245 2007-04-20  Maciej Stachowiak  <mjs@apple.com>
246
247         Not reviewed, build fix.
248
249         - fix build problem with last change - -O3 complains more about uninitialized variables
250         
251         * pcre/pcre_compile.c:
252         (compile_branch):
253         (pcre_compile2):
254
255 2007-04-20  Maciej Stachowiak  <mjs@apple.com>
256
257         Reviewed by Darin.
258         
259         - <rdar://problem/5149915> use mergesort when possible, since it leads to fewer compares (2% JS iBench speedup)
260
261         * kjs/array_object.cpp:
262         (ArrayInstance::sort): Use mergesort(3) on platforms that have it, since it tends
263         to do fewer compares than qsort; but avoid it very on large arrays since it uses extra
264         memory. Also added comments identifying possibly even better sorting algorithms
265         for sort by string value and sort by compare function.
266         * kjs/config.h:
267
268 2007-04-20  Maciej Stachowiak  <mjs@apple.com>
269
270         Reviewed by Darin.
271         
272         - bump optimization flags up to -O3 for 1% JS iBench speed improvement 
273
274         * Configurations/Base.xcconfig:
275
276 2007-04-20  Mark Rowe  <mrowe@apple.com>
277
278         Reviewed by Maciej.
279
280         Fix bogus optimisation in the generic pthread code path.
281
282         * kjs/collector.cpp:
283         (KJS::currentThreadStackBase):
284
285 2007-04-20  Mark Rowe  <mrowe@apple.com>
286
287         Reviewed by Anders.
288
289         Improve FreeBSD compatibility, as suggested by Alexander Botero-Lowry.
290
291         * kjs/collector.cpp:
292         (KJS::currentThreadStackBase): FreeBSD requires that pthread_attr_t's are
293         initialized via pthread_attr_init before being used in any context.
294
295 2007-04-19  Mark Rowe  <mrowe@apple.com>
296
297         Reviewed by Darin.
298
299         Fix http://bugs.webkit.org/show_bug.cgi?id=13401
300         Bug 13401: Reproducible crash calling myArray.sort(compareFn) from within
301         a sort comparison function
302
303         * kjs/array_object.cpp:
304         (ArrayInstance::sort): Save/restore the static variables around calls to qsort
305         to ensure nested calls to ArrayInstance::sort behave correctly.
306
307 2007-04-12  Deneb Meketa  <dmeketa@adobe.com>
308
309         Reviewed by Darin Adler.
310
311         http://bugs.webkit.org/show_bug.cgi?id=13029
312         rdar://problem/4994849
313         Bug 13029: Permit NPAPI plug-ins to see HTTP response headers.
314         This doesn't actually change JavaScriptCore, but that's where npapi.h is.
315
316         * bindings/npapi.h:
317         Add headers member to NPStream struct.  Also increase NP_VERSION_MINOR to 18.
318         Increasing to >= 17 allows plug-ins to safely detect whether to look for
319         NPStream::headers.  Increasing from 17 to 18 reflects presence of NPObject
320         enumeration, which was added in a prior patch, and which has been agreed to
321         constitute version 18 by the plugin-futures list.  Also add other missing
322         bits of npapi.h to catch up from 14 to 18.  This includes features that are
323         not implemented in WebKit, but those are safely stubbed.
324
325 2007-04-10  Geoffrey Garen  <ggaren@apple.com>
326
327         Reviewed by Mark Rowe.
328         
329         Fixed last check-in to print in release builds, too.
330
331         * kjs/collector.cpp:
332         (KJS::getPlatformThreadRegisters):
333
334 2007-04-10  Geoffrey Garen  <ggaren@apple.com>
335
336         Reviewed by John Sullivan, Darin Adler.
337         
338         Fixed <rdar://problem/5121899> JavaScript garbage collection leads to 
339         later crash under Rosetta (should abort or leak instead?)
340         
341         Log an error message and crash if the kernel reports failure during GC.
342         We decided to do this instead of just leaking because we don't want people
343         to get the mistaken impression that running in Rosetta is a supported
344         configurtion.
345         
346         The CRASH macro will also hook into CrashReporter, which will tell us if 
347         many (any?) users run into this issue.
348
349         * kjs/collector.cpp:
350         (KJS::getPlatformThreadRegisters):
351
352 2007-04-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
353
354         Reviewed by darin.
355
356         Coverity fix. Coverity says:
357         "Event var_deref_model: Variable "sourceRanges" tracked as NULL was passed to a
358         function that dereferences it"
359
360         * kjs/string_object.cpp:
361         (KJS::replace):
362
363 2007-04-06  Geoffrey Garen  <ggaren@apple.com>
364
365         Rubber stamped by Adele Peterson.
366
367         * kjs/ExecState.h: Removed obsolete forward/friend declaration of 
368         RuntimeMethodImp.
369
370 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
371
372         Reviewed by darin.
373
374         Coverity fix. Coverity says:
375         "Event check_after_deref: Pointer "dateString" dereferenced before NULL check"
376
377         * kjs/date_object.cpp:
378         (KJS::parseDate):
379
380 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
381
382         Reviewed by darin.
383
384         Coverity fix. Coverity says:
385         "Event check_after_deref: Pointer "re" dereferenced before NULL check"
386
387         * pcre/pcre_study.c:
388         (pcre_study):
389
390 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
391
392         Reviewed by darin.
393
394         Coverity fixes. Coverity says:
395         "Event leaked_storage: Returned without freeing storage "buffer""
396         and:
397         "Event leaked_storage: Returned without freeing storage "script""
398
399         * kjs/testkjs.cpp:
400         (doIt):
401         (createStringWithContentsOfFile):
402
403 2007-04-05  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
404
405         Reviewed by darin.
406
407         Coverity fix: in single-threaded case currentThreadIsMainThread is always true
408         so the code in if (!currentThreadIsMainThread) cannot possibly be reached
409         and Coverity complains about dead code.
410
411         * kjs/collector.cpp:
412         (KJS::Collector::collect):
413
414 === Safari-5522.6 ===
415
416 2007-04-03  Kevin McCullough  <kmccullough@apple.com>
417
418         Reviewed by Adam.
419
420         - Testing a post-commit hook.
421
422         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
423
424 2007-04-03  Anders Carlsson  <andersca@apple.com>
425
426         Reviewed by Adam.
427
428         <rdar://problem/5107534>
429         http://bugs.webkit.org/show_bug.cgi?id=13265
430         REGRESSION: Crash in KJS::Bindings::convertValueToNPVariant
431         
432         * bindings/NP_jsobject.cpp:
433         (_NPN_InvokeDefault):
434         Return false if the object isn't a function. Set the return value to undefined by default
435         (to match Firefox).
436         
437 2007-03-30  Anders Carlsson <andersca@apple.com>
438
439         Build fix.
440         
441         * bindings/NP_jsobject.cpp:
442         (_NPN_Enumerate):
443
444 2007-03-30  Anders Carlsson  <andersca@apple.com>
445
446         Reviewed by Geoff.
447
448         Implement _NPN_Enumerate support.
449         
450         * JavaScriptCore.exp:
451         * bindings/NP_jsobject.cpp:
452         (_NPN_Enumerate):
453         * bindings/c/c_instance.cpp:
454         (KJS::Bindings::CInstance::getPropertyNames):
455         * bindings/c/c_instance.h:
456         * bindings/npapi.h:
457         * bindings/npruntime.h:
458         * bindings/npruntime_impl.h:
459         * bindings/runtime.h:
460         (KJS::Bindings::Instance::getPropertyNames):
461         * bindings/runtime_object.cpp:
462         (RuntimeObjectImp::getPropertyNames):
463         * bindings/runtime_object.h:
464         (KJS::RuntimeObjectImp::getInternalInstance):
465
466 2007-03-28  Jeff Walden  <jwalden+code@mit.edu>
467
468         Reviewed by Darin.
469
470         http://bugs.webkit.org/show_bug.cgi?id=12963
471         Fix some inconsistencies in the Mozilla JS Array extras implementations
472         with respect to the Mozilla implementation:
473
474           - holes in arrays should be skipped, not treated as undefined,
475             by all such methods
476           - an element with value undefined is not a hole
477           - Array.prototype.forEach should return undefined
478
479         * kjs/array_object.cpp:
480         (ArrayInstance::getOwnPropertySlot):
481         (ArrayProtoFunc::callAsFunction):
482
483 2007-03-27  Anders Carlsson  <acarlsson@apple.com>
484
485         Reviewed by Geoff.
486
487         * bindings/NP_jsobject.cpp:
488         (_NPN_InvokeDefault):
489         Call JSObject:call for native JavaScript objects.
490
491 2007-03-26  David Carson  <dacarson@gmail.com>
492
493         Reviewed by Darin, landed by Anders.
494
495         Fix for: REGRESSION (r19559): Java applet crash
496         http://bugs.webkit.org/show_bug.cgi?id=13142
497         <rdar://problem/5080340>
498
499         The previous fix http://bugs.webkit.org/show_bug.cgi?id=12636 
500         introduced new JNIType to enum in jni_utility.h This is a 
501         problem on the Mac as it seems that the JNIType enum is also
502         used in the JVM, it is used to specify the return type in
503         jni_objc.mm
504         Corrected the fix by moving type to the end, and changing
505         jni_objc.mm to convert the new type to an old compatible
506         type.
507
508         * bindings/jni/jni_objc.mm:
509         (KJS::Bindings::dispatchJNICall):
510         * bindings/jni/jni_utility.h:
511
512 2007-03-26  Christopher Brichford  <chrisb@adobe.com>
513
514         Reviewed/landed by Adam.
515
516         Bug 13198: Move build settings from project file to xcconfig file for apollo
517         port JSCore
518         http://bugs.webkit.org/show_bug.cgi?id=13198
519
520         - Moving build settings from xcode project file to xcconfig files.
521
522         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig:
523         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig:
524         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
525         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
526
527 2007-03-26  Brady Eidson  <beidson@apple.com>
528
529         Rubberstamped by Anders and Maciej aand Geoff (oh my!)
530         
531         Since CFTypeRef is really void*, a RetainPtr couldn't be used. 
532         RefType was "void", which doesn't actually exist as a type.
533         Since RefType only existed for operator*(), and since that operator
534         doesn't make any sense for RetainPtr, I removed them!
535
536         * kjs/nodes.cpp: Touch this to force a rebuild and (hopefully) help the
537           compiler with dependencies
538         * wtf/RetainPtr.h: Nuke RefType and operator*()
539
540 2007-03-26  Geoffrey Garen  <ggaren@apple.com>
541
542         Touched a file to (hopefully) help the compiler with RetainPtr dependencies.
543
544         * kjs/nodes.cpp:
545         (Node::deref):
546
547 2007-03-24  Brady Eidson  <beidson@apple.com>
548
549         Reviewed by Adam
550
551         Whoops, RetainPtr should be in the WTF namespace
552
553         * wtf/RetainPtr.h:
554
555 2007-03-24  Brady Eidson  <beidson@apple.com>
556
557         Reviewed by Adam
558         
559         <rdar://problem/5086210> - Move RetainPtr to WTF
560
561         * wtf/RetainPtr.h: Added
562         * JavaScriptCore.xcodeproj/project.pbxproj: Add it to the project file
563         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto
564
565
566 2007-03-23  Christopher Brichford  <chrisb@adobe.com>
567
568         Reviewed/landed by Adam.
569
570         Bug 13175: Make apollo mac project files for JavaScriptCore actually
571         build something
572         http://bugs.webkit.org/show_bug.cgi?id=13175
573
574         - Changing apollo mac project files for JavaScriptCore such that they actually build
575         JavaScriptCore source code.
576
577         * JavaScriptCore.apolloproj/ForwardingSources/grammar.cpp: Added.
578         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig:
579         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
580
581 2007-03-24  Mark Rowe  <mrowe@apple.com>
582
583         Rubber-stamped by Darin.
584
585         * Configurations/JavaScriptCore.xcconfig: Remove unnecessary INFOPLIST_PREPROCESS.
586
587 2007-03-22  Christopher Brichford  <chrisb@adobe.com>
588
589         Reviewed/landed by Adam.
590
591         Bug 13164: Initial version of mac JavaScriptCore project files for
592         apollo port 
593         http://bugs.webkit.org/show_bug.cgi?id=13164
594
595         - Adding mac project files for apollo port of JavaScriptCore. Currently project
596         just builds dftables.
597
598         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Debug.xcconfig: Added.
599         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.Release.xcconfig: Added.
600         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcconfig: Added.
601         * JavaScriptCore.apolloproj/mac/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: Added.
602
603 2007-03-21  Timothy Hatcher  <timothy@apple.com>
604
605         Reviewed by Darin.
606
607         <rdar://problem/5076599> JavaScriptCore has a weak export (vtable for KJS::JSCell)
608
609         * JavaScriptCore.exp: Remove __ZTVN3KJS6JSCellE.
610
611 2007-03-21  Adele Peterson  <adele@apple.com>
612
613         Reviewed by Geoff.
614
615         * API/JSStringRef.cpp: (JSStringIsEqual): Added JSLock.
616
617 2007-03-21  Zack Rusin  <zrusin@trolltech.com>
618
619         Fix the compile when USE(MULTIPLE_THREADS) isn't
620         defined
621
622         * kjs/JSLock.cpp:
623         (KJS::JSLock::currentThreadIsHoldingLock):
624
625 2007-03-20  Maciej Stachowiak  <mjs@apple.com>
626
627         Reviewed by Geoff and Adam.
628         
629         - make USE(MULTIPLE_THREADS) support more portable
630         http://bugs.webkit.org/show_bug.cgi?id=13069
631         
632         - fixed a threadsafety bug discovered by testing this
633         
634         - enhanced threadsafety assertions in collector
635
636         * API/JSCallbackObject.cpp:
637         (KJS::JSCallbackObject::~JSCallbackObject): This destructor can't
638         DropAllLocks around the finalize callback, because it gets called
639         from garbage collection and we can't let other threads collect!
640
641         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
642         * kjs/JSLock.cpp:
643         (KJS::JSLock::currentThreadIsHoldingLock): Added new function
644         to allow stronger assertions than just that the lock is held
645         by some thread (you can now assert that the current thread is
646         holding it, given the new JSLock design).
647         * kjs/JSLock.h:
648         * kjs/collector.cpp: Refactored for portability plus added some
649         stronger assertions.
650         (KJS::Collector::allocate):
651         (KJS::currentThreadStackBase):
652         (KJS::Collector::registerAsMainThread):
653         (KJS::onMainThread):
654         (KJS::PlatformThread::PlatformThread):
655         (KJS::getCurrentPlatformThread):
656         (KJS::Collector::Thread::Thread):
657         (KJS::destroyRegisteredThread):
658         (KJS::Collector::registerThread):
659         (KJS::Collector::markCurrentThreadConservatively):
660         (KJS::suspendThread):
661         (KJS::resumeThread):
662         (KJS::getPlatformThreadRegisters):
663         (KJS::otherThreadStackPointer):
664         (KJS::otherThreadStackBase):
665         (KJS::Collector::markOtherThreadConservatively):
666         (KJS::Collector::markStackObjectsConservatively):
667         (KJS::Collector::protect):
668         (KJS::Collector::unprotect):
669         (KJS::Collector::collectOnMainThreadOnly):
670         (KJS::Collector::markMainThreadOnlyObjects):
671         (KJS::Collector::collect):
672         * kjs/collector.h:
673         * wtf/FastMalloc.cpp:
674         (WTF::fastMallocSetIsMultiThreaded):
675         * wtf/FastMallocInternal.h:
676         * wtf/Platform.h:
677
678 2007-03-19  Darin Adler  <darin@apple.com>
679
680         * kjs/value.h: Roll ~JSValue change out. It was causing problems. I'll do it right later.
681
682 2007-03-19  Geoffrey Garen  <ggaren@apple.com>
683
684         Reviewed by John Sullivan.
685
686         Fixed <rdar://problem/5073380> REGRESSION: Crash occurs at WTF::fastFree() 
687         when reloading liveconnect page (applet)
688         
689         Best to use free when you use malloc, especially when malloc and delete
690         use completely different libraries.
691
692         * bindings/jni/jni_runtime.cpp:
693         (JavaMethod::~JavaMethod):
694
695 2007-03-19  Andrew Wellington  <proton@wiretapped.net>
696
697         Reviewed by Maciej.
698
699         Really set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html)
700
701         * JavaScriptCore.xcodeproj/project.pbxproj:
702
703 2007-03-19  Darin Adler  <darin@apple.com>
704
705         Reviewed by Geoff.
706
707         - Changed list size threshold to 5 based on testing.
708
709         I was testing the i-Bench JavaScript with the list statistics
710         dumping on, and discovered that there were many 5-element lists.
711         The fast case for lists was for 4 elements and fewer. By changing
712         the threshold to 5 elements we get a measurable speedup. I believe
713         this will help real web pages too, not just the benchmark.
714
715         * kjs/list.cpp: Change constant from 4 to 5.
716
717 2007-03-19  Darin Adler  <darin@apple.com>
718
719         * kjs/value.h: Oops, fix build.
720
721 2007-03-19  Darin Adler  <darin@apple.com>
722
723         Reviewed by Geoff.
724
725         - remove ~JSValue; tiny low-risk performance boost
726
727         * kjs/value.h: Remove unneeded empty virtual destructor from JSValue.
728         The only class derived from JSValue is JSCell and it already has a
729         virtual destructor. Declaring an empty constructor in JSValue had one
730         good effect: it marked the destructor private, making it a compile
731         time error to try to destroy a JSValue; but that's not a likely
732         mistake for someone to make. It had two bad effects: (1) it caused gcc,
733         at least, to generate code to fix up the virtual table pointer to
734         point to the JSValue version of the virtual table inside the destructor
735         of all classes derived from JSValue directly or indirectly; (2) it
736         caused JSValue to be a polymorphic class so required a virtual table for
737         it. It's cleaner to not have either of those.
738
739 2007-03-18  Maciej Stachowiak  <mjs@apple.com>
740
741         Reviewed by Mark.
742         
743         - avoid static construction (and global variable access) in a smarter, more portable way,
744         to later enable MUTLI_THREAD mode to work on other platforms and compilers.
745         
746         * kjs/CommonIdentifiers.cpp: Added. New class to hold all the shared identifiers.
747         (KJS::CommonIdentifiers::CommonIdentifiers):
748         (KJS::CommonIdentifiers::shared):
749         * kjs/CommonIdentifiers.h: Added.
750
751         * kjs/ExecState.h:
752         (KJS::ExecState::propertyNames): Hand the CommonIdentifiers instance here for easy access.
753         (KJS::ExecState::ExecState):
754
755         * API/JSObjectRef.cpp:
756         (JSObjectMakeConstructor):
757         * CMakeLists.txt:
758         * JavaScriptCore.exp:
759         * JavaScriptCore.pri:
760         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
761         * JavaScriptCore.xcodeproj/project.pbxproj:
762         * JavaScriptCoreSources.bkl:
763         * bindings/runtime_array.cpp:
764         (RuntimeArray::getOwnPropertySlot):
765         (RuntimeArray::put):
766         * bindings/runtime_method.cpp:
767         (RuntimeMethod::getOwnPropertySlot):
768         * kjs/array_object.cpp:
769         (ArrayInstance::getOwnPropertySlot):
770         (ArrayInstance::put):
771         (ArrayInstance::deleteProperty):
772         (ArrayProtoFunc::ArrayProtoFunc):
773         (ArrayProtoFunc::callAsFunction):
774         (ArrayObjectImp::ArrayObjectImp):
775         * kjs/bool_object.cpp:
776         (BooleanPrototype::BooleanPrototype):
777         (BooleanProtoFunc::BooleanProtoFunc):
778         (BooleanProtoFunc::callAsFunction):
779         (BooleanObjectImp::BooleanObjectImp):
780         * kjs/completion.h:
781         (KJS::Completion::Completion):
782         * kjs/date_object.cpp:
783         (KJS::DateProtoFunc::DateProtoFunc):
784         (KJS::DateObjectImp::DateObjectImp):
785         (KJS::DateObjectFuncImp::DateObjectFuncImp):
786         * kjs/error_object.cpp:
787         (ErrorPrototype::ErrorPrototype):
788         (ErrorProtoFunc::ErrorProtoFunc):
789         (ErrorProtoFunc::callAsFunction):
790         (ErrorObjectImp::ErrorObjectImp):
791         (ErrorObjectImp::construct):
792         (NativeErrorPrototype::NativeErrorPrototype):
793         (NativeErrorImp::NativeErrorImp):
794         (NativeErrorImp::construct):
795         (NativeErrorImp::callAsFunction):
796         * kjs/function.cpp:
797         (KJS::FunctionImp::getOwnPropertySlot):
798         (KJS::FunctionImp::put):
799         (KJS::FunctionImp::deleteProperty):
800         (KJS::FunctionImp::getParameterName):
801         (KJS::DeclaredFunctionImp::construct):
802         (KJS::IndexToNameMap::unMap):
803         (KJS::Arguments::Arguments):
804         (KJS::ActivationImp::getOwnPropertySlot):
805         (KJS::ActivationImp::deleteProperty):
806         (KJS::GlobalFuncImp::GlobalFuncImp):
807         * kjs/function_object.cpp:
808         (FunctionPrototype::FunctionPrototype):
809         (FunctionProtoFunc::FunctionProtoFunc):
810         (FunctionProtoFunc::callAsFunction):
811         (FunctionObjectImp::FunctionObjectImp):
812         (FunctionObjectImp::construct):
813         * kjs/grammar.y:
814         * kjs/identifier.cpp:
815         * kjs/identifier.h:
816         * kjs/interpreter.cpp:
817         (KJS::Interpreter::init):
818         (KJS::Interpreter::initGlobalObject):
819         * kjs/interpreter.h:
820         * kjs/lookup.h:
821         * kjs/math_object.cpp:
822         (MathFuncImp::MathFuncImp):
823         * kjs/nodes.cpp:
824         (ArrayNode::evaluate):
825         (FuncDeclNode::processFuncDecl):
826         (FuncExprNode::evaluate):
827         * kjs/number_object.cpp:
828         (NumberPrototype::NumberPrototype):
829         (NumberProtoFunc::NumberProtoFunc):
830         (NumberObjectImp::NumberObjectImp):
831         * kjs/object.cpp:
832         (KJS::JSObject::put):
833         (KJS::JSObject::defaultValue):
834         (KJS::JSObject::hasInstance):
835         * kjs/object.h:
836         (KJS::JSObject::getOwnPropertySlot):
837         * kjs/object_object.cpp:
838         (ObjectPrototype::ObjectPrototype):
839         (ObjectProtoFunc::ObjectProtoFunc):
840         (ObjectObjectImp::ObjectObjectImp):
841         * kjs/regexp_object.cpp:
842         (RegExpPrototype::RegExpPrototype):
843         (RegExpProtoFunc::RegExpProtoFunc):
844         (RegExpObjectImp::RegExpObjectImp):
845         * kjs/string_object.cpp:
846         (KJS::StringInstance::getOwnPropertySlot):
847         (KJS::StringInstance::put):
848         (KJS::StringInstance::deleteProperty):
849         (KJS::StringPrototype::StringPrototype):
850         (KJS::StringProtoFunc::StringProtoFunc):
851         (KJS::StringProtoFunc::callAsFunction):
852         (KJS::StringObjectImp::StringObjectImp):
853         (KJS::StringObjectFuncImp::StringObjectFuncImp):
854         * kjs/testkjs.cpp:
855         (TestFunctionImp::TestFunctionImp):
856
857 2007-03-18  Andrew Wellington  <proton@wiretapped.net>
858
859         Reviewed by Mark Rowe
860         
861         Set Xcode editor to use 4 space indentation (http://webkit.org/coding/coding-style.html) 
862
863         * JavaScriptCore.xcodeproj/project.pbxproj:
864
865 2007-03-19  Mark Rowe  <mrowe@apple.com>
866
867         Rubber-stamped by Brady.
868
869         Update references to bugzilla.opendarwin.org with bugs.webkit.org.
870
871         * bindings/c/c_utility.cpp:
872         (KJS::Bindings::convertUTF8ToUTF16):
873         * kjs/function.cpp:
874         (KJS::FunctionImp::callAsFunction):
875         * kjs/grammar.y:
876         * kjs/keywords.table:
877         * kjs/lexer.cpp:
878         (KJS::Lexer::shift):
879
880 2007-03-18  Geoffrey Garen  <ggaren@apple.com>
881
882         Reviewed by Oliver Hunt.
883         
884         Exposed some extra toUInt32 functionality, as part of the fix for
885         REGRESSION: Incomplete document.all implementation breaks abtelectronics.com 
886         (Style Change Through JavaScript Blanks Content)
887
888         * JavaScriptCore.exp:
889         * kjs/identifier.h:
890         (KJS::Identifier::toUInt32):
891
892 2007-03-18  Geoffrey Garen  <ggaren@apple.com>
893
894         Removed duplicate export name.
895         
896         * JavaScriptCore.exp:
897
898 2007-03-15  Geoffrey Garen  <ggaren@apple.com>
899
900         Reviewed by Maciej Stachowiak.
901         
902         Fixed <rdar://problem/5064964> Repro ASSERT failure in JS Bindings when 
903         closing window @ lowtrades.bptrade.com
904         
905         Unfortunately, the bindings depend on UString and Identifier as string 
906         representations. So, they need to acquire the JSLock when doing something
907         that will ref/deref their strings.
908
909         Layout tests, the original site, and Java, Flash, and Quicktime on the 
910         web work. No leaks reported. No automated test for this because testing 
911         the Java bindings, like math, is hard.
912         
913         * bindings/runtime.h: Made Noncopyable, just to be sure.
914         
915         * bindings/c/c_class.cpp: 
916         (KJS::Bindings::CClass::~CClass): Acquire the JSLock and explicitly clear the keys
917         in our hashtable, since they're UString::Reps, and ref/deref aren't thread-safe.
918         (KJS::Bindings::CClass::methodsNamed): Also acquire the JSLock when adding
919         keys to the table, since the table ref's them.
920         (KJS::Bindings::CClass::fieldNamed): ditto.
921
922         * bindings/c/c_utility.cpp: Removed dead function.
923         (KJS::Bindings::convertValueToNPVariant): Acquire the JSLock because doing
924         it recursively is pretty cheap, and it's just too confusing to tell whether
925         all our callers do it for us.
926         (KJS::Bindings::convertNPVariantToValue): ditto
927         * bindings/c/c_utility.h:
928
929         * bindings/jni/jni_class.cpp: Same deal as c_class.cpp.
930         (JavaClass::JavaClass):
931         (JavaClass::~JavaClass):
932
933         * bindings/jni/jni_instance.cpp: Same deal as c_utility.cpp.
934         (JavaInstance::stringValue):
935         * bindings/jni/jni_jsobject.cpp:
936         (JavaJSObject::convertValueToJObject):
937
938         * bindings/jni/jni_runtime.cpp:
939         (JavaMethod::~JavaMethod): Moved from header, for clarity.
940         (appendClassName): Made this static, so the set of callers is known, and
941         we can assert that we hold the JSLock. Also changed it to take a UString
942         reference, which makes the calling code simpler.
943         (JavaMethod::signature): Store the ASCII value we care about instead of
944         a UString, since UString is so much more hassle. Hold the JSLock while
945         building up the temporary UString.
946
947         * bindings/jni/jni_runtime.h: Nixed dead code in JavaMethod.
948         (KJS::Bindings::JavaString::JavaString): Hold a UString::Rep instead of
949         a UString, so we can acquire the JSLock and explicitly release it.
950         (KJS::Bindings::JavaString::_commonInit):
951         (KJS::Bindings::JavaString::~JavaString):
952         (KJS::Bindings::JavaString::UTF8String):
953         (KJS::Bindings::JavaString::uchars):
954         (KJS::Bindings::JavaString::length):
955         (KJS::Bindings::JavaString::ustring):
956
957         * bindings/jni/jni_utility.cpp:
958         (KJS::Bindings::convertArrayInstanceToJavaArray): Made this static, so 
959         the set of callers is known, and we can assert that we hold the JSLock. 
960         (KJS::Bindings::convertValueToJValue): Acquire the JSLock because doing
961         it recursively is pretty cheap, and it's just too confusing to tell whether
962         all our callers do it for us.
963
964         * bindings/objc/objc_runtime.h: Nixed some dead code.
965         * bindings/objc/objc_utility.mm:
966         (KJS::Bindings::convertNSStringToString): Same drill as above.
967
968 2007-03-18  Alexey Proskuryakov  <ap@webkit.org>
969
970         Reviewed by Geoff.
971
972         http://bugs.webkit.org/show_bug.cgi?id=13105
973         REGRESSION: an exception raised when calculating base value of a dot expression is not returned
974
975         Test: fast/js/dot-node-base-exception.html
976
977         * kjs/nodes.cpp:
978         (FunctionCallDotNode::evaluate): Added the necessary KJS_CHECKEXCEPTIONVALUE.
979
980 2007-03-18  Steve Falkenburg  <sfalken@apple.com>
981
982         Build fix.
983
984         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
985
986 2007-03-17  Timothy Hatcher  <timothy@apple.com>
987
988         Reviewed by Mark Rowe.
989
990         Made Version.xcconfig smarter when building for different configurations.
991         Now uses the 522+ OpenSource version for Debug and Release, while using the
992         full 522.4 version for Production builds. The system prefix is also computed
993         based on the current system, so 4522.4 on Tiger and 5522.4 on Leopard.
994
995         * Configurations/JavaScriptCore.xcconfig:
996         * Configurations/Version.xcconfig:
997
998 2007-03-15  Maciej Stachowiak  <mjs@apple.com>
999
1000         Not reviewed.
1001         
1002         - build fix
1003
1004         * wtf/TCSystemAlloc.cpp:
1005
1006 2007-03-15  Maciej Stachowiak  <mjs@apple.com>
1007
1008         Reviewed by Geoff and Steve.
1009         
1010         - fix some portability issues with TCMalloc.
1011
1012         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1013         * kjs/config.h:
1014         * wtf/FastMalloc.cpp:
1015         (WTF::SizeClass):
1016         (WTF::InitSizeClasses):
1017         (WTF::TCMalloc_PageHeap::Split):
1018         (WTF::TCMalloc_PageHeap::RegisterSizeClass):
1019         (WTF::TCMalloc_Central_FreeList::length):
1020         (WTF::TCMalloc_ThreadCache::InitTSD):
1021         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
1022         * wtf/TCSpinLock.h:
1023         * wtf/TCSystemAlloc.cpp:
1024         (TryVirtualAlloc):
1025         (TCMalloc_SystemAlloc):
1026
1027 2007-03-15  Timothy Hatcher  <timothy@apple.com>
1028
1029         Reviewed by John.
1030
1031         * Factored out most of our common build settings into .xcconfig files. Anything that was common in
1032           each build configuration was factored out into the shared .xcconfig file.
1033         * Adds a Version.xcconfig file to define the current framework version, to be used in other places.
1034         * Use the new $(BUNDLE_VERSION) (defined in Version.xcconfig) in the preprocessed Info.plist.
1035         * Use the versions defined in Version.xcconfig to set $(DYLIB_CURRENT_VERSION).
1036
1037         * Configurations/Base.xcconfig: Added.
1038         * Configurations/DebugRelease.xcconfig: Added.
1039         * Configurations/JavaScriptCore.xcconfig: Added.
1040         * Configurations/Version.xcconfig: Added.
1041         * Info.plist:
1042         * JavaScriptCore.xcodeproj/project.pbxproj:
1043
1044 2007-03-16  Shrikant Gangoda  <shrikant.gangoda@celunite.com>
1045
1046         Gdk build fix.
1047
1048         * kjs/DateMath.cpp:  gettimeofday comes from <sys/time.h> on Linux.
1049
1050 2007-03-14  Kevin McCullough  <kmccullough@apple.com>
1051
1052         Reviewed by .
1053
1054         - Fixed one more build breakage
1055
1056         * kjs/date_object.cpp:
1057         (KJS::formatLocaleDate):
1058
1059 2007-03-14  Kevin McCullough  <kmccullough@apple.com>
1060
1061         Reviewed by .
1062
1063         - Fixed a build breakage.
1064
1065         * kjs/DateMath.cpp:
1066         * kjs/date_object.cpp:
1067         (KJS::formatLocaleDate):
1068         (KJS::DateObjectImp::construct):
1069
1070 2007-03-14  Kevin McCullough  <kmccullough@apple.com>
1071
1072         Reviewed by Geoff.
1073
1074         - rdar://problem/5045720
1075         - DST changes in US affect JavaScript date calculations (12975)
1076         This fix was to ensure we properly test for the new changes to DST in the US.
1077         Also this fixes when we apply DST, now we correctly map most past years to current
1078         DST rules.  We still have a small issue with years before 1900 or after 2100.
1079         rdar://problem/5055038
1080
1081         * kjs/DateMath.cpp: Fix DST to match spec better.
1082         (KJS::getCurrentUTCTime):
1083         (KJS::mimimumYearForDST):
1084         (KJS::maximumYearForDST):
1085         (KJS::equivalentYearForDST):
1086         (KJS::getDSTOffset):
1087         * kjs/DateMath.h: Consolodated common funtionality.
1088         * kjs/date_object.cpp: Consolodated common functionality.
1089         (KJS::formatLocaleDate):
1090         (KJS::DateObjectImp::construct):
1091         * tests/mozilla/ecma/jsref.js: Added functions for finding the correct days when DST starts and ends.
1092         * tests/mozilla/ecma/shell.js: Added back in the old DST functions for ease of merging with mozilla if needed.
1093         * tests/mozilla/ecma_2/jsref.js: Added functions for finding the correct days when DST starts and ends.
1094         * tests/mozilla/ecma_3/Date/shell.js: Added functions for finding the correct days when DST starts and ends.
1095         * tests/mozilla/expected.html: Updated to show all date tests passing.
1096
1097 === Safari-5522.4 ===
1098
1099 2007-03-13  Kevin McCullough  <kmccullough@apple.com>
1100
1101         Reviewed by .
1102
1103         - Adding expected failures until the are truly fixed. 
1104         - rdar://problem/5060302
1105
1106         * tests/mozilla/expected.html:
1107
1108 2007-03-12  Kevin McCullough  <kmccullough@apple.com>
1109
1110         Reviewed by .
1111
1112         - Actually update tests for new DST rules.
1113
1114         * tests/mozilla/ecma/Date/15.9.3.1-1.js:
1115         * tests/mozilla/ecma/Date/15.9.3.1-2.js:
1116         * tests/mozilla/ecma/Date/15.9.3.1-3.js:
1117         * tests/mozilla/ecma/Date/15.9.3.1-4.js:
1118         * tests/mozilla/ecma/Date/15.9.3.1-5.js:
1119         * tests/mozilla/ecma/Date/15.9.3.2-1.js:
1120         * tests/mozilla/ecma/Date/15.9.3.2-2.js:
1121         * tests/mozilla/ecma/Date/15.9.3.2-3.js:
1122         * tests/mozilla/ecma/Date/15.9.3.2-4.js:
1123         * tests/mozilla/ecma/Date/15.9.3.2-5.js:
1124         * tests/mozilla/ecma/Date/15.9.3.8-1.js:
1125         * tests/mozilla/ecma/Date/15.9.3.8-2.js:
1126         * tests/mozilla/ecma/Date/15.9.3.8-3.js:
1127         * tests/mozilla/ecma/Date/15.9.3.8-4.js:
1128         * tests/mozilla/ecma/Date/15.9.3.8-5.js:
1129         * tests/mozilla/ecma/Date/15.9.5.10-1.js:
1130         * tests/mozilla/ecma/Date/15.9.5.10-10.js:
1131         * tests/mozilla/ecma/Date/15.9.5.10-11.js:
1132         * tests/mozilla/ecma/Date/15.9.5.10-12.js:
1133         * tests/mozilla/ecma/Date/15.9.5.10-13.js:
1134         * tests/mozilla/ecma/Date/15.9.5.10-2.js:
1135         * tests/mozilla/ecma/Date/15.9.5.10-3.js:
1136         * tests/mozilla/ecma/Date/15.9.5.10-4.js:
1137         * tests/mozilla/ecma/Date/15.9.5.10-5.js:
1138         * tests/mozilla/ecma/Date/15.9.5.10-6.js:
1139         * tests/mozilla/ecma/Date/15.9.5.10-7.js:
1140         * tests/mozilla/ecma/Date/15.9.5.10-8.js:
1141         * tests/mozilla/ecma/Date/15.9.5.10-9.js:
1142         * tests/mozilla/ecma/jsref.js:
1143         * tests/mozilla/ecma_2/jsref.js:
1144         * tests/mozilla/ecma_3/Date/shell.js:
1145
1146 2007-03-12  Kevin McCullough  <kmccullough@apple.com>
1147
1148         Reviewed by .
1149
1150         - Update tests for new DST rules.
1151
1152         * tests/mozilla/ecma/shell.js:
1153
1154 2007-03-11  Geoffrey Garen  <ggaren@apple.com>
1155
1156         Reviewed by Oliver Hunt.
1157         
1158         Fixed <rdar://problem/4681051> Installer crashes in KJS::Collector::
1159         markOtherThreadConservatively(KJS::Collector::Thread*) trying to install 
1160         iLife 06 using Rosetta on an Intel Machine
1161         
1162         The problem was that our thread-specific data destructor would modify the
1163         list of active JavaScript threads without holding the JSLock, corrupting
1164         the list. Corruption was especially likely if one JavaScript thread exited 
1165         while another was starting up.
1166
1167         * JavaScriptCore.exp:
1168         * kjs/JSLock.cpp: Don't conflate locking the JSLock with registering a
1169         thread, since the thread-specific data destructor needs to lock
1170         without registering a thread. Instead, treat thread registration as a
1171         part of the convenience of the JSLock object, and whittle down JSLock::lock()
1172         to just the bits that actually do the locking.
1173         (KJS::JSLock::lock):
1174         (KJS::JSLock::registerThread):
1175         * kjs/JSLock.h: Updated comments to mention the new behavior above, and
1176         other recent changes.
1177         (KJS::JSLock::JSLock):
1178         * kjs/collector.cpp:
1179         (KJS::destroyRegisteredThread): Lock here.
1180         (KJS::Collector::registerThread): To match, assert that we're locked here.
1181
1182 2007-03-10  Geoffrey Garen  <ggaren@apple.com>
1183
1184         Reviewed by Darin Adler.
1185
1186         Fixed <rdar://problem/4587763> PAC file: lock inversion between QT and 
1187         JSCore causes a hang @ www.panoramas.dk
1188         
1189         With a PAC file, run-webkit-tests --threaded passes, the reported site
1190         works, and all the Quicktime/JavaScript and Flash/JavaScript examples
1191         I found through Google work, too.
1192         
1193         Any time JavaScript causes arbitrary non-JavaScript code to execute, it 
1194         risks deadlock, because that code may block, trying to acquire a lock 
1195         owned by a thread that is waiting to execute JavaScript. In this case,
1196         the thread was a networking thread that was waiting to interpret a PAC file.
1197         
1198         Because non-JavaScript code may execute in response to, well, anything,
1199         a perfect solution to this problem is impossible. I've implemented an
1200         optimistic solution, instead: JavaScript will drop its lock whenever it
1201         makes a direct call to non-JavaScript code through a bridging/plug-in API,
1202         but will blissfully ignore the indirect ways it may cause non-JavaScript 
1203         code to run (resizing a window, for example). 
1204         
1205         Unfortunately, this solution introduces significant locking overhead in 
1206         the bridging APIs. I don't see a way around that.
1207
1208         This patch includes some distinct bug fixes I saw along the way:
1209         
1210         * bindings/objc/objc_instance.mm: Fixed a bug where a nested begin() call
1211         would leak its autorelease pool, because it would NULL out _pool without
1212         draining it.
1213
1214         * bindings/runtime_object.cpp:
1215         (RuntimeObjectImp::methodGetter): Don't copy an Identifier to ASCII only
1216         to turn around and make an Identifier from the ASCII. In an earlier 
1217         version of this patch, the copy caused an assertion failure. Now it's 
1218         just unnecessary work.
1219         (RuntimeObjectImp::getOwnPropertySlot): ditto
1220
1221         * bindings/objc/objc_instance.h: Removed overrides of setVAlueOfField and
1222         getValueOfField, because they did exactly what the base class versions did.
1223         Removed overrides of Noncopyable declarations for the same reason.
1224
1225         * bindings/runtime.h: Inherit from Noncopyable instead of rolling our own.
1226         * bindings/c/c_instance.h: ditto
1227
1228         And the actual patch:
1229         
1230         * API/JSCallbackConstructor.cpp: Drop all locks when calling out to C.
1231         (KJS::JSCallbackConstructor::construct):
1232         * API/JSCallbackFunction.cpp: ditto
1233         (KJS::JSCallbackFunction::callAsFunction):
1234         * API/JSCallbackObject.cpp: ditto
1235         (KJS::JSCallbackObject::init):
1236         (KJS::JSCallbackObject::~JSCallbackObject):
1237         (KJS::JSCallbackObject::getOwnPropertySlot):
1238         (KJS::JSCallbackObject::put):
1239         (KJS::JSCallbackObject::deleteProperty):
1240         (KJS::JSCallbackObject::construct):
1241         (KJS::JSCallbackObject::hasInstance):
1242         (KJS::JSCallbackObject::callAsFunction):
1243         (KJS::JSCallbackObject::getPropertyNames):
1244         (KJS::JSCallbackObject::toNumber):
1245         (KJS::JSCallbackObject::toString):
1246         (KJS::JSCallbackObject::staticValueGetter):
1247         (KJS::JSCallbackObject::callbackGetter):
1248         
1249         * bindings/c/c_instance.cpp: Drop all locks when calling out to C.
1250         (KJS::Bindings::CInstance::invokeMethod):
1251         (KJS::Bindings::CInstance::invokeDefaultMethod):
1252         * bindings/c/c_runtime.cpp: Drop all locks when calling out to C.
1253         (KJS::Bindings::CField::valueFromInstance):
1254         (KJS::Bindings::CField::setValueToInstance):
1255         * bindings/jni/jni_objc.mm:
1256         (KJS::Bindings::dispatchJNICall): Drop all locks when calling out to Java.
1257
1258         * bindings/objc/objc_instance.mm: The changes here are to accomodate the
1259         fact that C++ unwinding of DropAllLocks goes crazy when you put it inside
1260         a @try block. I moved all JavaScript stuff outside of the @try blocks, and 
1261         then prefixed the whole blocks with DropAllLocks objects. This required some
1262         supporting changes in other functions, which now acquire the JSLock for
1263         themselves, intead of relying on their callers to do so.
1264         (ObjcInstance::end):
1265         (ObjcInstance::invokeMethod):
1266         (ObjcInstance::invokeDefaultMethod):
1267         (ObjcInstance::setValueOfUndefinedField):
1268         (ObjcInstance::getValueOfUndefinedField):
1269         * bindings/objc/objc_runtime.mm: Same as above, except I didn't want to
1270         change throwError to acquire the JSLock for itself.
1271         (ObjcField::valueFromInstance):
1272         (ObjcField::setValueToInstance):
1273         * bindings/objc/objc_utility.mm: Supporting changes mentioned above.
1274         (KJS::Bindings::convertValueToObjcValue):
1275         (KJS::Bindings::convertObjcValueToValue):
1276
1277         * kjs/JSLock.cpp: 
1278         (1) Fixed DropAllLocks to behave as advertised, and drop the JSLock only 
1279         if the current thread actually acquired it in the first place. This is 
1280         important because WebKit needs to ensure that the JSLock has been 
1281         dropped before it makes a plug-in call, even though it doesn't know if 
1282         the current thread actually acquired the JSLock. (We don't want WebKit
1283         to accidentally drop a lock belonging to *another thread*.)
1284         (2) Used the new per-thread code written for (1) to make recursive calls
1285         to JSLock very cheap. JSLock now knows to call pthread_mutext_lock/ 
1286         pthread_mutext_unlock only at nesting level 0.
1287         (KJS::createDidLockJSMutex):
1288         (KJS::JSLock::lock):
1289         (KJS::JSLock::unlock):
1290         (KJS::DropAllLocks::DropAllLocks):
1291         (KJS::DropAllLocks::~DropAllLocks):
1292         (KJS::JSLock::lockCount):
1293         * kjs/JSLock.h: Don't duplicate Noncopyable.
1294         (KJS::JSLock::~JSLock):
1295
1296         * wtf/Assertions.h: Blind attempt at helping the Windows build.
1297
1298 2007-03-08  MorganL  <morganl.webkit@yahoo.com>
1299
1300         Reviewed by Darin.
1301
1302         http://bugs.webkit.org/show_bug.cgi?id=13018
1303         Bug 13018: allow embedders to override the definition of CRASH.
1304
1305         * wtf/Assertions.h: make it possible to override CRASH.
1306
1307 2007-03-07  Anrong Hu  <huanr@yahoo.com>
1308
1309         Reviewed by Maciej.
1310
1311         Fix http://bugs.webkit.org/show_bug.cgi?id=12535
1312         Bug 12535: Stack-optimizing compilers can trick GC into freeing in-use objects
1313
1314         * kjs/internal.cpp:
1315         (KJS::StringImp::toObject): Copy val onto the stack so it is not subject to garbage collection.
1316
1317 2007-03-07  Geoffrey Garen  <ggaren@apple.com>
1318
1319         Build fix for non-multiple-thread folks.
1320         
1321         Use a shared global in the non-multiple-thread case.
1322
1323         * wtf/FastMalloc.cpp:
1324         (WTF::isForbidden):
1325         (WTF::fastMallocForbid):
1326         (WTF::fastMallocAllow):
1327
1328 2007-03-07  Geoffrey Garen  <ggaren@apple.com>
1329
1330         Reviewed by Darin Adler.
1331         
1332         Fixed ASSERT failure I just introduced.
1333         
1334         Made the fastMalloc isForbidden flag per thread. (Oops!) We expect that
1335         other threads will malloc while we're marking -- we just want to prevent
1336         our own marking from malloc'ing.
1337
1338         * wtf/FastMalloc.cpp:
1339         (WTF::initializeIsForbiddenKey):
1340         (WTF::isForbidden):
1341         (WTF::fastMallocForbid):
1342         (WTF::fastMallocAllow):
1343         (WTF::fastMalloc):
1344         (WTF::fastCalloc):
1345         (WTF::fastFree):
1346         (WTF::fastRealloc):
1347         (WTF::do_malloc):
1348
1349 2007-03-07  Shrikant Gangoda  <shrikant.gangoda@celunite.com>
1350
1351         Reviewed by Maciej.
1352
1353         http://bugs.webkit.org/show_bug.cgi?id=12997
1354
1355         Wrap pthread-specific assertion in #if USE(MULTIPLE_THREADS).
1356
1357         * kjs/collector.cpp:
1358         (KJS::Collector::markMainThreadOnlyObjects):
1359
1360 2007-03-06  Geoffrey Garen  <ggaren@apple.com>
1361
1362         Reviewed by Maciej Stachowiak.
1363         
1364         Fixed <rdar://problem/4576242> | http://bugs.webkit.org/show_bug.cgi?id=12586
1365         PAC file: malloc deadlock sometimes causes a hang @ www.apple.com/pro/profiles/ (12586)
1366         
1367         This is a modified version of r14752 on the branch.
1368         
1369         These changes just add debugging functionality. They ASSERT that we don't 
1370         malloc during the mark phase of a garbage collection, which can cause a
1371         deadlock.
1372
1373         * kjs/collector.cpp:
1374         (KJS::Collector::collect):
1375         * wtf/FastMalloc.cpp:
1376         (WTF::fastMallocForbid):
1377         (WTF::fastMallocAllow):
1378         (WTF::fastMalloc):
1379         (WTF::fastCalloc):
1380         (WTF::fastFree):
1381         (WTF::fastRealloc):
1382         (WTF::do_malloc):
1383         * wtf/FastMalloc.h:
1384
1385 2007-03-06  Geoffrey Garen  <ggaren@apple.com>
1386
1387         Reviewed by Maciej Stachowiak.
1388         
1389         Fixed all known crashers exposed by run-webkit-tests --threaded. This covers:
1390
1391         <rdar://problem/4565394> | http://bugs.webkit.org/show_bug.cgi?id=12585 
1392             PAC file: after closing a window that contains macworld.com, new window 
1393             crashes (KJS::PropertyMap::mark()) (12585)
1394         <rdar://problem/4571215> | http://bugs.webkit.org/show_bug.cgi?id=9211
1395             PAC file: Crash occurs when clicking on the navigation tabs at http://www.businessweek.com/ (9211)
1396         <rdar://problem/4557926> 
1397             PAC file: Crash occurs when attempting to view image in slideshow mode 
1398             at http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute (KJS::
1399             ExecState*) + 312) if you use a PAC file
1400
1401         (1) Added some missing JSLocks, along with related ASSERTs.
1402         
1403         (2) Fully implemented support for objects that can only be garbage collected
1404         on the main thread. So far, only WebCore uses this. We can add it to API
1405         later if we learn that it's needed. 
1406         
1407         The implementation uses a "main thread only" flag inside each object. When 
1408         collecting on a secondary thread, the Collector does an extra pass through 
1409         the heap to mark all flagged objects before sweeping. This solution makes
1410         the common case -- flag lots of objects, but never collect on a secondary 
1411         thread -- very fast, even though the uncommon case of garbage collecting
1412         on a secondary thread isn't as fast as it could be. I left some notes 
1413         about how to speed it up, if we ever care.
1414         
1415         For posterity, here are some things I learned about GC while investigating:
1416         
1417         * Each collect must either mark or delete every heap object. "Zombie" 
1418         objects, which are neither marked nor deleted, raise these issues:
1419
1420             * On the next pass, the conservative marking algorithm might mark a 
1421             zombie, causing it to mark freed objects.
1422
1423             * The client might try to use a zombie, which would seem live because 
1424             its finalizer had not yet run.
1425
1426         * A collect on the main thread is free to delete any object. Presumably, 
1427         objects allocated on secondary threads have thread-safe finalizers.
1428
1429         * A collect on a secondary thread must not delete thread-unsafe objects.
1430
1431         * The mark function must be thread-safe.
1432         
1433         Line by line comments:
1434
1435         * API/JSObjectRef.h: Added comment specifying that the finalize callback 
1436         may run on any thread.
1437
1438         * JavaScriptCore.exp: Nothing to see here.
1439
1440         * bindings/npruntime.cpp:
1441         (_NPN_GetStringIdentifier): Added JSLock.
1442
1443         * bindings/objc/objc_instance.h:
1444         * bindings/objc/objc_instance.mm:
1445         (ObjcInstance::~ObjcInstance): Use an autorelease pool. The other callers 
1446         to CFRelease needed one, too, but they were dead code, so I removed them 
1447         instead. (This fixes a leak seen while running run-webkit-tests --threaded,
1448         although I don't think it's specifically a threading issue.) 
1449         
1450         * kjs/collector.cpp:
1451         (KJS::Collector::collectOnMainThreadOnly): New function. Tells the collector
1452         to collect a value only if it's collecting on the main thread.
1453         (KJS::Collector::markMainThreadOnlyObjects): New function. Scans the heap
1454         for "main thread only" objects and marks them.
1455
1456         * kjs/date_object.cpp: 
1457         (KJS::DateObjectImp::DateObjectImp): To make the new ASSERTs happy, allocate 
1458         our globals on the heap, avoiding a seemingly unsafe destructor call at 
1459         program exit time.
1460         * kjs/function_object.cpp:
1461         (FunctionPrototype::FunctionPrototype): ditto
1462
1463         * kjs/interpreter.cpp:
1464         (KJS::Interpreter::mark): Removed boolean parameter, which was an incomplete
1465         and arguably hackish way to implement markMainThreadOnlyObjects() inside WebCore.
1466         * kjs/interpreter.h:
1467
1468         * kjs/identifier.cpp:
1469         (KJS::identifierTable): Added some ASSERTs to check for thread safety 
1470         problems.
1471
1472         * kjs/list.cpp: Added some ASSERTs to check for thread safety problems.
1473         (KJS::allocateListImp):
1474         (KJS::List::release):
1475         (KJS::List::append):
1476         (KJS::List::empty): Make the new ASSERTs happy.
1477
1478         * kjs/object.h:
1479         (KJS::JSObject::JSObject): "m_destructorIsThreadSafe" => "m_collectOnMainThreadOnly".
1480         I removed the constructor parameter because m_collectOnMainThreadOnly,
1481         like m_marked, is a Collector bit, so only the Collector should set or get it.
1482
1483         * kjs/object_object.cpp:
1484         (ObjectPrototype::ObjectPrototype): Make the ASSERTs happy.
1485         * kjs/regexp_object.cpp:
1486         (RegExpPrototype::RegExpPrototype): ditto
1487
1488         * kjs/ustring.cpp: Added some ASSERTs to check for thread safety problems.
1489         (KJS::UCharReference::ref): 
1490         (KJS::UString::Rep::createCopying):
1491         (KJS::UString::Rep::create):
1492         (KJS::UString::Rep::destroy):
1493         (KJS::UString::null): Make the new ASSERTs happy.
1494         * kjs/ustring.h:
1495         (KJS::UString::Rep::ref): Added some ASSERTs to check for thread safety problems.
1496         (KJS::UString::Rep::deref):
1497
1498         * kjs/value.h:
1499         (KJS::JSCell::JSCell):
1500
1501 2007-03-06  Geoffrey Garen  <ggaren@apple.com>
1502
1503         Reviewed by Maciej Stachowiak.
1504         
1505         2% speedup on super accurate JS iBench.
1506
1507         (KJS::Collector::collect): Removed anti-optimization to call
1508         pthread_is_threaded_np() before calling pthread_main_np(). Almost all 
1509         apps have more than one thread, so the extra call is actually worse.
1510         Interestingly, even the single-threaded testkjs shows a speed gain
1511         from removing the pthread_is_threaded_np() short-circuit. Not sure why.
1512
1513 2007-03-04  Don Gibson  <dgibson77@gmail.com>
1514
1515         Reviewed by Nikolas Zimmermann.
1516
1517         - fix http://bugs.webkit.org/show_bug.cgi?id=12950
1518           Assertions.cpp should not #define macros that are already defined
1519
1520         * wtf/Assertions.cpp: Don't #define WINVER and _WIN32_WINNT if they
1521         are already defined.
1522
1523 2007-03-02  Steve Falkenburg  <sfalken@apple.com>
1524
1525         Reviewed by Anders.
1526         
1527         Add unsigned int hash traits (matches existing unsigned long version)
1528
1529         * wtf/HashTraits.h:
1530         (WTF::):
1531
1532 2007-03-02  Adam Roben  <aroben@apple.com>
1533
1534         Reviewed by Kevin M.
1535
1536         Try to fix the Qt build.
1537
1538         * kjs/DateMath.cpp:
1539         (KJS::msToGregorianDateTime): Removed unnecessary "struct" keyword.
1540         * kjs/DateMath.h: Moved forward declarations to the top of the file
1541         before they are used.
1542         * kjs/date_object.cpp:
1543         (KJS::formatLocaleDate): Changed to take a const GregorianDateTime&
1544         since GregorianDateTime is Noncopyable.
1545
1546 2007-03-02  Darin Adler  <darin@apple.com>
1547
1548         Reviewed by Kevin McCullough.
1549
1550         - fix http://bugs.webkit.org/show_bug.cgi?id=12867
1551           REGRESSION: BenchJS test 7 (dates) is 220% slower than in Safari 2.0.4
1552
1553         * kjs/DateMath.h: Marked GregorianDateTime as noncopyable, since it has a non-trivial
1554         destructor and not the correspoding copy constructor or assignment operator.
1555         Changed the GregorianDateTime constructor to use member initialization syntax.
1556         Fixed the destructor to use the array delete operator, since timeZone is an array.
1557
1558         * kjs/DateMath.cpp:
1559         (KJS::daysInYear): Changed to call isLeapYear so the rule is not repeated twice.
1560         (KJS::getUTCOffset): Added caching on PLATFORM(DARWIN), since we can rely on the
1561         notify_check function and "com.apple.system.timezone" to let us know when the
1562         offset has changed.
1563
1564 2007-02-27  Geoffrey Garen  <ggaren@apple.com>
1565
1566         Reviewed by Darin Adler.
1567         
1568         Follow-up to fixing http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
1569         JS objects not collected after closing window @ ebay.com/maps.google.com
1570         
1571         Changed Interpreter cache of global constructors and prototypes from
1572         ProtectedPtrs to bare, marked pointers. ProtectedPtrs are inefficient,
1573         and they increase the risk of reference cycles. Also, Darin said something
1574         about ProtectedPtrs giving him warts.
1575         
1576         Also changed data members to precise types from generic JSObject*'s.
1577         
1578         Layout tests and JS tests pass.
1579
1580         * kjs/SavedBuiltins.h:
1581         * kjs/interpreter.cpp:
1582         (KJS::Interpreter::init):
1583         (KJS::Interpreter::~Interpreter):
1584         (KJS::Interpreter::initGlobalObject): Moved Identifier::init() call to
1585         constructor, for clarity.
1586         (KJS::Interpreter::mark):
1587         * kjs/interpreter.h:
1588
1589 2007-02-27  Geoffrey Garen  <ggaren@apple.com>
1590
1591         Reviewed by Maciej Stachowiak.
1592         
1593         Fixed http://bugs.webkit.org/show_bug.cgi?id=12659 | <rdar://problem/4954306>
1594         JS objects not collected after closing window @ ebay.com/maps.google.com
1595
1596         Don't GC in the Interpreter destructor. For that to work, the Interpreter
1597         would have to NULL out all of its ProtectedPtrs before calling collect(). But 
1598         we've decided that we don't want things to work that way, anyway. We want the
1599         client to be in charge of manual GC so that it can optimize cases when
1600         it will be destroying many interpreters at once
1601         (e.g., http://bugs.webkit.org/show_bug.cgi?id=12900).
1602         
1603         Also removed Interpreter::collect() because it was redundant with 
1604         Collector::collect().
1605
1606         * JavaScriptCore.exp:
1607         * kjs/interpreter.cpp:
1608         (KJS::Interpreter::~Interpreter):
1609         * kjs/testkjs.cpp:
1610         (TestFunctionImp::callAsFunction):
1611
1612 2007-02-26  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
1613
1614         Reviewed by Adam Roben.
1615
1616         Rename *_SUPPORT defines to ENABLE_*.
1617
1618         * jscore.bkl:
1619
1620 2007-02-26  Maciej Stachowiak  <mjs@apple.com>
1621
1622         Reviewed by Lars.
1623         
1624         - <rdar://problem/5021698> Disable experimental SVG features (12883)
1625
1626         * wtf/Platform.h: Add ENABLE() macro similar to HAVE() and USE(), to
1627         allow nicer handling of optional WebKit features.
1628
1629 2007-02-22  George Staikos  <staikos@kde.org>
1630
1631         Reviewed by Lars.
1632
1633         Add return values
1634
1635         * wtf/unicode/qt4/UnicodeQt4.h:
1636         (WTF::Unicode::toLower):
1637         (WTF::Unicode::toUpper):
1638
1639 2007-02-22  Oscar Cwajbaum  <public@oscarc.net>
1640
1641         Reviewed by Maciej.
1642
1643         Fix ARM-specific alignment problem in FastMalloc
1644         http://bugs.webkit.org/show_bug.cgi?id=12841
1645
1646         * wtf/FastMalloc.cpp:
1647         Modify how pageheap_memory is declared to ensure proper alignment
1648         on architectures such as ARM
1649
1650 2007-02-20  Zack Rusin  <zrusin@trolltech.com>
1651
1652         Reviewed by Lars
1653
1654         Make sure that non-void methods always return something.
1655
1656         * wtf/unicode/qt4/UnicodeQt4.h:
1657         (WTF::Unicode::toLower):
1658         (WTF::Unicode::toUpper):
1659         (WTF::Unicode::foldCase):
1660
1661 2007-02-18  Kevin Ollivier  <kevino@theolliviers.com>
1662
1663         Reviewed by Adam Roben.
1664
1665         Fix cases where MSVC-specific code was identified as Win32 platform
1666         code. (as it should be compiled for e.g. wx port when using MSVC too)
1667         
1668         * wtf/Assertions.h: 
1669         * wtf/MathExtras.h:
1670         * wtf/StringExtras.h:
1671         changed PLATFORM(WIN) sections to COMPILER(MSVC) as necessary
1672
1673 2007-02-17  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
1674
1675         Reviewed by Adam Roben.
1676
1677         Fix crashes on ARM due to different struct packing. Based on a patch
1678         by Mike Emmel.
1679         * kjs/ustring.cpp: compile-time assert to make sure sizeof(UChar) == 2
1680         * kjs/ustring.h: pack UChar struct to ensure that sizeof(UChar) == 2
1681         * wtf/Assertions.h: add COMPILE_ASSERT macro for compile-time assertions
1682
1683 2007-02-16  George Staikos  <staikos@kde.org>
1684
1685         Reviewed by Maciej.
1686
1687         Fix uninitialized variable
1688
1689         * bindings/testbindings.cpp:
1690         (myAllocate):
1691
1692 2007-02-16  Anders Carlsson  <acarlsson@apple.com>
1693
1694         Reviewed by Mitz.
1695
1696         http://bugs.webkit.org/show_bug.cgi?id=12788
1697         REGRESSION: Going back one page in history has a noticeable delay
1698         
1699         Um...if all elements in two vectors are equal, then I guess we could say that
1700         the two vectors are equal too.
1701         
1702         * wtf/Vector.h:
1703         (WTF::):
1704
1705 2007-02-14  Anders Carlsson  <acarlsson@apple.com>
1706
1707         Reviewed by Darin.
1708
1709         Add new canCompareWithMemcmp vector trait and use it to determine whether
1710         operator== can use memcmp.
1711         
1712         * wtf/Vector.h:
1713         (WTF::):
1714         (WTF::VectorTypeOperations::compare):
1715         (WTF::operator==):
1716         * wtf/VectorTraits.h:
1717         (WTF::):
1718
1719 2007-02-13  Brady Eidson  <beidson@apple.com>
1720
1721         Reviewed by Darin
1722         
1723         Tweaked vector a bit
1724
1725         * wtf/Vector.h:
1726         (WTF::operator==):
1727
1728 2007-02-13  Dex Deacon  <occupant4@gmail.com>
1729
1730         Reviewed by Darin.
1731
1732         - fix for http://bugs.webkit.org/show_bug.cgi?id=12750
1733           Vector operator== was not defined correctly. It returned void,
1734           did not accept const Vectors, and used an int instead of size_t. 
1735
1736         * wtf/Vector.h: fixed comparison operators
1737         (WTF::operator==):
1738         (WTF::operator!=):
1739
1740 2007-02-10  David Carson  <dacarson@gmail.com>
1741
1742         Reviewed by Maciej.
1743
1744         - fix for http://bugs.webkit.org/show_bug.cgi?id=12636
1745         Corrected the generation of method signatures when the parameter
1746         is an Array. 
1747         Added support for converting a Javascript array to a Java array.
1748
1749         * bindings/jni/jni_utility.h: added new type for array, array_type
1750         * bindings/jni/jni_runtime.cpp: add support for new array type
1751         (JavaField::valueFromInstance):
1752         (JavaField::setValueToInstance):
1753         (JavaMethod::JavaMethod):
1754         (JavaMethod::signature):
1755         * bindings/jni/jni_utility.cpp: add support for new array type
1756         (KJS::Bindings::callJNIMethod):
1757         (KJS::Bindings::callJNIStaticMethod):
1758         (KJS::Bindings::callJNIMethodIDA):
1759         (KJS::Bindings::JNITypeFromClassName):
1760         (KJS::Bindings::signatureFromPrimitiveType):
1761         (KJS::Bindings::JNITypeFromPrimitiveType):
1762         (KJS::Bindings::getJNIField):
1763         (KJS::Bindings::convertArrayInstanceToJavaArray): new method
1764         converts the Javascript array to the requested Java array.
1765         (KJS::Bindings::convertValueToJValue):
1766
1767 2007-02-08  Anders Carlsson  <acarlsson@apple.com>
1768
1769         Reviewed by Geoff.
1770
1771         <rdar://problem/4930614>
1772         Safari complains about "Slow Script" if GMail is left open and machine is busy
1773         
1774         <rdar://problem/4649516>
1775         Turn off slow script dialog or crank up time that makes it come up
1776         
1777         <rdar://problem/4963589>
1778         Slow script warning is displayed after closing of PROMPT or PRINT dialog
1779         
1780         Re-do the way script timeouts are handled. No longer use a unix timer that sends signals. Instead, add a 
1781         tick count and increment it in loop bodies. If the tick count reaches a threshold, do a timeout check. If the total time executing
1782         is higher than the timeout value, (possibly) interrupt the script. The timeout checker also adjusts the threshold dynamically
1783         to prevent doing the timeout check too often.
1784          
1785         * JavaScriptCore.exp:
1786         Remove pause and resume calls.
1787         
1788         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1789         Add winmm.lib.
1790
1791         * kjs/interpreter.cpp:
1792         (KJS::Interpreter::init):
1793         (KJS::Interpreter::~Interpreter):
1794         (KJS::Interpreter::startTimeoutCheck):
1795         (KJS::Interpreter::stopTimeoutCheck):
1796         (KJS::Interpreter::resetTimeoutCheck):
1797         (KJS::getCurrentTime):
1798         (KJS::Interpreter::checkTimeout):
1799         * kjs/interpreter.h:
1800         (KJS::Interpreter::timedOut):
1801         * kjs/nodes.cpp:
1802         (DoWhileNode::execute):
1803         (WhileNode::execute):
1804         (ForNode::execute):
1805
1806 2007-02-07  Darin Adler  <darin@apple.com>
1807
1808         * JavaScriptCore.vcproj/JavaScriptCore.sln: Reenable testkjs.
1809
1810 2007-02-07  Darin Adler  <darin@apple.com>
1811
1812         Reviewed by Geoff.
1813
1814         - another build fix; this time for sure
1815
1816         * pcre/pcre_exec.c: (match):
1817         The compiler caught an incorrect use of the othercase variable across
1818         a call to RMATCH in character repeat processing. Local variables can
1819         change in the crazy NO_RECURSE mode that we use, so we instead need
1820         the value in othercase to be in one of the special stack frame variables.
1821         Added a new stack frame variable for this purpose named repeat_othercase.
1822         Also noted a similar error in the non-UTF-16 side of the #ifdef, but
1823         didn't try to fix that one. Also removed a SUPPORT_UCP #ifdef from the
1824         PCRE_UTF16 side; that code doesn't work without the Unicde properties
1825         table, and we don't try to use it that way.
1826
1827 2007-02-06  Steve Falkenburg  <sfalken@apple.com>
1828
1829         Disable testkjs in sln until we figure out mysterious compiler warning.
1830
1831         * JavaScriptCore.vcproj/JavaScriptCore.sln:
1832
1833 2007-02-06  Steve Falkenburg  <sfalken@apple.com>
1834
1835         Build fix by ggaren
1836
1837         * pcre/pcre_exec.c:
1838         (match):
1839
1840 2007-02-06  Darin Adler  <darin@apple.com>
1841
1842         Reviewed by Geoff.
1843
1844         - fix <rdar://problem/4979089> PCRE should avoid setjmp/longjmp even when compiler
1845           is not GCC
1846
1847         Added a new code path that's slower and way uglier but doesn't rely on GCC's
1848         computed gotos.
1849
1850         * pcre/pcre_exec.c: Added a numeric parameter to the RMATCH function. It must be
1851         different at every RMATCH call site. Changed the non-GCC NO_RECURSE version of
1852         the macro to use a label incorporating the number. Changed the RRETURN macro to
1853         use a goto instead of longjmp.
1854         (match): Added a different number at each callsite, using a perl script for the
1855         first-time task. Going forward it should be easy to maintain by hand. Added a
1856         switch statement at the bottom of the function. We'll get compile time errors
1857         if we have anything in the switch statement that's never used in an RMATCH,
1858         but errors in the other direction are silent except at runtime.
1859
1860 2007-02-06  Darin Adler  <darin@apple.com>
1861
1862         Reviewed by John.
1863
1864         - fix <rdar://problem/4687840> 9A241: JavaScript RegExp 25-30x slower than on 10.4.7
1865
1866         I used Shark to figure out what to do. The test case is now 15% faster than with
1867         stock Safari. Some other regular expression cases might still be a few % slower
1868         than before, but the >10x slowdown is now completely gone.
1869
1870         1) Fix slowness caused by setjmp/longjmp by using computed goto instead.
1871
1872         Use GCC extensions - locally declared labels, labels as values, and computed goto -
1873         instead of using setjmp/longjmp to implemement non-recursive version of the regular
1874         expression system. We could probably make this even faster if we reduced the use
1875         of malloc a bit too.
1876
1877         2) Fix slowness caused by allocating heapframe objects by allocating the first
1878            16 of them from the stack.
1879
1880         3) Speed up use of malloc and free in PCRE by making it use fastMalloc and fastFree.
1881
1882         4) Speed up the test case by adding a special case to a UString function.
1883
1884         5) Made a small improvement to the innermost hottest loop of match by hoisting
1885            the conversion from int to pcre_uchar out of the loop.
1886
1887         * JavaScriptCore.xcodeproj/project.pbxproj: Compile FastMallocPCRE.cpp, and don't
1888         compile pcre_globals.c.
1889
1890         * wtf/FastMallocPCRE.cpp: Added. A copy of pcre_globals.c that uses FastMalloc.h.
1891         This is better than code that sets the PCRE allocation globals because by doing it
1892         this way there's guaranteed to be no problem with order of initialization.
1893
1894         * kjs/ustring.cpp: (KJS::UString::spliceSubstringsWithSeparators): Add a fast
1895         special case when this is called for only one subrange and no seaprators. This
1896         was happening a lot in the test case and it seems quite reasonable to optimize this.
1897
1898         * pcre/pcre_exec.c: Create a copy of the RMATCH and RRETURN macros that use goto
1899         instead of setjmp/longjmp. Change code that calls pcre_stack_malloc to first use
1900         storage on the stack inside the match function.
1901         (match): Move initialization of utf8 up a couple lines to avoid "possibly used
1902         uninitialized" warning. Use a local variable so we compare with pcre_uchar instead
1903         of with int inside the inner "find a character" loop.
1904
1905 2007-02-03  George Staikos  <staikos@kde.org>
1906
1907         Reviewed by Alexey.
1908
1909         -1 is not a valid point.  We can't handle anything > 0xffff anyway.
1910         Fixes crash on cases like eval("x");
1911
1912         * wtf/unicode/qt4/UnicodeQt4.h:
1913         (WTF::Unicode::category):
1914
1915 2007-02-02  Darin Adler  <darin@apple.com>
1916
1917         Reviewed by Anders.
1918
1919         - fix copying and assigning a ListHashSet
1920
1921         No test because the code path with bugs I am fixing is not used yet.
1922
1923         * wtf/ListHashSet.h: Tweaked ListHashSetNodeAllocator a little bit for clarity.
1924         Changed m_allocator to be an OwnPtr instead of doing an explicit delete.
1925         Fixed bug in copy constructor where we'd have an uninitialized m_allocator.
1926         Fixed bug in assignment operator where it would swap only the hash table, and
1927         not the head, tail, and allocator pointers.
1928
1929 2007-02-02  Geoffrey Garen  <ggaren@apple.com>
1930
1931         Reviewed by Maciej Stachowiak.
1932         
1933         Use WTFLog instead of fprintf for logging KJS::Node leaks.
1934
1935         * kjs/nodes.cpp:
1936         (NodeCounter::~NodeCounter): Changed count to unsigned, updated
1937         to match style guidelines.
1938
1939 2007-02-02  Maciej Stachowiak  <mjs@apple.com>
1940
1941         - not reviewed, build fix
1942
1943         * wtf/ListHashSet.h:
1944         (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): ummm, use union correctly
1945
1946 2007-02-01  Maciej Stachowiak  <mjs@apple.com>
1947
1948         Reviewed by Darin.
1949         
1950         - use a custom allocator for ListHashSet, to fix ~1% perf regression using it for form control
1951
1952         * wtf/ListHashSet.h:
1953         (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator):
1954         (WTF::ListHashSetNodeAllocator::allocate):
1955         (WTF::ListHashSetNodeAllocator::deallocate):
1956         (WTF::ListHashSetNode::operator new):
1957         (WTF::ListHashSetNode::operator delete):
1958         (WTF::ListHashSetNode::destroy):
1959         (WTF::ListHashSetTranslator::translate):
1960         (WTF::::ListHashSet):
1961         (WTF::::~ListHashSet):
1962         (WTF::::add):
1963         (WTF::::unlinkAndDelete):
1964         (WTF::::deleteAllNodes):
1965
1966 2007-01-31  Maciej Stachowiak  <mjs@apple.com>
1967
1968         Reviewed by Adam.
1969         
1970         - fix sporadic crash
1971
1972         * wtf/ListHashSet.h:
1973         (WTF::::remove): remove before deleting
1974
1975 2007-01-31  Maciej Stachowiak  <mjs@apple.com>
1976
1977         Reviewed by Mark with help from Lars.
1978         
1979         - added new ListHashSet class, which combines a hashtable and a linked list to provide a set
1980         that keeps elements in inserted order
1981         
1982         This is to assist in fixing the following:
1983         <rdar://problem/4751164> REGRESSION: Safari places text on incorrect button when returning to a page via back [10541]
1984         http://bugs.webkit.org/show_bug.cgi?id=10541
1985
1986         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1987         * JavaScriptCore.xcodeproj/project.pbxproj:
1988         * wtf/HashTable.h:
1989         (WTF::HashTable::find):
1990         (WTF::HashTable::contains):
1991         (WTF::::find):
1992         (WTF::::contains):
1993         * wtf/ListHashSet.h: Added.
1994         (WTF::ListHashSetNode::ListHashSetNode):
1995         (WTF::ListHashSetNodeHashFunctions::hash):
1996         (WTF::ListHashSetNodeHashFunctions::equal):
1997         (WTF::ListHashSetIterator::ListHashSetIterator):
1998         (WTF::ListHashSetIterator::get):
1999         (WTF::ListHashSetIterator::operator*):
2000         (WTF::ListHashSetIterator::operator->):
2001         (WTF::ListHashSetIterator::operator++):
2002         (WTF::ListHashSetIterator::operator--):
2003         (WTF::ListHashSetIterator::operator==):
2004         (WTF::ListHashSetIterator::operator!=):
2005         (WTF::ListHashSetIterator::operator const_iterator):
2006         (WTF::ListHashSetIterator::node):
2007         (WTF::ListHashSetConstIterator::ListHashSetConstIterator):
2008         (WTF::ListHashSetConstIterator::get):
2009         (WTF::ListHashSetConstIterator::operator*):
2010         (WTF::ListHashSetConstIterator::operator->):
2011         (WTF::ListHashSetConstIterator::operator++):
2012         (WTF::ListHashSetConstIterator::operator--):
2013         (WTF::ListHashSetConstIterator::operator==):
2014         (WTF::ListHashSetConstIterator::operator!=):
2015         (WTF::ListHashSetConstIterator::node):
2016         (WTF::ListHashSetTranslator::hash):
2017         (WTF::ListHashSetTranslator::equal):
2018         (WTF::ListHashSetTranslator::translate):
2019         (WTF::::ListHashSet):
2020         (WTF::::operator):
2021         (WTF::::~ListHashSet):
2022         (WTF::::size):
2023         (WTF::::capacity):
2024         (WTF::::isEmpty):
2025         (WTF::::begin):
2026         (WTF::::end):
2027         (WTF::::find):
2028         (WTF::::contains):
2029         (WTF::::add):
2030         (WTF::::remove):
2031         (WTF::::clear):
2032         (WTF::::unlinkAndDelete):
2033         (WTF::::appendNode):
2034         (WTF::::deleteAllNodes):
2035         (WTF::::makeIterator):
2036         (WTF::::makeConstIterator):
2037         (WTF::deleteAllValues):
2038
2039 2007-01-30  Darin Adler  <darin@apple.com>
2040
2041         * kjs/DateMath.cpp: Fix license header to reflect LGPL as the first license
2042         mentioned. We still mention the option of using under MPL or GPL since some
2043         of this code came from the Mozilla project with those license terms.
2044
2045 2007-01-30  Simon Hausmann  <hausmann@kde.org>
2046
2047         Reviewed by Zack.
2048
2049         Turned JavaScriptCore from a separate library into an includable
2050         project, to combine it all into libWebKitQt.
2051
2052         * JavaScriptCore.pri: Added.
2053         * JavaScriptCore.pro: Removed.
2054         * kjs/testkjs.pro:
2055
2056 2007-01-29  Geoffrey Garen  <ggaren@apple.com>
2057
2058         Reviewed by Maciej Stachowiak.
2059
2060         Fixed <rdar://problem/4485644> REGRESSION: JavaScriptCore has init routines
2061         
2062         The TCMalloc module now initializes, if needed, inside GetCache() and 
2063         fastMallocSetIsMultiThreaded(). We leverage the same synchronization 
2064         technique used for enabling / disabling the single-threaded optimization 
2065         to synchronize initialization of the library without requiring a lock 
2066         for every malloc.
2067         
2068         1,251 runs of tcmalloc_unittest, 2 runs of a custom, massively multi-threaded 
2069         tcmalloc_unittest, and my custom version of the PLT show no regressions.
2070         Super-accurate JS iBench reports a .24% regression, which is right at the
2071         limit of its error range, so I'm declaring victory.
2072
2073         * wtf/FastMalloc.cpp:
2074         (WTF::fastMallocSetIsMultiThreaded): Initialize, if needed. (InitModule()
2075         checks the "if needed" part.)
2076         (WTF::TCMalloc_ThreadCache::GetCache): Restored original TCMalloc code
2077         inside #ifdef, for posterity. Added new initialization logic.
2078         (WTF::TCMalloc_ThreadCache::InitModule): Call InitTSD(), since we don't
2079         have a static initializer to call it for us, now. This means that fastMalloc
2080         is not usable as a general libc allocator, but it never was, and if it were
2081         the general libc allocator, we wouldn't be here in the first place, so whatever.
2082         (WTF::TCMalloc_ThreadCache::InitTSD): Don't try to take the pageheap_lock, 
2083         since InitModule already has it.
2084
2085 2007-01-29  Kevin McCullough  <KMcCullough@apple.com>
2086
2087         Reviewed by Geoff and Oliver.
2088
2089         - rdar://problem/4955561
2090         - missusing JavaScript shouldn't crash webkit.  Now it doesn't, in this case.
2091
2092         * bindings/objc/objc_runtime.mm:
2093         (ObjcFallbackObjectImp::callAsFunction):
2094         * bindings/runtime_method.cpp:
2095         (RuntimeMethod::callAsFunction):
2096         * bindings/runtime_object.cpp:
2097         (RuntimeObjectImp::callAsFunction):
2098
2099 2007-01-28  Geoffrey Garen  <ggaren@apple.com>
2100
2101         Reviewed by Maciej Stachowiak.
2102         
2103         First step in fixing <rdar://problem/4485644> REGRESSION: JavaScriptCore 
2104         has init routines
2105         
2106         Don't rely on a static initializer to store the main thread's ID (which
2107         we would use to detect allocations on secondary threads). Instead, require 
2108         the caller to notify fastMalloc if it might allocate on a secondary thread.
2109         
2110         Also fixed what seemed like a race condition in do_malloc.
2111         
2112         tcmalloc_unittest and my custom versions of JS iBench and PLT show no
2113         regressions.
2114
2115         * wtf/FastMalloc.cpp:
2116         (WTF::fastMallocSetIsMultiThreaded): 
2117         (1) Renamed from "fastMallocRegisterThread", which was a misleading name because 
2118         not all threads need to register with fastMalloc -- only secondary threads 
2119         need to, and only for the purpose of disabling its single-threaded optimization. 
2120
2121         (2) Use the pageheap_lock instead of a custom one, since we need to synchronize
2122         with the read of isMultiThreaded inside CreateCacheIfNecessary. This is a new
2123         requirement, now that we can't guarantee that the first call to CreateCacheIfNecessary
2124         will occur on the main thread at init time, before any other threads have been created.
2125
2126         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
2127         (WTF::do_malloc): Reverted WTF change only to call GetCache() if size <= kMaxSize.
2128         The WTF code would read phinited without holding the pageheap_lock, which
2129         seemed like a race condition. Regardless, calling GetCache reduces the number 
2130         of code paths to module initialization, which will help in writing the 
2131         final fix for this bug.
2132
2133 2007-01-28  David Kilzer  <ddkilzer@webkit.org>
2134
2135         Reviewed by Darin.
2136
2137         - fix http://bugs.webkit.org/show_bug.cgi?id=9815
2138           JavaScript TypeError loading Dean Edwards' JS compressor/obfuscator
2139
2140         Creating a function using 'new Function()' was not setting its prototype with the
2141         same flags as 'function() { }'.
2142
2143         Test: fast/js/function-prototype.html
2144
2145         * kjs/function_object.cpp:
2146         (FunctionObjectImp::construct): Change flags from DontEnum|DontDelete|ReadOnly to
2147         Internal|DontDelete to match FuncDeclNode::processFuncDecl() and
2148         FuncExprNode::evaluate() in kjs/nodes.cpp.
2149
2150 2007-01-27  Geoffrey Garen  <ggaren@apple.com>
2151
2152         Reviewed by Beth Dakin.
2153         
2154         Added some missing JSLocks, which might fix <rdar://problem/4889707>.
2155
2156         We need to lock whenever we might allocate memory because our FastMalloc
2157         implementation requires clients to register their threads, which we do
2158         through JSLock. 
2159         
2160         We also need to lock whenever modifying ref-counts because they're not 
2161         thread-safe.
2162
2163         * API/JSObjectRef.cpp:
2164         (JSClassCreate): Allocates memory
2165         (JSClassRetain): Modifies a ref-count
2166         (JSClassRelease): Modifies a ref-count
2167         (JSPropertyNameArrayRetain): Modifies a ref-count
2168         (JSPropertyNameArrayRelease): Modifies a ref-count
2169         * API/JSStringRef.cpp:
2170         (JSStringRetain): Modifies a ref-count
2171         * API/JSValueRef.cpp:
2172         (JSValueIsInstanceOfConstructor): Might allocate memory if an exception
2173         is thrown.
2174
2175 2007-01-27  Lars Knoll <lars@trolltech.com>
2176
2177         Fix the Qt build.
2178
2179         * bindings/qt/qt_instance.h:
2180
2181 2007-01-25  Geoffrey Garen  <ggaren@apple.com>
2182
2183         Reviewed by Maciej Stachowiak.
2184         
2185         Fixed <rdar://problem/4608404> WebScriptObject's _rootObject lack 
2186         of ownership policy causes crashes (e.g., in Dashcode)
2187         
2188         The old model for RootObject ownership was either to (1) leak them or (2) assign
2189         them to a single owner -- the WebCore::Frame -- which would destroy them 
2190         when it believed that all of its plug-ins had unloaded.
2191         
2192         This model was broken because of (1) and also because plug-ins are not the only 
2193         RootObject clients. All Bindings clients are RootObjects clients, including 
2194         applications, which outlive any particular WebCore::Frame.
2195         
2196         The new model for RootObject ownership is to reference-count them, with a
2197         throw-back to the old model: The WebCore::Frame tracks the RootObjects
2198         it creates, and invalidates them when it believes that all of its plug-ins 
2199         have unloaded.
2200         
2201         We maintain this throw-back to avoid plug-in leaks, particularly from Java.
2202         Java is completely broken when it comes to releasing JavaScript objects. 
2203         Comments in our code allege that Java does not always call finalize when 
2204         collecting objects. Moreoever, my own testing reveals that, when Java does 
2205         notify JavaScript of a finalize, the data it provides is totally bogus.
2206         
2207         This setup is far from ideal, but I don't think we can do better without
2208         completely rewriting the bindings code, and possibly part of the Java
2209         plug-in / VM.
2210         
2211         Layout tests pass. No additional leaks reported. WebCore/manual-tests/*liveconnect*
2212         and a few LiveConnect demos on the web also run without a hitch.
2213         
2214         const RootObject* => RootObject*, since we need to ref/deref
2215         
2216         * bindings/NP_jsobject.cpp:
2217         (jsDeallocate): deref our RootObjects. Also unprotect or JSObject, instead
2218         of just relying on the RootObject to do it for us when it's invalidated.
2219         (_isSafeScript): Check RootObject validity.
2220         (_NPN_CreateScriptObject): ditto
2221         (_NPN_Invoke): ditto
2222         (_NPN_Evaluate): ditto
2223         (_NPN_GetProperty): ditto
2224         (_NPN_SetProperty): ditto
2225         (_NPN_RemoveProperty): ditto
2226         (_NPN_HasProperty): ditto
2227         (_NPN_HasMethod): ditto
2228         (_NPN_SetException): ditto
2229
2230         * bindings/runtime_root.cpp: 
2231         Revived bit-rotted LIAR LIAR LIAR comment.
2232         
2233         LOOK: Added support for invalidating RootObjects without deleting them, 
2234         which is the main goal of this patch. 
2235
2236         Moved protect counting into the RootObject class, to emphasize that 
2237         the RootObject protects the JSObject, and unprotects it upon being invalidated.
2238             addNativeReference => RootObject::gcProtect
2239             removeNativeReference => RootObject::gcUnprotect
2240             ProtectCountSet::contains => RootObject::gcIsProtected
2241             
2242         I know we'll all be sad to see the word "native" go.
2243         
2244         * bindings/runtime_root.h: Added ref-counting support to RootObject, with
2245         all the standard accoutrements.
2246
2247         * bindings/c/c_utility.cpp:
2248         (KJS::Bindings::convertValueToNPVariant): If we can't find a valid RootObject,
2249         return void instead of just leaking.
2250
2251         * bindings/jni/jni_instance.cpp:
2252         (JavaInstance::JavaInstance): Don't take a RootObject in our constructor;
2253         be like other Instances and require the caller to call setRootObject. This
2254         reduces the number of ownership code paths.
2255         (JavaInstance::invokeMethod): Check RootObject for validity.
2256         * bindings/jni/jni_instance.h: Removed private no-arg constructor. Having
2257         an arg constructor accomplishes the same thing.
2258
2259         * bindings/jni/jni_jsobject.cpp:
2260         (JavaJSObject::invoke): No need to call findProtectCountSet, because finalize()
2261         checks for RootObject validity.
2262         (JavaJSObject::JavaJSObject): check RootObject for validity
2263         (JavaJSObject::call): ditto
2264         (JavaJSObject::eval): ditto
2265         (JavaJSObject::getMember): ditto
2266         (JavaJSObject::setMember): ditto
2267         (JavaJSObject::removeMember): ditto
2268         (JavaJSObject::getSlot): ditto
2269         (JavaJSObject::setSlot): ditto
2270         (JavaJSObject::toString): ditto
2271         (JavaJSObject::finalize): ditto
2272         (JavaJSObject::createNative): No need to tell the RootObject to protect 
2273         the global object, since the RootObject already owns the interpreter.
2274
2275         * bindings/jni/jni_runtime.cpp:
2276         (JavaArray::JavaArray): Removed copy construcutor becaue it was unused.
2277         Dead code is dangerous code.
2278
2279         * bindings/objc/objc_runtime.mm: Added WebUndefined protocol. Previous use
2280         of WebScriptObject was bogus, because WebUndefined is not a subclass of
2281         WebScriptObject.
2282         (convertValueToObjcObject): If we can't find a valid RootObject,
2283         return nil instead of just leaking.
2284
2285         * bindings/objc/objc_utility.mm:
2286         (KJS::Bindings::convertValueToObjcValue): If we can't find a valid RootObject,
2287         return nil instead of just leaking.
2288
2289 2007-01-27  Andrew Wellington  <proton@wiretapped.net>
2290
2291         Reviewed by Maciej.
2292         
2293         Fix for Repeated string concatenation results in OOM crash
2294         http://bugs.webkit.org/show_bug.cgi?id=11131
2295
2296         * kjs/operations.cpp:
2297         (KJS::add): Throw exception if string addition result is null
2298         * kjs/ustring.cpp:
2299         (KJS::UString::UString): Don't call memcpy when malloc failed
2300
2301 2007-01-25  Jan Kraemer  <camel@gmx.de>
2302
2303         Reviewed by Maciej
2304
2305         Fix for http://bugs.webkit.org/show_bug.cgi?id=12382
2306
2307         Fix crash on architectures with 32 bit ints and
2308         64 bit longs (For example Linux on AMD64)
2309
2310         * kjs/dtoa.cpp: #define Long int as suggested in comment
2311
2312 2007-01-24  Geoffrey Garen  <ggaren@apple.com>
2313
2314         Fixed up #include order for style. No review necessary.
2315
2316         * API/JSStringRef.cpp:
2317
2318 2007-01-24  Geoffrey Garen  <ggaren@apple.com>
2319
2320         Reviewed by Maciej Stachowiak.
2321
2322         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2323         Copy JSStringRefCF, in case anybody wants to use it. (I just added
2324         it recently.)
2325
2326 2007-01-24  Maciej Stachowiak  <mjs@apple.com>
2327
2328         Not reviewed, trivial property change.
2329         
2330         * JavaScriptCore.vcproj/JavaScriptCore.sln: remove svn:mime-type
2331         property which made this binary.
2332
2333 2007-01-25  Mark Rowe  <mrowe@apple.com>
2334
2335         Reviewed by Darin.
2336
2337         * Info.plist: Update copyright string.
2338
2339 2007-01-24  Darin Adler  <darin@apple.com>
2340
2341         Reviewed by Mark Rowe.
2342
2343         * JavaScriptCore.xcodeproj/project.pbxproj: Changed to /usr/sbin/sysctl
2344         so we don't rely on people's paths.
2345
2346 2007-01-23  Alice Liu  <alice.liu@apple.com>
2347
2348         release build fix
2349
2350         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2351         Copy APICasts.h
2352
2353 2007-01-23  Geoffrey Garen  <ggaren@apple.com>
2354
2355         build fix
2356
2357         * API/JSStringRef.h:
2358         * JavaScriptCore.xcodeproj/project.pbxproj:
2359
2360 2007-01-24  Mark Rowe  <mrowe@apple.com>
2361
2362         Build fix for DumpRenderTree.
2363
2364         * JavaScriptCore.xcodeproj/project.pbxproj: Make JSStringRefCF.h public so it's copied into built framework.
2365
2366 2007-01-23  Anders Carlsson  <acarlsson@apple.com>
2367
2368         Reviewed by Darin.
2369
2370         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2371         Copy APICasts.h
2372
2373 2007-01-23  Geoffrey Garen  <ggaren@apple.com>
2374
2375         Reviewed by Maciej Stachowiak.
2376         
2377         Fixed <rdar://problem/4885131> Move CFString function declarations from 
2378         JSStringRef.h to JSStringRefCF.h
2379         
2380         Also removed remaining API FIXMEs and changed them into Radars.
2381
2382         * API/JSClassRef.cpp:
2383         (OpaqueJSClass::OpaqueJSClass): Added Radar numbers for UTF8 conversion.
2384
2385         * API/JSContextRef.cpp:
2386         (JSGlobalContextCreate): Replaced FIXME for NULL JSContextRef with Radar number.
2387
2388         * API/JSObjectRef.h: Removed FIXME, which is unprofessional in a public header.
2389
2390         * API/JSStringRef.cpp: Moved CF related implementations to JSStringRefCF.cpp.
2391         (JSStringCreateWithUTF8CString): Replaced FIXME with Radar number.
2392         * API/JSStringRef.h: Moved CF related declarations to JSStringRefCF.h. Added
2393         #include of JSStringRefCF.h as a stopgap until clients start #including
2394         it as needed by themselves.
2395
2396         * API/JSStringRefCF.cpp: Added.
2397         (JSStringCreateWithCFString):
2398         (JSStringCopyCFString): Replaced JSChar cast with UniChar cast, which is 
2399         more appropriate for a CF call.
2400         * API/JSStringRefCF.h: Added.
2401         * JavaScriptCore.xcodeproj/project.pbxproj:
2402
2403 2007-01-18  Sanjay Madhav  <sanjay12@gmail.com>
2404
2405         Reviewed by Darin.
2406
2407         Add JavaScriptCore define to help with tracing of when objects are marked.
2408
2409         * kjs/object.cpp:
2410         (KJS::JSObject::mark):
2411
2412 2007-01-18  Simon Hausmann  <hausmann@kde.org>
2413
2414         Reviewed by Zack.
2415
2416         * JavaScriptCore.pro: Remove generated files on make clean.
2417         * pcre/pcre.pri:
2418
2419 2007-01-16  Alexey Proskuryakov  <ap@webkit.org>
2420
2421         Reviewed by Maciej.
2422
2423         http://bugs.webkit.org/show_bug.cgi?id=12268
2424         Give object prototypes their own names
2425
2426         * kjs/lookup.h: Append "Prototype" to ClassName in KJS_IMPLEMENT_PROTOTYPE.
2427
2428 2007-01-16  Geoffrey Garen  <ggaren@apple.com>
2429
2430         Reviewed by Darin Adler.
2431         
2432         Added re-entrency checking to GC allocation and collection. It is an error
2433         to allocate or collect from within a collection. We've had at least one 
2434         case of each bug in the past.
2435         
2436         Added a comment to the API header, explaining that API clients must not
2437         make this mistake, either.
2438         
2439         Layout tests and JS tests pass.
2440
2441         * API/JSObjectRef.h:
2442         * kjs/collector.cpp:
2443         (KJS::GCLock::GCLock):
2444         (KJS::GCLock::~GCLock):
2445         (KJS::Collector::allocate):
2446         (KJS::Collector::collect):
2447
2448 2007-01-14  Mark Rowe  <mrowe@apple.com>
2449
2450         Reviewed by Mitz.
2451
2452         Minor fixes to JavaScript pretty-printing.
2453
2454         * JavaScriptCore.exp:
2455         * kjs/Parser.cpp:
2456         (KJS::Parser::prettyPrint): Return line number and error message if parsing fails.
2457         * kjs/Parser.h:
2458         * kjs/nodes2string.cpp:
2459         (ElementNode::streamTo): Include comma delimiters in array literals.
2460         (PropertyNameNode::streamTo): Quote property names in object literals to handle the case when the property name is not a valid identifier.
2461         * kjs/testkjs.cpp:
2462         (doIt): Print any errors encountered while pretty-printing.
2463
2464 2007-01-12  Anders Carlsson  <acarlsson@apple.com>
2465
2466         Reviewed by Darin.
2467
2468         * wtf/HashTraits.h:
2469         Add hash traits for unsigned long and unsigned long long.
2470
2471 2007-01-12  Geoffrey Garen  <ggaren@apple.com>
2472
2473         RS by Brady Eidson.
2474         
2475         Rolling back in r18786 with leaks fixed, and these renames slightly reworked:
2476
2477         Because they can return 0:
2478         rootObjectForImp => findRootObject (overloaded for JSObject* and Interpreter*)
2479         rootObjectForInterpreter => findRootObject (ditto)
2480         findReferenceSet => findProtectCountSet
2481
2482 2007-01-11  Geoffrey Garen  <ggaren@apple.com>
2483
2484         RS by Brady Eidson.
2485         
2486         Rolling out r18786 because it caused leaks.
2487
2488 2007-01-11  Geoffrey Garen  <ggaren@apple.com>
2489
2490         Reviewed by Anders Carlsson.
2491
2492         Even more cleanup in preparation for fixing <rdar://problem/4608404> 
2493         WebScriptObject's _executionContext lack of ownership policy causes 
2494         crashes (e.g., in Dashcode)
2495         
2496         Layout tests pass.
2497         
2498         Renames:
2499             ReferencesSet | ProtectCounts => ProtectCountSet (because it's a typename for a set of GC protect counts)
2500             ReferencesByRootMap => RootObjectMap (because RootObjectToProtectCountSetMap would have been confusing)
2501             pv => protectedValues
2502             rootObjectForImp => getRootObject (overloaded for JSObject* and Interpreter*)
2503             rootObjectForInterpreter => getRootObject (ditto)
2504             findReferenceSet => getProtectCountSet
2505             imp => jsObject
2506         
2507         (KJS::Bindings::getRootObjectMap): Changed to take advantage of built-in
2508         facility for initializing static variables.
2509
2510         (KJS::Bindings::getProtectCountSet):
2511         (KJS::Bindings::destroyProtectCountSet): Added. Helps encapsulate the fact
2512         that getting a ProtectCountSet entails adding a RootObject to a hash table,
2513         and destroying one entails the reverse.
2514
2515         (KJS::Bindings::getRootObject): Removed spurious NULL check.
2516         
2517         (KJS::Bindings::findReferenceSet): Renamed. Changed to use getRootObject()
2518         instead of iterating on its own.
2519
2520         (KJS::Bindings::addNativeReference): Changed to use an early return instead
2521         of indenting the whole function.
2522         (KJS::Bindings::removeNativeReference): Ditto.
2523
2524 2007-01-11  Geoffrey Garen  <ggaren@apple.com>
2525
2526         Reviewed by Anders Carlsson.
2527
2528         Even more cleanup in preparation for fixing <rdar://problem/4608404> 
2529         WebScriptObject's _executionContext lack of ownership policy causes 
2530         crashes (e.g., in Dashcode)
2531         
2532         Layout tests pass.
2533         
2534         Renames:
2535             findRootObjectForNativeHandleFunction => createRootObject
2536             FindRootObjectForNativeHandleFunctionPtr => CreateRootObjectFunction
2537             
2538         Also removed unnecessary use of "Bindings::" prefix.
2539
2540         * JavaScriptCore.exp:
2541         * bindings/jni/jni_jsobject.cpp:
2542         (JavaJSObject::createNative):
2543         (JavaJSObject::convertValueToJObject):
2544         (JavaJSObject::convertJObjectToValue):
2545         * bindings/runtime_root.cpp:
2546         (KJS::Bindings::RootObject::setCreateRootObject):
2547         * bindings/runtime_root.h:
2548         (KJS::Bindings::RootObject::createRootObject):
2549
2550 2007-01-11  George Staikos  <staikos@kde.org>
2551
2552         Reviewed by Maciej
2553
2554         Appears to be Mac specific right now.
2555
2556         * kjs/config.h:
2557
2558 2007-01-10  Lars Knoll <lars@trolltech.com>
2559
2560         Reviewed by Zack
2561
2562         Use the new functionality in Qt 4.3, to make
2563         the methods closer compliant with the Unicode
2564         spec.
2565
2566         Keep the old code so that it still compiles against
2567         Qt 4.2.
2568
2569         * wtf/unicode/qt4/UnicodeQt4.h:
2570         (WTF::Unicode::toLower):
2571         (WTF::Unicode::toUpper):
2572         (WTF::Unicode::toTitleCase):
2573         (WTF::Unicode::foldCase):
2574         (WTF::Unicode::isFormatChar):
2575         (WTF::Unicode::isPrintableChar):
2576         (WTF::Unicode::isSeparatorSpace):
2577         (WTF::Unicode::isPunct):
2578         (WTF::Unicode::isDigit):
2579         (WTF::Unicode::isLower):
2580         (WTF::Unicode::isUpper):
2581         (WTF::Unicode::digitValue):
2582         (WTF::Unicode::mirroredChar):
2583         (WTF::Unicode::combiningClass):
2584         (WTF::Unicode::decompositionType):
2585         (WTF::Unicode::umemcasecmp):
2586         (WTF::Unicode::direction):
2587         (WTF::Unicode::category):
2588
2589 2007-01-09  Darin Adler  <darin@apple.com>
2590
2591         - update 2007 Apple copyright for the new company name
2592
2593         * kjs/DateMath.cpp:
2594
2595 2007-01-09  Darin Adler  <darin@apple.com>
2596
2597         - fix build
2598
2599         * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
2600         Actually compile it this time.
2601
2602 2007-01-09  Darin Adler  <darin@apple.com>
2603
2604         - fix build
2605
2606         * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
2607         Change types.
2608
2609 2007-01-09  Darin Adler  <darin@apple.com>
2610
2611         - fix build on platforms where Unicode::UChar is != uint16_t
2612
2613         * kjs/string_object.cpp: (KJS::StringProtoFunc::callAsFunction):
2614         Change types.
2615
2616 2007-01-09  Mitz Pettel  <mitz@webkit.org>
2617
2618         Reviewed by Darin.
2619
2620         - changes for http://bugs.webkit.org/show_bug.cgi?id=11078
2621           Forms Don't Submit (ASP Pages)
2622
2623         * JavaScriptCore.exp:
2624         * kjs/value.cpp:
2625         (KJS::JSValue::toInt32): Folded toInt32Inline into this method, which was its
2626         only caller.
2627         (KJS::JSValue::toUInt32): Added a variant that reports if the conversion has
2628         succeeded.
2629         * kjs/value.h:
2630
2631 2007-01-09  Darin Adler  <darin@apple.com>
2632
2633         Reviewed by Maciej.
2634
2635         - fix http://bugs.webkit.org/show_bug.cgi?id=12174
2636           improve Unicode use (less WTF::Unicode:: prefix, centralized character names)
2637
2638         * wtf/unicode/icu/UnicodeIcu.h: Change parameter and return types
2639         to UChar32 and UChar. Removed unneeded type casts and added some
2640         const to functions that lacked it. Removed WTF::Unicode::memcmp.
2641         (WTF::Unicode::umemcasecmp): Renamed from strcasecmp since this
2642         doesn't work on 0-terminated strings as the str functions do.
2643         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
2644
2645         - got rid of namespace prefixes from most uses of WTF::Unicode
2646
2647         * kjs/function.cpp:
2648         (KJS::isStrWhiteSpace):
2649         (KJS::escapeStringForPrettyPrinting):
2650         * kjs/lexer.cpp:
2651         (KJS::Lexer::isWhiteSpace):
2652         (KJS::Lexer::isIdentStart):
2653         (KJS::Lexer::isIdentPart):
2654         * kjs/string_object.cpp:
2655         (KJS::StringProtoFunc::callAsFunction):
2656
2657 2007-01-07  David Kilzer  <ddkilzer@webkit.org>
2658
2659         Reviewed by Darin.
2660
2661         - fix http://bugs.webkit.org/show_bug.cgi?id=11917
2662           setlocale() can return null
2663
2664         * kjs/date_object.cpp:
2665         (KJS::DateProtoFunc::callAsFunction): Removed dead code.
2666
2667 2007-01-07  David Carson  <dacarson@gmail.com>
2668
2669         Reviewed by Darin.
2670
2671         - fix http://bugs.webkit.org/show_bug.cgi?id=12100
2672           JNI bindings should be available to non-Mac platforms that have JNI
2673
2674         Change JNI so that it is not wrapped in the PLATFORM(MAC) ifdef, enabling
2675         other platforms who have JNI to use it.
2676
2677         * bindings/jni/jni_instance.h:  
2678           Removed unnecessary include of <CoreFoundation/CoreFoundation.h>
2679         * bindings/jni/jni_utility.cpp:
2680         (KJS::Bindings::setJavaVM):
2681         * bindings/jni/jni_utility.h:
2682           Added new method for clients to set the JavaVM
2683         * bindings/runtime.cpp:
2684         (KJS::Bindings::Instance::createBindingForLanguageInstance):
2685           Changed code to utilize new #if HAVE(JNI)
2686         * kjs/config.h:
2687           Added new #define for JNI, ie HAVE_JNI
2688
2689 2007-01-07  David Carson  <dacarson@gmail.com>
2690
2691         Reviewed by Darin.
2692
2693         Fix http://bugs.webkit.org/show_bug.cgi?id=11431
2694         ARM platform has some byte alignment issues
2695
2696         Fix for NaN being 4 bytes and it must start on a byte boundary
2697         for ARM architectures.
2698
2699         * kjs/fpconst.cpp:
2700         (KJS::):
2701
2702 2007-01-04  David Kilzer  <ddkilzer@webkit.org>
2703
2704         Reviewed by Kevin McCullough.
2705
2706         - fix http://bugs.webkit.org/show_bug.cgi?id=12070
2707           REGRESSION: KJS::getUTCOffset() caches UTC offset but ignores time zone changes
2708
2709         * kjs/DateMath.cpp:
2710         (KJS::getUTCOffset): Don't cache UTC offset.
2711
2712 2007-01-02  Darin Adler  <darin@apple.com>
2713
2714         - minor tweak (hope this doesn't re-break Windows)
2715
2716         * pcre/pcre_compile.c: Removed use of const pcre_uchar const * -- Mitz probably
2717         meant const pcre_uchar *const, but I think we can do without the explicit const here.
2718
2719         * pcre/pcre_internal.h: Re-enabled warning C4114.
2720
2721 2007-01-02  David Kilzer  <ddkilzer@webkit.org>
2722
2723         Reviewed by NOBODY (Windows build fix).
2724
2725         The MSVC compiler requires variables to be declared at the top of the enclosing block in C source.
2726
2727         Disable this warning to prevent MSVC from complaining about the 'const pcre_uchar const *' type:
2728         warning C4114: same type qualifier used more than once
2729
2730         * pcre/pcre_compile.c:
2731         (pcre_compile2): Moved variable declarations to top of their respective enclosing blocks.
2732         * pcre/pcre_internal.h: Added pragma to disable compiler warning.
2733
2734 2007-01-01  Mitz Pettel  <mitz@webkit.org>
2735
2736         Reviewed by Darin.
2737
2738         - fix http://bugs.webkit.org/show_bug.cgi?id=11849
2739           REGRESSION (r18182): Google Calendar is broken (a regular expression containing a null character is not parsed correctly)
2740
2741         Modified pcre_compile() (and the functions that it calls) to work with patterns
2742         containing null characters.
2743
2744         Covered by JavaScriptCore tests ecma_3/RegExp/octal-002.js and ecma_3/RegExp/regress-85721.js
2745
2746         * kjs/regexp.cpp:
2747         (KJS::RegExp::RegExp): Changed to not null-terminate the pattern string and instead
2748         pass its length to pcre_compile.
2749         * pcre/pcre.h:
2750         * pcre/pcre_compile.c:
2751         (check_escape):
2752         (get_ucp):
2753         (is_counted_repeat):
2754         (check_posix_syntax):
2755         (compile_branch):
2756         (compile_regex):
2757         (pcre_compile): Added a parameter specifying the length of the pattern, which
2758         is no longer required to be null-terminated and may contain null characters. 
2759         (pcre_compile2):
2760         * pcre/pcre_internal.h:
2761         * tests/mozilla/expected.html: Updated for the two tests that this patch
2762         fixes. Also updated failing results for ecma_3/RegExp/regress-100199.js
2763         which were not updated after bug 6257 was fixed.
2764
2765 2007-01-01  David Kilzer  <ddkilzer@webkit.org>
2766
2767         Reviewed by Darin.
2768
2769         - fix http://bugs.webkit.org/show_bug.cgi?id=12057
2770           REGRESSION: JavaScript Date Is One Day In The Future in GMT time zone
2771
2772         Because Mac OS X returns geographically and historically accurate time zone information,
2773         converting Jan 02, 1970 12:00:00 AM to local time then subtracting 24 hours did not work
2774         in GMT (London - England) since it was in BST (+0100) all year in 1970[1].  Instead, the
2775         UTC offset is calculated by converting Jan 01, 2000 12:00:00 AM to local time then
2776         subtracting that from the same date in UTC.
2777
2778         [1] http://en.wikipedia.org/wiki/British_Summer_Time
2779
2780         * kjs/DateMath.cpp:
2781         (KJS::getUTCOffset): Updated UTC offset calculation.
2782         (KJS::getDSTOffset): Improved comment.
2783
2784 2006-12-31  David Kilzer  <ddkilzer@webkit.org>
2785
2786         Reviewed by Geoff.
2787
2788         Update embedded pcre library from version 6.2 to 6.4.  Changes from pcre 6.2 to 6.3
2789         did not include any files in JavaScriptCore/pcre.
2790
2791         All changes include renaming EXPORT to PCRE_EXPORT, renaming of ucp_findchar() to
2792         _pcre_ucp_findchar(), or comment changes.  Additional changes noted below.
2793
2794         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Updated source file list.
2795         * JavaScriptCore.xcodeproj/project.pbxproj: Renamed pcre_printint.c to pcre_printint.src
2796         and changed it from a source file to a header file.
2797         * JavaScriptCoreSources.bkl: Updated source file list.
2798         * pcre/CMakeLists.txt: Updated source file list.
2799         * pcre/pcre-config.h:
2800         * pcre/pcre.h: Updated version.
2801         * pcre/pcre.pri: Updated source file list.
2802         * pcre/pcre_compile.c: Include pcre_printint.src #if DEBUG.
2803         (pcre_compile2):
2804         * pcre/pcre_config.c:
2805         * pcre/pcre_exec.c:
2806         (match):
2807         * pcre/pcre_fullinfo.c:
2808         * pcre/pcre_info.c:
2809         * pcre/pcre_internal.h: Added header guard.  Removed export of _pcre_printint().
2810         * pcre/pcre_ord2utf8.c:
2811         * pcre/pcre_printint.c: Renamed to pcre_printint.src.
2812         * pcre/pcre_printint.src: Added.  Renamed _pcre_printint() to pcre_printint().
2813         * pcre/pcre_refcount.c:
2814         * pcre/pcre_study.c:
2815         * pcre/pcre_tables.c:
2816         * pcre/pcre_try_flipped.c:
2817         * pcre/pcre_ucp_findchar.c: Added contents of ucp_findchar.c.
2818         * pcre/pcre_version.c:
2819         * pcre/pcre_xclass.c:
2820         (_pcre_xclass):
2821         * pcre/ucp.h: Removed export of ucp_findchar().
2822         * pcre/ucp_findchar.c: Removed.  Contents moved to pcre_ucp_findchar.c.
2823
2824 2006-12-29  David Kilzer  <ddkilzer@webkit.org>
2825
2826         Reviewed by Geoff.
2827
2828         Update embedded pcre library from version 6.1 to 6.2.  From the pcre ChangeLog:
2829
2830         3. Added "b" to the 2nd argument of fopen() in dftables.c, for non-Unix-like
2831            operating environments where this matters.
2832
2833         5. Named capturing subpatterns were not being correctly counted when a pattern
2834            was compiled. This caused two problems: (a) If there were more than 100
2835            such subpatterns, the calculation of the memory needed for the whole
2836            compiled pattern went wrong, leading to an overflow error. (b) Numerical
2837            back references of the form \12, where the number was greater than 9, were
2838            not recognized as back references, even though there were sufficient
2839            previous subpatterns.
2840
2841         * pcre/dftables.c: Item 3.
2842         (main):
2843         * pcre/pcre.h: Updated version.
2844         * pcre/pcre_compile.c: Item 5.
2845         (read_repeat_counts):
2846         (pcre_compile2):
2847
2848 2006-12-29  Geoffrey Garen  <ggaren@apple.com>
2849
2850         Reviewed by Brian Dash... err... Mark Rowe.
2851
2852         More cleanup in preparation for fixing <rdar://problem/4608404> 
2853         WebScriptObject's _executionContext lack of ownership policy causes 
2854         crashes (e.g., in Dashcode)
2855         
2856         The key change here is to RootObject::RootObject().
2857         
2858         * JavaScriptCore.exp:
2859
2860         * bindings/c/c_utility.cpp:
2861         (KJS::Bindings::convertValueToNPVariant): Changed to use new constructor.
2862
2863         * bindings/jni/jni_jsobject.cpp:
2864         (JavaJSObject::createNative): Changed to use new constructor. Replaced
2865         large 'if' followed by default condition with "if !" and explicit default
2866         condition.
2867
2868         * bindings/objc/objc_runtime.mm:
2869         (convertValueToObjcObject): Changed to use new constructor.
2870
2871         * bindings/runtime_root.cpp:
2872         (KJS::Bindings::RootObject::destroy): "removeAllNativeReferences" => "destroy"
2873         because this function actually destroys the RootObject.
2874
2875         * bindings/runtime_root.h: Changed Interpreter* to RefPtr<Interpreter>
2876         to prevent a RootObject from holding a stale Interperter*.
2877         
2878         (KJS::Bindings::RootObject::RootObject): Changed constructor to take an 
2879         Interpreter*, since it's pointless to create a RootObject without one.
2880         Removed setRootObjectImp() and rootObjectImp() because they were just
2881         a confusing way of setting and getting the Interpreter's global object.
2882
2883         (KJS::Bindings::RootObject::nativeHandle): "_nativeHandle" => "m_nativeHandle"
2884         (KJS::Bindings::RootObject::interpreter): "_interpreter" => "m_interpreter"
2885
2886 2006-12-28  George Staikos  <staikos@kde.org>
2887
2888         Reviewed by Olliej.
2889
2890         * bindings/qt/qt_instance.cpp: build
2891         (KJS::Bindings::QtInstance::QtInstance):
2892
2893 2006-12-28  Geoffrey Garen  <ggaren@apple.com>
2894
2895         Reviewed by Oliver Hunt.
2896         
2897         More cleanup. Layout tests pass.
2898         
2899         Use a helper function to initialize and access WebUndefined and WebScriptObject.
2900
2901         * bindings/objc/objc_runtime.h:
2902         * bindings/objc/objc_runtime.mm:
2903         (KJS::Bindings::webScriptObjectClass):
2904         (KJS::Bindings::webUndefinedClass):
2905         (convertValueToObjcObject):
2906         * bindings/objc/objc_utility.mm:
2907         (KJS::Bindings::convertValueToObjcValue):
2908         (KJS::Bindings::convertObjcValueToValue):
2909
2910 2006-12-28  Geoffrey Garen  <ggaren@apple.com>
2911
2912         Reviewed by Brady Eidson.
2913         
2914         Some cleanup in preparation for fixing <rdar://problem/4608404> 
2915         WebScriptObject's _executionContext lack of ownership policy causes 
2916         crashes (e.g., in Dashcode)
2917         
2918         I'm just trying to make heads or tails of this baffling code.
2919         
2920         Renamed "root" | "execContext" | "executionContext" => "rootObject", because
2921         that's the object's (admittedly vague) type name.
2922         
2923         * bindings/runtime.cpp: Removed createLanguageInstanceForValue
2924         because I'll give you a dollar if you can explain to me what it actually did.
2925         
2926         * bindings/runtime_root.cpp: Put everything in the KJS::Bindings namespace,
2927         removing the KJS::Bindings prefix from individual functions and datatypes.
2928         This matches the header and eliminates a lot of syntax cruft.
2929         
2930         * bindings/c/c_utility.cpp:
2931         (KJS::Bindings::convertValueToNPVariant): Replaced use of createLanguageInstanceForValue
2932         with call to _NPN_CreateScriptObject because that's what createLanguageInstanceForValue
2933         actually did (but don't ask me for that dollar now; that's cheating.)
2934
2935         * bindings/objc/objc_utility.h:
2936         * bindings/objc/objc_utility.mm:
2937         (KJS::Bindings::convertValueToObjcValue): Removed. Its only purpose was 
2938         to call a single function for WebKit, which WebKit can do on its own.
2939
2940         * kjs/interpreter.h: Removed rtti() because it was unused, and this class
2941         is scheduled for demolition anyway.
2942         
2943         * kjs/interpreter.cpp: Removed createLanguageInstanceForValue because it had
2944         nothing to do with the Interpreter, and nothing makes Chuck Norris more mad
2945         than a function whose sole purpose is to call another function of the same
2946         name. (Really, I asked him.)
2947
2948 2006-12-26  Geoffrey Garen  <ggaren@apple.com>
2949
2950         Reviewed by Eric Seidel.
2951
2952         Some cleanup in preparation for fixing <rdar://problem/4740328> Safari 
2953         crash on quit in _NPN_ReleaseObject from KJS::Bindings::CInstance::~CInstance
2954
2955         * bindings/c/c_instance.cpp:
2956         * bindings/c/c_instance.h: Removed unused copy constructor and assignment
2957         operator. They made tracking data flow more difficult. Unused code is also 
2958         dangerous because it can succumb to bit rot with the stealth of a Ninja.
2959         
2960         Replaced #include with forward declaration to reduce header dependency.
2961         
2962         * bindings/npruntime.cpp: Sorted #includes.
2963         (_NPN_GetStringIdentifier): Replaced assert with ASSERT.
2964         (_NPN_GetStringIdentifiers): ditto
2965         (_NPN_ReleaseVariantValue): ditto
2966         (_NPN_CreateObject): ditto
2967         (_NPN_RetainObject): ditto
2968         (_NPN_ReleaseObject): ditto
2969         (_NPN_DeallocateObject): ditto
2970
2971 2006-12-20  Anders Carlsson  <acarlsson@apple.com>
2972
2973         * kjs/string_object.cpp:
2974         (localeCompare):
2975         Another speculative Win32 fix.
2976
2977 2006-12-20  Anders Carlsson  <acarlsson@apple.com>
2978
2979         * kjs/string_object.cpp:
2980         (localeCompare):
2981         Speculative Win32 fix.
2982
2983 2006-12-20  Anders Carlsson  <acarlsson@apple.com>
2984
2985         Reviewed by Darin.
2986
2987         <rdar://problem/4235733>
2988         <http://bugs.webkit.org/?show_bug.cgi?id=10193>
2989         support String.localeCompare.
2990         
2991         Implement localeCompare.
2992         
2993         * JavaScriptCore.xcodeproj/project.pbxproj:
2994         * kjs/string_object.cpp:
2995         (localeCompare):
2996         (StringProtoFunc::callAsFunction):
2997         * kjs/string_object.h:
2998         (KJS::StringProtoFunc::):
2999
3000 2006-12-20  Timothy Hatcher  <timothy@apple.com>
3001
3002         Reviewed by Mark Rowe.
3003
3004         * JavaScriptCore.xcodeproj/project.pbxproj: use GCC 4.0 for all the other test targets
3005
3006 2006-12-20  Timothy Hatcher  <timothy@apple.com>
3007
3008         Reviewed by Mark Rowe.
3009
3010         <rdar://problem/4871613> JavaScriptCore-421.31's dftables target needs to override default compiler and use gcc-4.0
3011
3012         * JavaScriptCore.xcodeproj/project.pbxproj:
3013
3014 2006-12-20  Lars Knoll <lars@trolltech.com>
3015
3016         Reviewed by David Hyatt
3017
3018         Added support to bind QObject's to 
3019         JavaScript.
3020
3021         * JavaScriptCore.pro:
3022         * bindings/qt/qt_class.cpp: Added.
3023         (KJS::Bindings::QtClass::QtClass):
3024         (KJS::Bindings::QtClass::~QtClass):
3025         (KJS::Bindings::QtClass::classForObject):
3026         (KJS::Bindings::QtClass::name):
3027         (KJS::Bindings::QtClass::methodsNamed):
3028         (KJS::Bindings::QtClass::fieldNamed):
3029         * bindings/qt/qt_class.h: Added.
3030         (KJS::Bindings::QtClass::constructorAt):
3031         (KJS::Bindings::QtClass::numConstructors):
3032         * bindings/qt/qt_instance.cpp: Added.
3033         (KJS::Bindings::QtInstance::QtInstance):
3034         (KJS::Bindings::QtInstance::~QtInstance):
3035         (KJS::Bindings::QtInstance::operator=):
3036         (KJS::Bindings::QtInstance::getClass):
3037         (KJS::Bindings::QtInstance::begin):
3038         (KJS::Bindings::QtInstance::end):
3039         (KJS::Bindings::QtInstance::implementsCall):
3040         (KJS::Bindings::QtInstance::invokeMethod):
3041         (KJS::Bindings::QtInstance::invokeDefaultMethod):
3042         (KJS::Bindings::QtInstance::defaultValue):
3043         (KJS::Bindings::QtInstance::stringValue):
3044         (KJS::Bindings::QtInstance::numberValue):
3045         (KJS::Bindings::QtInstance::booleanValue):
3046         (KJS::Bindings::QtInstance::valueOf):
3047         * bindings/qt/qt_instance.h: Added.
3048         (KJS::Bindings::QtInstance::getObject):
3049         * bindings/qt/qt_runtime.cpp: Added.
3050         (KJS::Bindings::convertValueToQVariant):
3051         (KJS::Bindings::convertQVariantToValue):
3052         (KJS::Bindings::QtField::name):
3053         (KJS::Bindings::QtField::valueFromInstance):
3054         (KJS::Bindings::QtField::setValueToInstance):
3055         * bindings/qt/qt_runtime.h: Added.
3056         (KJS::Bindings::QtField::QtField):
3057         (KJS::Bindings::QtField::type):
3058         (KJS::Bindings::QtMethod::QtMethod):
3059         (KJS::Bindings::QtMethod::name):
3060         (KJS::Bindings::QtMethod::numParameters):
3061         * bindings/runtime.cpp:
3062         (KJS::Bindings::Instance::createBindingForLanguageInstance):
3063         * bindings/runtime.h:
3064         (KJS::Bindings::Instance::):
3065         * bindings/testbindings.pro: Added.
3066         * bindings/testqtbindings.cpp: Added.
3067         (MyObject::MyObject):
3068         (MyObject::setTestString):
3069         (MyObject::setTestInt):
3070         (MyObject::testString):
3071         (MyObject::testInt):
3072         (MyObject::foo):
3073         (Global::className):
3074         (main):
3075
3076 2006-12-19  Anders Carlsson  <acarlsson@apple.com>
3077
3078         Reviewed by Geoff.
3079
3080         Add -p option to testkjs which pretty prints the files instead of executing them.
3081
3082         * JavaScriptCore.exp:
3083         * JavaScriptCore.xcodeproj/project.pbxproj:
3084         * kjs/Parser.cpp:
3085         (KJS::Parser::prettyPrint):
3086         * kjs/Parser.h:
3087         * kjs/testkjs.cpp:
3088         (doIt):
3089
3090 2006-12-19  Brady Eidson  <beidson@apple.com>
3091
3092         Rubberstamped by Lou
3093         
3094         Removed unneccessary "else"
3095
3096         * wtf/Assertions.cpp:
3097
3098 2006-12-19  Timothy Hatcher  <timothy@apple.com>
3099
3100         Reviewed by Darin.
3101
3102         <rdar://problem/4891774> Local WebCore/WebBrowser builds fail in 9A328 due to warning about ObjC-2.0 language features
3103
3104         * JavaScriptCore.xcodeproj/project.pbxproj:
3105
3106 2006-12-17  Simon Hausmann  <hausmann@kde.org>
3107
3108         Reviewed by Zack.
3109
3110         * kjs/testkjs.pro: Oops, make it also build on machines other than
3111         mine :)
3112
3113 2006-12-17  Simon Hausmann  <hausmann@kde.org>
3114
3115         Reviewed by Rob Buis.
3116
3117         * kjs/testkjs.pro: Added .pro file to build testkjs.
3118
3119 2006-12-16  Alexey Proskuryakov  <ap@webkit.org>
3120
3121         Reviewed by Rob.
3122
3123         A deleted object was accessed to prepare RegExp construction error messages.
3124
3125         * kjs/regexp_object.cpp:
3126         (RegExpObjectImp::construct): Wrap the RegExp into an OwnPtr.
3127
3128 2006-12-16  Mitz Pettel  <mitz@webkit.org>
3129
3130         Reviewed by Alexey.
3131
3132         - fix http://bugs.webkit.org/show_bug.cgi?id=11814
3133           REGRESSION(r18098): Find does not work with capital letters
3134
3135         Test: editing/execCommand/findString-3.html
3136
3137         * wtf/unicode/icu/UnicodeIcu.h:
3138         (WTF::Unicode::foldCase): Changed to not return an error if the result fits
3139         in the buffer without a null terminator.
3140
3141 2006-12-13  Maciej Stachowiak  <mjs@apple.com>
3142
3143         Reviewed by Anders.
3144         
3145         - added equality and inequality operations for HashMap and Vector, useful for comparing more complex types
3146
3147         * wtf/HashMap.h:
3148         (WTF::operator==):
3149         (WTF::operator!=):
3150         * wtf/Vector.h:
3151         (WTF::operator==):
3152         (WTF::operator!=):
3153
3154 2006-12-12  Alexey Proskuryakov  <ap@webkit.org>
3155
3156         Reviewed by Geoff. Based on a patch by Maks Orlovich.
3157
3158         http://bugs.webkit.org/show_bug.cgi?id=6257
3159         Throw errors on invalid expressions (KJS merge)
3160
3161         * kjs/regexp.cpp:
3162         (KJS::RegExp::RegExp):
3163         (KJS::RegExp::~RegExp):
3164         (KJS::RegExp::match):
3165         * kjs/regexp.h:
3166         (KJS::RegExp::flags):
3167         (KJS::RegExp::isValid):
3168         (KJS::RegExp::errorMessage):
3169         (KJS::RegExp::subPatterns):
3170         Remember and report RegExp construction failures. Renamed data members not to start with underscores.
3171
3172         * kjs/regexp_object.cpp:
3173         (RegExpObjectImp::construct): Raise an exception if RegExp construction fails.
3174         (RegExpObjectImp::callAsFunction): Removed an obsolete comment.
3175
3176         * tests/mozilla/ecma_3/RegExp/regress-119909.js: Reduced the number of nested parentheses to 
3177         a value supported by PCRE.
3178
3179 2006-12-11  Alexey Proskuryakov  <ap@webkit.org>
3180
3181         Reviewed by Darin.
3182
3183         http://bugs.webkit.org/show_bug.cgi?id=9673
3184         Add support for window.atob() and window.btoa()
3185
3186         * JavaScriptCore.exp: Export UString::is8Bit().
3187         * JavaScriptCore.xcodeproj/project.pbxproj: Added StringExtras.h as 
3188         a private header.
3189
3190 2006-12-11  Darin Adler  <darin@apple.com>
3191
3192         Reviewed by Brady.
3193
3194         * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode update this
3195         (I think Hyatt is using an old Xcode).
3196
3197 2006-12-11  David Hyatt  <hyatt@apple.com>
3198
3199         Fix the failing layout test.  Just remove Unicode::isSpace and
3200         revert StringImpl to do the same thing it was doing before.
3201
3202         Reviewed by darin
3203
3204         * wtf/unicode/icu/UnicodeIcu.h:
3205         * wtf/unicode/qt4/UnicodeQt4.h:
3206
3207 2006-12-09  George Staikos  <staikos@kde.org>
3208
3209         Reviewed by Zack.
3210
3211         Fix bison again on qmake build.
3212
3213         * JavaScriptCore.pro:
3214
3215 2006-12-09  Lars Knoll <lars@trolltech.com>
3216
3217         Reviewed by Zack
3218
3219         Make it possible to build WebKit with qmake.
3220
3221         * JavaScriptCore.pro: Added.
3222         * kjs/kjs.pro: Removed.
3223         * pcre/pcre.pri: Added.
3224
3225 2006-12-09  Zack Rusin  <zack@kde.org>
3226
3227         Fixing the compilation with platform kde after the icu changes.
3228
3229         * CMakeLists.txt:
3230
3231 2006-12-09  Adam Roben  <aroben@apple.com>
3232
3233         Reviewed by Darin.
3234
3235         Some updates in reaction to r18098.
3236
3237         * wtf/unicode/icu/UnicodeIcu.h: Use !! to convert UBool to bool in all
3238         cases.
3239         (WTF::Unicode::toLower):
3240         (WTF::Unicode::toUpper):
3241         (WTF::Unicode::isDigit):
3242         (WTF::Unicode::isSpace):
3243         (WTF::Unicode::isPunct):
3244         (WTF::Unicode::isLower):
3245         (WTF::Unicode::isUpper):
3246         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3247         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3248
3249 2006-12-09  George Staikos  <staikos@kde.org>
3250
3251         Patch by Lars Knoll, comment out ICU dependency on Qt platform (unused code).
3252
3253         Reviewed by Darin.
3254
3255         * bindings/c/c_utility.cpp:
3256         (KJS::Bindings::convertUTF8ToUTF16):
3257
3258 2006-12-08  David Hyatt  <hyatt@apple.com>
3259
3260         Land the new ICU abstraction layer.  Patch by Lars.
3261
3262         Reviewed by me
3263
3264         * JavaScriptCore.xcodeproj/project.pbxproj:
3265         * wtf/Platform.h:
3266         * wtf/unicode/UnicodeCategory.h: Removed.
3267         * wtf/unicode/UnicodeDecomposition.h: Removed.
3268         * wtf/unicode/UnicodeDirection.h: Removed.
3269         * wtf/unicode/icu/UnicodeIcu.h:
3270         (WTF::Unicode::):
3271         (WTF::Unicode::foldCase):
3272         (WTF::Unicode::toLower):
3273         (WTF::Unicode::toUpper):
3274         (WTF::Unicode::toTitleCase):
3275         (WTF::Unicode::isDigit):
3276         (WTF::Unicode::isSpace):
3277         (WTF::Unicode::isPunct):
3278         (WTF::Unicode::mirroredChar):
3279         (WTF::Unicode::category):
3280         (WTF::Unicode::direction):
3281         (WTF::Unicode::isLower):
3282         (WTF::Unicode::isUpper):
3283         (WTF::Unicode::digitValue):
3284         (WTF::Unicode::combiningClass):
3285         (WTF::Unicode::decompositionType):
3286         (WTF::Unicode::strcasecmp):
3287         (WTF::Unicode::memset):
3288         * wtf/unicode/qt4/UnicodeQt4.cpp: Removed.
3289         * wtf/unicode/qt4/UnicodeQt4.h:
3290         (WTF::Unicode::):
3291         (WTF::Unicode::toLower):
3292         (WTF::Unicode::toUpper):
3293         (WTF::Unicode::toTitleCase):
3294         (WTF::Unicode::foldCase):
3295         (WTF::Unicode::isPrintableChar):
3296         (WTF::Unicode::isLower):
3297         (WTF::Unicode::isUpper):
3298         (WTF::Unicode::digitValue):
3299         (WTF::Unicode::combiningClass):
3300         (WTF::Unicode::decompositionType):
3301         (WTF::Unicode::strcasecmp):
3302         (WTF::Unicode::memset):
3303         (WTF::Unicode::direction):
3304         (WTF::Unicode::category):
3305
3306 === Safari-521.32 ===
3307
3308 2006-12-08  Adam Roben  <aroben@apple.com>
3309
3310         Reviewed by Anders.
3311
3312         This is a mo' better fix for ensuring we don't use macro definitions
3313         of min/max.
3314
3315         * kjs/config.h:
3316         * wtf/Vector.h:
3317
3318 2006-12-07  Kevin Fyure  <digdog@macports.org>
3319
3320         Reviewed by Darin.
3321
3322         http://bugs.webkit.org/show_bug.cgi?id=11545
3323         Disable the testcases do not follow the ECMA-262v3 specification.
3324         
3325         * tests/mozilla/expected.html: Update Results.
3326         * tests/mozilla/js1_2/String/concat.js:
3327         4 tests disabled. The result of concat Array object is not followinig
3328         ECMA 15.5.4.6
3329         * tests/mozilla/js1_2/function/Number.js:
3330         1 test disabled. The result of Array object to Number object conversion 
3331         is not following ECMA 9.3. And the test was duplicated in 
3332         ecma/TypeConversion/9.3-1.js
3333         * tests/mozilla/js1_2/function/String.js:
3334         2 tests disabled. The result of Object/Array object to String object 
3335         conversion is not following ECMA 15.5.1.1 and ECMA 9.8
3336
3337 2006-11-30  Steve Falkenburg  <sfalken@apple.com>
3338
3339         Reviewed by Oliver.
3340         
3341         Move WTF from JavaScriptCore project into a new WTF project.
3342
3343         * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WTF.vcproj to sln
3344         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove WTF source files
3345         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added.
3346         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add dependency on WTF.lib
3347
3348 2006-11-30  Geoffrey Garen  <ggaren@apple.com>
3349
3350         Reviewed by Beth Dakin.
3351         
3352         Fixed up garbage collection at window close time.
3353
3354         * kjs/interpreter.cpp:
3355         (KJS::Interpreter::~Interpreter): Garbage collect here, since
3356         destroying the interpreter frees the global object and 
3357         therefore creates a lot of garbage.
3358
3359 2006-11-20  W. Andy Carrel  <wac@google.com>
3360
3361         Reviewed by Maciej.
3362
3363         http://bugs.webkit.org/show_bug.cgi?id=11501
3364         REGRESSION: \u no longer escapes metacharacters in RegExps
3365         http://bugs.webkit.org/show_bug.cgi?id=11502
3366         Serializing RegExps doesn't preserve Unicode escapes
3367
3368         * kjs/lexer.cpp:
3369         (Lexer::Lexer):
3370         (Lexer::setCode):
3371         (Lexer::shift):
3372         (Lexer::scanRegExp):
3373         Push \u parsing back down into the RegExp object rather than in the
3374         parser. This backs out r17354 in favor of a new fix that better 
3375         matches the behavior of other browsers.
3376
3377         * kjs/lexer.h:
3378         * kjs/regexp.cpp:
3379         (KJS::RegExp::RegExp):
3380         (KJS::sanitizePattern):
3381         (KJS::isHexDigit):
3382         (KJS::convertHex):
3383         (KJS::convertUnicode):
3384         * kjs/regexp.h:
3385         Translate \u escaped unicode characters for the benefit of pcre.
3386
3387         * kjs/ustring.cpp:
3388         (KJS::UString::append):
3389         Fix failure to increment length on the first UChar appended to a 
3390         UString that was copy-on-write.
3391
3392         * tests/mozilla/ecma_2/RegExp/properties-001.js:
3393         Adjust tests back to the uniform standards.
3394
3395 2006-11-20  Samuel Weinig  <sam@webkit.org>
3396
3397         Reviewed by Maciej.
3398
3399         Fix for http://bugs.webkit.org/show_bug.cgi?id=11647
3400         Fix Win32 build
3401
3402         * kjs/config.h: define NOMINMAX instead of min/max
3403         as themselves.
3404         * wtf/Vector.h: put back hack to ensure that min/max
3405         are not defined as macros.
3406
3407 2006-11-19  Simon Hausmann  <hausmann@kde.org>
3408
3409         Reviewed by Zack.
3410
3411         http://bugs.webkit.org/show_bug.cgi?id=11649
3412         Fix CMake Qt-only build without KDE CMake files
3413
3414         * CMakeLists.txt:
3415         * pcre/CMakeLists.txt:
3416
3417 2006-11-17  Anders Carlsson  <acarlsson@apple.com>
3418
3419         Reviewed by Adam.
3420
3421         Make sure that we always use std::min and std::max instead of macros.
3422         
3423         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3424         * kjs/config.h:
3425         * wtf/Vector.h:
3426
3427 === Safari-521.31 ===
3428
3429 2006-11-12  Geoffrey Garen  <ggaren@apple.com>
3430
3431         Reviewed by Beth Dakin.
3432         
3433         Added project-wide setting to disable Microsoft's made-up deprecation 
3434         warnings related to std:: functions. (Doesn't have any affect yet,
3435         since we currently disable all deprecation warnings.)
3436
3437         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3438
3439 2006-11-12  Mark Rowe  <bdash@webkit.org>
3440
3441         Reviewed by Mitz.
3442
3443         Clean up of JavaScriptCore bakefiles.
3444
3445         * JavaScriptCoreSources.bkl:
3446         * jscore.bkl:
3447
3448 2006-11-11  Alexey Proskuryakov  <ap@webkit.org>
3449
3450         Reviewed by Maciej.
3451
3452         http://bugs.webkit.org/show_bug.cgi?id=11508
3453         Undisable some warnings for JSImmediate.h
3454
3455         Fix suggested by Don Gibson.
3456
3457         * kjs/JSImmediate.h:
3458         Re-enable all MSVC warnings, move the remaining runtime checks
3459         to compile-time.
3460
3461 2006-11-10  Zalan Bujtas  <zalan.bujtas@nokia.com>
3462
3463         Reviewed by Maciej.
3464
3465         Added s60/symbian platform defines.
3466         http://bugs.webkit.org/show_bug.cgi?id=11540
3467
3468         * wtf/Platform.h:
3469
3470 === Safari-521.30 ===
3471
3472 2006-11-08  Ada Chan  <adachan@apple.com>
3473
3474         Reviewed by darin.
3475         
3476         Added a method to delete all the keys in a HashMap.
3477
3478         * wtf/HashMap.h:
3479         (WTF::deleteAllPairFirsts):
3480         (WTF::deleteAllKeys):
3481
3482 2006-11-07  Anders Carlsson  <acarlsson@apple.com>
3483
3484         Reviewed by Geoff.
3485
3486         * API/JSClassRef.cpp:
3487         (OpaqueJSClass::OpaqueJSClass):
3488         Initialize cachedPrototype to 0.
3489
3490 2006-11-06  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
3491
3492         Reviewed by Maciej.
3493
3494         Remove warning about garbage after #else. #else clause applies for all
3495         non-mac platforms, not only win.
3496
3497         * kjs/date_object.cpp:
3498
3499 2006-11-06  Mark Rowe  <bdash@webkit.org>
3500
3501         Reviewed by the wonderful Mitz Pettel.
3502
3503         http://bugs.webkit.org/show_bug.cgi?id=11524
3504         Bug 11524: REGRESSION(r9842): Array.prototype.join should use ToString operator rather than calling toString on each element
3505
3506         * kjs/array_object.cpp:
3507         (ArrayProtoFunc::callAsFunction): Use ToString operator on each element rather than calling their toString method.
3508
3509 2006-11-03  Steve Falkenburg  <sfalken@apple.com>
3510
3511         Fix build
3512
3513         * kjs/JSImmediate.h:
3514
3515 2006-11-03  Alexey Proskuryakov  <ap@nypop.com>
3516
3517         Reviewed by Darin.
3518
3519         http://bugs.webkit.org/show_bug.cgi?id=11504
3520         Fix warnings on non 32 bit platforms
3521
3522         * kjs/JSImmediate.h:
3523         (KJS::JSImmediate::NanAsBits):
3524         (KJS::JSImmediate::oneAsBits):
3525         Rewrite in a way that moves runtime ch