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