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