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