8f7bc8f25245cc2ec2bb31dd76bdbb842299e198
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-05-08  Anders Carlsson  <andersca@apple.com>
2
3         Reviewed by Mark.
4
5         Enable NPAPI plug-ins on 64-bit.
6         
7         * wtf/Platform.h:
8
9 2008-05-07  Julien Chaffraix  <jchaffraix@webkit.org>
10
11         Reviewed by Adam Roben.
12
13         wx & Gtk build fix.
14
15         Add SIZE_MAX definition for the wx port.
16
17         * os-win32/stdint.h:
18
19 2008-05-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>
20
21         Reviewed by Simon.
22
23         Support for isMainThread in the Qt port.
24
25         * wtf/ThreadingQt.cpp:
26         (WTF::initializeThreading): Adjusted.
27         (WTF::isMainThread): Added.
28
29 2008-05-05  Darin Adler  <darin@apple.com>
30
31         Reviewed by John Sullivan.
32
33         - fix debug-only leak seen on buildbot
34
35         * wtf/HashTable.h:
36         (WTF::HashTable::checkKey): After writing an empty value in, but before constructing a
37         deleted value on top of it, call the destructor so the empty value doesn't leak.
38
39 2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
40
41         Reviewed by Geoffrey Garen.
42
43         Get rid of static data in nodes.cpp (well, at least of non-debug one).
44
45         No measurable change on SunSpider.
46
47         * kjs/InitializeThreading.cpp:
48         (KJS::initializeThreadingOnce):
49         * kjs/nodes.cpp:
50         (KJS::newTrackedObjects):
51         (KJS::trackedObjectExtraRefCounts):
52         (KJS::initializeNodesThreading):
53         (KJS::ParserRefCounted::ParserRefCounted):
54         (KJS::ParserRefCounted::ref):
55         (KJS::ParserRefCounted::deref):
56         (KJS::ParserRefCounted::refcount):
57         (KJS::ParserRefCounted::deleteNewObjects):
58         * kjs/nodes.h:
59         Made newTrackedObjects and trackedObjectExtraRefCounts per-thread.
60
61 2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
62
63         Reviewed by Darin.
64
65         Move call stack depth counter to global object.
66
67         * kjs/ExecState.h: (KJS::ExecState::functionCallDepth): Added a recursion depth counter to
68         per-thread data.
69         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Initialize PerThreadData.functionCallDepth.
70         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::perThreadData): Made the result non-const.
71
72         * kjs/object.cpp:
73         (KJS::throwStackSizeExceededError): Moved throwError to a separate function, since it is now
74         the only thing in JSObject::call that needs a PIC branch.
75         (KJS::JSObject::call): Use a per-thread variable instead of local static for recursion depth
76         tracking.
77
78 2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
79
80         Reviewed by Darin.
81
82         Make JavaScriptGlue and JavaScriptCore API functions implicitly call initializeThreading
83         for the sake of non-WebKit clients.
84
85         * API/JSBase.cpp:
86         (JSGarbageCollect):
87         * API/JSContextRef.cpp:
88         (JSGlobalContextCreate):
89         These are the JavaScriptCore API bottlenecks. There are a few other JSStringRef
90         and JSClassRef functions that can be called earlier, but they do not do anything that
91         requires initializeThreading.
92
93         * kjs/InitializeThreading.cpp:
94         (KJS::doInitializeThreading):
95         (KJS::initializeThreading):
96         On Darwin, make the initialization happen under pthread_once, since there is no guarantee
97         that non-WebKit clients won't try to call this function re-entrantly.
98
99         * kjs/InitializeThreading.h:
100         * wtf/Threading.h:
101         Spell out initializeThreading contract.
102
103         * wtf/ThreadingPthreads.cpp: (WTF::isMainThread): Make sure that results are correct on
104         Darwin, even if threading was initialized from a secondary thread.
105
106 2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
107
108         Reviewed by Geoffrey Garen.
109
110         https://bugs.webkit.org/show_bug.cgi?id=18826
111         Make JavaScript heap per-thread
112
113         * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
114         (replaced "new T" with "new T()").
115
116         * kjs/collector.h: Renamed Collector to Heap, made the heap per-thread. Removed support for
117         multithreaded access to a heap.
118         (KJS::CollectorBlock): Removed collectOnMainThreadOnly bitmap, added a reference to owner heap.
119         (KJS::SmallCellCollectorBlock): Ditto.
120         (KJS::Heap::markListSet): Moved from a static variable in List.cpp to a per-thread one here.
121         (KJS::Heap::heap): Added a method to find which heap a JSValue is allocated in.
122
123         * kjs/collector.cpp: Changed "const size_t" constants to #defines, to avoid a PIC branch
124         (gcc was using one to access a constant used in std::max(), because it takes a reference,
125         even though std::max() itself was inlined).
126         (KJS::Heap::threadHeap): JS heap is now per-thread.
127         (KJS::Heap::Heap): Zero-initialize the heap.
128         (KJS::allocateBlock): Added NEVER_INLINE, because this function uses a PIC branch, so
129         inlining it in Heap::heapAllocate() is bad for performance, now that the latter doesn't
130         use any global data.
131         (KJS::Heap::heapAllocate): Initialize Block::heap.
132         (KJS::Heap::markCurrentThreadConservatively): Moved into markStackObjectsConservatively(),
133         as GC only works with a current thread's heap now.
134         (KJS::Heap::sweep): Removed collectOnMainThreadOnly checks.
135         (KJS::Heap::collect): Ditto.
136
137         * kjs/JSLock.cpp:
138         * kjs/JSLock.h:
139         (KJS::JSLock::JSLock):
140         Removed registerThread(), as the heap no longer cares.
141
142         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize new per-thread
143         variables in Heap and JSGlobalObject.
144
145         * kjs/ExecState.h: (KJS::ExecState::heap): Added a heap pointer for faster access to
146         per-thread heap, and an accessor for it.
147
148         * kjs/JSGlobalObject.h: Made JSGlobalObject linked list per-thread.
149         * kjs/JSGlobalObject.cpp:
150         (KJS::JSGlobalObject::~JSGlobalObject): Fixed a bug in linked list handling. It only worked
151         right if the removed object was the head one!
152         (KJS::JSGlobalObject::head): Return a per-thread list head.
153         (KJS::JSGlobalObject::init): Store a reference to per-thread heap.
154         (KJS::JSGlobalObject::reset): Pass ExecState to functions that need it.
155         (KJS::JSGlobalObject::tearOffActivation): Ditto.
156         (KJS::JSGlobalObject::operator new): JSGlobalObject allocation cannot use an ExecState,
157         so it needs a custom operator new that directly accesses per-thread heap.
158
159         * kjs/list.h:
160         (KJS::List::List): Replaced m_isInMarkSet boolean with an actual pointer to the set, since it
161         is no longer a single static object.
162         (KJS::List::~List): Ditto.
163         * kjs/list.cpp:
164         (KJS::List::markSet): Removed, this is now stored in Heap.
165         (KJS::List::markProtectedLists): Take a reference to the list.
166         (KJS::List::expandAndAppend): Ask the current thread heap for a mark set reference.
167
168         * kjs/protect.h:
169         (KJS::gcProtect):
170         (KJS::gcUnprotect):
171         Use the newly added Heap::heap() method to find out which heap the value to be (un)protected
172         belongs to.
173
174         * kjs/property_map.h: Removed unused SavedProperty class.
175
176         * JavaScriptCore.exp:
177         * API/JSBase.cpp:
178         (JSGarbageCollect):
179         * API/JSCallbackObjectFunctions.h:
180         (KJS::::staticFunctionGetter):
181         * API/JSClassRef.cpp:
182         (OpaqueJSClass::prototype):
183         * API/JSObjectRef.cpp:
184         (JSObjectMake):
185         (JSObjectMakeFunctionWithCallback):
186         (JSObjectMakeConstructor):
187         (JSObjectMakeFunction):
188         * API/JSValueRef.cpp:
189         (JSValueMakeNumber):
190         (JSValueMakeString):
191         * kjs/array_instance.cpp:
192         (KJS::ArrayInstance::ArrayInstance):
193         (KJS::ArrayInstance::lengthGetter):
194         * kjs/array_object.cpp:
195         (KJS::arrayProtoFuncToString):
196         (KJS::arrayProtoFuncToLocaleString):
197         (KJS::arrayProtoFuncJoin):
198         (KJS::arrayProtoFuncConcat):
199         (KJS::arrayProtoFuncPop):
200         (KJS::arrayProtoFuncPush):
201         (KJS::arrayProtoFuncShift):
202         (KJS::arrayProtoFuncSlice):
203         (KJS::arrayProtoFuncSplice):
204         (KJS::arrayProtoFuncUnShift):
205         (KJS::arrayProtoFuncFilter):
206         (KJS::arrayProtoFuncMap):
207         (KJS::arrayProtoFuncEvery):
208         (KJS::arrayProtoFuncForEach):
209         (KJS::arrayProtoFuncSome):
210         (KJS::arrayProtoFuncIndexOf):
211         (KJS::arrayProtoFuncLastIndexOf):
212         (KJS::ArrayObjectImp::ArrayObjectImp):
213         (KJS::ArrayObjectImp::construct):
214         * kjs/bool_object.cpp:
215         (KJS::BooleanPrototype::BooleanPrototype):
216         (KJS::booleanProtoFuncToString):
217         (KJS::BooleanObjectImp::BooleanObjectImp):
218         (KJS::BooleanObjectImp::construct):
219         * kjs/date_object.cpp:
220         (KJS::formatLocaleDate):
221         (KJS::DatePrototype::DatePrototype):
222         (KJS::DateObjectImp::DateObjectImp):
223         (KJS::DateObjectImp::construct):
224         (KJS::DateObjectImp::callAsFunction):
225         (KJS::DateObjectFuncImp::DateObjectFuncImp):
226         (KJS::DateObjectFuncImp::callAsFunction):
227         (KJS::dateProtoFuncToString):
228         (KJS::dateProtoFuncToUTCString):
229         (KJS::dateProtoFuncToDateString):
230         (KJS::dateProtoFuncToTimeString):
231         (KJS::dateProtoFuncToLocaleString):
232         (KJS::dateProtoFuncToLocaleDateString):
233         (KJS::dateProtoFuncToLocaleTimeString):
234         (KJS::dateProtoFuncValueOf):
235         (KJS::dateProtoFuncGetTime):
236         (KJS::dateProtoFuncGetFullYear):
237         (KJS::dateProtoFuncGetUTCFullYear):
238         (KJS::dateProtoFuncToGMTString):
239         (KJS::dateProtoFuncGetMonth):
240         (KJS::dateProtoFuncGetUTCMonth):
241         (KJS::dateProtoFuncGetDate):
242         (KJS::dateProtoFuncGetUTCDate):
243         (KJS::dateProtoFuncGetDay):
244         (KJS::dateProtoFuncGetUTCDay):
245         (KJS::dateProtoFuncGetHours):
246         (KJS::dateProtoFuncGetUTCHours):
247         (KJS::dateProtoFuncGetMinutes):
248         (KJS::dateProtoFuncGetUTCMinutes):
249         (KJS::dateProtoFuncGetSeconds):
250         (KJS::dateProtoFuncGetUTCSeconds):
251         (KJS::dateProtoFuncGetMilliSeconds):
252         (KJS::dateProtoFuncGetUTCMilliseconds):
253         (KJS::dateProtoFuncGetTimezoneOffset):
254         (KJS::dateProtoFuncSetTime):
255         (KJS::setNewValueFromTimeArgs):
256         (KJS::setNewValueFromDateArgs):
257         (KJS::dateProtoFuncSetYear):
258         (KJS::dateProtoFuncGetYear):
259         * kjs/error_object.cpp:
260         (KJS::ErrorPrototype::ErrorPrototype):
261         (KJS::errorProtoFuncToString):
262         (KJS::ErrorObjectImp::ErrorObjectImp):
263         (KJS::ErrorObjectImp::construct):
264         (KJS::NativeErrorPrototype::NativeErrorPrototype):
265         (KJS::NativeErrorImp::NativeErrorImp):
266         (KJS::NativeErrorImp::construct):
267         * kjs/function.cpp:
268         (KJS::FunctionImp::lengthGetter):
269         (KJS::FunctionImp::construct):
270         (KJS::Arguments::Arguments):
271         (KJS::ActivationImp::createArgumentsObject):
272         (KJS::encode):
273         (KJS::decode):
274         (KJS::globalFuncParseInt):
275         (KJS::globalFuncParseFloat):
276         (KJS::globalFuncEscape):
277         (KJS::globalFuncUnescape):
278         (KJS::PrototypeFunction::PrototypeFunction):
279         (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
280         * kjs/function_object.cpp:
281         (KJS::FunctionPrototype::FunctionPrototype):
282         (KJS::functionProtoFuncToString):
283         (KJS::FunctionObjectImp::FunctionObjectImp):
284         (KJS::FunctionObjectImp::construct):
285         * kjs/internal.cpp:
286         (KJS::StringImp::toObject):
287         * kjs/internal.h:
288         (KJS::StringImp::StringImp):
289         (KJS::NumberImp::operator new):
290         * kjs/lookup.h:
291         (KJS::staticFunctionGetter):
292         (KJS::cacheGlobalObject):
293         * kjs/math_object.cpp:
294         (KJS::MathObjectImp::getValueProperty):
295         (KJS::mathProtoFuncAbs):
296         (KJS::mathProtoFuncACos):
297         (KJS::mathProtoFuncASin):
298         (KJS::mathProtoFuncATan):
299         (KJS::mathProtoFuncATan2):
300         (KJS::mathProtoFuncCeil):
301         (KJS::mathProtoFuncCos):
302         (KJS::mathProtoFuncExp):
303         (KJS::mathProtoFuncFloor):
304         (KJS::mathProtoFuncLog):
305         (KJS::mathProtoFuncMax):
306         (KJS::mathProtoFuncMin):
307         (KJS::mathProtoFuncPow):
308         (KJS::mathProtoFuncRandom):
309         (KJS::mathProtoFuncRound):
310         (KJS::mathProtoFuncSin):
311         (KJS::mathProtoFuncSqrt):
312         (KJS::mathProtoFuncTan):
313         * kjs/nodes.cpp:
314         (KJS::Node::handleException):
315         (KJS::NumberNode::evaluate):
316         (KJS::StringNode::evaluate):
317         (KJS::ArrayNode::evaluate):
318         (KJS::PostIncResolveNode::evaluate):
319         (KJS::PostIncLocalVarNode::evaluate):
320         (KJS::PostDecResolveNode::evaluate):
321         (KJS::PostDecLocalVarNode::evaluate):
322         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
323         (KJS::PostIncBracketNode::evaluate):
324         (KJS::PostDecBracketNode::evaluate):
325         (KJS::PostIncDotNode::evaluate):
326         (KJS::PostDecDotNode::evaluate):
327         (KJS::typeStringForValue):
328         (KJS::LocalVarTypeOfNode::evaluate):
329         (KJS::TypeOfResolveNode::evaluate):
330         (KJS::TypeOfValueNode::evaluate):
331         (KJS::PreIncLocalVarNode::evaluate):
332         (KJS::PreIncResolveNode::evaluate):
333         (KJS::PreDecLocalVarNode::evaluate):
334         (KJS::PreDecResolveNode::evaluate):
335         (KJS::PreIncConstNode::evaluate):
336         (KJS::PreDecConstNode::evaluate):
337         (KJS::PostIncConstNode::evaluate):
338         (KJS::PostDecConstNode::evaluate):
339         (KJS::PreIncBracketNode::evaluate):
340         (KJS::PreDecBracketNode::evaluate):
341         (KJS::PreIncDotNode::evaluate):
342         (KJS::PreDecDotNode::evaluate):
343         (KJS::NegateNode::evaluate):
344         (KJS::BitwiseNotNode::evaluate):
345         (KJS::MultNode::evaluate):
346         (KJS::DivNode::evaluate):
347         (KJS::ModNode::evaluate):
348         (KJS::addSlowCase):
349         (KJS::add):
350         (KJS::AddNumbersNode::evaluate):
351         (KJS::AddStringsNode::evaluate):
352         (KJS::AddStringLeftNode::evaluate):
353         (KJS::AddStringRightNode::evaluate):
354         (KJS::SubNode::evaluate):
355         (KJS::LeftShiftNode::evaluate):
356         (KJS::RightShiftNode::evaluate):
357         (KJS::UnsignedRightShiftNode::evaluate):
358         (KJS::BitXOrNode::evaluate):
359         (KJS::BitOrNode::evaluate):
360         (KJS::valueForReadModifyAssignment):
361         (KJS::ForInNode::execute):
362         (KJS::TryNode::execute):
363         (KJS::FuncDeclNode::makeFunction):
364         (KJS::FuncExprNode::evaluate):
365         * kjs/number_object.cpp:
366         (KJS::NumberPrototype::NumberPrototype):
367         (KJS::numberProtoFuncToString):
368         (KJS::numberProtoFuncToLocaleString):
369         (KJS::numberProtoFuncToFixed):
370         (KJS::numberProtoFuncToExponential):
371         (KJS::numberProtoFuncToPrecision):
372         (KJS::NumberObjectImp::NumberObjectImp):
373         (KJS::NumberObjectImp::getValueProperty):
374         (KJS::NumberObjectImp::construct):
375         (KJS::NumberObjectImp::callAsFunction):
376         * kjs/object.cpp:
377         (KJS::JSObject::defineGetter):
378         (KJS::JSObject::defineSetter):
379         (KJS::JSObject::putDirect):
380         (KJS::Error::create):
381         * kjs/object.h:
382         * kjs/object_object.cpp:
383         (KJS::ObjectPrototype::ObjectPrototype):
384         (KJS::objectProtoFuncToLocaleString):
385         (KJS::objectProtoFuncToString):
386         (KJS::ObjectObjectImp::ObjectObjectImp):
387         (KJS::ObjectObjectImp::construct):
388         * kjs/regexp_object.cpp:
389         (KJS::RegExpPrototype::RegExpPrototype):
390         (KJS::regExpProtoFuncToString):
391         (KJS::RegExpImp::getValueProperty):
392         (KJS::RegExpObjectImp::RegExpObjectImp):
393         (KJS::RegExpObjectImp::arrayOfMatches):
394         (KJS::RegExpObjectImp::getBackref):
395         (KJS::RegExpObjectImp::getLastParen):
396         (KJS::RegExpObjectImp::getLeftContext):
397         (KJS::RegExpObjectImp::getRightContext):
398         (KJS::RegExpObjectImp::getValueProperty):
399         (KJS::RegExpObjectImp::createRegExpImp):
400         * kjs/regexp_object.h:
401         * kjs/string_object.cpp:
402         (KJS::StringInstance::StringInstance):
403         (KJS::StringInstance::lengthGetter):
404         (KJS::StringInstance::indexGetter):
405         (KJS::stringInstanceNumericPropertyGetter):
406         (KJS::StringPrototype::StringPrototype):
407         (KJS::replace):
408         (KJS::stringProtoFuncCharAt):
409         (KJS::stringProtoFuncCharCodeAt):
410         (KJS::stringProtoFuncConcat):
411         (KJS::stringProtoFuncIndexOf):
412         (KJS::stringProtoFuncLastIndexOf):
413         (KJS::stringProtoFuncMatch):
414         (KJS::stringProtoFuncSearch):
415         (KJS::stringProtoFuncReplace):
416         (KJS::stringProtoFuncSlice):
417         (KJS::stringProtoFuncSplit):
418         (KJS::stringProtoFuncSubstr):
419         (KJS::stringProtoFuncSubstring):
420         (KJS::stringProtoFuncToLowerCase):
421         (KJS::stringProtoFuncToUpperCase):
422         (KJS::stringProtoFuncToLocaleLowerCase):
423         (KJS::stringProtoFuncToLocaleUpperCase):
424         (KJS::stringProtoFuncLocaleCompare):
425         (KJS::stringProtoFuncBig):
426         (KJS::stringProtoFuncSmall):
427         (KJS::stringProtoFuncBlink):
428         (KJS::stringProtoFuncBold):
429         (KJS::stringProtoFuncFixed):
430         (KJS::stringProtoFuncItalics):
431         (KJS::stringProtoFuncStrike):
432         (KJS::stringProtoFuncSub):
433         (KJS::stringProtoFuncSup):
434         (KJS::stringProtoFuncFontcolor):
435         (KJS::stringProtoFuncFontsize):
436         (KJS::stringProtoFuncAnchor):
437         (KJS::stringProtoFuncLink):
438         (KJS::StringObjectImp::StringObjectImp):
439         (KJS::StringObjectImp::construct):
440         (KJS::StringObjectImp::callAsFunction):
441         (KJS::StringObjectFuncImp::StringObjectFuncImp):
442         (KJS::StringObjectFuncImp::callAsFunction):
443         * kjs/string_object.h:
444         (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
445         * kjs/testkjs.cpp:
446         (GlobalObject::GlobalObject):
447         (functionGC):
448         (functionRun):
449         (functionReadline):
450         (kjsmain):
451         * kjs/ustring.h:
452         * kjs/value.cpp:
453         (KJS::JSCell::operator new):
454         (KJS::jsString):
455         (KJS::jsOwnedString):
456         (KJS::jsNumberCell):
457         * kjs/value.h:
458         (KJS::jsNaN):
459         (KJS::jsNumber):
460         (KJS::jsNumberFromAnd):
461         (KJS::JSCell::marked):
462         (KJS::JSCell::mark):
463         (KJS::JSValue::toJSNumber):
464         Removed collectOnMainThreadOnly, as this is the only way to collect now. Replaced calls to
465         static Collector methods with calls to per-thread Heap ones.
466
467 2008-05-02  Dan Bernstein  <mitz@apple.com>
468
469         Reviewed by Maciej Stachowiak.
470
471         - Mac build fix
472
473         * wtf/StrHash.h: Added header guards and removed #include "config.h".
474
475 2008-05-01  Ada Chan  <adachan@apple.com>
476
477         #include <wtf/StrHash.h> in identifier.cpp.
478
479         Reviewed by Maciej.
480
481         * kjs/identifier.cpp:
482
483 2008-05-01  Steve Falkenburg  <sfalken@apple.com>
484
485         Build fix.
486
487         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
488
489 2008-05-01  Sam Weinig  <sam@webkit.org>
490
491         Fix build.
492
493         * JavaScriptCore.xcodeproj/project.pbxproj:
494
495 2008-05-01  Kevin McCullough  <kmccullough@apple.com>
496
497         Reviewed by Darin.
498
499         <rdar://problem/5770054> JavaScript profiler (10928)
500         - Fix "sample" output so that it can be imported into Instruments
501         - Also keep track of number of times a function is profiled.
502
503         * JavaScriptCore.xcodeproj/project.pbxproj: Add StrHash.h which needed
504         to be pulled out of identifier.cpp so that it could be used by the
505         profiler and identifiers.
506         * kjs/identifier.cpp: Ditto.
507         * profiler/FunctionCallProfile.cpp:
508         (KJS::FunctionCallProfile::printDataInspectorStyle): Inspector style
509         printing should show microseconds.
510         (KJS::FunctionCallProfile::printDataSampleStyle): Sample style printing
511         now counts the number of times a function is in the stack tree and does
512         not print microseconds since that does not make sense for a sampler.
513         * profiler/FunctionCallProfile.h: Keep track of number of times a
514         function is profiled.
515         (KJS::FunctionCallProfile::numberOfCalls):
516         * profiler/Profiler.cpp:
517         (KJS::functionNameCountPairComparator): Comparator for sort function in
518         printDataSampleStyle.
519         (KJS::Profiler::printDataSampleStyle): Print the number of times that a
520         function is listed in the stack tree in order of most times listed.
521         * wtf/HashCountedSet.h: Added copyToVector since it didn't exist and is
522         a more standard way to copy a HashSet to a Vector. I added on variant
523         that takes a pair as the Vector's type and so the HashCountedSet simply
524         fills in that pair with its internal pair, and another variant that
525         takes a Vector of the type of the HashCountedSet and only fills in the
526         Vector with the first element of the pair.
527         (WTF::copyToVector):
528         * wtf/StrHash.h: Added.
529         (WTF::):
530
531 2008-04-29  David Kilzer  <ddkilzer@apple.com>
532
533         BUILD FIX for ENABLE(DASHBOARD_SUPPORT)
534
535         * wtf/Platform.h: Defined ENABLE(DASHBOARD_SUPPORT) to 1 only for
536         PLATFORM(MAC) and PLATFORM(WIN).  Changed default to 0 for other
537         ports.
538
539 2008-04-29  Greg Bolsinga  <bolsinga@apple.com>
540
541         Reviewed by Darin.
542
543         Wrapped Dashboard code with ENABLE(DASHBOARD_SUPPORT)
544
545         * wtf/Platform.h:
546
547 2008-04-29  Kevin McCullough  <kmccullough@apple.com>
548
549         Reviewed by Geoff.
550
551         -<rdar://problem/5770054> JavaScript profiler (10928)
552         -Keep call count.
553
554         * profiler/FunctionCallProfile.cpp:
555         (KJS::FunctionCallProfile::FunctionCallProfile):
556         (KJS::FunctionCallProfile::didExecute): Implements call count and fixed a bug where a stackIndex
557         of 0 was causing the assert to be hit.
558         (KJS::FunctionCallProfile::stopProfiling):
559         (KJS::FunctionCallProfile::endAndRecordCall):
560         * profiler/FunctionCallProfile.h:
561
562 2008-04-29  Simon Hausmann  <hausmann@webkit.org>
563
564         Qt/Windows build fix. The externally declared hash tables are actually
565         declared const and the const is mangled in the symbol name, so when
566         importing they also need to be marked const.
567
568         When compiling without MULTIPLE_THREADS use a const HashTable&
569         instead of a HashTable& in ThreadClassInfoHashTables to avoid
570         initializing the latter with a const reference.
571
572         * kjs/JSGlobalObject.cpp:
573
574 2008-04-28  Alexey Proskuryakov  <ap@webkit.org>
575
576         Windows build fix.
577
578         * kjs/ExecState.h: For whatever reason, MSVC couldn't generate a default constructor for
579         a struct that had a "const List" member. Removing the const qulifier makes the problem go away.
580
581 2008-04-28  Alexey Proskuryakov  <ap@webkit.org>
582
583         Reviewed by Darin.
584
585         Fix run-webkit-tests --threading
586         and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
587         Proxy server issue in Sunday's Nightly
588
589         Changed ClassInfo objects for built-in objects to hold a getter function returning
590         a per-thread instance. This makes it safe to share these ClassInfo objects between threads -
591         and these are the only ones that need to be shared.
592
593         * kjs/lexer.cpp:
594         (KJS::Lexer::Lexer):
595         (KJS::Lexer::~Lexer):
596         * kjs/lexer.h:
597         Made mainTable a member of Lexer, so that it no longer needs to be shared between threads.
598
599         * kjs/object.cpp:
600         (KJS::JSObject::deleteProperty):
601         (KJS::JSObject::findPropertyHashEntry):
602         (KJS::JSObject::propertyIsEnumerable):
603         (KJS::JSObject::getPropertyAttributes):
604         (KJS::JSObject::getPropertyNames):
605         * kjs/object.h:
606         (KJS::ClassInfo::propHashTable):
607         Added a new classPropHashTableGetterFunction field to ClassInfo. If it is non-zero, the
608         static table is not used.
609
610         * kjs/JSGlobalObject.cpp:
611         (KJS::ThreadClassInfoHashTables::ThreadClassInfoHashTables): This new class holds per-thread
612         HashTables for built-in classes. The old static structs are copied to create per-thread
613         instances.
614         (KJS::JSGlobalObject::threadClassInfoHashTables): An accessor/initializer for the above.
615         (KJS::JSGlobalObject::init): Copy per-thread data into a single structure for faster access.
616         Also, construct globalExec.
617         (KJS::JSGlobalObject::reset): Adapted for globalExec now being an OwnPtr.
618         (KJS::JSGlobalObject::mark): Ditto.
619         (KJS::JSGlobalObject::globalExec): Ditto.
620         * kjs/JSGlobalObject.h:
621         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Made JSGlobalObject::JSGlobalObjectData::globalExec an OwnPtr, so that it can
622         be initialized from JSGlobalObject::init() after them. Otherwise, ExecState constructor was
623         trying to access half-initialized JSGlobalObject to make its own copy of these table
624         references, and failed.
625         (KJS::JSGlobalObject::JSGlobalObject): Pass "this" value to init() to create globalExec.
626         (KJS::JSGlobalObject::perThreadData): An accessor for per-thread data.
627
628         * kjs/ExecState.cpp:
629         (KJS::ExecState::ExecState):
630         * kjs/ExecState.h:
631         (KJS::ExecState::propertyNames):
632         (KJS::ExecState::emptyList):
633         (KJS::ExecState::arrayTable):
634         (KJS::ExecState::dateTable):
635         (KJS::ExecState::mathTable):
636         (KJS::ExecState::numberTable):
637         (KJS::ExecState::RegExpImpTable):
638         (KJS::ExecState::RegExpObjectImpTable):
639         (KJS::ExecState::stringTable):
640         * kjs/ExecStateInlines.h:
641         (KJS::ExecState::ExecState):
642         Each ExecState holds its own reference to per-thread data, for even faster access. Moved
643         m_emptyList and m_propertyNames to the same structure, making ExecState faster to construct
644         and take less space on the stack.
645
646         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize thread-static data
647         added to JSGlobalObject.
648
649         * API/JSCallbackConstructor.cpp:
650         (KJS::):
651         * API/JSCallbackFunction.cpp:
652         (KJS::):
653         * API/JSCallbackObject.cpp:
654         (KJS::):
655         * JavaScriptCore.exp:
656         * kjs/JSVariableObject.cpp:
657         (KJS::JSVariableObject::getPropertyAttributes):
658         * kjs/JSVariableObject.h:
659         * kjs/array_instance.cpp:
660         (KJS::):
661         * kjs/array_object.cpp:
662         (KJS::):
663         (KJS::ArrayPrototype::getOwnPropertySlot):
664         * kjs/bool_object.cpp:
665         (KJS::):
666         * kjs/create_hash_table:
667         * kjs/date_object.cpp:
668         (KJS::):
669         (KJS::DatePrototype::getOwnPropertySlot):
670         (KJS::DateObjectImp::DateObjectImp):
671         * kjs/error_object.cpp:
672         (KJS::):
673         * kjs/function.cpp:
674         (KJS::):
675         * kjs/function_object.cpp:
676         (KJS::FunctionPrototype::FunctionPrototype):
677         * kjs/internal.cpp:
678         (KJS::):
679         * kjs/lookup.h:
680         * kjs/math_object.cpp:
681         (KJS::):
682         (KJS::MathObjectImp::getOwnPropertySlot):
683         * kjs/number_object.cpp:
684         (KJS::):
685         (KJS::NumberObjectImp::getOwnPropertySlot):
686         * kjs/object_object.cpp:
687         (KJS::ObjectPrototype::ObjectPrototype):
688         * kjs/regexp_object.cpp:
689         (KJS::):
690         (KJS::RegExpPrototype::RegExpPrototype):
691         (KJS::RegExpImp::getOwnPropertySlot):
692         (KJS::RegExpImp::put):
693         (KJS::RegExpObjectImp::getOwnPropertySlot):
694         (KJS::RegExpObjectImp::put):
695         * kjs/string_object.cpp:
696         (KJS::):
697         (KJS::StringPrototype::getOwnPropertySlot):
698         Adjust for the above changes.
699
700 2008-04-28  Darin Adler  <darin@apple.com>
701
702         Reviewed by Adam.
703
704         - make sure RefPtr's default hash doesn't ref/deref when computing the hash
705         - remove remnants of the hash table storage type optimization
706
707         * wtf/HashFunctions.h: Used "using" to get the hash and equal functions
708         from PtrHash<P*> into PtrHash<RefPtr<P>>.
709
710         * wtf/HashMap.h: Replaced uses of PairBaseHashTraits with PairHashTraits.
711         Eliminated storage-related typedefs. Removed constructor, destructor,
712         copy constructor, and destructor since the compiler-generated ones are
713         fine. Removed refAll and derefAll. Took out unnnecessary typecasts.
714         Removed use of RefCounter.
715
716         * wtf/HashSet.h: Eliminated storage-related typedefs. Removed constructor,
717         destructor, copy constructor, and destructor since the compiler-generated
718         ones are fine. Removed refAll and derefAll. Removed unneeded template
719         arguents from HashSetTranslatorAdapter. Eliminated unneeded HashSetTranslator
720         template.
721
722         * wtf/HashTable.h: Tweaked formatting. Removed NeedsRef, RefCounterBase,
723         RefCounter, HashTableRefCounterBase, HashTableRefCounter, and Assigner
724         class templates.
725
726         * wtf/HashTraits.h: Removed StorageTraits, needsRef, PairBaseHashTraits,
727         and HashKeyStorageTraits.
728
729         * wtf/RefPtrHashMap.h: Made all the same fixes as in HashMap. Also made
730         the corresponding changes to RefPtrHashMapRawKeyTranslator.
731
732 2008-04-28  Darin Adler  <darin@apple.com>
733
734         Reviewed by Mitz.
735
736         - fix assertion hit every time you view www.apple.com
737
738         * kjs/PropertyNameArray.cpp:
739         (KJS::PropertyNameArray::add): Changed assertion to allow null and empty strings.
740         Now to find out why we have a property named "" and if that's a bug!
741
742 2008-04-27  Mark Rowe  <mrowe@apple.com>
743
744         Reviewed by Maciej Stachowiak.
745
746         Fix crash inside PtrHash::hash when loading a page.
747
748         * wtf/HashFunctions.h: Explicitly use the superclass implementation of hash to avoid infinite recursion.
749
750 2008-04-27  Darin Adler  <darin@apple.com>
751
752         Reviewed by Maciej.
753
754         - fix <rdar://problem/5657459> REGRESSION: JavaScriptCore no longer builds with
755           GCC 4.2 due to pointer aliasing warnings
756
757         Fix this by removing the HashTable optimizations that allowed us to share a back end
758         implementation between hash tables with integers, pointers, RefPtr, and String objects
759         as keys. The way it worked was incompatible with strict aliasing.
760
761         This increases code size. On Mac OS X we'll have to regenerate .order files to avoid
762         slowing down Safari startup times.
763
764         This creates a slight slowdown in SunSpider, mitigated by the following four speedups:
765
766         - speed up array put slightly by moving a branch (was already done for get)
767
768         - speed up symbol table access by adding a function named inlineGet to HashMap
769           and using that in symbolTableGet/Put
770
771         - speed up PropertyNameArray creation by reducing the amount of reference count
772           churn and uniqueness checking when adding names and not doing any allocation at
773           all when building small arrays
774
775         - speed up conversion of strings to floating point numbers by eliminating the
776           malloc/free of the buffer for the ASCII copy of the string; a way to make
777           things even faster would be to change strtod to take a UTF-16 string
778
779         Note that there is considerable unused complexity now in HashSet/Map/Table to support
780         "storage types", which is no longer used. Will do in a separate patch.
781
782         * API/JSCallbackObjectFunctions.h:
783         (KJS::JSCallbackObject<Base>::getPropertyNames): Removed explicit cast to Identifier to
784         take advantage of the new PropertyNameArray::add overload and avoid reference count churn.
785         * API/JSObjectRef.cpp:
786         (JSPropertyNameAccumulatorAddName): Ditto.
787         * JavaScriptCore.exp: Updated PropertyNameArray::add entry point name.
788
789         * kjs/JSVariableObject.cpp: Removed now-unneeded IdentifierRepHashTraits::nullRepPtr
790         definition (see below).
791         (KJS::JSVariableObject::getPropertyNames): Removed explicit cast to Identifier.
792
793         * kjs/JSVariableObject.h:
794         (KJS::JSVariableObject::symbolTableGet): Use inlineGet for speed. Also changed to do
795         early exit instead of nesting the body inside an if.
796         (KJS::JSVariableObject::symbolTablePut): Ditto.
797
798         * kjs/PropertyNameArray.cpp:
799         (KJS::PropertyNameArray::add): Changed implementation to take a raw pointer instead of
800         a reference to an identifier. Do uniqueness checking by searching the vector when the
801         vector is short, only building the set once the vector is large enough.
802
803         * kjs/PropertyNameArray.h: Added an overload of add for a raw pointer, and made the old
804         add function call that one. Added an addKnownUnique function for use when the new
805         name is known to be different from any other in the array. Changed the vector to have
806         an inline capacity of 20.
807
808         * kjs/SymbolTable.h: Changed IdentifierRepHash to inherit from the default hash for
809         a RefPtr so we don't have to define so much. Added an overload of the hash function for
810         a raw pointer as required by the new RefPtrHashMap. Got rid of the now-unneeded
811         IdentifierRepHashTraits -- the default traits now work fine. Added a definition of
812         empthValueIsZero to SymbolTableIndexHashTraits; not having it was incorrect, but harmless.
813
814         * kjs/array_instance.cpp:
815         (KJS::ArrayInstance::put): Move the maxArrayIndex check inside the branch that checks
816         the index against the length, as done in the get function.
817
818         * kjs/function.cpp:
819         (KJS::globalFuncKJSPrint): Changed to use the new getCString instead of cstring.
820
821         * kjs/internal.cpp: Removed printInfo debugging function, a client of cstring.
822         If we need a debugging function we can easily make a better one and we haven't
823         used this one in a long time.
824         * kjs/internal.h: Ditto.
825
826         * kjs/object.cpp:
827         (KJS::JSObject::getPropertyNames): Removed explicit cast to Identifier.
828         * kjs/property_map.cpp:
829         (KJS::PropertyMap::getEnumerablePropertyNames): Ditto. Also added a special case for
830         the case where the propertyNames array is empty -- in that case we know we're adding
831         a set of names that are non-overlapping so we can use addKnownUnique.
832         * kjs/ustring.cpp:
833         (KJS::UString::getCString): Replaces cstring. Puts the C string into a CStringBuffer,
834         which is a char Vector with an inline capacity. Also returns a boolean to indicate if
835         the converion was lossy, which eliminates the need for a separate is8Bit call.
836         (KJS::UString::toDouble): Changed to call getCString instead of cstring.
837         * kjs/ustring.h: Ditto.
838
839         * wtf/HashFunctions.h: Overload the hash and equal functions for RefPtr's default
840         hash to take raw pointers. This works with the changes to RefPtrHashMap to avoid
841         introducing refcount churn.
842
843         * wtf/HashMap.h: Removed special code to convert the deleted value to the empty value
844         when writing a new value into the map. This is now handled elsewhere.
845         (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
846         HashTable::lookup; it's slightly more efficient to do this check inside lookup.
847
848         * wtf/HashTable.h:
849         (WTF::HashTable::isDeletedBucket): Changed to use isDeletedValue instead of using
850         deletedValue and the equality operator.
851         (WTF::HashTable::deleteBucket): Changed to use constructDeletedValue instead of
852         using deletedValue and the assignment operator.
853         (WTF::HashTable::checkKey): Added. Factors out the check for values that are empty
854         or deleted keys that's used in various functions below.
855         (WTF::HashTable::lookup): Changed to use checkKey, check for a 0 table, and also
856         made public for use by RefPtrHashMap.
857         (WTF::HashTable::lookupForWriting): Changed to use checkKey.
858         (WTF::HashTable::fullLookupForWriting): Changed to use checkKey.
859         (WTF::HashTable::add): Changed to use checkKey, and call initializeBucket on a
860         deleted bucket before putting a new entry into it.
861         (WTF::HashTable::addPassingHashCode): Ditto.
862         (WTF::HashTable::deallocateTable): Check isDeletedBucket before calling ~ValueType.
863
864         * wtf/HashTraits.h: Got ridd of all the HashTraits specialization for the integer
865         types, since GeneicHashTraitsBase already deals with integers separately. Put the
866         deleted value support into GenericHashTraitsBase. Changed FloatHashTraits to
867         inherit from GenericHashTraits, and define construct/isDeletedValue rather than
868         deletedValue. Removed the ref and deref functions from RefPtr's HashTraits, and
869         defined construct/isDeletedValue. Eliminated DeletedValueAssigner. Changed
870         PairHashTraits to define construct/isDeletedValue, and also merged
871         PairBaseHashTraits in with PairHashTraits. Got rid of all specialization of
872         HashKeyStorageTraits. We'll remove that, and the needsRef data member, later.
873
874         * wtf/RefPtr.h: Added HashTableDeletedValueType, an enum type with a single value,
875         HashTableDeletedValue. Used that type to make a new constructor to construct
876         deleted values and also added an isHashTableDeletedValue function.
877
878         * wtf/RefPtrHashMap.h: Added RefPtrHashMapRawKeyTranslator and used it to implement
879         the raw pointer functions. This is a way to continue to avoid refcount thrash. We
880         can't use the old way because it depended on the underlying map using a non-RefPtr
881         type.
882         (WTF::HashMap::find): Use find with RefPtrHashMapRawKeyTranslator.
883         (WTF::HashMap::contains): Use contains with RefPtrHashMapRawKeyTranslator.
884         (WTF::HashMap::inlineAdd): Use add with RefPtrHashMapRawKeyTranslator.
885         (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
886         HashTable::lookup; it's slightly more efficient to do this check inside lookup.
887         (WTF::HashMap::inlineGet): Added. Just like get, but marked inline for use in the
888         symbol table code.
889
890 2008-04-25  Sam Weinig  <sam@webkit.org>
891
892         Rubber-stamped by Mark Rowe.
893
894         Remove SavedBuiltins and SavedProperties classes and the methods used to
895         save data to them.  The CachedPage now stores a the JSGlobalObject in full.
896
897         * JavaScriptCore.exp:
898         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
899         * JavaScriptCore.xcodeproj/project.pbxproj:
900         * kjs/JSGlobalObject.cpp:
901         * kjs/JSGlobalObject.h:
902         * kjs/JSVariableObject.cpp:
903         * kjs/JSVariableObject.h:
904         (KJS::JSVariableObject::localStorage):
905         * kjs/SavedBuiltins.h: Removed.
906         * kjs/object.h:
907         * kjs/property_map.cpp:
908         * kjs/property_map.h:
909
910 2008-04-25  Mark Rowe  <mrowe@apple.com>
911
912         Rubber-stamped by Sam Weinig.
913
914         Add some content to an empty ICU header file to prevent verification errors.
915
916         * icu/unicode/utf_old.h:
917
918 2008-04-25  David Kilzer  <ddkilzer@apple.com>
919
920         <rdar://problem/5819422> REGRESSION: Wrong line number passed to -willLeaveCallFrame
921
922         Patch by George Dicker and Michael Kahl.  Reviewed by Darin.
923
924         When -[NSObject(WebScriptDebugDelegate) webView:willLeaveCallFrame:sourceId:line:forWebFrame:]
925         is invoked, the first line number of the function is returned instead of the last
926         line number.  This regressed in r28458.
927
928         * kjs/nodes.cpp:
929         (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Pass lastLine() instead of lineNo()
930         when calling Debugger::returnEvent().
931
932 2008-04-25  Darin Adler  <darin@apple.com>
933
934         Done with Stephanie Lewis.
935
936         * JavaScriptCore.xcodeproj/project.pbxproj: Prepare for compilation with gcc 4.2 by
937         adding -fno-strict-aliasing to CollatorICU.cpp.
938
939 2008-04-24  Sam Weinig  <sam@webkit.org>
940
941         Reviewed by Geoffrey Garen.
942
943         Add a #define to easily enable collecting on every allocation to aid
944         debugging GC bugs.
945
946         * kjs/collector.cpp:
947         (KJS::Collector::heapAllocate):
948
949 2008-04-24  Kevin McCullough  <kmccullough@apple.com>
950
951         Reviewed by Adam and Sam.
952
953         -<rdar://problem/5770054> JavaScript profiler (10928)
954         -Only profile the page group that starts profiling to avoid profiling
955         tools that shouldn't be profiled unless explicitly requested to.
956
957         * JavaScriptCore.exp: Export new signature.
958         * kjs/JSGlobalObject.cpp: Add unique identifiers to the JSGlobalObject.
959         (KJS::JSGlobalObject::init):
960         * kjs/JSGlobalObject.h: Ditto.
961         (KJS::JSGlobalObject::setPageGroupIdentifier):
962         (KJS::JSGlobalObject::pageGroupIdentifier):
963         * profiler/Profiler.cpp: Check the identifier of the page group of the
964         lexical global exec state and only profile if it matches the given page
965         group identifier.
966         (KJS::Profiler::startProfiling):
967         (KJS::Profiler::willExecute):
968         (KJS::Profiler::didExecute):
969         * profiler/Profiler.h: Ditto.
970         (KJS::Profiler::Profiler):
971
972 2008-04-24  Julien Chaffraix  <jchaffraix@webkit.org>
973
974         Reviewed by Simon.
975
976         Bug 15940: Implement threading API for Qt
977         https://bugs.webkit.org/show_bug.cgi?id=15940
978
979         Original patch by Justin Haygood, tweaked by me.
980
981         * JavaScriptCore.pri:
982         * wtf/ThreadingQt.cpp: Added.
983         (WTF::threadMapMutex):
984         (WTF::threadMap):
985         (WTF::establishIdentifierForThread):
986         (WTF::clearThreadForIdentifier):
987         (WTF::threadForIdentifier):
988         (WTF::initializeThreading):
989         (WTF::ThreadPrivate::getReturnValue):
990         (WTF::ThreadPrivate::ThreadPrivate):
991         (WTF::ThreadPrivate::run):
992         (WTF::createThread):
993         (WTF::waitForThreadCompletion): return !res to return
994         0 on success (to match the pthreads implementation).
995         (WTF::detachThread):
996         (WTF::identifierByQthreadHandle):
997         (WTF::currentThread):
998         (WTF::Mutex::Mutex):
999         (WTF::Mutex::~Mutex):
1000         (WTF::Mutex::lock):
1001         (WTF::Mutex::tryLock):
1002         (WTF::Mutex::unlock):
1003         (WTF::ThreadCondition::ThreadCondition):
1004         (WTF::ThreadCondition::~ThreadCondition):
1005         (WTF::ThreadCondition::wait):
1006         (WTF::ThreadCondition::timedWait):
1007         (WTF::ThreadCondition::signal):
1008
1009 2008-04-22  Darin Adler  <darin@apple.com>
1010
1011         Reviewed by Anders.
1012
1013         - simplify use of HashTraits to prepare for some upcoming hash table changes
1014
1015         * kjs/SymbolTable.h: Made SymbolTableIndexHashTraits derive from HashTraits<size_t>
1016         and specialize only the empty value.
1017
1018 2008-04-23  Holger Hans Peter Freyther  <zecke@selfish.org>
1019
1020         Reviewed by Simon.
1021
1022         Removed the #define for USE_SYSTEM_MALLOC that we set in WebKit.pri
1023         already.
1024
1025         * wtf/Platform.h:
1026
1027 2008-04-21  Kevin McCullough  <kmccullough@apple.com>
1028
1029         Reviewed by Adam.
1030
1031         <rdar://problem/5770054> JavaScript profiler (10928)
1032         - When stop profiling is called we need to stop the timers on all the
1033         functions that are still running.
1034
1035         * profiler/FunctionCallProfile.cpp:
1036         (KJS::FunctionCallProfile::didExecute):
1037         (KJS::FunctionCallProfile::stopProfiling):
1038         * profiler/FunctionCallProfile.h:
1039         * profiler/Profiler.cpp:
1040         (KJS::Profiler::stopProfiling):
1041
1042 2008-04-21  Alexey Proskuryakov  <ap@webkit.org>
1043
1044         Reviewed by Darin.
1045
1046         Move collector main thread initialization from WebKit/win to KJS::initializeThreading.
1047
1048         * kjs/InitializeThreading.cpp:
1049         (KJS::initializeThreading):
1050
1051 2008-04-21  Adam Roben  <aroben@apple.com>
1052
1053         MSVC build fix
1054
1055         Reviewed by Alexey Proskuryakov.
1056
1057         * kjs/ustring.h:
1058         (KJS::UString::cost): Disable a warning about assigning a 32-bit
1059         size_t into a 31-bit size_t.
1060
1061 2008-04-21  Simon Hausmann  <hausmann@webkit.org>
1062
1063         Reviewed by Lars.
1064
1065         Made convertValueToQVariant accessible from within WebKit/qt/Api
1066
1067         * bindings/qt/qt_runtime.h:
1068
1069 2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
1070
1071         Reviewed by Simon.
1072
1073         Build fix for Qt 4.3
1074
1075         * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
1076         always defined. Do this by adding defines to the compiler line
1077         * For users of our API this is not feasible. Every public header file should
1078         include qwebkitglobal.h. Define the QT_BEGIN_NAMESPACE and QT_END_NAMESPACE
1079         when we are building everything < 4.4.0 and don't have them defined.
1080
1081         * kjs/testkjs.pro:
1082
1083 2008-04-19  Matt Lilek  <webkit@mattlilek.com>
1084
1085         Not reviewed, Windows build fix - copy the profiler headers in all
1086         configurations, not just Debug_Internal.
1087
1088         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1089
1090 2008-04-19  Mike Hommey  <glandium@debian.org>
1091
1092         Reviewed by Alp Toker.
1093
1094         Don't build testkjs with rpath.
1095
1096         * GNUmakefile.am:
1097
1098 2008-04-18  Kevin Ollivier  <kevino@theolliviers.com>
1099
1100         wx build fixes. Rename LocalStorage.h to LocalStorageEntry.h
1101         to avoid header detection issues between WebCore/storage/LocalStorage.h 
1102         and it, and add $(PROFILER_SOURCES) to the wx JSCore build.
1103
1104         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1105         * JavaScriptCore.xcodeproj/project.pbxproj:
1106         * jscore.bkl:
1107         * kjs/ExecState.h:
1108         * kjs/JSVariableObject.h:
1109         * kjs/LocalStorage.h: Removed.
1110         * kjs/LocalStorageEntry.h: Copied from JavaScriptCore/kjs/LocalStorage.h.
1111         * kjs/function.h:
1112
1113 2008-04-18 Jan  Michael Alonzo  <jmalonzo@unpluggable.com>
1114
1115         Reviewed by Alp Toker.
1116
1117         http://bugs.webkit.org/show_bug.cgi?id=16620
1118         [GTK] Autotools make dist and make check support
1119
1120         Cleanups.
1121
1122         * GNUmakefile.am:
1123
1124 2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>
1125
1126         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Windows
1127         build fix.
1128
1129 2008-04-11  Mark Rowe  <mrowe@apple.com>
1130
1131         Rubber-stamped by Antti Koivisto.
1132
1133         Silence GCC 4.3 warnings by removing extraneous consts.
1134
1135         * kjs/ustring.cpp:
1136         * kjs/ustring.h:
1137
1138 2008-04-18  Kevin McCullough  <kmccullough@apple.com>
1139
1140         Reviewed by Sam.
1141
1142         -<rdar://problem/5770054> JavaScript profiler (10928)
1143         - Use Deque instead of Vector since the profiler uses prepend a lot
1144         and deque is faster at that.
1145
1146         * profiler/FunctionCallProfile.h:
1147         (KJS::FunctionCallProfile::milliSecs): Corrected the name to match
1148         its output.
1149         * wtf/Deque.h:
1150         (WTF::deleteAllValues):
1151
1152 2008-04-18  Kevin McCullough  <kmccullough@apple.com>
1153
1154         Reviewed by Sam and Adam.
1155
1156         -<rdar://problem/5770054> JavaScript profiler (10928)
1157         - Cleaned up the header file and made some functions static, added
1158         a new, sane, printing function, and fixed a few minor bugs.
1159
1160         * JavaScriptCore.exp:
1161         * JavaScriptCore.xcodeproj/project.pbxproj:
1162         * profiler/FunctionCallProfile.cpp:
1163         (KJS::FunctionCallProfile::didExecute): Removed assertion that time is
1164         > 0 because at ms resolution that may not be true and only cross-
1165         platform way to get time differences is in ms.
1166         (KJS::FunctionCallProfile::printDataInspectorStyle): Added a new
1167         printing function for dumping data in a sane style.
1168         (KJS::FunctionCallProfile::printDataSampleStyle): Fixed a bug where we
1169         displayed too much precision when printing our floats. Also added logic
1170         to make sure we don't display 0 because that doesn't make sense for a
1171         sampling profile.
1172         * profiler/FunctionCallProfile.h:
1173         * profiler/Profiler.cpp: Moved functions that could be static into the
1174         implementation, and chaned the ASSERTs to early returns.  I did this
1175         because console.profile() is a JS function and so was being profiled
1176         but asserting because the profiler had not been started! In the future
1177         I would like to put the ASSERTs back and not profile the calls to
1178         console.profile() and console.profileEnd().
1179         (KJS::Profiler::willExecute):
1180         (KJS::Profiler::didExecute):
1181         (KJS::getStackNames): Fixed a bug where the wrong ExecState was being
1182         used.
1183         (KJS::getFunctionName):
1184         (KJS::Profiler::printDataInspectorStyle):
1185         * profiler/Profiler.h:
1186
1187 2008-04-18  Alexey Proskuryakov  <ap@webkit.org>
1188
1189         Reviewed by Darin.
1190
1191         Fix leaks during plugin tests (which actually excercise background JS), and potential
1192         PAC brokenness that was not reported, but very likely.
1193
1194         The leaks shadowed a bigger problem with Identifier destruction. Identifier::remove involves
1195         an IdentifierTable lookup, which is now a per-thread instance. Since garbage collection can
1196         currently happen on a different thread than allocation, a wrong table was used.
1197
1198         No measurable change on SunSpider total, ~1% variation on individual tests.
1199
1200         * kjs/ustring.cpp:
1201         (KJS::):
1202         (KJS::UString::Rep::create):
1203         (KJS::UString::Rep::destroy):
1204         * kjs/ustring.h:
1205         Replaced isIdentifier with a pointer to IdentifierTable, so that destruction can be done
1206         correctly. Took one bit from reportedCost, to avoid making UString::Rep larger (performance
1207         effect was measurable on SunSpider).
1208
1209         * kjs/identifier.cpp:
1210         (KJS::IdentifierTable::IdentifierTable):
1211         (KJS::IdentifierTable::~IdentifierTable):
1212         (KJS::IdentifierTable::add):
1213         (KJS::IdentifierTable::remove):
1214         Make IdentifierTable a real class. Its destructor needs to zero out outstanding references,
1215         because some identifiers may briefly outlive it during thread destruction, and we don't want
1216         them to use their stale pointers.
1217
1218         (KJS::LiteralIdentifierTable):
1219         (KJS::Identifier::add):
1220         Now that LiteralIdentifierTable is per-thread and can be destroyed not just during application
1221         shutdown, it is not appropriate to simply bump refcount for strings that get there; changed
1222         the table to hold RefPtrs.
1223
1224         (KJS::CStringTranslator::translate):
1225         (KJS::UCharBufferTranslator::translate):
1226         (KJS::Identifier::addSlowCase):
1227         (KJS::Identifier::remove):
1228         * kjs/identifier.h:
1229         (KJS::Identifier::add):
1230         Use and update UString::Rep::identifierTable as appropriate. Updating it is now done in
1231         IdentifierTable::add, not in translators.
1232
1233 2008-04-18  Alexey Proskuryakov  <ap@webkit.org>
1234
1235         Reviewed by Darin.
1236
1237         Get rid of static compareWithCompareFunctionArguments in array_instance.cpp.
1238
1239         No change on SunSpider, CelticKane or iBench JavaScript. It is probable that in some cases,
1240         merge sort is still faster, but more investigation is needed to determine a new cutoff.
1241         Or possibly, it would be better to do what FIXME says (change to tree sort).
1242
1243         Also, made arguments a local variable - not sure why it was a member of
1244         CompareWithCompareFunctionArguments.
1245
1246         * kjs/array_instance.cpp:
1247         (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
1248         (KJS::CompareWithCompareFunctionArguments::operator()):
1249         (KJS::ArrayInstance::sort):
1250
1251 2008-04-18  Simon Hausmann  <hausmann@webkit.org>
1252
1253         Build fix for gcc 4.3. Include stdio.h for printf.
1254
1255         * profiler/FunctionCallProfile.cpp:
1256         * profiler/Profiler.cpp:
1257
1258 2008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>
1259
1260         Reviewed by mrowe.
1261
1262         * wtf/Platform.h: Add HAVE_ACCESSIBILITY to Platform.h.
1263
1264 2008-04-17  Alexey Proskuryakov  <ap@webkit.org>
1265
1266         Reviewed by Maciej.
1267
1268         Thread static data destructors are not guaranteed to be called in any particular order;
1269         turn ThreadSpecific into a phoenix-style singleton to avoid accessing freed memory when
1270         deleted objects are interdependent (e.g. CommonIdentifiers and internal identifier tables).
1271
1272         No change on SunSpider.
1273
1274         * wtf/ThreadSpecific.h:
1275         (WTF::ThreadSpecific::Data::Data):
1276         (WTF::::get):
1277         (WTF::::set):
1278         (WTF::::destroy):
1279
1280 2008-04-15  Srinivas Rao. M Hamse  <msrinirao@gmail.com>
1281
1282         Reviewed by Maciej Stachowiak.
1283
1284         - gcc 3.x build fix
1285
1286         * kjs/nodes.h: CallerType definition made public for gcc 3.x compilation
1287
1288 2008-04-16  Brady Eidson  <beidson@apple.com>
1289
1290         Reviewed by Sam Weinig
1291
1292         Change ThreadSafeShared to act like RefCounted by starting out with a single ref by default
1293
1294         * wtf/Threading.h:
1295         (WTF::ThreadSafeShared::ThreadSafeShared):
1296
1297 2008-04-16  Sam Weinig  <sam@webkit.org>
1298
1299         Reviewed by Geoffrey Garen.
1300
1301         - To keep the behavior of the WebKit and JavaScriptCore API's the same,
1302           we need to hide the fact that the global object and the window object
1303           are no longer the same thing, and the the global object now changes on
1304           navigations.  To do this, only the wrapper should ever be exposed.  This
1305           fixes the two remaining spots where the internal global object is exposed,
1306           the windowScriptObject returned from [WebFrame windowObject] and the object
1307           return by calling JSContextGetGlobalObject on [WebFrame globalContext].
1308
1309         * API/JSContextRef.cpp:
1310         (JSContextGetGlobalObject):
1311         This is a bit of a hack, this returns the "this" representation of the globalObject
1312         which will be the WrapperWindow for WebCore and the globalObject for non-WebCore.
1313
1314         * API/JSObjectRef.cpp:
1315         (JSObjectSetProperty):
1316         Call the new putWithAttributes method instead of relying on lower-level calls.
1317         This is needed so that the window wrapper can forward the calls.
1318
1319         * JavaScriptCore.exp:
1320         * kjs/Activation.h:
1321         * kjs/JSGlobalObject.cpp:
1322         (KJS::JSGlobalObject::putWithAttributes):
1323         * kjs/JSGlobalObject.h:
1324         * kjs/JSVariableObject.h:
1325         (KJS::JSVariableObject::symbolTablePutWithAttributes):
1326         * kjs/function.cpp:
1327         (KJS::ActivationImp::putWithAttributes):
1328         * kjs/nodes.cpp:
1329         (KJS::ConstDeclNode::handleSlowCase):
1330         (KJS::ConstDeclNode::evaluateSingle):
1331         (KJS::EvalNode::processDeclarations):
1332         * kjs/object.cpp:
1333         (KJS::JSObject::putWithAttributes):
1334         * kjs/object.h:
1335         Rename initializeVariable to putWithAttributes and move it down to JSObject so it
1336         can be used for JSObjectSetProperty.
1337
1338 2008-04-16  Kevin McCullough  <kmccullough@apple.com>
1339
1340         Reviewed by Sam and Geoff.
1341
1342         -<rdar://problem/5770054> JavaScript profiler (10928)
1343         Inital profiler prototype
1344
1345         * GNUmakefile.am: Added new files to project
1346         * JavaScriptCore.pri: Ditto
1347         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto
1348         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto
1349         * JavaScriptCoreSources.bkl: Ditto
1350         * kjs/config.h: Put compiling flag in here.
1351         * kjs/function.cpp: Instrument calling the function eval().
1352         (KJS::eval):
1353         * kjs/interpreter.cpp: Instrument evaluating global scopes.
1354         (KJS::Interpreter::evaluate):
1355         * kjs/object.cpp: Instrument JS function calls.
1356         (KJS::JSObject::call):
1357         * profiler: Added.
1358         * profiler/FunctionCallProfile.cpp: Added.
1359         (KJS::FunctionCallProfile::FunctionCallProfile):
1360         (KJS::FunctionCallProfile::~FunctionCallProfile):
1361         (KJS::FunctionCallProfile::willExecute): Call right before the JS function or executing context is executed to start the profiler's timer.
1362         (KJS::FunctionCallProfile::didExecute): Call right after the JS function or executing context is executed to stop the profiler's timer.
1363         (KJS::FunctionCallProfile::addChild): Add a child to the current FunctionCallProfile if it isn't already a child of the current FunctionalCallProfile.
1364         (KJS::FunctionCallProfile::findChild): Return the child that matches the given name if there is one.
1365         (KJS::FunctionCallProfile::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
1366         * profiler/FunctionCallProfile.h: Added.
1367         (KJS::FunctionCallProfile::FunctionCallProfile):
1368         (KJS::FunctionCallProfile::~FunctionCallProfile):
1369         (KJS::FunctionCallProfile::functionName):
1370         (KJS::FunctionCallProfile::microSecs):
1371         * profiler/Profiler.cpp: Added.
1372         (KJS::Profiler::profiler):
1373         (KJS::Profiler::sharedProfiler): Return global singleton (may change due to multi-threading concerns)
1374         (KJS::Profiler::startProfiling): Don't start collecting profiling information until the user starts the profiler. Also don't clear old prfiled data until the profiler is restarted.
1375         (KJS::Profiler::stopProfiling): Stop collecting profile information.
1376         (KJS::Profiler::willExecute): Same as above. 
1377         (KJS::Profiler::didExecute): Same as above.
1378         (KJS::Profiler::insertStackNamesInTree): Follow the stack of the given names and if a sub-stack is not in the current tree, add it.
1379         (KJS::Profiler::getStackNames): Get the names from the different passed in parameters and order them as a stack.
1380         (KJS::Profiler::getFunctionName): Get the function name from the given parameter.
1381         (KJS::Profiler::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
1382         (KJS::Profiler::debugLog):
1383         * profiler/Profiler.h: Added.
1384         (KJS::Profiler::Profiler):
1385
1386 2008-04-16  Sam Weinig  <sam@webkit.org>
1387
1388         Reviewed by Darin Adler.
1389
1390         - Remove kjs_ prefix from strtod, dtoa, and freedtoa and put it
1391           in the KJS namespace.
1392         - Make strtod, dtoa, and freedtoa c++ functions instead of extern "C".
1393         - Remove mode switching from dtoa.  ~2% improvement on test 26. 
1394         - Removes all unnecessary #defines from dtoa code.
1395
1396         * JavaScriptCore.exp:
1397         * kjs/dtoa.cpp:
1398         (KJS::ulp):
1399         (KJS::b2d):
1400         (KJS::d2b):
1401         (KJS::ratio):
1402         (KJS::):
1403         (KJS::strtod):
1404         (KJS::freedtoa):
1405         (KJS::dtoa):
1406         * kjs/dtoa.h:
1407         * kjs/function.cpp:
1408         (KJS::parseInt):
1409         * kjs/lexer.cpp:
1410         (KJS::Lexer::lex):
1411         * kjs/number_object.cpp:
1412         (KJS::integer_part_noexp):
1413         (KJS::numberProtoFuncToExponential):
1414         * kjs/ustring.cpp:
1415         (KJS::UString::from):
1416         (KJS::UString::toDouble):
1417
1418 2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
1419
1420         Reviewed by Darin.
1421
1422         Get rid of static execForCompareByStringForQSort in array_instance.cpp.
1423
1424         No change on SunSpider, CelticKane or iBench JavaScript.
1425
1426         * kjs/array_instance.cpp:
1427         (KJS::ArraySortComparator::ArraySortComparator):
1428         (KJS::ArraySortComparator::operator()):
1429         (KJS::ArrayInstance::sort):
1430         Switch slow case to std::sort, so that ExecState can be passed in a comparator.
1431
1432 2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
1433
1434         Reviewed by Adam Roben.
1435
1436         MSVC build fix.
1437
1438         * kjs/CommonIdentifiers.cpp:
1439         * kjs/CommonIdentifiers.h:
1440         * kjs/Parser.cpp:
1441         * kjs/Parser.h:
1442         * kjs/identifier.cpp:
1443         * kjs/lexer.h:
1444         * wtf/ThreadSpecific.h:
1445
1446 2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
1447
1448         Build fix.
1449
1450         * kjs/date_object.cpp:
1451         * kjs/date_object.h:
1452         Don't include DateMath.h from date_object.h, as the latter is used from WebCore, while
1453         where the former is not available.
1454
1455 2008-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>
1456
1457         Unreviewed build fix for MSVC. It does not want to have
1458         WTF in the KJS namespace.
1459
1460         * kjs/CommonIdentifiers.h:
1461
1462 2008-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>
1463
1464         Unreviewed build fix for gcc.
1465
1466         ::msToGregorianDateTime  is not known to it.
1467
1468         * kjs/date_object.cpp:
1469         (KJS::DateInstance::msToGregorianDateTime):
1470
1471 2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
1472
1473         Reviewed by Oliver Hunt.
1474
1475         Initialize threadMapMutex safely (as already done in ThreadingWin).
1476
1477         * wtf/ThreadingGtk.cpp:
1478         (WTF::threadMapMutex):
1479         (WTF::initializeThreading):
1480         * wtf/ThreadingPthreads.cpp:
1481         (WTF::threadMapMutex):
1482         (WTF::initializeThreading):
1483
1484 2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
1485
1486         Reviewed by Adam Roben.
1487
1488         Cache Gregorian date/time structure on DateInstance objects for 1.027x SunSpider speedup
1489         (1.65x on date-format-xparb, 1.13x on date-format-tofte).
1490
1491         * kjs/DateMath.h:
1492         (KJS::GregorianDateTime::copyFrom): Added. It presumably makes sense to keep GregorianDateTime
1493         Noncopyable, so it's not just operator=.
1494
1495         * kjs/date_object.h: Added a per-object cache.
1496
1497         * kjs/date_object.cpp:
1498         (KJS::DateInstance::DateInstance):
1499         (KJS::DateInstance::msToGregorianDateTime):
1500         (KJS::dateProtoFuncToString):
1501         (KJS::dateProtoFuncToUTCString):
1502         (KJS::dateProtoFuncToDateString):
1503         (KJS::dateProtoFuncToTimeString):
1504         (KJS::dateProtoFuncToLocaleString):
1505         (KJS::dateProtoFuncToLocaleDateString):
1506         (KJS::dateProtoFuncToLocaleTimeString):
1507         (KJS::dateProtoFuncGetFullYear):
1508         (KJS::dateProtoFuncGetUTCFullYear):
1509         (KJS::dateProtoFuncToGMTString):
1510         (KJS::dateProtoFuncGetMonth):
1511         (KJS::dateProtoFuncGetUTCMonth):
1512         (KJS::dateProtoFuncGetDate):
1513         (KJS::dateProtoFuncGetUTCDate):
1514         (KJS::dateProtoFuncGetDay):
1515         (KJS::dateProtoFuncGetUTCDay):
1516         (KJS::dateProtoFuncGetHours):
1517         (KJS::dateProtoFuncGetUTCHours):
1518         (KJS::dateProtoFuncGetMinutes):
1519         (KJS::dateProtoFuncGetUTCMinutes):
1520         (KJS::dateProtoFuncGetSeconds):
1521         (KJS::dateProtoFuncGetUTCSeconds):
1522         (KJS::dateProtoFuncGetTimezoneOffset):
1523         (KJS::setNewValueFromTimeArgs):
1524         (KJS::setNewValueFromDateArgs):
1525         (KJS::dateProtoFuncSetYear):
1526         (KJS::dateProtoFuncGetYear):
1527         Use the cache when converting.
1528
1529 2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
1530
1531         Reviewed by Darin.
1532
1533         Implement an abstraction for thread-specific storage, use it to get rid of some static objects.
1534
1535         SunSpider results were not conclusive, possibly up to 0.2% slowdown.
1536
1537         * JavaScriptCore.xcodeproj/project.pbxproj:
1538         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1539         Added ThreadSpecific.h
1540
1541         * wtf/ThreadSpecific.h: Added.
1542         (WTF::::ThreadSpecific):
1543         (WTF::::~ThreadSpecific):
1544         (WTF::::get):
1545         (WTF::::set):
1546         (WTF::::destroy):
1547         (WTF::T):
1548         (WTF::::operator):
1549         Only implemented for platforms that use pthreads.
1550
1551         * kjs/CommonIdentifiers.cpp:
1552         (KJS::CommonIdentifiers::shared):
1553         * kjs/CommonIdentifiers.h:
1554         * kjs/InitializeThreading.cpp:
1555         (KJS::initializeThreading):
1556         * kjs/Parser.cpp:
1557         (KJS::parser):
1558         * kjs/Parser.h:
1559         * kjs/identifier.cpp:
1560         (KJS::identifierTable):
1561         (KJS::literalIdentifierTable):
1562         (KJS::Identifier::initializeIdentifierThreading):
1563         * kjs/identifier.h:
1564         * kjs/lexer.cpp:
1565         (KJS::lexer):
1566         * kjs/lexer.h:
1567         Make static instances per-thread.
1568
1569 2008-04-15  Anders Carlsson  <andersca@apple.com>
1570
1571         Reviewed by Adam.
1572
1573         Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.
1574         
1575         * Configurations/JavaScriptCore.xcconfig:
1576
1577 2008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>
1578
1579         Reviewed by Simon.
1580
1581         Fix compilation with Qt namespaces
1582
1583         Qt can be configured to have all of its classes inside a specified namespaces.
1584         This is for example used in plugin/component environments like Eclipse.
1585
1586         This change makes it possible to let the Qt port compile against a namespaced
1587         Qt by the use of macros Qt provides to properly forward declare Qt classes in
1588         the namespace.
1589
1590         * wtf/unicode/qt4/UnicodeQt4.h:
1591
1592 2008-04-14  Anders Carlsson  <andersca@apple.com>
1593
1594         Reviewed by Adam.
1595
1596         Don't leak the prototype class.
1597         
1598         * API/JSClassRef.cpp:
1599         (OpaqueJSClass::create):
1600
1601 2008-04-14  Steve Falkenburg  <sfalken@apple.com>
1602
1603         Fix build.
1604
1605         * wtf/ThreadingWin.cpp:
1606
1607 2008-04-14  Alexey Proskuryakov  <ap@webkit.org>
1608
1609         Reviewed by Adam Roben.
1610
1611         https://bugs.webkit.org/show_bug.cgi?id=18488
1612         FastMalloc doesn't release thread-specific data on Windows
1613
1614         * wtf/ThreadingWin.cpp:
1615         (WTF::threadMapMutex): (WTF::initializeThreading): Call threadMapMutex once to initialize the static safely.
1616         (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation): Added a structure to wrap thread entry point and arguments.
1617         (WTF::wtfThreadEntryPoint): Make sure to end all WTF threads with pthread_exit(), to give pthreads-win32 a chance to call
1618         destructors of thread-specific data.
1619         (WTF::createThread): Use _beginthreadex instead of CreateThread, because MSDN says so. Also removed a call to CreateEvent,
1620         for which I could see no reason at all.
1621
1622 2008-04-14  Alexey Proskuryakov  <ap@webkit.org>
1623
1624         Touched a file to make JavaScriptCore.vcproj rebuild.
1625
1626         * wtf/MathExtras.h:
1627
1628 2008-04-14  Adam Roben  <aroben@apple.com>
1629
1630         Windows build fix
1631
1632         Rubberstamped by Alexey Proskuryakov.
1633
1634         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
1635         the "potentially uninitialized variable" warning for grammar.cpp, as
1636         it seems to be incorrect. yylval gets initialized by the lexer, but
1637         MSVC doesn't seem to understand this.
1638
1639 2008-04-11  Antti Koivisto  <antti@apple.com>
1640
1641         Reviewed by Maciej.
1642         
1643         Add default hash for pairs of hashable types.
1644
1645         * wtf/HashFunctions.h:
1646         (WTF::PairHash::hash):
1647         (WTF::PairHash::equal):
1648         (WTF::):
1649
1650 2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
1651
1652         Reviewed by Geoff.
1653
1654         Make DateMath.cpp thread safe.
1655
1656         No measurable change on SunSpider (should be a very small speedup).
1657
1658         * kjs/DateMath.cpp:
1659         (KJS::mimimumYearForDST): (KJS::equivalentYearForDST): Got rid of double caching of the
1660         same precomputed value.
1661         (KJS::calculateUTCOffset): (KJS::getUTCOffset): Factored actual UTC offset calculation code
1662         out of getUTCOffset(), and notification setup into initDateMath().
1663
1664         (KJS::initDateMath): Added.
1665
1666         * kjs/DateMath.h:
1667         * kjs/InitializeThreading.cpp:
1668         (KJS::initializeThreading):
1669         Added initDateMath().
1670
1671 2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
1672
1673         Windows build fix.
1674
1675         * kjs/grammar.y:
1676
1677 2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
1678
1679         Tiger build fix. Forward declaring a union didn't work for whatever reason, make the
1680         parameters void*.
1681
1682         * kjs/grammar.y:
1683         * kjs/lexer.cpp:
1684         (kjsyylex):
1685         (KJS::Lexer::lex):
1686         * kjs/lexer.h:
1687
1688 2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
1689
1690         Reviewed by Geoff.
1691
1692         Generate a pure (re-entrant) parser with Bison.
1693
1694         No change on SunSpider.
1695
1696         * kjs/Parser.cpp:
1697         (KJS::Parser::parse):
1698         * kjs/grammar.y:
1699         * kjs/lexer.cpp:
1700         (kjsyylex):
1701         (KJS::Lexer::lex):
1702         * kjs/lexer.h:
1703         Pass state as function arguments, instead of global data. Don't call lexer() as often as
1704         before, as this function is about to become slower due to thread-specific storage.
1705
1706         * kjs/function.cpp:
1707         (KJS::isStrWhiteSpace): Don't call isSeparatorSpace() for 8-bit characters, as these are
1708         already taken care of. This is a small speedup, compensating for a small slowdown caused
1709         by switching Bison mode.
1710
1711 2008-04-10  Alexey Proskuryakov  <ap@webkit.org>
1712
1713         Reviewed by Geoff.
1714
1715         https://bugs.webkit.org/show_bug.cgi?id=18402
1716         REGRESSION: visited element handling is incorrect in nested join/toString calls
1717
1718         No change on SunSpider total, possibly a tiny improvement (about 0.1%).
1719
1720         Test: fast/js/array-tostring-and-join.html
1721
1722         * kjs/JSGlobalObject.h:
1723         (KJS::JSGlobalObject::visitedElements): Store visited elements HashSet here, making it
1724         common to toString/toLocalizedString/join again.
1725
1726         * kjs/array_object.cpp:
1727         (KJS::arrayProtoFuncToString):
1728         (KJS::arrayProtoFuncToLocaleString):
1729         (KJS::arrayProtoFuncJoin):
1730         Got rid of static variables. Replaced UString with Vector to avoid O(n^2) behavior and
1731         regain performance.
1732
1733         * wtf/Vector.h:
1734         (WTF::::resize):
1735         (WTF::::grow):
1736         (WTF::::reserveCapacity):
1737         (WTF::::append):
1738         (WTF::::insert):
1739         Added null checks, so that Vector methods don't crash when out of memory. The caller should
1740         check that data pointer is not null before proceeding.
1741
1742 2008-04-10  Mark Rowe  <mrowe@apple.com>
1743
1744         Reviewed by Maciej Stachowiak.
1745
1746         Fix https://bugs.webkit.org/show_bug.cgi?id=18367 and the many dupes.
1747         Bug 18367: Crash during celtic kane js speed 2007 test
1748
1749         GCC 4.2 on x86_64 Linux decided to reorder the local variables in markCurrentThreadConservatively's
1750         stack frame.  This lead to the range of addresses the collector treated as stack to exclude the
1751         contents of volatile registers that markCurrentThreadConservatively forces onto the stack.  This was
1752         leading to objects being prematurely collected if the only reference to them was via a register at
1753         the time a collection occurred.
1754
1755         The fix for this is to move the calculation of the top of the stack into a NEVER_INLINE function
1756         that is called from markCurrentThreadConservatively.  This forces the dummy variable we use for
1757         determining the top of stack to be in a different stack frame which prevents the compiler from
1758         reordering it relative to the registers that markCurrentThreadConservatively forces onto the stack.
1759
1760         * kjs/collector.cpp:
1761         (KJS::Collector::markCurrentThreadConservativelyInternal):
1762         (KJS::Collector::markCurrentThreadConservatively):
1763         * kjs/collector.h:
1764
1765 2008-04-10  Adam Roben  <aroben@apple.com>
1766
1767         VC++ Express build fix
1768
1769         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Link against user32.lib so
1770         that anyone who links against WTF.lib will get user32.lib
1771         automatically.
1772
1773 2008-04-09  Adam Roben  <aroben@apple.com>
1774
1775         VC++ Express build fix
1776
1777         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Link against
1778         user32.lib.
1779
1780 2008-04-09  Adam Roben  <aroben@apple.com>
1781
1782         Build fix
1783
1784         * JavaScriptCore.exp: Export isMainThread.
1785
1786 2008-04-09  Adam Roben  <aroben@apple.com>
1787
1788         Build fix
1789
1790         * wtf/AlwaysInline.h: Make sure to #include Platform.h before using
1791         the macros it defines.
1792
1793 2008-04-08  Mark Rowe  <mrowe@apple.com>
1794
1795         Export WTF::initializeThreading() from JavaScriptCore.
1796
1797         * JavaScriptCore.exp:
1798
1799 2008-04-04  Sam Weinig  <sam@webkit.org>
1800
1801         Reviewed by Geoffrey Garen.
1802
1803         First step in implementing the "split window"
1804
1805         - Add a GlobalThisValue to ExecState which should be used 
1806           in places that used to implement the "use the global object
1807           as this if null" rule.
1808         - Factor out lookupGetter/lookupSetter into virtual methods 
1809           on JSObject so that they can be forwarded.
1810         - Make defineGetter/defineSetter virtual methods for the same
1811           reason.
1812         - Have PrototypeReflexiveFunction store the globalObject used
1813           to create it so that it can be used to get the correct thisObject
1814           for eval.
1815
1816         * API/JSObjectRef.cpp:
1817         (JSObjectCallAsFunction):
1818         * JavaScriptCore.exp:
1819         * kjs/Activation.h:
1820         * kjs/ExecState.cpp:
1821         (KJS::ExecState::ExecState):
1822         (KJS::GlobalExecState::GlobalExecState):
1823         * kjs/ExecState.h:
1824         (KJS::ExecState::globalThisValue):
1825         * kjs/ExecStateInlines.h:
1826         (KJS::ExecState::ExecState):
1827         (KJS::FunctionExecState::FunctionExecState):
1828         * kjs/JSGlobalObject.cpp:
1829         (KJS::JSGlobalObject::reset):
1830         (KJS::JSGlobalObject::toGlobalObject):
1831         * kjs/JSGlobalObject.h:
1832         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
1833         (KJS::JSGlobalObject::JSGlobalObject):
1834         * kjs/array_instance.cpp:
1835         (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
1836         (KJS::compareWithCompareFunctionForQSort):
1837         * kjs/array_object.cpp:
1838         (KJS::arrayProtoFuncSort):
1839         (KJS::arrayProtoFuncFilter):
1840         (KJS::arrayProtoFuncMap):
1841         (KJS::arrayProtoFuncEvery):
1842         (KJS::arrayProtoFuncForEach):
1843         (KJS::arrayProtoFuncSome):
1844         * kjs/function.cpp:
1845         (KJS::FunctionImp::callAsFunction):
1846         (KJS::ActivationImp::toThisObject):
1847         (KJS::globalFuncEval):
1848         (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
1849         (KJS::PrototypeReflexiveFunction::mark):
1850         * kjs/function.h:
1851         (KJS::PrototypeReflexiveFunction::cachedGlobalObject):
1852         * kjs/function_object.cpp:
1853         (KJS::functionProtoFuncApply):
1854         (KJS::functionProtoFuncCall):
1855         * kjs/nodes.cpp:
1856         (KJS::ExpressionNode::resolveAndCall):
1857         (KJS::FunctionCallValueNode::evaluate):
1858         (KJS::LocalVarFunctionCallNode::inlineEvaluate):
1859         (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
1860         (KJS::FunctionCallBracketNode::evaluate):
1861         (KJS::FunctionCallDotNode::inlineEvaluate):
1862         * kjs/object.cpp:
1863         (KJS::JSObject::call):
1864         (KJS::JSObject::put):
1865         (KJS::tryGetAndCallProperty):
1866         (KJS::JSObject::lookupGetter):
1867         (KJS::JSObject::lookupSetter):
1868         (KJS::JSObject::toThisObject):
1869         (KJS::JSObject::toGlobalObject):
1870         (KJS::JSObject::fillGetterPropertySlot):
1871         * kjs/object.h:
1872         * kjs/object_object.cpp:
1873         (KJS::objectProtoFuncLookupGetter):
1874         (KJS::objectProtoFuncLookupSetter):
1875         * kjs/string_object.cpp:
1876         (KJS::replace):
1877
1878 2008-04-08  Brady Eidson  <beidson@apple.com>
1879
1880         Encourage Windows to rebuild - AGAIN...
1881
1882         * kjs/DateMath.cpp:
1883
1884 2008-04-08  Adam Roben  <aroben@apple.com>
1885
1886         Mac build fix
1887
1888         * JavaScriptCore.exp: Add callOnMainThread, and sorted the list.
1889
1890 2008-04-08  Brady Eidson  <beidson@apple.com>
1891
1892         Rubberstamped by Adam Roben
1893         
1894         Touch some files to *strongly* encourage Windows to rebuilt with DOM_STORAGE enabled
1895
1896         * kjs/DateMath.cpp:
1897
1898 2008-04-08  Adam Roben  <aroben@apple.com>
1899
1900         Move callOnMainThread to WTF
1901
1902         Reviewed by Alexey Proskuryakov.
1903
1904         * GNUmakefile.am:
1905         * JavaScriptCore.pri:
1906         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1907         * JavaScriptCore.xcodeproj/project.pbxproj:
1908         * JavaScriptCoreSources.bkl:
1909         Added new files.
1910
1911         * wtf/MainThread.cpp:
1912         * wtf/MainThread.h:
1913         * wtf/gtk/MainThreadGtk.cpp:
1914         * wtf/mac/MainThreadMac.mm:
1915         * wtf/qt/MainThreadQt.cpp:
1916         * wtf/win/MainThreadWin.cpp:
1917         * wtf/wx/MainThreadWx.cpp:
1918         Moved here from WebCore/platform. Replaced all instances of "WebCore"
1919         with "WTF".
1920
1921         * kjs/bool_object.cpp: Touched to force JavaScriptCore.vcproj to
1922         build.
1923         to the WTF namespace.
1924         * wtf/ThreadingWin.cpp:
1925         (WTF::initializeThreading): Call initializeMainThread.
1926
1927 2008-04-07  Brady Eidson  <beidson@apple.com>
1928
1929         Add "ENABLE_DOM_STORAGE" to keep in sync with the rest of the project
1930
1931         * Configurations/JavaScriptCore.xcconfig:
1932
1933 2008-04-07  Adam Roben  <aroben@apple.com>
1934
1935         Windows build fix
1936
1937         * wtf/ThreadingWin.cpp: Back out some changes I didn't mean to land.
1938
1939 2008-04-07  Adam Roben  <aroben@apple.com>
1940
1941         Add WTF::isMainThread
1942
1943         Reviewed by Alexey Proskuryakov.
1944
1945         * wtf/Threading.h: Declare the new function.
1946         * wtf/ThreadingGtk.cpp:
1947         (WTF::initializeThreading): Initialize the main thread identifier.
1948         (WTF::isMainThread): Added.
1949         * wtf/ThreadingNone.cpp: Ditto ThreadingGtk.cpp.
1950         (WTF::initializeThreading):
1951         (WTF::isMainThread):
1952         * wtf/ThreadingPthreads.cpp: Ditto.
1953         (WTF::initializeThreading):
1954         (WTF::isMainThread):
1955         * wtf/ThreadingWin.cpp: Ditto.
1956         (WTF::initializeThreading):
1957         (WTF::isMainThread):
1958
1959 2008-04-06  Alexey Proskuryakov  <ap@webkit.org>
1960
1961         Reviewed by Darin.
1962
1963         Make UString thread-safe.
1964
1965         No change on SunSpider total, although individual tests have changed a lot, up to 3%.
1966
1967         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Call UString::null() to initialize
1968         a static.
1969         
1970         * kjs/identifier.cpp:
1971         (KJS::CStringTranslator::translate):
1972         (KJS::UCharBufferTranslator::translate):
1973         Use "true" for a boolean value instead of 1, because it's C++.
1974
1975         * kjs/ustring.h:
1976         (KJS::CString::adopt): Added a method to create from a char* buffer without copying.
1977         (KJS::UString::Rep::ref): Removed an assertion for JSLock::lockCount, as it's no longer
1978         necessary to hold JSLock when working with strings.
1979         (KJS::UString::Rep::deref): Ditto.
1980         (KJS::UString::Rep::isStatic): Added a field to quickly determine that this is an empty
1981         or null static string.
1982
1983         * kjs/ustring.cpp:
1984         (KJS::): Removed normalStatBufferSize and statBufferSize, as there is no reason to have such
1985         an advanced implementation of a debug-only ascii() method. Removed a long-obsolete comment
1986         about UChar.
1987         (KJS::UString::Rep::createCopying): Removed an assertion for JSLock::lockCount.
1988         (KJS::UString::Rep::create): Ditto.
1989         (KJS::UString::Rep::destroy): Ditto. Do not do anything for static null and empty strings,
1990         as refcounting is not reliable for those. Reordered branches for a noticeable speed gain -
1991         apparently this functiton is hot enough for SunSpider to see an effect from this!
1992         (KJS::UString::null): Moved a star, added a comment.
1993         (KJS::UString::cstring): Reimplemented to not call ascii(), which is not thread-safe.
1994         (KJS::UString::ascii): Simplified statBuffer handling logic.
1995         (KJS::UString::toDouble): Use cstring() instead of ascii().
1996
1997 2008-04-02  Mark Rowe  <mrowe@apple.com>
1998
1999         Reviewed by Oliver Hunt.
2000
2001         Ensure that debug symbols are generated for x86_64 and ppc64 builds.
2002
2003         * Configurations/Base.xcconfig:
2004
2005 2008-04-01  Christian Dywan  <christian@imendio.com>
2006
2007         Build fix for GCC 4.3.
2008
2009         * wtf/unicode/icu/CollatorICU.cpp: include string.h
2010
2011 2008-04-01  Alexey Proskuryakov  <ap@webkit.org>
2012
2013         Rubber-stamped by Darin.
2014
2015         Turn off using 64-bit arithmetic on 32-bit hardware, as dtoa own code is faster than
2016         compiler-provided emulation.
2017
2018         1% speedup on Acid3 test 26.
2019
2020         * kjs/dtoa.cpp:
2021
2022 2008-04-01  Alexey Proskuryakov  <ap@webkit.org>
2023
2024         Reviewed by Darin.
2025
2026         Make MathExtras.h thread safe.
2027
2028         * kjs/math_object.cpp:
2029         (KJS::mathProtoFuncRandom): If threading is enabled, rely on initializeThreading to call
2030         wtf_random_init().
2031
2032         * wtf/Threading.h:
2033         * wtf/ThreadingGtk.cpp:
2034         (WTF::initializeThreading):
2035         * wtf/ThreadingNone.cpp:
2036         (WTF::initializeThreading):
2037         * wtf/ThreadingPthreads.cpp:
2038         (WTF::initializeThreading):
2039         * wtf/ThreadingWin.cpp:
2040         (WTF::initializeThreading):
2041         Call wtf_random_init(); made the function non-inline to avoid having to include too many
2042         headers in Threading.h.
2043
2044 2008-03-31  Eric Seidel  <eric@webkit.org>
2045
2046         Reviewed by darin.
2047
2048         Make matching of regexps using ^ much faster
2049         http://bugs.webkit.org/show_bug.cgi?id=18086
2050
2051         * pcre/pcre_compile.cpp:
2052         (compileBranch):
2053         (branchNeedsLineStart):
2054         * pcre/pcre_exec.cpp:
2055         (match):
2056         (jsRegExpExecute):
2057         * pcre/pcre_internal.h:
2058
2059 2008-03-29  Alexey Proskuryakov  <ap@webkit.org>
2060
2061         Reviewed by Oliver Hunt.
2062
2063         <rdar://problem/5829556> REGRESSION: Leak in KJS::initializeThreading()
2064
2065         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): There is no guarantee that
2066         initializeThreading() is called only once; check that the mutex hasn't been already allocated.
2067
2068 2008-03-29  Oliver Hunt  <oliver@apple.com>
2069
2070         Reviewed by Geoff.
2071
2072         Bug 17924: Crash in KJS::ConstDeclNode::evaluate with |with| and |const|
2073         <http://bugs.webkit.org/show_bug.cgi?id=17924>
2074         <rdar://problem/5806933>
2075
2076         It turns out this is trivially avoidable if we just match firefox's
2077         semantics and ensure that an assignment in a const declaration always
2078         writes to the variable object.
2079
2080         * kjs/nodes.cpp:
2081         (KJS::ConstDeclNode::handleSlowCase):
2082
2083 2008-03-28  Alexey Proskuryakov  <ap@webkit.org>
2084
2085         Reviewed by Sam Weinig.
2086
2087         Fix a dtoa thread safety issue.
2088
2089         WebCore can call kjs_strtod without holding JS lock, but we didn't have thread safety
2090         compiled in for dtoa.
2091
2092         This is a 0.5% regression on SunSpider, which Sam Weinig has volunteered to cover with
2093         his recent improvement.
2094
2095         * kjs/dtoa.cpp:
2096         (Bigint::Balloc):
2097         (Bigint::Bfree):
2098         Changed to use fastMalloc/fastDelete - they are much faster than the dtoa custom version was
2099         in the presence of locking (but somewhat slower in single-threaded case).
2100         (Bigint::pow5mult): Got rid of the dreaded double-checked locking anti-pattern (had to
2101         restructure the code to avoid significant performance implications).
2102         (Bigint::lshift): Rewrote to avoid an allocation, if possible.
2103
2104         (Bigint::rv_alloc):
2105         (Bigint::kjs_freedtoa):
2106         (Bigint::kjs_dtoa):
2107         Check for USE(MULTIPLE_THREADS), not dtoa legacy MULTIPLE_THREADS.
2108
2109         * kjs/InitializeThreading.cpp: Added.
2110         (KJS::initializeThreading):
2111         * kjs/InitializeThreading.h: Added.
2112         Initialize threading at KJS level, if enabled.
2113
2114         * kjs/dtoa.h: Expose dtoa mutex for KJS::initializeThreading.
2115
2116         * kjs/testkjs.cpp: (kjsmain): Call initializeThreading.
2117
2118         * JavaScriptCore.exp: Export KJS::initializeThreading.
2119
2120         * GNUmakefile.am:
2121         * JavaScriptCore.exp:
2122         * JavaScriptCore.pri:
2123         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2124         * JavaScriptCoreSources.bkl:
2125         * JavaScriptCore.xcodeproj/project.pbxproj:
2126         Added InitializeThreading.{h,cpp}.
2127
2128         * wtf/Threading.h: Removed a using directive for WTF::initializeThreading - it is only
2129         to be called from KJS::initializeThreading, and having it in the global namespace is useless.
2130
2131 2008-03-28  Brady Eidson  <beidson@apple.com>
2132
2133         Reviewed by Darin
2134
2135         Export Unicode/UTF8.h and convertUTF16ToUTF8() for more flexible conversion in WebCore
2136
2137         * JavaScriptCore.exp:
2138         * JavaScriptCore.xcodeproj/project.pbxproj:
2139
2140 2008-03-27  Darin Adler  <darin@apple.com>
2141
2142         Reviewed by Mark Rowe.
2143
2144         <rdar://problem/5826236> Regular expressions with large nested repetition counts can have their
2145         compiled length calculated incorrectly.
2146
2147         * pcre/pcre_compile.cpp:
2148         (multiplyWithOverflowCheck):
2149         (calculateCompiledPatternLength): Check for overflow when dealing with nested repetition counts
2150         and bail with an error rather than returning incorrect results.
2151
2152 2008-03-26  Mark Rowe  <mrowe@apple.com>
2153
2154         Rubber-stamped by Brady Eidson.
2155
2156         Update FEATURE_DEFINES to be consistent with the other locations in which it is defined.
2157
2158         * Configurations/JavaScriptCore.xcconfig:
2159
2160 2008-03-26  Adam Roben  <aroben@apple.com>
2161
2162         Fix Bug 18060: Assertion failure (JSLock not held) beneath
2163         JSCallbackObject<Base>::toString
2164
2165         <http://bugs.webkit.org/show_bug.cgi?id=18060>
2166
2167         Reviewed by Geoff Garen.
2168
2169         Bug fix:
2170
2171         * API/JSCallbackObjectFunctions.h:
2172         (KJS::JSCallbackObject<Base>::toString): Make the DropAllLocks
2173         instance only be in scope while calling convertToType.
2174
2175         Test:
2176
2177         * API/testapi.c:
2178         (MyObject_convertToType): Implement type conversion to string.
2179         * API/testapi.js: Add a test for type conversion to string.
2180
2181 2008-03-26  Adam Roben  <aroben@apple.com>
2182
2183         Windows build fix
2184
2185         * kjs/array_instance.cpp: Touched this.
2186         * wtf/HashFunctions.h:
2187         (WTF::intHash): Added 8- and 16-bit versions of intHash.
2188
2189 2008-03-26  Adam Roben  <aroben@apple.com>
2190
2191         Force JSC headers to be copied by touching a file
2192
2193         * kjs/array_instance.cpp:
2194         (KJS::ArrayInstance::getPropertyNames):
2195
2196 2008-03-26  Adam Roben  <aroben@apple.com>
2197
2198         Windows build fix after r31324
2199
2200         Written with Darin.
2201
2202         Added HashTable plumbing to support using wchar_t as a key type.
2203
2204         * wtf/HashFunctions.h:
2205         * wtf/HashTraits.h:
2206         (WTF::):
2207
2208 2008-03-26  Maciej Stachowiak  <mjs@apple.com>
2209
2210         Reviewed by Darin.
2211
2212         - JSC part of fix for "SVG multichar glyph matching matches longest instead of first (affects Acid3 test 79)"
2213         http://bugs.webkit.org/show_bug.cgi?id=18118
2214
2215         * wtf/HashFunctions.h:
2216         (WTF::):
2217         * wtf/HashTraits.h:
2218         (WTF::):
2219
2220 2008-03-26  Alexey Proskuryakov  <ap@webkit.org>
2221
2222         Reviewed by Darin.
2223
2224         Cache C string identifiers by address, not value, assuming that C strings can only
2225         be literals.
2226
2227         1% speedup on Acid3 test 26.
2228
2229         * kjs/identifier.cpp:
2230         (KJS::literalIdentifierTable):
2231         (KJS::Identifier::add):
2232         Added a new table to cache UString::Reps created from C strings by address. Elements are
2233         never removed from this cache, as only predefined identifiers can get there.
2234
2235         * kjs/identifier.h:
2236         (KJS::Identifier::Identifier): Added a warning.
2237
2238 2008-03-26  Alexey Proskuryakov  <ap@webkit.org>
2239
2240         Rubber-stamped by Maciej.
2241
2242         An assertion was failing in function-toString-object-literals.html when parsing 1e-500.
2243         The condition existed before, and got uncovered by turning compiled-out dtoa checks into
2244         ASSERTs.
2245
2246         The assertion was verifying that the caller wasn't constructing a Bigint from 0.
2247         This might have had some reason behind it originally, but I couldn't find any,
2248         and this doesn't look like a reasonable requirement.
2249
2250         * kjs/dtoa.cpp: (d2b): Removed the assertion (two copies in different code paths).
2251
2252 2008-03-25  Adam Roben  <aroben@apple.com>
2253
2254         Fix Bug 18077: Integrate testapi.c into the Windows build
2255
2256         <http://bugs.webkit.org/show_bug.cgi?id=18077>
2257
2258         Reviewed by Steve Falkenburg.
2259
2260         * JavaScriptCore.vcproj/testapi/testapi.vcproj: Added.
2261
2262 2008-03-25  Adam Roben  <aroben@apple.com>
2263
2264         Make testapi.c compile under MSVC
2265
2266         Currently you must compile testapi.c as C++ code since MSVC does not
2267         support many C features that GCC does.
2268
2269         Reviewed by Steve Falkenburg.
2270
2271         * API/testapi.c:
2272         (nan): Added an implementation of this for MSVC.
2273         (assertEqualsAsUTF8String): Use malloc instead of dynamically-sized
2274         stack arrays.
2275         (assertEqualsAsCharactersPtr): Ditto.
2276         (print_callAsFunction): Ditto.
2277         (main): Ditto, and explicitly cast from UniChar* to JSChar*.
2278
2279 2008-03-25  Adam Roben  <aroben@apple.com>
2280
2281         Stop using JavaScriptCore's custom stdbool.h and stdint.h on Windows
2282
2283         We can't remove the os-win32 directory yet because other ports (at
2284         least wx) are still relying on it.
2285
2286         Reviewed by Steve Falkenburg.
2287
2288         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2289           - Made all the include paths match the one for the Debug
2290             configuration (these got out of sync in r30797)
2291           - Removed os-win32 from the include path
2292           - Removed os-win32 from the directories we copy to $WebKitOutputDir.
2293           - Removed stdint.h from the project
2294         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
2295         Delete the files that we may have previously copied from the os-win32
2296         directory.
2297
2298 2008-03-25  Alexey Proskuryakov  <ap@webkit.org>
2299
2300         Windows build fix.
2301
2302         * kjs/dtoa.cpp: Include stdint.h.
2303
2304 2008-03-25  Alexey Proskuryakov  <ap@webkit.org>
2305
2306         Rubber-stamped by Darin.
2307
2308         Cleanup dtoa.cpp style.
2309
2310         * kjs/dtoa.cpp:
2311         (Bigint::Balloc):
2312         (Bigint::Bfree):
2313         (Bigint::multadd):
2314         (Bigint::s2b):
2315         (Bigint::hi0bits):
2316         (Bigint::lo0bits):
2317         (Bigint::i2b):
2318         (Bigint::mult):
2319         (Bigint::pow5mult):
2320         (Bigint::lshift):
2321         (Bigint::cmp):
2322         (Bigint::diff):
2323         (Bigint::ulp):
2324         (Bigint::b2d):
2325         (Bigint::d2b):
2326         (Bigint::ratio):
2327         (Bigint::):
2328         (Bigint::match):
2329         (Bigint::hexnan):
2330         (Bigint::kjs_strtod):
2331         (Bigint::quorem):
2332         (Bigint::rv_alloc):
2333         (Bigint::nrv_alloc):
2334         (Bigint::kjs_freedtoa):
2335         (Bigint::kjs_dtoa):
2336         * kjs/dtoa.h:
2337
2338 2008-03-24  Darin Adler  <darin@apple.com>
2339
2340         Reviewed by Sam.
2341
2342         - convert a JavaScript immediate number to a string more efficiently
2343
2344         2% speedup of Acid3 test 26
2345
2346         * kjs/JSImmediate.cpp:
2347         (KJS::JSImmediate::toString): Take advantage of the fact that all immediate
2348         numbers are integers, and use the faster UString function for formatting integers
2349         instead of the slower one that works for floating point. I think this is a leftover
2350         from when immediate numbers were floating point.
2351
2352 2008-03-23  Sam Weinig  <sam@webkit.org>
2353
2354         Reviewed by Darin Adler.
2355
2356         Fix http://bugs.webkit.org/show_bug.cgi?id=18048
2357         The "thisObject" parameter to JSEvaluateScript is not used properly
2358
2359         Making passing a thisObject to JSEvaluateScript actually set the thisObject of the created
2360         ExecState.
2361
2362         * API/testapi.c:
2363         (main): Add tests for setting the thisObject when calling JSEvaluateScript.
2364
2365         * kjs/ExecState.cpp:
2366         (KJS::ExecState::ExecState): Assign the thisObject to m_thisValue and remove the comment. 
2367
2368 2008-03-22  Jesse Ruderman  <jruderman@gmail.com>
2369
2370         Reviewed by Sam Weinig.  Landed by eseidel.
2371         
2372         Make testkjs flush stdout after printing.
2373
2374         * JavaScriptCore.xcodeproj/project.pbxproj:
2375         * kjs/testkjs.cpp:
2376         (functionPrint):
2377
2378 2008-03-21  Oliver Hunt  <oliver@apple.com>
2379
2380         Reviewed by Maciej.
2381
2382         Optimise lookup of Math, undefined, NaN and Infinity
2383
2384         Added a method to JSVariableObject to allow us to inject DontDelete properties
2385         into the symbol table and localStorage.  This results in a 0.4% progression in
2386         SunSpider, with a 8% gain in math-partial-sums.
2387
2388         * kjs/JSGlobalObject.cpp:
2389         (KJS::JSGlobalObject::reset):
2390         * kjs/JSVariableObject.h:
2391         (KJS::JSVariableObject::symbolTableInsert):
2392
2393 2008-03-21  Oliver Hunt  <oliver@apple.com>
2394
2395         Reviewed by Geoff Garen.
2396
2397         Global properties that use LocalStorage are not correctly listed as enumerable.
2398
2399         The problem was caused by JSObject::getPropertyAttributes not being aware
2400         of the JSVariableObject SymbolTable.  The fix is to make getPropertyAttributes
2401         virtual and override in JSVariableObject.  This does not produce any performance
2402         regression.
2403
2404         * JavaScriptCore.exp:
2405         * kjs/JSVariableObject.cpp:
2406         (KJS::JSVariableObject::getPropertyNames):
2407         (KJS::JSVariableObject::getPropertyAttributes):
2408         * kjs/JSVariableObject.h:
2409         * kjs/object.h:
2410
2411 2008-03-21  Arkadiusz Miskiewicz  <arekm@maven.pl>
2412
2413         Webkit does not build on linux powerpc
2414
2415         <http://bugs.webkit.org/show_bug.cgi?id=17019>
2416
2417         Reviewed by David Kilzer.
2418
2419         * wtf/TCSpinLock.h:
2420         (TCMalloc_SpinLock::Unlock):
2421
2422 2008-03-21  Rodney Dawes  <dobey@wayofthemonkey.com>
2423
2424         Reviewed by Holger.
2425
2426         http://bugs.webkit.org/show_bug.cgi?id=17981
2427
2428         Add javascriptcore_cppflags to Programs_minidom_CPPFLAGS.
2429
2430         * GNUmakefile.am:
2431
2432 2008-03-21  Alexey Proskuryakov  <ap@webkit.org>
2433
2434         Reviewed by Oliver Hunt.
2435
2436         Consolidate static identifier initializers within CommonIdentifiers.
2437
2438         No reliably measurable change on SunSpider; maybe a tiny improvement (within 0.2%).
2439
2440         * kjs/CommonIdentifiers.h: Added static identifiers that were lazily initialized
2441         throughout the code.
2442
2443         * kjs/date_object.cpp:
2444         (KJS::DateObjectImp::DateObjectImp):
2445         * kjs/function_object.cpp:
2446         (KJS::FunctionPrototype::FunctionPrototype):
2447         * kjs/object_object.cpp:
2448         (KJS::ObjectPrototype::ObjectPrototype):
2449         * kjs/regexp_object.cpp:
2450         (KJS::RegExpPrototype::RegExpPrototype):
2451         Use the values from CommonIdentifiers. 
2452
2453         * kjs/lookup.h: Caching the identifier in a static wasn't a win on SunSpider, removed it.
2454
2455         * kjs/value.h:
2456         (KJS::jsNaN): We already have a shared NaN value, no need for a duplicate here.
2457
2458         * wtf/MathExtras.h:
2459         (wtf_atan2): Having local variables for numeric_limits constants is good for readability,
2460         but there is no reason to keep them static.
2461
2462         * JavaScriptCore.exp: Don't needlessly export JSGlobalObject::s_head.
2463
2464 2008-03-20  Oliver Hunt  <oliver@apple.com>
2465
2466         Reviewed by Maciej.
2467
2468         Fix for leak introduced by inline ScopeChainNode use
2469
2470         To avoid any extra branches when managing an inline ScopeChainNode
2471         in the ScopeChain the inline node gets inserted with a refcount of
2472         2.  This meant than when the ScopeChain was destroyed the ScopeChainNodes
2473         above the inline node would be leaked.
2474
2475         We resolve this by manually popping the inline node in the
2476         FunctionExecState destructor.
2477
2478         * JavaScriptCore.xcodeproj/project.pbxproj:
2479         * kjs/ExecStateInlines.h:
2480         (KJS::FunctionExecState::~FunctionExecState):
2481         * kjs/scope_chain.h:
2482         (KJS::ScopeChain::popInlineScopeNode):
2483
2484 2008-03-20  Mark Rowe  <mrowe@apple.com>
2485
2486         Reviewed by Sam Weinig.
2487
2488         Ensure that the defines in FEATURE_DEFINES are sorted so that they will match the default settings of build-webkit.
2489         This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
2490         command-line.
2491
2492         * Configurations/JavaScriptCore.xcconfig:
2493
2494 2008-03-20  David Krause  <david.krause@gmail.com>
2495
2496         Reviewed by David Kilzer.
2497
2498         Fix http://bugs.webkit.org/show_bug.cgi?id=17923
2499         Bug 17923: ARM platform endian defines inaccurate
2500
2501         * wtf/Platform.h: 
2502         Replaced !defined(__ARMEL__) check with !defined(__VFP_FP__)
2503         for PLATFORM(MIDDLE_ENDIAN)
2504
2505 2008-03-20  Maciej Stachowiak  <mjs@apple.com>
2506
2507         - fix build
2508
2509         * JavaScriptCore.xcodeproj/project.pbxproj: install Activation.h as private
2510
2511 2008-03-20  Maciej Stachowiak  <mjs@apple.com>
2512
2513         Reviewed by Oliver.
2514         
2515         - reduce function call overhead for 1.014x speedup on SunSpider
2516
2517         I moved some functions from ExecState.cpp to ExecStateInline.h and
2518         from JSGlobalObject.cpp to JSGlobalObject.h, and declared them
2519         inline; machine function call overhead for these was hurting JS
2520         funcion call overhead.
2521         
2522         * kjs/ExecState.cpp:
2523         * kjs/ExecStateInlines.h: Added.
2524         (KJS::ExecState::ExecState):
2525         (KJS::ExecState::~ExecState):
2526         (KJS::FunctionExecState::FunctionExecState):
2527         (KJS::FunctionExecState::~FunctionExecState):
2528         * kjs/JSGlobalObject.cpp:
2529         * kjs/JSGlobalObject.h:
2530         (KJS::JSGlobalObject::pushActivation):
2531         (KJS::JSGlobalObject::checkActivationCount):
2532         (KJS::JSGlobalObject::popActivation):
2533         * kjs/function.cpp:
2534
2535 2008-03-19  Oliver Hunt  <oliver@apple.com>
2536
2537         Reviewed by Maciej.
2538
2539         Avoid heap allocating the root scope chain node for eval and closure free functions
2540
2541         Maciej suggested using an inline ScopeChainNode for functions that don't use eval
2542         or closures as they are unable to ever capture the scope chain.  This gives us a 2.4%
2543         win in sunspider, a 15% win in controlflow-recursive, and big (>5%) wins in a number 
2544         of other tests.
2545
2546         * kjs/ExecState.cpp:
2547         (KJS::ExecState::ExecState):
2548         * kjs/ExecState.h:
2549         * kjs/scope_chain.h:
2550         (KJS::ScopeChain::push):
2551
2552 2008-03-19  Mark Rowe  <mrowe@apple.com>
2553
2554         Reviewed by Sam Weinig.
2555
2556         Fix release build.
2557
2558         * kjs/JSGlobalObject.cpp:  Add missing #include.
2559
2560 2008-03-19  Sam Weinig  <sam@webkit.org>
2561
2562         Reviewed by Anders Carlsson.
2563
2564         Fix for <rdar://problem/5785694>
2565         Crash occurs at KJS::Collector::collect() when loading web clip widgets with a PAC file
2566
2567         Make the activeExecStates stack per JSGlobalObject instead of static to ensure
2568         thread safety.
2569
2570         * JavaScriptCore.exp:
2571         * kjs/ExecState.cpp:
2572         (KJS::InterpreterExecState::InterpreterExecState):
2573         (KJS::InterpreterExecState::~InterpreterExecState):
2574         (KJS::EvalExecState::EvalExecState):
2575         (KJS::EvalExecState::~EvalExecState):
2576         (KJS::FunctionExecState::FunctionExecState):
2577         (KJS::FunctionExecState::~FunctionExecState):
2578         * kjs/ExecState.h:
2579         (KJS::):
2580         * kjs/JSGlobalObject.cpp:
2581         (KJS::JSGlobalObject::mark):
2582         * kjs/JSGlobalObject.h:
2583         (KJS::JSGlobalObject::activeExecStates):
2584         * kjs/collector.cpp:
2585         (KJS::Collector::collect):
2586         (KJS::Collector::reportOutOfMemoryToAllExecStates): Iterate all JSGlobalObjects and report
2587         the OutOfMemory condition to all the ExecStates in each.
2588
2589 2008-03-19  Jasper Bryant-Greene  <jasper@unix.geek.nz>
2590
2591         Reviewed by Maciej Stachowiak.
2592
2593         Fix http://bugs.webkit.org/show_bug.cgi?id=17941
2594         Bug 17941: C++-style comments in JavaScriptCore API
2595
2596         * API/JSBase.h:
2597         Remove C++-style comments from public JavaScriptCore API, replacing
2598         with standard C90 block comments.
2599
2600 2008-03-19  Mark Rowe  <mrowe@apple.com>
2601
2602         Reviewed by Oliver Hunt.
2603
2604         Fix http://bugs.webkit.org/show_bug.cgi?id=17939
2605         Bug 17939: Crash decompiling "const a = 1, b;"
2606
2607         * kjs/nodes2string.cpp:
2608         (KJS::ConstDeclNode::streamTo): Null-check the correct variable.
2609
2610 2008-03-18  Oliver Hunt  <oliver@apple.com>
2611
2612         Reviewed by Mark Rowe.
2613
2614         Bug 17929: Incorrect decompilation with |const|, comma
2615         http://bugs.webkit.org/show_bug.cgi?id=17929
2616
2617         There were actually two bugs here. First we weren't correctly handling const
2618         nodes with multiple declarations. The second issue was caused by us not 
2619         giving the correct precedence to the initialisers.
2620
2621         * kjs/nodes2string.cpp:
2622         (KJS::ConstDeclNode::streamTo):
2623
2624 2008-03-18  Darin Adler  <darin@apple.com>
2625
2626         Reviewed by Maciej.
2627
2628         - Speed up JavaScript built-in properties by changing the
2629           hash table to take advantage of the identifier objects
2630
2631         5% speedup for Acid3 test 26
2632
2633         * JavaScriptCore.exp: Updated.
2634         * kjs/create_hash_table: Compute size of hash table large enough so that there
2635         are no collisions, but don't generate the hash table.
2636         * kjs/identifier.h: Made the add function that returns a PassRefPtr public.
2637         * kjs/lexer.cpp:
2638         (KJS::Lexer::lex): Updated for change to HashTable interface.
2639         * kjs/lookup.cpp:
2640         (KJS::HashTable::changeKeysToIdentifiers): Added. Finds the identifier for
2641         each property so the equality comparision can be done with pointer comparision.
2642         * kjs/lookup.h: Made the key be a union of char* with UString::Rep* so it can
2643         hold identifiers. Added a keysAreIdentifiers flag to the HashTable. Changed
2644         the Lookup functions to be member functions of HashTable instead.
2645         * kjs/object.cpp:
2646         (KJS::JSObject::deleteProperty): Update for change to HashTable.
2647         (KJS::JSObject::findPropertyHashEntry): Ditto.
2648         (KJS::JSObject::getPropertyAttributes): Ditto.
2649         (KJS::JSObject::getPropertyNames): Ditto.
2650
2651 2008-03-18  Mark Rowe  <mrowe@apple.com>
2652
2653         Reviewed by Oliver Hunt.
2654
2655         Fix http://bugs.webkit.org/show_bug.cgi?id=17925 and http://bugs.webkit.org/show_bug.cgi?id=17927.
2656         - Bug 17925: Crash in KJS::JSObject::put after setting this.__proto__
2657         - Bug 17927: Hang after attempting to create circular __proto__
2658
2659         * kjs/object.cpp:
2660         (KJS::JSObject::put): Silently ignore attempts to set __proto__ to a non-object, non-null value.
2661         Return after setting the exception when an attempt to set a cyclic __proto__ is detected so that
2662         the cyclic value is not set.
2663
2664 2008-03-18  Maciej Stachowiak  <mjs@apple.com>
2665
2666         Reviewed by Oliver.
2667         
2668         - inline ActivationImp::init for 0.8% SunSpider speedup
2669
2670         * kjs/Activation.h:
2671         (KJS::ActivationImp::init): Moved here from function.cpp
2672         * kjs/function.cpp:
2673
2674 2008-03-18  Simon Hausmann  <hausmann@webkit.org>
2675
2676         Fix the Qt build.
2677
2678         Including config.h like in the other .cpp files gets the #ifdeffery
2679         correct for rand_s.
2680
2681         * kjs/JSWrapperObject.cpp:
2682
2683 2008-03-17  Darin Adler  <darin@apple.com>
2684
2685         Reviewed by Maciej.
2686
2687         JavaScriptCore changes to support a WebCore speedup.
2688
2689         * JavaScriptCore.exp: Export the UString::Rep::computeHash function.
2690         * wtf/HashSet.h: Added a find and contains function that take a translator,
2691         like the add function.
2692
2693 2008-03-18  Maciej Stachowiak  <mjs@apple.com>
2694
2695         Reviewed by Oliver.
2696         
2697         - a few micro-optimizations for 1.2% SunSpider speedup
2698
2699         * kjs/function.cpp:
2700         (KJS::FunctionImp::callAsFunction): check for Return completion before Throw,
2701         it is more likely.
2702         * kjs/object.cpp:
2703         (KJS::JSObject::put): When walking prototype chain, instead of
2704         checking isObject (a virtual call), compare to jsNull (compare to
2705         a constant) since null is the only non-object that can be in a
2706         prototype chain.
2707
2708 2008-03-17  Oliver Hunt  <oliver@apple.com>
2709
2710         Reviewed by Geoff.
2711
2712         Optimise multi-scope function call resolution
2713
2714         Refactor multiscope variable resolution and use to add
2715         optimised FunctionCallResolveNode subclasses.  
2716
2717         2.6% gain in sunspider performance, *25%* gain in controlflow-recursive
2718
2719         * kjs/nodes.cpp:
2720         (KJS::getSymbolTableEntry):
2721         (KJS::ResolveNode::optimizeVariableAccess):
2722         (KJS::getNonLocalSymbol):
2723         (KJS::ExpressionNode::resolveAndCall):
2724         (KJS::FunctionCallResolveNode::optimizeVariableAccess):
2725         (KJS::FunctionCallResolveNode::inlineEvaluate):
2726         (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
2727         (KJS::ScopedVarFunctionCallNode::evaluate):
2728         (KJS::ScopedVarFunctionCallNode::evaluateToNumber):
2729         (KJS::ScopedVarFunctionCallNode::evaluateToBoolean):
2730         (KJS::ScopedVarFunctionCallNode::evaluateToInt32):
2731         (KJS::ScopedVarFunctionCallNode::evaluateToUInt32):
2732         (KJS::NonLocalVarFunctionCallNode::inlineEvaluate):
2733         (KJS::NonLocalVarFunctionCallNode::evaluate):
2734         (KJS::NonLocalVarFunctionCallNode::evaluateToNumber):
2735         (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean):
2736         (KJS::NonLocalVarFunctionCallNode::evaluateToInt32):
2737         (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32):
2738         * kjs/nodes.h:
2739         (KJS::ScopedVarFunctionCallNode::):
2740         (KJS::NonLocalVarFunctionCallNode::):
2741
2742 2008-03-17  David Kilzer  <ddkilzer@apple.com>
2743
2744         Don't define PLATFORM(MIDDLE_ENDIAN) on little endian ARM.
2745
2746         Reviewed by Darin.
2747
2748         See <http://bugs.webkit.org/show_bug.cgi?id=15416#c13>.
2749
2750         * wtf/Platform.h: Added check for !defined(__ARMEL__) when defining
2751         PLATFORM(MIDDLE_ENDIAN).
2752
2753 2008-03-17  Oliver Hunt  <oliver@apple.com>
2754
2755         Reviewed by Geoff, Darin and Weinig.
2756
2757         Add fast multi-level scope lookup
2758         
2759         Add logic and AST nodes to provide rapid variable resolution across
2760         static scope boundaries.  This also adds logic that allows us to skip
2761         any static scopes that do not contain the variable to be resolved.
2762         
2763         This results in a ~2.5% speedup in SunSpider, and gives a 25-30% speedup
2764         in some simple and ad hoc closure and global variable access tests.
2765
2766         * JavaScriptCore.exp:
2767         * kjs/Activation.h:
2768         * kjs/JSGlobalObject.cpp:
2769         * kjs/JSGlobalObject.h:
2770         * kjs/JSVariableObject.cpp:
2771         * kjs/JSVariableObject.h:
2772         * kjs/function.cpp:
2773         (KJS::ActivationImp::isDynamicScope):
2774         * kjs/nodes.cpp:
2775         (KJS::ResolveNode::optimizeVariableAccess):
2776         (KJS::ScopedVarAccessNode::inlineEvaluate):
2777         (KJS::ScopedVarAccessNode::evaluate):
2778         (KJS::ScopedVarAccessNode::evaluateToNumber):
2779         (KJS::ScopedVarAccessNode::evaluateToBoolean):
2780         (KJS::ScopedVarAccessNode::evaluateToInt32):
2781         (KJS::ScopedVarAccessNode::evaluateToUInt32):
2782         (KJS::NonLocalVarAccessNode::inlineEvaluate):
2783         (KJS::NonLocalVarAccessNode::evaluate):
2784         (KJS::NonLocalVarAccessNode::evaluateToNumber):
2785         (KJS::NonLocalVarAccessNode::evaluateToBoolean):
2786         (KJS::NonLocalVarAccessNode::evaluateToInt32):
2787         (KJS::NonLocalVarAccessNode::evaluateToUInt32):
2788         (KJS::IfElseNode::optimizeVariableAccess):
2789         (KJS::ScopeNode::optimizeVariableAccess):
2790         * kjs/nodes.h:
2791         (KJS::ScopedVarAccessNode::):
2792         (KJS::NonLocalVarAccessNode::):
2793         * kjs/object.h:
2794
2795  2008-03-16  weihongzeng  <weihong.zeng@hotmail.com>
2796  
2797          Reviewed by Darin Adler.
2798  
2799          http://bugs.webkit.org/show_bug.cgi?id=15416
2800          Add support for mixed-endian processors
2801  
2802          * kjs/dtoa.cpp: Add IEEE_ARM, triggered by PLATFORM(MIDDLE_ENDIAN).
2803  
2804 2008-03-16  Kevin Ollivier  <kevino@theolliviers.com>
2805
2806         Rubber stamped by Darin.
2807
2808         Add set-webkit-configuration support for wx port, and centralize
2809         build dir location setting.
2810
2811         http://bugs.webkit.org/show_bug.cgi?id=17790
2812
2813         * jscore.bkl:
2814
2815 2008-03-14  Steve Falkenburg  <sfalken@apple.com>
2816
2817         PGO build fixes.
2818
2819         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2820
2821 2008-03-14  Oliver Hunt  <oliver@apple.com>
2822
2823         Reviewed by Maciej.
2824
2825         Add logic to track whether a function uses a locally scoped eval or requires a closure
2826         
2827         Now that we limit eval we can track those uses of eval that operate
2828         in the local scope and functions that require a closure.  We track
2829         this information during initial parsing to avoid yet another tree
2830         walk.
2831
2832         * JavaScriptCore.exp:
2833         * kjs/NodeInfo.h:
2834         * kjs/Parser.cpp:
2835         (KJS::Parser::didFinishParsing):
2836         * kjs/Parser.h:
2837         (KJS::Parser::parse):
2838         * kjs/grammar.y:
2839         * kjs/nodes.cpp:
2840         (KJS::ScopeNode::ScopeNode):
2841         (KJS::ProgramNode::ProgramNode):
2842         (KJS::ProgramNode::create):
2843         (KJS::EvalNode::EvalNode):
2844         (KJS::EvalNode::create):
2845         (KJS::FunctionBodyNode::FunctionBodyNode):
2846         (KJS::FunctionBodyNode::create):
2847         * kjs/nodes.h:
2848         (KJS::ScopeNode::):
2849         (KJS::ScopeNode::usesEval):
2850         (KJS::ScopeNode::needsClosure):
2851
2852 2008-03-14  Geoffrey Garen  <ggaren@apple.com>
2853
2854         Reviewed by Beth Dakin.
2855
2856         Fixed another problem with Vector::shrinkCapacity.
2857         
2858         moveOverlapping isn't good enough for the case where the buffer hasn't
2859         changed, because it still destroys the contents of the buffer.
2860
2861         * wtf/Vector.h:
2862         (WTF::::shrinkCapacity): Changed to explicitly check whether the call
2863         to allocateBuffer produced a new buffer. If it didn't, there's no need
2864         to move.
2865
2866 2008-03-14  Geoffrey Garen  <ggaren@apple.com>
2867
2868         Reviewed by Beth Dakin.
2869         
2870         Fixed a few problems with Vector::shrinkCapacity that I noticed in testing.
2871
2872         * wtf/Vector.h:
2873         (WTF::VectorBufferBase::deallocateBuffer): Clear our m_buffer pointer
2874         when we deallocate m_buffer, in case we're not asked to reallocate a new
2875         buffer. (Otherwise, we would use a stale m_buffer if we were asked to
2876         perform any operations after shrinkCapacity was called.)
2877         
2878         (WTF::VectorBuffer::allocateBuffer): Made VectorBuffer with inline
2879         capacity aware that calls to allocateBuffer might be shrinks, rather
2880         than grows, so we shouldn't allocate a new buffer on the heap unless
2881         our inline buffer is too small.
2882         
2883         (WTF::::shrinkCapacity): Call resize() instead of just setting m_size,
2884         so destructors run. Call resize before reallocating the buffer to make
2885         sure that we still have access to the objects we need to destroy. Call
2886         moveOverlapping instead of move, since a call to allocateBuffer on an
2887         inline buffer may produce identical storage.
2888
2889 2008-03-14  Alexey Proskuryakov  <ap@webkit.org>
2890
2891         Reviewed by Darin.
2892
2893         Get rid of a localime() call on platforms that have better alternatives.
2894
2895         * kjs/DateMath.h: Added getLocalTime();
2896
2897         * kjs/DateMath.cpp:
2898         (KJS::getLocalTime):
2899         (KJS::getDSTOffsetSimple):
2900         Implementation moved from getDSTOffsetSimple().
2901
2902         * kjs/date_object.cpp:
2903         (KJS::DateObjectImp::callAsFunction): Switched to getLocalTime().
2904
2905 2008-03-14  David D. Kilzer  <ddkilzer@apple.com>
2906
2907         Unify concept of enabling the Mac Java bridge.
2908
2909         Reviewed by Darin and Anders.
2910
2911         * wtf/Platform.h: Define ENABLE_MAC_JAVA_BRIDGE here.
2912
2913 2008-03-13  Mark Mentovai  <mark@moxienet.com>
2914
2915         Reviewed by eseidel.  Landed by eseidel.
2916
2917         * wtf/FastMalloc.cpp: #include <wtf/HashSet.h> outside of any
2918         namespaces.
2919
2920 2008-03-13  Mark Mentovai  <mark@moxienet.com>
2921
2922         Reviewed by eseidel.  Landed by eseidel.
2923
2924         * pcre/pcre_exec.cpp: Fix misnamed variable, allowing -DDEBUG build
2925         to succeed.
2926         * wtf/ThreadingPthreads.cpp: #include <sys/time.h> for gettimeofday
2927         in non-pch build.
2928
2929 2008-03-13  Steve Falkenburg  <sfalken@apple.com>
2930
2931         PGO build fixes.
2932         
2933         Disable PGO for normal release builds.
2934         Added work-in-progress Release_PGOInstrument/Release_PGOOptimize targets.
2935
2936         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2937
2938 2008-03-13  Beth Dakin  <bdakin@apple.com>
2939
2940         Reviewed by Geoff.
2941
2942         Adding new functionality to Vector. Currently all of the shrink and 
2943         resize functions on Vector only shrink the size of the Vector, not 
2944         the capacity. For the Vector to take up as little memory as 
2945         possible, though, it is necessary to be able to shrink the capacity 
2946         as well. So this patch adds that functionality. 
2947
2948         I need this for a speed up I am working on, and Geoff wants to use 
2949         it in a speed up he is working on also, so he asked me to commit it 
2950         now. 
2951
2952         * wtf/Vector.h:
2953         (WTF::VectorBufferBase::allocateBuffer):
2954         (WTF::::shrinkCapacity):
2955
2956 2008-03-13  Simon Hausmann  <hausmann@webkit.org>
2957
2958         Reviewed by Adam Roben.
2959
2960         Attempt at fixing the Qt/Windows build bot. Quote using double-quotes
2961         instead of single quotes.
2962
2963         * pcre/dftables:
2964
2965 2008-03-12  Steve Falkenburg  <sfalken@apple.com>
2966
2967         Build fix.
2968
2969         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2970
2971 2008-03-12  Alp Toker  <alp@atoker.com>
2972
2973         Another autotools testkjs build fix attempt.
2974
2975         * GNUmakefile.am:
2976
2977 2008-03-12  Alp Toker  <alp@atoker.com>
2978
2979         Attempt to fix the autotools testkjs build on systems with
2980         non-standard include paths.
2981
2982         * GNUmakefile.am:
2983
2984 2008-03-11  Alexey Proskuryakov  <ap@webkit.org>
2985
2986         Reviewed by Darin.
2987
2988         <rdar://problem/5787743> REGRESSION: Crash at WTF::Collator::CreateCollator() running fast/js/kde/StringObject.html on Windows
2989
2990         * wtf/unicode/icu/CollatorICU.cpp:
2991         (WTF::Collator::createCollator): Check for null (== user default) m_locale before calling strcmp.
2992
2993 2008-03-11  Steve Falkenburg  <sfalken@apple.com>
2994
2995         Disable LTCG/PGO for grammar.cpp and nodes.cpp.
2996         PGO on these files causes us to hang.
2997         
2998         Copy newer vsprops files from relative WebKitLibraries path to environment variable based path.
2999         
3000         Reviewed by Oliver.
3001
3002         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3003         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
3004
3005 2008-03-10  Darin Adler  <darin@apple.com>
3006
3007         - Windows build fix
3008
3009         * kjs/function.cpp: (KJS::decode): Initialize variable.
3010
3011 2008-03-10  Brent Fulgham  <bfulgham@gmail.com>
3012
3013         Windows build fix
3014
3015         Reviewed by Adam.
3016
3017         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
3018         Set the PATH to include Cygwin before running touch.
3019
3020 2008-03-10  Eric Seidel  <eric@webkit.org>
3021
3022         Build fix for JSC on windows.
3023
3024         * API/JSStringRefCF.cpp:
3025         (JSStringCreateWithCFString):
3026         * kjs/function.cpp:
3027         (KJS::decode):
3028         * kjs/nodes2string.cpp:
3029         (KJS::escapeStringForPrettyPrinting):
3030
3031 2008-03-10  Eric Seidel  <eric@webkit.org>
3032         
3033         No review, build fix only.
3034         
3035         Attempt to fix the windows build?
3036
3037         * kjs/ustring.h: change unsigned short to UChar
3038
3039 2008-03-10  Eric Seidel  <eric@webkit.org>
3040
3041         Reviewed by Darin.
3042
3043         Remove KJS::UChar, use ::UChar instead
3044         http://bugs.webkit.org/show_bug.cgi?id=17017
3045
3046         * API/JSStringRef.cpp:
3047         (JSStringCreateWithCharacters):
3048         (JSStringCreateWithUTF8CString):
3049         * API/JSStringRefCF.cpp:
3050         (JSStringCreateWithCFString):
3051         * JavaScriptCore.exp:
3052         * kjs/Parser.h:
3053         * kjs/function.cpp:
3054         (KJS::decode):
3055         (KJS::parseInt):
3056         (KJS::parseFloat):
3057         (KJS::globalFuncEscape):
3058         (KJS::globalFuncUnescape):
3059         * kjs/function_object.cpp:
3060         (KJS::FunctionObjectImp::construct):
3061         * kjs/identifier.cpp:
3062         (KJS::Identifier::equal):
3063         (KJS::CStringTranslator::translate):
3064         * kjs/interpreter.h:
3065         * kjs/lexer.cpp:
3066         (KJS::Lexer::setCode):
3067         (KJS::Lexer::shift):
3068         (KJS::Lexer::lex):
3069         (KJS::Lexer::convertUnicode):
3070         (KJS::Lexer::makeIdentifier):
3071         * kjs/lookup.cpp:
3072         (KJS::keysMatch):
3073         * kjs/nodes2string.cpp:
3074         (KJS::escapeStringForPrettyPrinting):
3075         (KJS::SourceStream::operator<<):
3076         * kjs/regexp.cpp:
3077         (KJS::RegExp::RegExp):
3078         (KJS::RegExp::match):
3079         * kjs/string_object.cpp:
3080         (KJS::substituteBackreferences):
3081         (KJS::stringProtoFuncCharCodeAt):
3082         (KJS::stringProtoFuncToLowerCase):
3083         (KJS::stringProtoFuncToUpperCase):
3084         (KJS::stringProtoFuncToLocaleLowerCase):
3085         (KJS::stringProtoFuncToLocaleUpperCase):
3086         * kjs/ustring.cpp:
3087         (KJS::UString::Rep::computeHash):
3088         (KJS::UString::UString):
3089         (KJS::UString::append):
3090         (KJS::UString::ascii):
3091         (KJS::UString::operator=):
3092         (KJS::UString::is8Bit):
3093         (KJS::UString::toStrictUInt32):
3094         (KJS::UString::find):
3095         (KJS::operator==):
3096         (KJS::operator<):
3097         (KJS::compare):
3098         (KJS::UString::UTF8String):
3099         * kjs/ustring.h:
3100         * pcre/pcre.h:
3101
3102 2008-03-09  Steve Falkenburg  <sfalken@apple.com>
3103
3104         Stop Windows build if an error occurs in a prior project.
3105
3106         Rubber stamped by Darin.
3107
3108         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3109         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
3110         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3111         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
3112
3113 2008-03-09  J¸rg Billeter  <j@bitron.ch>
3114
3115         Reviewed by Alp Toker.
3116
3117         Conditionalise ICU for Unicode in the GTK+ port.
3118
3119         * wtf/Platform.h:
3120
3121 2008-03-07  David D. Kilzer  <ddkilzer@apple.com>
3122
3123         Unify concept of enabling Netscape Plug-in API (NPAPI).
3124
3125         Reviewed by Darin.
3126
3127         * wtf/Platform.h: Define ENABLE_NETSCAPE_PLUGIN_API here.
3128
3129 2008-03-07  Geoffrey Garen  <ggaren@apple.com>
3130
3131         Reviewed by Darin Adler.
3132         
3133         Fixed <rdar://problem/5689093> Stricter (ES4) eval semantics
3134         
3135         The basic rule is:
3136         
3137         - "eval(s)" is treated as an operator that gives the ES3 eval behavior.
3138             ... but only if there is no overriding declaration of "eval" in scope.
3139         - All other invocations treat eval as a function that evaluates a
3140         script in the context of its "this" object.
3141             ... but if its "this" object is not the global object it was
3142             originally associated with, eval throws an exception.
3143         
3144         Because only expressions of the form "eval(s)" have access to local
3145         scope, the compiler can now statically determine whether a function
3146         needs local scope to be dynamic.
3147
3148         * kjs/nodes.h: Added FunctionCallEvalNode. It works just like
3149         FuncationCallResolveNode, except it statically indicates that the node
3150         may execute eval in the ES3 way.
3151         * kjs/nodes.cpp:
3152         * kjs/nodes2string.cpp:
3153
3154         * tests/mozilla/expected.html: This patch happens to fix a Mozilla JS
3155         test, but it's a bit of a pyrrhic victory. The test intends to test
3156         Mozilla's generic API for calling eval on any object, but, in reality,
3157         we only support calling eval on the global object.
3158
3159 2008-03-06  Steve Falkenburg  <sfalken@apple.com>
3160
3161         Build fix.
3162
3163         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
3164
3165 2008-03-06  Steve Falkenburg  <sfalken@apple.com>
3166
3167         Build fix.
3168
3169         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3170
3171 2008-03-06  Alp Toker  <alp@atoker.com>
3172
3173         Fix the build fix in r30845 to support out-of-tree builds.
3174
3175         * GNUmakefile.am:
3176
3177 2008-03-06  Steve Falkenburg  <sfalken@apple.com>
3178
3179         Build fix.
3180
3181         * wtf/ThreadingWin.cpp:
3182         (WTF::ThreadCondition::timedWait):
3183
3184 2008-03-06  Darin Adler  <darin@apple.com>
3185
3186         - another small step towards fixing the Qt build
3187
3188         * JavaScriptCore.pri: Remove more references to the now-obsolete bindings directory.
3189
3190 2008-03-06  Darin Adler  <darin@apple.com>
3191
3192         - a small step towards fixing the Qt build
3193
3194         * JavaScriptCore.pri: Remove references to files no longer present in JavaScriptCore/bindings.
3195
3196 2008-03-06  Brady Eidson  <beidson@apple.com>
3197
3198         Gtk Build fix
3199
3200         * wtf/ThreadingGtk.cpp:
3201         (WTF::ThreadCondition::timedWait):
3202
3203 2008-03-06  Alexey Proskuryakov  <ap@webkit.org>
3204
3205         Wx build fix.
3206
3207         * wtf/unicode/icu/CollatorICU.cpp:
3208         (WTF::Collator::userDefault): Put ICU workaround under both PLATFORM(DARWIN) and
3209         PLATFORM(CF) checks, so that each port can decide if it wants to use CF on Mac for it.
3210
3211 2008-03-06  Brady Eidson <beidson@apple.com>
3212
3213         Reviewed by Darin
3214
3215         Add a timedWait() method to ThreadCondition
3216
3217         * JavaScriptCore.exp:
3218
3219         * wtf/Threading.h:
3220
3221         * wtf/ThreadingGtk.cpp:
3222         (WTF::ThreadCondition::timedWait):
3223
3224         * wtf/ThreadingNone.cpp:
3225         (WTF::ThreadCondition::timedWait):
3226
3227         * wtf/ThreadingPthreads.cpp:
3228         (WTF::ThreadCondition::timedWait):
3229
3230         * wtf/ThreadingWin.cpp:
3231         (WTF::ThreadCondition::timedWait): Needs implementation
3232
3233 2008-03-06  Alexey Proskuryakov  <ap@webkit.org>
3234
3235         More build fixes.
3236
3237         * jscore.bkl: Add the wtf/unicode directory.
3238         * wtf/unicode/CollatorDefault.cpp:
3239         (WTF::Collator::userDefault): Use a constructor that does exist.
3240         * wtf/unicode/icu/CollatorICU.cpp: Mac build fix for case-sensitive file systems.
3241
3242 2008-03-06  Darin Adler  <darin@apple.com>
3243
3244         - try to fix the Qt build
3245
3246         * JavaScriptCore.pri: Add the wtf/unicode directory.
3247
3248 2008-03-06  Darin Adler  <darin@apple.com>
3249
3250         - try to fix the GTK build
3251
3252         * GNUmakefile.am: Add a -I for the wtf/unicode directory.
3253
3254 2008-03-06  Darin Adler  <darin@apple.com>
3255
3256         - try to fix the Mac build
3257
3258         * icu/unicode/parseerr.h: Copied from ../WebCore/icu/unicode/parseerr.h.
3259         * icu/unicode/ucol.h: Copied from ../WebCore/icu/unicode/ucol.h.
3260         * icu/unicode/uloc.h: Copied from ../WebCore/icu/unicode/uloc.h.
3261         * icu/unicode/unorm.h: Copied from ../WebCore/icu/unicode/unorm.h.
3262         * icu/unicode/uset.h: Copied from ../WebCore/icu/unicode/uset.h.
3263
3264 2008-03-06  Alexey Proskuryakov  <ap@webkit.org>
3265
3266         Reviewed by Darin.
3267
3268         <rdar://problem/5687269> Need to create a Collator abstraction for WebCore and JavaScriptCore
3269
3270         * wtf/Threading.h:
3271         (WTF::initializeThreading):
3272         * wtf/ThreadingGtk.cpp:
3273         (WTF::initializeThreading):
3274         * wtf/ThreadingNone.cpp:
3275         * wtf/ThreadingPthreads.cpp:
3276         * wtf/ThreadingWin.cpp:
3277         Added AtomicallyInitializedStatic.
3278
3279         * kjs/string_object.cpp: (KJS::localeCompare): Changed to use Collator.
3280
3281         * GNUmakefile.am:
3282         * JavaScriptCore.exp:
3283         * JavaScriptCore.pri:
3284         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3285         * JavaScriptCore.xcodeproj/project.pbxproj:
3286         * JavaScriptCoreSources.bkl:
3287         Added new fiiles to projects.
3288
3289         * wtf/unicode/Collator.h: Added.
3290         (WTF::Collator::):
3291         * wtf/unicode/CollatorDefault.cpp: Added.
3292         (WTF::Collator::Collator):
3293         (WTF::Collator::~Collator):
3294         (WTF::Collator::setOrderLowerFirst):
3295         (WTF::Collator::collate):
3296         * wtf/unicode/icu/CollatorICU.cpp: Added.
3297         (WTF::cachedCollatorMutex):
3298         (WTF::Collator::Collator):
3299         (WTF::Collator::~Collator):
3300         (WTF::Collator::setOrderLowerFirst):
3301         (WTF::Collator::collate):
3302         (WTF::Collator::createCollator):
3303         (WTF::Collator::releaseCollator):
3304
3305 2008-03-05  Kevin Ollivier  <kevino@theolliviers.com>
3306
3307         Fix the wx build after the bindings move.
3308
3309         * JavaScriptCoreSources.bkl:
3310         * jscore.bkl:
3311
3312 2008-03-05  Alp Toker  <alp@atoker.com>
3313
3314         GTK+ build fix for breakage introduced in r30800.
3315
3316         Track moved bridge sources from JavaScriptCore to WebCore.
3317
3318         * GNUmakefile.am:
3319
3320 2008-03-05  Brent Fulgham  <bfulgham@gmail.com>
3321
3322         Reviewed by Adam Roben.
3323
3324         Remove definition of WTF_USE_SAFARI_THEME from wtf/Platform.h
3325         because the PLATFORM(CG) flag is not set until config.h has
3326         already included this file.
3327
3328         * wtf/Platform.h:  Remove useless definition of WTF_USE_SAFARI_THEME
3329
3330 2008-03-05  Brady Eidson  <beidson@apple.com>
3331
3332         Reviewed by Alexey and Mark Rowe
3333
3334         Fix for <rdar://problem/5778247> - Reproducible crash on storage/execute-sql-args.html
3335
3336         DatabaseThread::unscheduleDatabaseTasks() manually filters through a MessageQueue,
3337         removing particular items for Databases that were shutting down.
3338
3339         This filtering operation is not atomic, and therefore causes a race condition with the
3340         MessageQueue waking up and reading from the message queue.  
3341
3342         The end result was an attempt to dereference a null DatabaseTask.  Timing-wise, this never
3343         seemed to happen in a debug build, otherwise an assertion would've caught it.  Replacing that
3344         assertion with a crash in a release build is what revealed this bug.
3345
3346         * wtf/MessageQueue.h:
3347         (WTF::::waitForMessage): Tweak the waiting logic to check the queue's empty state then go back
3348           to sleep if the queue was empty - checking m_killed each time it wakes up.
3349
3350 2008-03-05  David D. Kilzer  <ddkilzer@apple.com>
3351
3352         Remove unused header includes from interpreter.cpp.
3353
3354         Reviewed by Darin.
3355
3356         * kjs/interpreter.cpp: Remove unused header includes.
3357
3358 2008-03-05  Anders Carlsson  <andersca@apple.com>
3359
3360         Reviewed by Sam.
3361         
3362         Remove bindings/.
3363
3364         * bindings: Removed.
3365
3366 2008-03-05  Anders Carlsson  <andersca@apple.com>
3367
3368         Don't build bindings/ anymore.
3369         
3370         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3371
3372 2008-03-05  Anders Carlsson  <andersca@apple.com>
3373
3374         Reviewed by Geoff.
3375
3376         Don't build JavaScriptCore/bindings.
3377         
3378         * JavaScriptCore.exp:
3379         Export a couple of new functions. 
3380         
3381         * JavaScriptCore.xcodeproj/project.pbxproj:
3382         Remove bindings/
3383         
3384         * kjs/config.h:
3385         No need to define HAVE_JNI anymore.
3386         
3387         * kjs/interpreter.cpp:
3388         Remove unnecessary include.
3389
3390 2008-03-05  David D. Kilzer  <ddkilzer@apple.com>
3391
3392         Allow override of default script file name using command-line argument.
3393
3394         Reviewed by Adele.
3395
3396         * API/minidom.c:
3397         (main): Allow first command-line argument to override the default script
3398         file name of "minidom.js".
3399         * API/testapi.c:
3400         (main): Allow first command-line argument to override the default script
3401         file name of "testapi.js".
3402
3403 2008-03-04  Mark Rowe  <mrowe@apple.com>
3404
3405         Mac build fix.
3406
3407         * JavaScriptCore.exp:  Add new symbol to exports file.
3408
3409 2008-03-03  Oliver Hunt  <oliver@apple.com>
3410
3411         Reviewed by Anders.
3412
3413         Make ForInNode check for the timeout interrupt
3414
3415         * kjs/nodes.cpp:
3416         (KJS::ForInNode::execute):
3417
3418 2008-03-02  Brent Fulgham  <bfulgham@gmail.com>
3419
3420         Reviewed by Alp Toker.
3421
3422         http://bugs.webkit.org/show_bug.cgi?id=17415
3423         GTK Build (using autotools) on Mac OS (DarwinPorts) Fails
3424
3425         Add -lstdc++ to link flags for minidom program.  This corrects
3426         a build error for the GTK+ on Mac OS.
3427
3428         * GNUmakefile.am:
3429
3430 2008-03-01  Mark Rowe  <mrowe@apple.com>
3431
3432         Reviewed by Tim Hatcher.
3433
3434         Update Xcode configuration to support building debug and release from the mysterious future.
3435
3436         * Configurations/Base.xcconfig:
3437         * Configurations/DebugRelease.xcconfig:
3438
3439 2008-02-29  Brent Fulgham  <bfulgham@gmail.com>
3440
3441         http://bugs.webkit.org/show_bug.cgi?id=17483
3442         Implement scrollbars on Windows (Cairo)
3443
3444         Reviewed by Adam Roben.
3445
3446         * wtf/Platform.h:
3447
3448 2008-02-29  Adam Roben  <aroben@apple.com>
3449
3450         Remove unused DebuggerImp::abort and DebuggerImp::aborted
3451
3452         Reviewed by Tim and Sam.
3453
3454         * kjs/function_object.cpp:
3455         (KJS::FunctionObjectImp::construct):
3456         * kjs/internal.h:
3457         (KJS::DebuggerImp::DebuggerImp):
3458         * kjs/nodes.cpp:
3459         (KJS::Node::handleException):
3460         (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
3461
3462 2008-02-28  Eric Christopher  <echristo@apple.com>
3463
3464         Reviewed by Geoffrey Garen.
3465
3466         ** TOTAL **:          1.005x as fast    2867.6ms +/- 0.4%  2853.2ms +/- 0.3%    significant
3467
3468         * kjs/nodes.cpp: Tell the compiler that exceptions are unexpected (for
3469         the sake of branch prediction and code organization).
3470
3471 2008-02-27  Alexey Proskuryakov  <ap@webkit.org>
3472
3473         Reviewed by Sam Weinig.
3474
3475         http://bugs.webkit.org/show_bug.cgi?id=17030
3476         Small buffer overflow within initialization
3477
3478         * kjs/date_object.cpp:
3479         (KJS::DateObjectFuncImp::callAsFunction):
3480         (KJS::parseDate):
3481         Remove unnecessary and incorrect memset() calls - GregorianDateTime can initialize itself.
3482
3483 2008-02-25  Sam Weinig  <sam@webkit.org>
3484
3485         Reviewed by Dan Bernstein.
3486
3487         - Add a variant of remove that takes a position and a length.
3488
3489         * wtf/Vector.h:
3490         (WTF::Vector::remove):
3491
3492 2008-02-25  Mark Mentovai  <mark@moxienet.com>
3493
3494         Reviewed by Mark Rowe.
3495
3496         Enable CollectorHeapIntrospector to build by itself, as well as in an AllInOneFile build.
3497         http://bugs.webkit.org/show_bug.cgi?id=17538
3498
3499         * kjs/CollectorHeapIntrospector.cpp: Provide "using" declaration for
3500           WTF::RemoteMemoryReader.
3501         * kjs/collector.h: Move CollectorHeap declaration here...
3502         * kjs/collector.cpp: ... from here.
3503
3504 2008-02-25  Darin Adler  <darin@apple.com>
3505
3506         Reviewed by Adam.
3507
3508         * JavaScriptCore.exp: Sort the contents of this file.
3509
3510 2008-02-25  Adam Roben  <aroben@apple.com>
3511
3512         MSVC build fix
3513
3514         * kjs/testkjs.cpp:
3515         (functionQuit): Don't add a return statement after exit(0) for MSVC.
3516
3517 2008-02-24  Sam Weinig  <sam@webkit.org>
3518
3519         Reviewed by Mark Rowe.
3520
3521         http://bugs.webkit.org/show_bug.cgi?id=17529
3522         Add support for reading from stdin from testkjs
3523
3524         * kjs/testkjs.cpp:
3525         (GlobalObject::GlobalObject): Add readline function to global object.
3526         (functionReadline): Added. Reads characters from stdin until a '\n' or
3527         EOF is encountered. The input is returned as a String to the caller.
3528
3529 2008-02-24  Sam Weinig  <sam@webkit.org>
3530
3531         Reviewed by Mark Rowe.
3532
3533         http://bugs.webkit.org/show_bug.cgi?id=17528
3534         Give testkjs a bath
3535
3536         * JavaScriptCore.exp:
3537         * JavaScriptCore.xcodeproj/project.pbxproj: Make the testkjs.cpp use 4 space indentation.
3538         * kjs/testkjs.cpp:
3539         (StopWatch::getElapsedMS):
3540         (GlobalObject::className):
3541         (GlobalObject::GlobalObject):
3542         Rename GlobalImp to GlobalObject and setup the global functions
3543         in the GlobalObject's constructor. Also, use static functions for
3544         the implementation so we can use the standard PrototypeFunction
3545         class and remove TestFunctionImp.
3546         (functionPrint): Move print() functionality here.
3547         (functionDebug): Move debug() functionality here.
3548         (functionGC): Move gc() functionality here.
3549         (functionVersion): Move version() functionality here.
3550         (functionRun): Move run() functionality here.
3551         (functionLoad): Move load() functionality here.
3552         (functionQuit): Move quit() functionality here.
3553         (prettyPrintScript): Fix indentation.
3554         (runWithScripts): Since all the functionality of createGlobalObject is
3555         now in the GlobalObject constructor, just call new here.
3556         (parseArguments): Fix indentation.
3557         (kjsmain): Ditto
3558         (fillBufferWithContentsOfFile): Ditto.
3559
3560 2008-02-24  Sam Weinig  <sam@webkit.org>
3561
3562         Reviewed by Oliver Hunt and Mark Rowe.
3563
3564         http://bugs.webkit.org/show_bug.cgi?id=17505
3565         Add support for getting command line arguments in testkjs
3566
3567         - This slightly changes the behavior of parsing arguments by requiring
3568           a '-f' before all files. 
3569
3570         * kjs/testkjs.cpp:
3571         (createGlobalObject): Add a global property called 'arguments' which
3572         contains an array with the parsed arguments as strings.
3573         (runWithScripts): Pass in the arguments vector so that it can be passed
3574         to the global object.
3575         (parseArguments): Change parsing rules to require a '-f' before any script
3576         file. After all '-f' and '-p' arguments have been parsed, the remaining
3577         are added to the arguments vector and exposed to the script. If there is a
3578         chance of ambiguity (the user wants to pass the string '-f' to the script),
3579         the string '--' can be used separate the options from the pass through 
3580         arguments.
3581         (kjsmain):
3582
3583 2008-02-24  Dan Bernstein  <mitz@apple.com>
3584
3585         Reviewed by Darin Adler.
3586
3587         - fix http://bugs.webkit.org/show_bug.cgi?id=17511
3588           REGRESSION: Reproducible crash in SegmentedSubstring::SegmentedSubstring(SegmentedSubstring const&)
3589
3590         * wtf/Deque.h:
3591         (WTF::::expandCapacityIfNeeded): Fixed the case where m_start and m_end
3592         are both zero but the buffer capacity is non-zero.
3593         (WTF::::prepend): Added validity checks.
3594
3595 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
3596
3597         Rubber stamped by Darin.
3598
3599         Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
3600         whitespaces introduced in the previous commit.
3601
3602         * GNUmakefile.am: 
3603
3604 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
3605
3606         * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
3607
3608 2008-02-23  Darin Adler  <darin@apple.com>
3609
3610         Reviewed by Anders.
3611
3612         - http://bugs.webkit.org/show_bug.cgi?id=17496
3613           make Deque use a circular array; add iterators
3614
3615         * wtf/Deque.h: Wrote an all-new version of this class that uses a circular
3616         buffer. Growth policy is identical to vector. Added iterators.
3617
3618         * wtf/Vector.h: Made two small refinements while using this to implement
3619         Deque: Made VectorBufferBase derive from Noncopyable, which would have
3620         saved me some debugging time if it had been there. Renamed Impl and
3621         m_impl to Buffer and m_buffer.
3622
3623 2008-02-23  Darin Adler  <darin@apple.com>
3624
3625         Reviewed by Anders.
3626
3627         - http://bugs.webkit.org/show_bug.cgi?id=17067
3628           eliminate attributes parameter from JSObject::put for speed/clarity
3629
3630         * API/JSCallbackObject.h: Removed attribute arguments.
3631         * API/JSCallbackObjectFunctions.h:
3632         (KJS::JSCallbackObject<Base>::put): Ditto.
3633         * API/JSObjectRef.cpp:
3634         (JSObjectSetProperty): Use initializeVariable or putDirect when necessary
3635         to set attribute values.
3636         * JavaScriptCore.exp: Updated.
3637         * bindings/objc/objc_runtime.h: Removed attribute arguments.
3638         * bindings/objc/objc_runtime.mm:
3639         (ObjcFallbackObjectImp::put): Ditto.
3640         * bindings/runtime_array.cpp:
3641         (RuntimeArray::put): Ditto.
3642         * bindings/runtime_array.h: Ditto.
3643         * bindings/runtime_object.cpp:
3644         (RuntimeObjectImp::put): Ditto.
3645         * bindings/runtime_object.h: Ditto. Also removed canPut which was only
3646         called from one place in WebCore that can use hasProperty instead.
3647
3648         * kjs/Activation.h: Removed attribute argument from put and added the new
3649         initializeVariable function that's used to put variables in variable objects.
3650         Also made isActivationObject a const member.
3651
3652         * kjs/JSGlobalObject.cpp:
3653         (KJS::JSGlobalObject::put): Removed attribute argument.
3654         (KJS::JSGlobalObject::initializeVariable): Added. Used to give variables
3655         their initial values, which can include the read-only property.
3656         (KJS::JSGlobalObject::reset): Removed obsolete comments about flags.
3657         Removed Internal flag, which is no longer needed.
3658         * kjs/JSGlobalObject.h: More of the same.
3659
3660         * kjs/JSVariableObject.h: Added pure virtual initializeVariable function.
3661         (KJS::JSVariableObject::symbolTablePut): Removed checkReadOnly flag; we always
3662         check read-only.
3663         (KJS::JSVariableObject::symbolTableInitializeVariable): Added.
3664
3665         * kjs/array_instance.cpp:
3666         (KJS::ArrayInstance::put): Removed attribute argument.
3667         * kjs/array_instance.h: Ditto.
3668
3669         * kjs/function.cpp:
3670         (KJS::FunctionImp::put): Ditto.
3671         (KJS::Arguments::put): Ditto.
3672         (KJS::ActivationImp::put): Ditto.
3673         (KJS::ActivationImp::initializeVariable): Added.
3674         * kjs/function.h: Removed attribute arguments.
3675
3676         * kjs/function_object.cpp:
3677         (KJS::FunctionObjectImp::construct): Removed Internal flag.
3678
3679         * kjs/lookup.h:
3680         (KJS::lookupPut): Removed attributes argument. Also changed to use putDirect
3681         instead of calling JSObject::put.
3682         (KJS::cacheGlobalObject): Ditto.
3683
3684         * kjs/nodes.cpp:
3685         (KJS::ConstDeclNode::handleSlowCase): Call initializeVariable to initialize
3686         the constant.
3687         (KJS::ConstDeclNode::evaluateSingle): Ditto.
3688         (KJS::TryNode::execute): Use putDirect to set up the new object.
3689         (KJS::FunctionBodyNode::processDeclarations): Removed Internal.
3690         (KJS::ProgramNode::processDeclarations): Ditto.
3691         (KJS::EvalNode::processDeclarations): Call initializeVariable to initialize
3692         the variables and functions.
3693         (KJS::FuncDeclNode::makeFunction): Removed Internal.
3694         (KJS::FuncExprNode::evaluate): Ditto.
3695
3696         * kjs/object.cpp: Removed canPut, which was only being used in one code path,
3697         not the normal high speed one.
3698         (KJS::JSObject::put): Removed attribute argument. Moved the logic from
3699         canPut here, in the one code ath that was still using it.
3700         * kjs/object.h: Removed Internal attribute, ad canPut function. Removed the
3701         attributes argument to the put function. Made isActivationObject const.
3702
3703         * kjs/regexp_object.cpp:
3704         (KJS::RegExpImp::put): Removed attributes argument.
3705         (KJS::RegExpImp::putValueProperty): Ditto.
3706         (KJS::RegExpObjectImp::put): Ditto.
3707         (KJS::RegExpObjectImp::putValueProperty): Ditto.
3708         * kjs/regexp_object.h: Ditto.
3709
3710         * kjs/string_object.cpp:
3711         (KJS::StringInstance::put): Removed attributes argument.
3712         * kjs/string_object.h: Ditto.
3713
3714 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
3715
3716         Not reviewed, Gtk build fix.
3717
3718         * kjs/testkjs.pro:
3719
3720 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
3721
3722         Windows build fix - move ThreadCondition implementation from WebCore to WTF.
3723
3724         * wtf/ThreadingWin.cpp:
3725         (WTF::ThreadCondition::ThreadCondition):
3726         (WTF::ThreadCondition::~ThreadCondition):
3727         (WTF::ThreadCondition::wait):
3728         (WTF::ThreadCondition::signal):
3729         (WTF::ThreadCondition::broadcast):
3730
3731 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
3732
3733         Touch some files, hoping that Windows build bot will create JSC headers.
3734
3735         * kjs/AllInOneFile.cpp:
3736         * kjs/array_instance.cpp:
3737         * wtf/HashTable.cpp:
3738
3739 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
3740
3741         Qt/Wx build fix - this file was still in a wrong namespace, too.
3742
3743         * wtf/ThreadingNone.cpp:
3744
3745 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
3746
3747         More build fixing - fix mismatched braces.
3748
3749         * JavaScriptCore.pri:
3750
3751 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
3752
3753         Wx and Gtk build fixes.
3754
3755         * JavaScriptCore.pri: Don't try to compile ThreadingPthreads.
3756         * wtf/ThreadingGtk.cpp: Use a correct namespace.
3757
3758 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
3759
3760         Reviewed by Darin.
3761
3762         Move basic threading support from WebCore to WTF.
3763
3764         Added mutex protection to MessageQueue::killed() for paranoia sake.
3765
3766         * GNUmakefile.am:
3767         * JavaScriptCore.exp:
3768         * JavaScriptCore.pri:
3769         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3770         * JavaScriptCore.xcodeproj/project.pbxproj:
3771         * JavaScriptCoreSources.bkl:
3772         * wtf/Locker.h: Copied from WebCore/platform/Locker.h.
3773         * wtf/MessageQueue.h: Copied from WebCore/platform/MessageQueue.h.
3774         (WTF::::killed):
3775         * wtf/Threading.h: Copied from WebCore/platform/Threading.h.
3776         * wtf/ThreadingGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp.
3777         (WebCore::createThread):
3778         * wtf/ThreadingNone.cpp: Copied from WebCore/platform/ThreadingNone.cpp.
3779         * wtf/ThreadingPthreads.cpp: Copied from WebCore/platform/pthreads/ThreadingPthreads.cpp.
3780         (WTF::createThread):
3781         * wtf/ThreadingWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp.
3782         (WTF::createThread):
3783         (WTF::Mutex::Mutex):
3784         (WTF::Mutex::~Mutex):
3785         (WTF::Mutex::lock):
3786         (WTF::Mutex::tryLock):
3787         (WTF::Mutex::unlock):
3788
3789 2008-02-22  Geoffrey Garen  <ggaren@apple.com>
3790
3791         Reviewed by Sam Weinig.
3792         
3793         Partial fix for <rdar://problem/5744037> Gmail out of memory (17455)
3794         
3795         I'm removing KJS_MEM_LIMIT for the following reasons:
3796         
3797         - We have a few reports of KJS_MEM_LIMIT breaking important web
3798         applications, like GMail and Google Reader. (For example, if you
3799         simply open 12 GMail tabs, tab #12 will hit the limit.)
3800
3801         - Firefox has no discernable JS object count limit, so any limit, even
3802         a large one, is a potential compatibility problem.
3803         
3804         - KJS_MEM_LIMIT does not protect against malicious memory allocation,
3805         since there are many ways to maliciously allocate memory without
3806         increasing the JS object count.
3807         
3808         - KJS_MEM_LIMIT is already mostly broken, since it only aborts the
3809         script that breaches the limit, not any subsequent scripts.
3810         
3811         - We've never gotten bug reports about websites that would have
3812         benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of
3813         KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that
3814         needed it.
3815         
3816         - Any website that brings you anywhere close to crashing due to the
3817         number of live JS objects will almost certainly put up the "slow
3818         script" dialog at least 20 times beforehand.
3819
3820         * kjs/collector.cpp:
3821         (KJS::Collector::collect):
3822         * kjs/collector.h:
3823         * kjs/nodes.cpp:
3824         (KJS::TryNode::execute):
3825
3826 2008-02-22  Oliver Hunt  <oliver@apple.com>
3827
3828         Reviewed by Alexey P.
3829
3830         <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true)
3831
3832         Fix yet another case where we incorrectly relied on implicit double
3833         to bool coercion.
3834
3835         * kjs/nodes.cpp:
3836         (KJS::PostDecLocalVarNode::evaluateToBoolean):
3837
3838 2008-02-20  Michael Knaup  <michael.knaup@mac.com>
3839
3840         Reviewed by Darin.
3841
3842         Fix for Bug 16753: date set methods with no args should result in NaN (Acid3 bug)
3843         The set values result in NaN now when called with no args, NaN or +/- inf values.
3844         The setYear, setFullYear and setUTCFullYear methods used on NaN dates work as 
3845         descripted in the standard.
3846
3847         * kjs/date_object.cpp:
3848         (KJS::fillStructuresUsingTimeArgs):
3849         (KJS::fillStructuresUsingDateArgs):
3850         (KJS::setNewValueFromTimeArgs):
3851         (KJS::setNewValueFromDateArgs):
3852         (KJS::dateProtoFuncSetYear):
3853
3854 2008-02-19  Anders Carlsson  <andersca@apple.com>
3855
3856         Reviewed by Darin.
3857
3858         Change OpaqueJSClass and RootObject to start with a ref count of 1.
3859         
3860         * API/JSClassRef.cpp:
3861         (OpaqueJSClass::OpaqueJSClass):
3862         (OpaqueJSClass::createNoAutomaticPrototype):
3863         (OpaqueJSClass::create):
3864         * API/JSClassRef.h:
3865         * API/JSObjectRef.cpp:
3866         (JSClassCreate):
3867         * bindings/runtime_root.cpp:
3868         (KJS::Bindings::RootObject::create):
3869         (KJS::Bindings::RootObject::RootObject):
3870
3871 2008-02-19  Darin Adler  <darin@apple.com>
3872
3873         Rubber stamped by Anders.
3874
3875         - removed explicit initialization to 1 for RefCounted; that's now the default
3876
3877         * kjs/regexp.cpp:
3878         (KJS::RegExp::RegExp): Removed RefCounted initializer.
3879
3880 2008-02-19  Darin Adler  <darin@apple.com>
3881
3882         Reviewed by Anders.
3883
3884         - next step for http://bugs.webkit.org/show_bug.cgi?id=17257
3885           start ref counts at 1 instead of 0 for speed
3886
3887         * wtf/RefCounted.h:
3888         (WTF::RefCounted::RefCounted): Have refcounts default to 1. This allows us to start
3889         removing the explicit initialization of RefCounted from classes and eventually we
3890         can remove the ability to have the initial count of 0 entirely.
3891
3892 2008-02-18  Samuel Weinig  <sam@webkit.org>
3893
3894         Reviewed by Geoff Garen.
3895
3896         Fix for http://bugs.webkit.org/show_bug.cgi?id=17419
3897         Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode
3898
3899         * kjs/JSGlobalObject.cpp:
3900         (KJS::JSGlobalObject::init):
3901         * kjs/JSGlobalObject.h:
3902         (KJS::JSGlobalObject::setDebugger):
3903         * kjs/date_object.cpp:
3904         (KJS::dateProtoFuncGetYear):
3905
3906 2008-02-18  Darin Adler  <darin@apple.com>
3907
3908         Reviewed by Sam.
3909
3910         * wtf/ASCIICType.h:
3911         (WTF::toASCIIHexValue): Added.
3912
3913 2008-02-17  Darin Adler  <darin@apple.com>
3914
3915         * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
3916
3917 2008-02-15  Adam Roben  <aroben@apple.com>
3918
3919         Make JavaScriptCore's FEATURE_DEFINES match WebCore's
3920
3921         Reviewed by Mark.
3922
3923         * Configurations/JavaScriptCore.xcconfig:
3924
3925 2008-02-14  Stephanie Lewis <slewis@apple.com>
3926
3927         Reviewed by Geoff.
3928
3929         Update order files.
3930
3931         * JavaScriptCore.order:
3932
3933 2008-02-14  Geoffrey Garen  <ggaren@apple.com>
3934
3935         Reviewed by Sam Weinig.
3936         
3937         Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329
3938         Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329)
3939         
3940         Don't reset the "activations" stack in JSGlobalObject::reset, since we
3941         might be executing a script during the call to reset, and the script
3942         needs to safely run to completion.
3943         
3944         Instead, initialize the "activations" stack when the global object is
3945         created, and subsequently rely on pushing and popping during normal
3946         execution to maintain the stack's state.
3947         
3948         * kjs/JSGlobalObject.cpp:
3949         (KJS::JSGlobalObject::init):
3950         (KJS::JSGlobalObject::reset):
3951
3952 2008-02-13  Bernhard Rosenkraenzer  <bero@arklinux.org>
3953
3954         Reviewed by Darin.
3955
3956         - http://bugs.webkit.org/show_bug.cgi?id=17339
3957           JavaScriptCore does not build with gcc 4.3
3958
3959         * kjs/interpreter.cpp: Add include of <unistd.h>, since that's where
3960         getpid() comes from.
3961
3962 2008-02-13  Oliver Hunt  <oliver@apple.com>
3963
3964         Reviewed by Alexey P.
3965
3966         <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com
3967
3968         When converting numeric values to booleans we need to account for NaN
3969
3970         * kjs/nodes.cpp:
3971         (KJS::MultNode::evaluateToBoolean):
3972         (KJS::ModNode::evaluateToBoolean):
3973
3974 2008-02-08  Samuel Weinig  <sam@webkit.org>
3975
3976         Reviewed by Brady Eidson.
3977
3978         <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList)
3979
3980         - Tweak the statements in isASCIISpace to account for the statistical distribution of
3981           usage in the PLT.
3982
3983         .4% speedup on my machine.  Stephanie's machine shows this as .3% speedup.
3984
3985         * wtf/ASCIICType.h:
3986         (WTF::isASCIISpace): 
3987
3988 2008-02-11  Sam Weinig  <sam@webkit.org>
3989
3990         Reviewed by Anders Carlsson.
3991
3992         Fixes for:
3993         <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
3994         <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it
3995
3996         - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain
3997           toString calling.
3998
3999         * JavaScriptCore.exp:
4000         * kjs/object_object.cpp:
4001         * kjs/object_object.h:
4002
4003 2008-02-10  Darin Adler  <darin@apple.com>
4004
4005         Rubber stamped by Eric.
4006
4007         * kjs/ExecState.h:
4008         (KJS::ExecState::takeException): Added.
4009
4010 2008-02-10  Darin Adler  <darin@apple.com>
4011
4012         Reviewed by Eric.
4013
4014         - http://bugs.webkit.org/show_bug.cgi?id=17256
4015           eliminate default ref. count of 0 in RefCounted class
4016
4017         * wtf/RefCounted.h:
4018         (WTF::RefCounted::RefCounted): Remove default of 0.
4019
4020 2008-02-10  Darin Adler  <darin@apple.com>
4021
4022         Reviewed by Eric.
4023
4024         - http://bugs.webkit.org/show_bug.cgi?id=17256
4025           Make clients of RefCounted explicitly set the count to 0.
4026
4027         * API/JSClassRef.cpp:
4028         (OpaqueJSClass::OpaqueJSClass):
4029         * bindings/runtime_root.cpp:
4030         (KJS::Bindings::RootObject::RootObject):
4031
4032 2008-02-09  Darin Adler  <darin@apple.com>
4033
4034         Reviewed by Mitz.
4035
4036         - http://bugs.webkit.org/show_bug.cgi?id=17256
4037           Change RegExp to start its ref count at 1, not 0
4038
4039         We'll want to do this to every RefCounted class, one at a time.
4040
4041         * kjs/nodes.h:
4042         (KJS::RegExpNode::RegExpNode): Use RegExp::create instead of new RegExp.
4043         * kjs/regexp.cpp:
4044         (KJS::RegExp::RegExp): Marked inline, set initial ref count to 1.
4045         (KJS::RegExp::create): Added. Calls new RegExp then adopts the initial ref.
4046         * kjs/regexp.h: Reformatted. Made the constructors private. Added static
4047         create functions that return objects already wrapped in PassRefPtr.
4048         * kjs/regexp_object.cpp:
4049         (KJS::regExpProtoFuncCompile): Use RegExp::create instead of new RegExp.
4050         (KJS::RegExpObjectImp::construct): Ditto.
4051         * kjs/string_object.cpp:
4052         (KJS::stringProtoFuncMatch): Ditto.
4053         (KJS::stringProtoFuncSearch): Ditto.
4054
4055 2008-02-08  Oliver Hunt  <oliver@apple.com>
4056
4057         Reviewed by Maciej.
4058
4059         <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString()
4060         https://bugs.webkit.org/show_bug.cgi?id=17214
4061
4062         Make a subclass of CommaNode to provide the correct precedence for each expression in
4063         a variable declaration list.
4064
4065         * kjs/grammar.y:
4066         * kjs/nodes.h:
4067         (KJS::VarDeclCommaNode::):
4068
4069 2008-02-08  Darin Adler  <darin@apple.com>
4070
4071         Reviewed by Oliver.
4072
4073         - fix http://bugs.webkit.org/show_bug.cgi?id=17247
4074           Labelled continue/break can fail in some cases
4075
4076         Test: fast/js/continue-break-multiple-labels.html
4077
4078         * kjs/nodes.h:
4079         (KJS::StatementNode::pushLabel): Made this virtual.
4080         (KJS::LabelNode::pushLabel): Forward pushLabel calls to the statement inside.
4081
4082 2008-02-08  Darin Adler  <darin@apple.com>
4083
4084         Reviewed by Eric.
4085
4086         - fix http://bugs.webkit.org/show_bug.cgi?id=15003
4087           Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug)
4088
4089         Test: fast/js/constructor-attributes.html
4090
4091         * kjs/JSGlobalObject.cpp:
4092         (KJS::JSGlobalObject::reset): Remove unwanted attributes from "constructor".
4093         * kjs/function_object.cpp:
4094         (KJS::FunctionObjectImp::construct): Ditto.
4095         * kjs/nodes.cpp:
4096         (KJS::FuncDeclNode::makeFunction): Ditto.
4097         (KJS::FuncExprNode::evaluate): Ditto.
4098
4099 2008-02-06  Geoffrey Garen  <ggaren@apple.com>
4100
4101         Reviewed by Oliver Hunt.
4102         
4103         Added an ASSERT to catch refCount underflow, since it caused a leak in
4104         my last check-in.
4105
4106         * wtf/RefCounted.h:
4107         (WTF::RefCounted::deref):
4108
4109 2008-02-06  Geoffrey Garen  <ggaren@apple.com>
4110
4111         Reviewed by Darin Adler.
4112
4113         PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
4114         slower due to r28884 (global variable symbol table optimization)
4115         
4116         Tweaked RefCounted::deref() to be a little more efficient.
4117
4118         1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine.
4119         
4120         * wtf/RefCounted.h:
4121         (WTF::RefCounted::deref): Don't modify m_refCount if we're just going
4122         to delete the object anyway. Also, use a simple == test, which might be
4123         faster than <= on some hardware.
4124
4125 2008-02-06  Darin Adler  <darin@apple.com>
4126
4127         Reviewed by Sam.
4128
4129         - fix http://bugs.webkit.org/show_bug.cgi?id=17094
4130           Array.prototype functions create length properties with DontEnum/DontDelete
4131
4132         Test results match Gecko with very few obscure exceptions that seem to be
4133         bugs in Gecko.
4134
4135         Test: fast/js/array-functions-non-arrays.html
4136
4137         * kjs/array_object.cpp:
4138         (KJS::arrayProtoFuncConcat):  Removed DontEnum and DontDelete from the call
4139         to set length.
4140         (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty,
4141         which is not needed for real arrays, but is needed for non-arrays.
4142         (KJS::arrayProtoFuncPush): Ditto.
4143         (KJS::arrayProtoFuncShift): Ditto.
4144         (KJS::arrayProtoFuncSlice): Ditto.
4145         (KJS::arrayProtoFuncSort): Removed incorrect call to set length when
4146         the array has no elements.
4147         (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call
4148         to set length.
4149         (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to
4150         make behavior match the specification in that case.
4151         * kjs/nodes.cpp:
4152         (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call
4153         to set length.
4154
4155 2008-02-06  Darin Adler  <darin@apple.com>
4156
4157         Reviewed by Sam.
4158
4159         - replace calls to put to set up properties with calls to putDirect, to
4160           prepare for a future change where put won't take attributes any more,
4161           and for a slight performance boost
4162
4163         * API/JSObjectRef.cpp:
4164         (JSObjectMakeConstructor): Use putDirect instead of put.
4165         * kjs/CommonIdentifiers.h: Removed lastIndex.
4166         * kjs/JSGlobalObject.cpp:
4167         (KJS::JSGlobalObject::reset): Use putDirect instead of put.
4168         * kjs/array_object.cpp:
4169         (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused).
4170         (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put.
4171         * kjs/error_object.cpp:
4172         (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put.
4173         * kjs/function.cpp:
4174         (KJS::Arguments::Arguments): Use putDirect instead of put.
4175         (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put.
4176         * kjs/function_object.cpp:
4177         (KJS::FunctionObjectImp::construct): Use putDirect instead of put.
4178         * kjs/nodes.cpp:
4179         (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put.
4180         (KJS::FuncExprNode::evaluate): Use putDirect instead of put.
4181         * kjs/regexp_object.cpp:
4182         (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex).
4183         (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of
4184         calling get and put.
4185         * kjs/regexp_object.h:
4186         (KJS::RegExpImp::setLastIndex): Add