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