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