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