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