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