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