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