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