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