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