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