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