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