Windows build fixes
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-09-02  Adam Roben  <aroben@apple.com>
2
3         Windows build fixes
4
5         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
6         StructureID.{cpp,h} to the project. Also let VS reorder this file.
7         * VM/CodeBlock.cpp: Include StringExtras so that snprintf will be
8         defined on Windows.
9
10 2008-09-01  Sam Weinig  <sam@webkit.org>
11
12         Fix release build.
13
14         * JavaScriptCore.exp:
15
16 2008-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>
17
18         Reviewed by Oliver Hunt.
19
20         Gtk buildfix
21
22         * GNUmakefile.am:
23         * kjs/PropertyMap.cpp: rename Identifier.h to identifier.h
24         * kjs/StructureID.cpp: include JSObject.h
25
26 2008-09-01  Geoffrey Garen  <ggaren@apple.com>
27
28         Reviewed by Darin Adler.
29
30         First cut at inline caching for access to vanilla JavaScript properties.
31         
32         SunSpider says 4% faster. Tests heavy on dictionary-like access have
33         regressed a bit -- we have a lot of room to improve in this area,
34         but this patch is over-ripe as-is.
35         
36         JSCells now have a StructureID that uniquely identifies their layout,
37         and holds their prototype.
38         
39         JSValue::put takes a PropertySlot& argument, so it can fill in details
40         about where it put a value, for the sake of caching.
41
42         * VM/CodeGenerator.cpp:
43         (KJS::CodeGenerator::CodeGenerator): Avoid calling removeDirect if we
44         can, since it disables inline caching in the global object. This can
45         probably improve in the future.
46
47         * kjs/JSGlobalObject.cpp: Nixed reset(), since it complicates caching, and
48         wasn't really necessary.
49
50         * kjs/JSObject.cpp: Tweaked getter / setter behavior not to rely on the
51         IsGetterSetter flag, since the flag was buggy. This is necessary in order
52         to avoid accidentally accessing a getter / setter as a normal property.
53         
54         Also changed getter / setter creation to honor ReadOnly, matching Mozilla.
55         
56         * kjs/PropertyMap.cpp: Nixed clear(), since it complicates caching and
57         isn't necessary.
58
59         * kjs/Shell.cpp: Moved SamplingTool dumping outside the loop. This allows
60         you to aggregate sampling of multiple files (or the same file repeatedly),
61         which helped me track down regressions.
62
63         * kjs/ustring.h: Moved IdentifierRepHash here to share it.
64
65 2008-09-01  Geoffrey Garen  <ggaren@apple.com>
66
67         Reviewed by Sam Weinig.
68
69         Eagerly allocate the Math object's numeric constants. This avoids
70         constantly reallocating them in loops, and also ensures that the Math
71         object will not use the single property optimization, which makes
72         properties ineligible for caching.
73
74         SunSpider reports a small speedup, in combination with inline caching.
75
76         * kjs/MathObject.cpp:
77         (KJS::MathObject::MathObject):
78         (KJS::MathObject::getOwnPropertySlot):
79         * kjs/MathObject.h:
80
81 2008-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>
82
83         Gtk build fix, not reviewed.
84
85         * GNUmakefile.am: Add SmallStrings.cpp in both release and debug builds
86
87 2008-08-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
88
89         Reviewed by Maciej Stachowiak.
90
91         Bug 20577: REGRESSION (r36006): Gmail is broken
92         <https://bugs.webkit.org/show_bug.cgi?id=20577>
93
94         r36006 changed stringProtoFuncSubstr() so that it is uses the more
95         efficient jsSubstring(), rather than using UString::substr() and then
96         calling jsString(). However, the change did not account for the case
97         where the start and the length of the substring extend beyond the length
98         of the original string. This patch corrects that.
99
100         * kjs/StringPrototype.cpp:
101         (KJS::stringProtoFuncSubstr):
102
103 2008-08-31  Simon Hausmann  <hausmann@wekit.org>
104
105         Unreviewed build fix (with gcc 4.3)
106
107         * kjs/ustring.h: Properly forward declare operator== for UString and
108         the the concatenate functions inside the KJS namespace.
109
110 2008-08-30  Darin Adler  <darin@apple.com>
111
112         Reviewed by Maciej.
113
114         - https://bugs.webkit.org/show_bug.cgi?id=20333
115           improve JavaScript speed when handling single-character strings
116
117         1.035x as fast on SunSpider overall.
118         1.127x as fast on SunSpider string tests.
119         1.910x as fast on SunSpider string-base64 test.
120
121         * API/JSObjectRef.cpp:
122         (JSObjectMakeFunction): Removed unneeded explicit construction of UString.
123
124         * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp.
125         * JavaScriptCore.pri: Ditto.
126         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
127         Ditto.
128         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
129         * JavaScriptCoreSources.bkl: Ditto.
130
131         * JavaScriptCore.exp: Updated.
132
133         * VM/Machine.cpp:
134         (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve
135         a UString constructor. This avoids an extra jump caused by the "in charge"
136         vs. "not in charge" constructors.
137         (KJS::jsAdd): Ditto.
138         (KJS::jsTypeStringForValue): Adopted jsNontrivialString.
139
140         * kjs/ArrayPrototype.cpp:
141         (KJS::arrayProtoFuncToString): Adopted jsEmptyString.
142         (KJS::arrayProtoFuncToLocaleString): Ditto.
143         (KJS::arrayProtoFuncJoin): Ditto.
144         * kjs/BooleanPrototype.cpp:
145         (KJS::booleanProtoFuncToString): Adopted jsNontrivialString.
146         * kjs/DateConstructor.cpp:
147         (KJS::callDate): Ditto.
148         * kjs/DatePrototype.cpp:
149         (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString.
150         (KJS::dateProtoFuncToString): Ditto.
151         (KJS::dateProtoFuncToUTCString): Ditto.
152         (KJS::dateProtoFuncToDateString): Ditto.
153         (KJS::dateProtoFuncToTimeString): Ditto.
154         (KJS::dateProtoFuncToLocaleString): Ditto.
155         (KJS::dateProtoFuncToLocaleDateString): Ditto.
156         (KJS::dateProtoFuncToLocaleTimeString): Ditto.
157         (KJS::dateProtoFuncToGMTString): Ditto.
158
159         * kjs/ErrorPrototype.cpp:
160         (KJS::ErrorPrototype::ErrorPrototype): Ditto.
161         (KJS::errorProtoFuncToString): Ditto.
162
163         * kjs/JSGlobalData.h: Added SmallStrings.
164
165         * kjs/JSString.cpp:
166         (KJS::jsString): Eliminated the overload that takes a const char*.
167         Added code to use SmallStrings to get strings of small sizes rather
168         than creating a new JSString every time.
169         (KJS::jsSubstring): Added. Used when creating a string from a substring
170         to avoid creating a JSString in cases where the substring will end up
171         empty or as one character.
172         (KJS::jsOwnedString): Added the same code as in jsString.
173
174         * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString,
175         jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various
176         cases where we want to create JSString, and want special handling for small
177         strings.
178         (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of
179         a UString::Rep so you don't have to construct a UString; PassRefPtr can be
180         more efficient.
181         (KJS::jsEmptyString): Added.
182         (KJS::jsSingleCharacterString): Added.
183         (KJS::jsSingleCharacterSubstring): Added.
184         (KJS::jsNontrivialString): Added.
185         (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring.
186         (KJS::JSString::getStringPropertySlot): Ditto.
187
188         * kjs/NumberPrototype.cpp:
189         (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString.
190         (KJS::numberProtoFuncToExponential): Ditto.
191         (KJS::numberProtoFuncToPrecision): Ditto.
192
193         * kjs/ObjectPrototype.cpp:
194         (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString.
195         (KJS::objectProtoFuncToString): Adopted jsNontrivialString.
196
197         * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used
198         with the lastOvector to return matches from the input value that can be
199         changed via JavaScript. They will be equal in many cases, but not all.
200         (KJS::RegExpConstructor::performMatch): Set input.
201         (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto.
202         (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also,
203         use input rather than lastInput in the appropriate place.
204         (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString.
205         Added code to handle the case where there is no backref -- before this
206         depended on range checking in UString::substr which is not present in
207         jsSubstring.
208         (KJS::RegExpConstructor::getLastParen): Ditto.
209         (KJS::RegExpConstructor::getLeftContext): Ditto.
210         (KJS::RegExpConstructor::getRightContext): Ditto.
211         (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput.
212         Also adopt jsEmptyString.
213         (KJS::RegExpConstructor::putValueProperty): Ditto.
214         (KJS::RegExpConstructor::input): Ditto.
215
216         * kjs/RegExpPrototype.cpp:
217         (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to
218         use UString::append to append single characters rather than using += and
219         a C-style string.
220
221         * kjs/SmallStrings.cpp: Added.
222         (KJS::SmallStringsStorage::SmallStringsStorage): Construct the
223         buffer and UString::Rep for all 256 single-character strings for
224         the U+0000 through U+00FF. This covers all the values used in
225         the base64 test as well as most values seen elsewhere on the web
226         as well. It's possible that later we might fix this to only work
227         for U+0000 through U+007F but the others are used quite a bit in
228         the current version of the base64 test.
229         (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory.
230         (KJS::SmallStrings::SmallStrings): Create a set of small strings,
231         initially not created; created later when they are used.
232         (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler
233         generated because the SmallStringsStorage class's destructor needs
234         to be visible.
235         (KJS::SmallStrings::mark): Mark all the strings.
236         (KJS::SmallStrings::createEmptyString): Create a cell for the
237         empty string. Called only the first time.
238         (KJS::SmallStrings::createSingleCharacterString): Create a cell
239         for one of the single-character strings. Called only the first time.
240         * kjs/SmallStrings.h: Added.
241
242         * kjs/StringConstructor.cpp:
243         (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode.
244         Only used for cases where the caller does not pass exactly one argument.
245         (KJS::stringFromCharCode): Adopted jsSingleCharacterString.
246         (KJS::callStringConstructor): Adopted jsEmptyString.
247
248         * kjs/StringObject.cpp:
249         (KJS::StringObject::StringObject): Adopted jsEmptyString.
250
251         * kjs/StringPrototype.cpp:
252         (KJS::stringProtoFuncReplace): Adopted jsSubstring.
253         (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and
254         jsSingleCharacterSubstring and also added a special case when the
255         index is an immediate number to avoid conversion to and from floating
256         point, since that's the common case.
257         (KJS::stringProtoFuncCharCodeAt): Ditto.
258         (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString.
259         (KJS::stringProtoFuncSlice): Adopted jsSubstring and
260         jsSingleCharacterSubstring. Also got rid of some unneeded locals and
261         removed unneeded code to set the length property of the array, since it
262         is automatically updated as values are added to the array.
263         (KJS::stringProtoFuncSplit): Adopted jsEmptyString.
264         (KJS::stringProtoFuncSubstr): Adopted jsSubstring.
265         (KJS::stringProtoFuncSubstring): Ditto.
266
267         * kjs/collector.cpp:
268         (KJS::Heap::collect): Added a call to mark SmallStrings.
269
270         * kjs/ustring.cpp:
271         (KJS::UString::expandedSize): Made this a static member function since
272         it doesn't need to look at any data members.
273         (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to
274         set the rep to null in failure cases. This avoids adding a PIC branch for
275         the normal case when there is no failure.
276         (KJS::UString::expandPreCapacity): Ditto.
277         (KJS::UString::UString): Ditto.
278         (KJS::concatenate): Refactored the concatenation constructor into this
279         separate function. Calling the concatenation constructor was leading to
280         an extra branch because of the in-charge vs. not-in-charge versions not
281         both being inlined, and this was showing up as nearly 1% on Shark. Also
282         added a special case for when the second string is a single character,
283         since it's a common idiom to build up a string that way and we can do
284         things much more quickly, without involving memcpy for example. Also
285         adopted the non-inline function, nullRep, for the same reason given for
286         makeNull above.
287         (KJS::UString::append): Adopted makeNull for failure cases.
288         (KJS::UString::operator=): Ditto.
289         (KJS::UString::toDouble): Added a special case for converting single
290         character strings to numbers. We're doing this a ton of times while
291         running the base64 test.
292         (KJS::operator==): Added special cases so we can compare single-character
293         strings without calling memcmp. Later we might want to special case other
294         short lengths similarly.
295         (KJS::UString::makeNull): Added.
296         (KJS::UString::nullRep): Added.
297         * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed
298         expandedSize to be a static member function. Added a declaration of the
299         concatenate function. Removed the concatenation constructor. Rewrote
300         operator+ to use the concatenate function.
301
302 2008-08-29  Anders Carlsson  <andersca@apple.com>
303
304         Build fix.
305
306         * VM/Machine.cpp:
307         (KJS::getCPUTime):
308
309 2008-08-29  Anders Carlsson  <andersca@apple.com>
310
311         Reviewed by Darin.
312
313         <rdar://problem/6174667> 
314         When a machine is under heavy load, the Slow Script dialog often comes up many times and just gets in the way
315         
316         Instead of using clock time, use the CPU time spent executing the current thread when
317         determining if the script has been running for too long.
318         
319         * VM/Machine.cpp:
320         (KJS::getCPUTime):
321         (KJS::Machine::checkTimeout):
322
323 2008-08-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
324
325         Rubber-stamped by Sam Weinig.
326
327         Change 'term' to 'expr' in variable names to standardize terminology.
328
329         * kjs/nodes.cpp:
330         (KJS::BinaryOpNode::emitCode):
331         (KJS::ReverseBinaryOpNode::emitCode):
332         (KJS::ThrowableBinaryOpNode::emitCode):
333         * kjs/nodes.h:
334         (KJS::BinaryOpNode::BinaryOpNode):
335         (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
336         (KJS::MultNode::):
337         (KJS::DivNode::):
338         (KJS::ModNode::):
339         (KJS::AddNode::):
340         (KJS::SubNode::):
341         (KJS::LeftShiftNode::):
342         (KJS::RightShiftNode::):
343         (KJS::UnsignedRightShiftNode::):
344         (KJS::LessNode::):
345         (KJS::GreaterNode::):
346         (KJS::LessEqNode::):
347         (KJS::GreaterEqNode::):
348         (KJS::ThrowableBinaryOpNode::):
349         (KJS::InstanceOfNode::):
350         (KJS::InNode::):
351         (KJS::EqualNode::):
352         (KJS::NotEqualNode::):
353         (KJS::StrictEqualNode::):
354         (KJS::NotStrictEqualNode::):
355         (KJS::BitAndNode::):
356         (KJS::BitOrNode::):
357         (KJS::BitXOrNode::):
358         * kjs/nodes2string.cpp:
359         (KJS::MultNode::streamTo):
360         (KJS::DivNode::streamTo):
361         (KJS::ModNode::streamTo):
362         (KJS::AddNode::streamTo):
363         (KJS::SubNode::streamTo):
364         (KJS::LeftShiftNode::streamTo):
365         (KJS::RightShiftNode::streamTo):
366         (KJS::UnsignedRightShiftNode::streamTo):
367         (KJS::LessNode::streamTo):
368         (KJS::GreaterNode::streamTo):
369         (KJS::LessEqNode::streamTo):
370         (KJS::GreaterEqNode::streamTo):
371         (KJS::InstanceOfNode::streamTo):
372         (KJS::InNode::streamTo):
373         (KJS::EqualNode::streamTo):
374         (KJS::NotEqualNode::streamTo):
375         (KJS::StrictEqualNode::streamTo):
376         (KJS::NotStrictEqualNode::streamTo):
377         (KJS::BitAndNode::streamTo):
378         (KJS::BitXOrNode::streamTo):
379         (KJS::BitOrNode::streamTo):
380
381 2008-08-28  Alp Toker  <alp@nuanti.com>
382
383         GTK+ dist/build fix. List newly added header files.
384
385         * GNUmakefile.am:
386
387 2008-08-28  Sam Weinig  <sam@webkit.org>
388
389         Reviewed by Oliver Hunt.
390
391         Change to throw a ReferenceError at runtime instead of a ParseError
392         at parse time, when the left hand side expression of a for-in statement
393         is not an lvalue.
394
395         * kjs/grammar.y:
396         * kjs/nodes.cpp:
397         (KJS::ForInNode::emitCode):
398
399 2008-08-28  Alexey Proskuryakov  <ap@webkit.org>
400
401         Not reviewed, build fix (at least for OpenBSD, posssibly more).
402
403         https://bugs.webkit.org/show_bug.cgi?id=20545
404         missing #include <unistd.h> in JavaScriptCore/VM/SamplingTool.cpp
405
406         * VM/SamplingTool.cpp: add the missing include.
407
408 2008-08-26  Kevin McCullough  <kmccullough@apple.com>
409
410         Reviewed by Geoff and Cameron.
411
412         <rdar://problem/6174603> Hitting assertion in Register::codeBlock when
413         loading facebook (20516).
414
415         - This was a result of my line numbers change.  After a host function is
416         called the stack does not get reset correctly.
417         - Oddly this also appears to be a slight speedup on SunSpider.
418
419         * VM/Machine.cpp:
420         (KJS::Machine::privateExecute):
421
422 2008-08-26  Alexey Proskuryakov  <ap@webkit.org>
423
424         Reviewed by Geoff and Tim.
425
426         Export new API methods.
427
428         * JavaScriptCore.exp:
429
430 2008-08-25  Kevin McCullough  <kmccullough@apple.com>
431
432         Reviewed by Geoff, Tim and Mark.
433
434         <rdar://problem/6150623> JSProfiler: It would be nice if the profiles
435         in the console said what file and line number they came from
436         - Lay the foundation for getting line numbers and other data from the
437         JavaScript engine.  With the cleanup in kjs/ExecState this is actually
438         a slight performance improvement.
439
440         * JavaScriptCore.exp: Export retrieveLastCaller() for WebCore.
441         * JavaScriptCore.xcodeproj/project.pbxproj:
442         * VM/Machine.cpp: Now Host and JS functions set a call frame on the
443         exec state, so this and the profiler code were pulled out of the
444         branches.
445         (KJS::Machine::privateExecute):
446         (KJS::Machine::retrieveLastCaller): This get's the lineNumber, sourceID
447         and sourceURL for the previously called function.
448         * VM/Machine.h:
449         * kjs/ExecState.cpp: Remove references to JSFunction since it's not used
450         anywhere.
451         * kjs/ExecState.h:
452
453 2008-08-25  Alexey Proskuryakov  <ap@webkit.org>
454
455         Reviewed by Darin.
456
457         Ensure that JSGlobalContextRelease() performs garbage collection, even if there are other
458         contexts in the current context's group.
459
460         This is only really necessary when the last reference is released, but there is no way to
461         determine that, and no harm in collecting slightly more often.
462
463         * API/JSContextRef.cpp: (JSGlobalContextRelease): Explicitly collect the heap if it is not
464         being destroyed.
465
466 2008-08-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
467
468         Reviewed by Oliver Hunt.
469
470         Bug 20093: JSC shell does not clear exceptions after it executes toString on an expression
471         <https://bugs.webkit.org/show_bug.cgi?id=20093>
472
473         Clear exceptions after evaluating any code in the JSC shell. We do not
474         report exceptions that are caused by calling toString on the final
475         valued, but at least we avoid incorrect behaviour.
476
477         Also, print any exceptions that occurred while evaluating code at the
478         interactive prompt, not just while evaluating code from a file.
479
480         * kjs/Shell.cpp:
481         (runWithScripts):
482         (runInteractive):
483
484 2008-08-24  Mark Rowe  <mrowe@apple.com>
485
486         Reviewed by Oliver Hunt.
487
488         Use the correct version number for when JSGlobalContextCreate was introduced.
489
490         * API/JSContextRef.h:
491
492 2008-08-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
493
494         Rubber-stamped by Mark Rowe.
495
496         Remove modelines.
497
498         * API/APICast.h:
499         * API/JSBase.cpp:
500         * API/JSCallbackConstructor.cpp:
501         * API/JSCallbackConstructor.h:
502         * API/JSCallbackFunction.cpp:
503         * API/JSCallbackFunction.h:
504         * API/JSCallbackObject.cpp:
505         * API/JSCallbackObject.h:
506         * API/JSCallbackObjectFunctions.h:
507         * API/JSClassRef.cpp:
508         * API/JSContextRef.cpp:
509         * API/JSObjectRef.cpp:
510         * API/JSProfilerPrivate.cpp:
511         * API/JSStringRef.cpp:
512         * API/JSStringRefBSTR.cpp:
513         * API/JSStringRefCF.cpp:
514         * API/JSValueRef.cpp:
515         * API/tests/JSNode.c:
516         * API/tests/JSNode.h:
517         * API/tests/JSNodeList.c:
518         * API/tests/JSNodeList.h:
519         * API/tests/Node.c:
520         * API/tests/Node.h:
521         * API/tests/NodeList.c:
522         * API/tests/NodeList.h:
523         * API/tests/minidom.c:
524         * API/tests/minidom.js:
525         * API/tests/testapi.c:
526         * API/tests/testapi.js:
527         * JavaScriptCore.pro:
528         * kjs/FunctionConstructor.h:
529         * kjs/FunctionPrototype.h:
530         * kjs/JSArray.h:
531         * kjs/JSString.h:
532         * kjs/JSWrapperObject.cpp:
533         * kjs/NumberConstructor.h:
534         * kjs/NumberObject.h:
535         * kjs/NumberPrototype.h:
536         * kjs/lexer.h:
537         * kjs/lookup.h:
538         * wtf/Assertions.cpp:
539         * wtf/Assertions.h:
540         * wtf/HashCountedSet.h:
541         * wtf/HashFunctions.h:
542         * wtf/HashIterators.h:
543         * wtf/HashMap.h:
544         * wtf/HashSet.h:
545         * wtf/HashTable.h:
546         * wtf/HashTraits.h:
547         * wtf/ListHashSet.h:
548         * wtf/ListRefPtr.h:
549         * wtf/Noncopyable.h:
550         * wtf/OwnArrayPtr.h:
551         * wtf/OwnPtr.h:
552         * wtf/PassRefPtr.h:
553         * wtf/Platform.h:
554         * wtf/RefPtr.h:
555         * wtf/RefPtrHashMap.h:
556         * wtf/RetainPtr.h:
557         * wtf/UnusedParam.h:
558         * wtf/Vector.h:
559         * wtf/VectorTraits.h:
560         * wtf/unicode/Unicode.h:
561         * wtf/unicode/icu/UnicodeIcu.h:
562
563 2008-08-22  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
564
565         Reviewed by Oliver.
566
567         Some cleanup to match our coding style.
568
569         * VM/CodeGenerator.h:
570         * VM/Machine.cpp:
571         (KJS::Machine::privateExecute):
572         * kjs/ExecState.cpp:
573         * kjs/ExecState.h:
574         * kjs/completion.h:
575         * kjs/identifier.cpp:
576         (KJS::Identifier::equal):
577         (KJS::CStringTranslator::hash):
578         (KJS::CStringTranslator::equal):
579         (KJS::CStringTranslator::translate):
580         (KJS::UCharBufferTranslator::equal):
581         (KJS::UCharBufferTranslator::translate):
582         (KJS::Identifier::remove):
583         * kjs/operations.h:
584
585 2008-08-20  Alexey Proskuryakov  <ap@webkit.org>
586
587         Windows build fix.
588
589         * API/WebKitAvailability.h: Define DEPRECATED_ATTRIBUTE.
590
591 2008-08-19  Alexey Proskuryakov  <ap@webkit.org>
592
593         Reviewed by Geoff Garen.
594
595         Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.
596
597         * kjs/JSGlobalData.cpp:
598         (KJS::JSGlobalData::~JSGlobalData):
599         (KJS::JSGlobalData::JSGlobalData): Re-add shared instance.
600         (KJS::JSGlobalData::sharedInstanceExists): Ditto.
601         (KJS::JSGlobalData::sharedInstance): Ditto.
602         (KJS::JSGlobalData::sharedInstanceInternal): Ditto.
603
604         * API/JSContextRef.h: Deprecated JSGlobalContextCreate(). Added a very conservative
605         description of its threading model (nothing is allowed).
606
607         * API/JSContextRef.cpp:
608         (JSGlobalContextCreate): Use shared JSGlobalData.
609         (JSGlobalContextCreateInGroup): Support passing NULL group to request a unique one.
610         (JSGlobalContextRetain): Added back locking.
611         (JSGlobalContextRelease): Ditto.
612         (JSContextGetGlobalObject): Ditto.
613
614         * API/tests/minidom.c: (main):
615         * API/tests/testapi.c: (main):
616         Switched to JSGlobalContextCreateInGroup() to avoid deprecation warnings.
617
618         * JavaScriptCore.exp: Re-added JSLock methods. Added JSGlobalContextCreateInGroup (d'oh!).
619
620         * API/JSBase.cpp:
621         (JSEvaluateScript):
622         (JSCheckScriptSyntax):
623         (JSGarbageCollect):
624         * API/JSCallbackConstructor.cpp:
625         (KJS::constructJSCallback):
626         * API/JSCallbackFunction.cpp:
627         (KJS::JSCallbackFunction::call):
628         * API/JSCallbackObjectFunctions.h:
629         (KJS::::init):
630         (KJS::::getOwnPropertySlot):
631         (KJS::::put):
632         (KJS::::deleteProperty):
633         (KJS::::construct):
634         (KJS::::hasInstance):
635         (KJS::::call):
636         (KJS::::getPropertyNames):
637         (KJS::::toNumber):
638         (KJS::::toString):
639         (KJS::::staticValueGetter):
640         (KJS::::callbackGetter):
641         * API/JSObjectRef.cpp:
642         (JSObjectMake):
643         (JSObjectMakeFunctionWithCallback):
644         (JSObjectMakeConstructor):
645         (JSObjectMakeFunction):
646         (JSObjectHasProperty):
647         (JSObjectGetProperty):
648         (JSObjectSetProperty):
649         (JSObjectGetPropertyAtIndex):
650         (JSObjectSetPropertyAtIndex):
651         (JSObjectDeleteProperty):
652         (JSObjectCallAsFunction):
653         (JSObjectCallAsConstructor):
654         (JSObjectCopyPropertyNames):
655         (JSPropertyNameArrayRelease):
656         (JSPropertyNameAccumulatorAddName):
657         * API/JSValueRef.cpp:
658         (JSValueIsEqual):
659         (JSValueIsInstanceOfConstructor):
660         (JSValueMakeNumber):
661         (JSValueMakeString):
662         (JSValueToNumber):
663         (JSValueToStringCopy):
664         (JSValueToObject):
665         (JSValueProtect):
666         (JSValueUnprotect):
667         * ForwardingHeaders/JavaScriptCore/JSLock.h: Added.
668         * GNUmakefile.am:
669         * JavaScriptCore.pri:
670         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
671         * JavaScriptCore.xcodeproj/project.pbxproj:
672         * JavaScriptCoreSources.bkl:
673         * kjs/AllInOneFile.cpp:
674         * kjs/JSGlobalData.h:
675         * kjs/JSGlobalObject.cpp:
676         (KJS::JSGlobalObject::~JSGlobalObject):
677         (KJS::JSGlobalObject::init):
678         * kjs/JSLock.cpp: Added.
679         (KJS::createJSLockCount):
680         (KJS::JSLock::lockCount):
681         (KJS::setLockCount):
682         (KJS::JSLock::JSLock):
683         (KJS::JSLock::lock):
684         (KJS::JSLock::unlock):
685         (KJS::JSLock::currentThreadIsHoldingLock):
686         (KJS::JSLock::DropAllLocks::DropAllLocks):
687         (KJS::JSLock::DropAllLocks::~DropAllLocks):
688         * kjs/JSLock.h: Added.
689         (KJS::JSLock::JSLock):
690         (KJS::JSLock::~JSLock):
691         * kjs/Shell.cpp:
692         (functionGC):
693         (jscmain):
694         * kjs/collector.cpp:
695         (KJS::Heap::~Heap):
696         (KJS::Heap::heapAllocate):
697         (KJS::Heap::setGCProtectNeedsLocking):
698         (KJS::Heap::protect):
699         (KJS::Heap::unprotect):
700         (KJS::Heap::collect):
701         * kjs/identifier.cpp:
702         * kjs/interpreter.cpp:
703         (KJS::Interpreter::checkSyntax):
704         (KJS::Interpreter::evaluate):
705         Re-added implicit locking.
706
707 2008-08-19  Kevin McCullough  <kmccullough@apple.com>
708
709         Reviewed by Tim and Mark.
710
711         Implement DTrace hooks for dashcode and instruments.
712
713         * API/JSProfilerPrivate.cpp: Added. Expose SPI so that profiling can be
714         turned on from a client.  The DTrace probes were added within the
715         profiler mechanism for performance reasons so the profiler must be
716         started to enable tracing.
717         (JSStartProfiling):
718         (JSEndProfiling):
719         * API/JSProfilerPrivate.h: Added. Ditto.
720         * JavaScriptCore.exp: Exposing the start/stop methods to clients.
721         * JavaScriptCore.xcodeproj/project.pbxproj:
722         * kjs/Tracing.d: Define the DTrace probes.
723         * kjs/Tracing.h: Ditto.
724         * profiler/ProfileGenerator.cpp: Implement the DTrace probes in the
725         profiler.
726         (KJS::ProfileGenerator::willExecute):
727         (KJS::ProfileGenerator::didExecute):
728
729 2008-08-19  Steve Falkenburg  <sfalken@apple.com>
730
731         Build fix.
732         
733         * kjs/operations.cpp:
734         (KJS::equal):
735
736 2008-08-18  Timothy Hatcher  <timothy@apple.com>
737
738         Fix an assertion when generating a heavy profile because the
739         empty value and deleted value of CallIdentifier where equal.
740
741         https://bugs.webkit.org/show_bug.cgi?id=20439
742
743         Reviewed by Dan Bernstein.
744
745         * profiler/CallIdentifier.h: Make the emptyValue for CallIdentifier
746         use empty strings for URL and function name.
747
748 2008-08-12  Darin Adler  <darin@apple.com>
749
750         Reviewed by Geoff.
751
752         - eliminate JSValue::type()
753
754         This will make it slightly easier to change the JSImmediate design without
755         having to touch so many call sites.
756
757         SunSpider says this change is a wash (looked like a slight speedup, but not
758         statistically significant).
759
760         * API/JSStringRef.cpp: Removed include of JSType.h.
761         * API/JSValueRef.cpp: Removed include of JSType.h.
762         (JSValueGetType): Replaced use of JSValue::type() with
763         JSValue::is functions.
764
765         * JavaScriptCore.exp: Updated.
766
767         * VM/JSPropertyNameIterator.cpp: Removed type() implementation.
768         (KJS::JSPropertyNameIterator::toPrimitive): Changed to take
769         PreferredPrimitiveType argument instead of JSType.
770         * VM/JSPropertyNameIterator.h: Ditto.
771
772         * VM/Machine.cpp:
773         (KJS::fastIsNumber): Updated for name change.
774         (KJS::fastToInt32): Ditto.
775         (KJS::fastToUInt32): Ditto.
776         (KJS::jsAddSlowCase): Updated toPrimitive caller for change from
777         JSType to PreferredPrimitiveType.
778         (KJS::jsAdd): Replaced calls to JSValue::type() with calls to
779         JSValue::isString().
780         (KJS::jsTypeStringForValue): Replaced calls to JSValue::type()
781         with multiple calls to JSValue::is -- we could make this a
782         virtual function instead if we want to have faster performance.
783         (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32
784         to JSImmediate::getTruncatedUInt32 for consistency with other functions.
785         Changed two calls of JSValue::type() to JSValue::isString().
786
787         * kjs/GetterSetter.cpp:
788         (KJS::GetterSetter::toPrimitive): Changed to take
789         PreferredPrimitiveType argument instead of JSType.
790         (KJS::GetterSetter::isGetterSetter): Added.
791         * kjs/GetterSetter.h:
792
793         * kjs/JSCell.cpp:
794         (KJS::JSCell::isString): Added.
795         (KJS::JSCell::isGetterSetter): Added.
796         (KJS::JSCell::isObject): Added.
797
798         * kjs/JSCell.h: Eliminated type function. Added isGetterSetter.
799         Made isString and isObject virtual. Changed toPrimitive to take
800         PreferredPrimitiveType argument instead of JSType.
801         (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance.
802         (KJS::JSValue::isGetterSetter): Added.
803         (KJS::JSValue::toPrimitive): Changed to take
804         PreferredPrimitiveType argument instead of JSType.
805
806         * kjs/JSImmediate.h: Removed JSValue::type() and replaced
807         JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32.
808         (KJS::JSImmediate::isEitherImmediate): Added.
809
810         * kjs/JSNotAnObject.cpp:
811         (KJS::JSNotAnObject::toPrimitive): Changed to take
812         PreferredPrimitiveType argument instead of JSType.
813         * kjs/JSNotAnObject.h: Ditto.
814         * kjs/JSNumberCell.cpp:
815         (KJS::JSNumberCell::toPrimitive): Ditto.
816         * kjs/JSNumberCell.h:
817         (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no
818         other "slow" version of this once you have a JSNumberCell, so there's
819         no need for "fast" in the name. It's a feature that this hides the
820         base class toInt32, which does the same job less efficiently (and has
821         an additional ExecState argument).
822         (KJS::JSNumberCell::toUInt32): Ditto.
823
824         * kjs/JSObject.cpp:
825         (KJS::callDefaultValueFunction): Use isGetterSetter instead of type.
826         (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType.
827         (KJS::JSObject::defaultValue): Ditto.
828         (KJS::JSObject::defineGetter): Use isGetterSetter.
829         (KJS::JSObject::defineSetter): Ditto.
830         (KJS::JSObject::lookupGetter): Ditto.
831         (KJS::JSObject::lookupSetter): Ditto.
832         (KJS::JSObject::toNumber): Use PreferredPrimitiveType.
833         (KJS::JSObject::toString): Ditto.
834         (KJS::JSObject::isObject): Added.
835
836         * kjs/JSObject.h:
837         (KJS::JSObject::inherits): Call the isObject from JSCell; it's now
838         hidden by our override of isObject.
839         (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter
840         instead of type.
841         (KJS::JSObject::getOwnPropertySlot): Ditto.
842         (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType.
843
844         * kjs/JSString.cpp:
845         (KJS::JSString::toPrimitive): Use PreferredPrimitiveType.
846         (KJS::JSString::isString): Added.
847         * kjs/JSString.h: Ditto.
848
849         * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added
850         PreferredPrimitiveType enum and used it as the argument for the
851         toPrimitive function.
852         (KJS::JSValue::getBoolean): Simplified a bit an removed a branch.
853
854         * kjs/collector.cpp:
855         (KJS::typeName): Changed to use JSCell::is functions instead of
856         calling JSCell::type.
857
858         * kjs/collector.h:
859         (KJS::Heap::isNumber): Renamed from fastIsNumber.
860
861         * kjs/nodes.h: Added now-needed include of JSType, since the type
862         is used here to record types of values in the tree.
863
864         * kjs/operations.cpp:
865         (KJS::equal): Rewrote to no longer depend on type().
866         (KJS::strictEqual): Ditto.
867
868 2008-08-18  Kevin McCullough  <kmccullough@apple.com>
869
870         Reviewed by Tim.
871
872         If there are no nodes in a profile all the time should be attributed to
873         (idle)
874
875         * profiler/Profile.cpp: If ther are no nodes make sure we still process
876         the head.
877         (KJS::Profile::forEach):
878         * profiler/ProfileGenerator.cpp: Remove some useless code.
879         (KJS::ProfileGenerator::stopProfiling):
880
881 2008-08-18  Alexey Proskuryakov  <ap@webkit.org>
882
883         Reviewed by Maciej.
884
885         Make JSGlobalContextRetain/Release actually work.
886
887         * API/JSContextRef.cpp:
888         (JSGlobalContextRetain):
889         (JSGlobalContextRelease):
890         Ref/deref global data to give checking for globalData.refCount() some sense.
891
892         * API/tests/testapi.c: (main): Added a test for this bug.
893
894         * kjs/JSGlobalData.cpp:
895         (KJS::JSGlobalData::~JSGlobalData):
896         While checking for memory leaks, found that JSGlobalData::emptyList has changed to
897         a pointer, but it was not destructed, causing a huge leak in run-webkit-tests --threaded.
898
899 2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
900
901         Reviewed by Maciej.
902
903         Change the counting of constants so that preincrement and predecrement of
904         const local variables are considered unexpected loads.
905
906         * kjs/nodes.cpp:
907         (KJS::PrefixResolveNode::emitCode):
908         * kjs/nodes.h:
909         (KJS::ScopeNode::neededConstants):
910
911 2008-08-17  Oliver Hunt  <oliver@apple.com>
912
913         Reviewed by Cameron Zwarich.
914
915         <rdar://problem/6150322> In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed
916         <https://bugs.webkit.org/show_bug.cgi?id=20386>
917
918         This crash was caused by "depth()" incorrectly determining the scope depth 
919         of a 0 depth function without a full scope chain.  Because such a function
920         would not have an activation the depth function would return the scope depth
921         of the parent frame, thus triggering an incorrect unwind.  Any subsequent 
922         look up that walked the scope chain would result in incorrect behaviour,
923         leading to a crash or incorrect variable resolution.  This can only actually
924         happen in try...finally statements as that's the only path that can result in
925         the need to unwind the scope chain, but not force the function to need a
926         full scope chain.
927
928         The fix is simply to check for this case before attempting to walk the scope chain.
929
930         * VM/Machine.cpp:
931         (KJS::depth):
932         (KJS::Machine::throwException):
933
934 2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
935
936         Reviewed by Maciej.
937
938         Bug 20419: Remove op_jless
939         <https://bugs.webkit.org/show_bug.cgi?id=20419>
940
941         Remove op_jless, which is rarely used now that we have op_loop_if_less.
942
943         * VM/CodeBlock.cpp:
944         (KJS::CodeBlock::dump):
945         * VM/CodeGenerator.cpp:
946         (KJS::CodeGenerator::emitJumpIfTrue):
947         * VM/Machine.cpp:
948         (KJS::Machine::privateExecute):
949         * VM/Opcode.h:
950
951 2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
952
953         Reviewed by Dan Bernstein.
954
955         Fix a typo in r35807 that is also causing build failures for
956         non-AllInOne builds.
957
958         * kjs/NumberConstructor.cpp:
959
960 2008-08-17  Geoffrey Garen  <ggaren@apple.com>
961
962         Reviewed by Cameron Zwarich.
963
964         Made room for a free word in JSCell.
965         
966         SunSpider says no change.
967         
968         I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to
969         store auxiliary data in a secondary structure.
970
971         I changed InternalFunction to store the function's name in the property
972         map.
973         
974         I changed JSGlobalObjectData to use a virtual destructor, so WebCore's
975         JSDOMWindowBaseData could inherit from it safely. (It's a strange design
976         for JSDOMWindowBase to allocate an object that JSGlobalObject deletes,
977         but that's really our only option, given the size constraint.)
978         
979         I also added a bunch of compile-time ASSERTs, and removed lots of comments
980         in JSObject.h because they were often out of date, and they got in the
981         way of reading what was actually going on.
982         
983         Also renamed JSArray::getLength to JSArray::length, to match our style
984         guidelines.
985
986 2008-08-16  Geoffrey Garen  <ggaren@apple.com>
987
988         Reviewed by Oliver Hunt.
989         
990         Sped up property access for array.length and string.length by adding a
991         mechanism for returning a temporary value directly instead of returning
992         a pointer to a function that retrieves the value.
993         
994         Also removed some unused cruft from PropertySlot.
995         
996         SunSpider says 0.5% - 1.2% faster.
997
998         NOTE: This optimization is not a good idea in general, because it's
999         actually a pessimization in the case of resolve for assignment,
1000         and it may get in the way of other optimizations in the future.
1001         
1002 2008-08-16  Dan Bernstein  <mitz@apple.com>
1003
1004         Reviewed by Geoffrey Garen.
1005
1006         Disable dead code stripping in debug builds.
1007
1008         * Configurations/Base.xcconfig:
1009         * JavaScriptCore.xcodeproj/project.pbxproj:
1010
1011 2008-08-15  Mark Rowe  <mrowe@apple.com>
1012
1013         Reviewed by Oliver Hunt.
1014
1015         <rdar://problem/6143072> FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap
1016
1017         * wtf/FastMalloc.cpp:
1018         (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with
1019         a pointer that has not been mapped.  Instead, calculate a local address for the pointer and compare with that.
1020         (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can
1021         be used when calculating local addresses.
1022         (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto.
1023
1024 2008-08-15  Mark Rowe  <mrowe@apple.com>
1025
1026         Rubber-stamped by Geoff Garen.
1027
1028         <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework
1029
1030         * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared
1031         between the Debug configuration and debug Production variant.
1032         * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant.
1033
1034 2008-08-15  Mark Rowe  <mrowe@apple.com>
1035
1036         Fix the 64-bit build.
1037
1038         Add extra cast to avoid warnings about loss of precision when casting from
1039         JSValue* to an integer type.
1040
1041         * kjs/JSImmediate.h:
1042         (KJS::JSImmediate::intValue):
1043         (KJS::JSImmediate::uintValue):
1044
1045 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
1046
1047         Still fixing Windows build.
1048
1049         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString
1050         to yet another place.
1051
1052 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
1053
1054         Trying to fix non-Apple builds.
1055
1056         * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added.
1057
1058 2008-08-15  Gavin Barraclough  <barraclough@apple.com>
1059
1060         Reviewed by Geoff Garen.
1061
1062         Allow JSImmediate to hold 31 bit signed integer immediate values.  The low two bits of a
1063         JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a
1064         JSCell.  Non-zero tag values used to indicate that the JSValue* is not a real pointer,
1065         but instead holds an immediate value encoded within the pointer.  This patch changes the
1066         encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing
1067         a 31 bit value to be stored.  All other immediates are tagged with the value 10, and
1068         distinguished by a secondary tag.
1069
1070         Roughly +2% on SunSpider.
1071
1072         * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for
1073                              descption of new layout.
1074
1075 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
1076
1077         More build fixes.
1078
1079         * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC.
1080         * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly.
1081         * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build.
1082
1083 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
1084
1085         Build fix.
1086
1087         * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private
1088
1089         * kjs/identifier.cpp:
1090         (KJS::Identifier::checkSameIdentifierTable):
1091         * kjs/identifier.h:
1092         (KJS::Identifier::add):
1093         Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be
1094         non-inline in release builds, too.
1095
1096         * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor.
1097
1098 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
1099
1100         Reviewed by Geoff Garen.
1101
1102         JSStringRef is created context-free, but can get linked to one via an identifier table,
1103         breaking an implicit API contract.
1104
1105         Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString.
1106
1107         * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a
1108         simple typecast.
1109
1110         * kjs/identifier.cpp:
1111         (KJS::Identifier::checkSameIdentifierTable):
1112         * kjs/identifier.h:
1113         (KJS::Identifier::add):
1114         (KJS::UString::checkSameIdentifierTable):
1115         Added assertions to verify that an identifier is not being added to a different JSGlobalData.
1116
1117         * API/JSObjectRef.cpp:
1118         (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to
1119         hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance
1120         in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast.
1121
1122         * API/OpaqueJSString.cpp: Added.
1123         (OpaqueJSString::create):
1124         (OpaqueJSString::ustring):
1125         (OpaqueJSString::identifier):
1126         * API/OpaqueJSString.h: Added.
1127         (OpaqueJSString::create):
1128         (OpaqueJSString::characters):
1129         (OpaqueJSString::length):
1130         (OpaqueJSString::OpaqueJSString):
1131         (OpaqueJSString::~OpaqueJSString):
1132
1133         * API/JSBase.cpp:
1134         (JSEvaluateScript):
1135         (JSCheckScriptSyntax):
1136         * API/JSCallbackObjectFunctions.h:
1137         (KJS::::getOwnPropertySlot):
1138         (KJS::::put):
1139         (KJS::::deleteProperty):
1140         (KJS::::staticValueGetter):
1141         (KJS::::callbackGetter):
1142         * API/JSStringRef.cpp:
1143         (JSStringCreateWithCharacters):
1144         (JSStringCreateWithUTF8CString):
1145         (JSStringRetain):
1146         (JSStringRelease):
1147         (JSStringGetLength):
1148         (JSStringGetCharactersPtr):
1149         (JSStringGetMaximumUTF8CStringSize):
1150         (JSStringGetUTF8CString):
1151         (JSStringIsEqual):
1152         * API/JSStringRefCF.cpp:
1153         (JSStringCreateWithCFString):
1154         (JSStringCopyCFString):
1155         * API/JSValueRef.cpp:
1156         (JSValueMakeString):
1157         (JSValueToStringCopy):
1158         Updated to use OpaqueJSString.
1159
1160         * GNUmakefile.am:
1161         * JavaScriptCore.exp:
1162         * JavaScriptCore.pri:
1163         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1164         * JavaScriptCore.xcodeproj/project.pbxproj:
1165         * JavaScriptCoreSources.bkl:
1166         Added OpaqueJSString.
1167
1168 2008-08-14  Kevin McCullough  <kmccullough@apple.com>
1169
1170         Reviewed by Tim.
1171
1172         <rdar://problem/6115819> Notify of profile in console
1173         - Profiles now have a unique ID so that they can be linked to the
1174         console message that announces that a profile completed.
1175
1176         * profiler/HeavyProfile.cpp: 
1177         (KJS::HeavyProfile::HeavyProfile):
1178         * profiler/Profile.cpp:
1179         (KJS::Profile::create):
1180         (KJS::Profile::Profile):
1181         * profiler/Profile.h:
1182         (KJS::Profile::uid):
1183         * profiler/ProfileGenerator.cpp:
1184         (KJS::ProfileGenerator::create):
1185         (KJS::ProfileGenerator::ProfileGenerator):
1186         * profiler/ProfileGenerator.h:
1187         * profiler/Profiler.cpp:
1188         (KJS::Profiler::startProfiling):
1189         * profiler/TreeProfile.cpp:
1190         (KJS::TreeProfile::create):
1191         (KJS::TreeProfile::TreeProfile):
1192         * profiler/TreeProfile.h:
1193
1194 2008-08-13  Geoffrey Garen  <ggaren@apple.com>
1195
1196         Reviewed by Oliver Hunt.
1197         
1198         Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing
1199         fillGetterProperty, which references a global function pointer,
1200         out-of-line.
1201         
1202         .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a
1203         custom property access benchmark for objects with one property.
1204
1205         * kjs/JSObject.cpp:
1206         (KJS::JSObject::fillGetterPropertySlot):
1207
1208 2008-08-13  Alp Toker  <alp@nuanti.com>
1209
1210         Reviewed by Eric Seidel.
1211
1212         https://bugs.webkit.org/show_bug.cgi?id=20349
1213         WTF::initializeThreading() fails if threading is already initialized
1214
1215         Fix threading initialization logic to support cases where
1216         g_thread_init() has already been called elsewhere.
1217
1218         Resolves database-related crashers reported in several applications.
1219
1220         * wtf/ThreadingGtk.cpp:
1221         (WTF::initializeThreading):
1222
1223 2008-08-13  Brad Hughes <bhughes@trolltech.com>
1224
1225         Reviewed by Simon.
1226
1227         Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux
1228
1229         The latest upgrade of the intel compiler allows us to compile all of
1230         Qt with optimizations enabled (yay!).
1231
1232         * JavaScriptCore.pro:
1233
1234 2008-08-12  Oliver Hunt  <oliver@apple.com>
1235
1236         Reviewed by Geoff Garen.
1237
1238         Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) )
1239
1240         This is a very slight win in sunspider, and a fairly substantial win
1241         in hot code that does if(!...), etc.
1242
1243         * VM/CodeGenerator.cpp:
1244         (KJS::CodeGenerator::retrieveLastUnaryOp):
1245         (KJS::CodeGenerator::rewindBinaryOp):
1246         (KJS::CodeGenerator::rewindUnaryOp):
1247         (KJS::CodeGenerator::emitJumpIfFalse):
1248         * VM/CodeGenerator.h:
1249
1250 2008-08-12  Dan Bernstein  <mitz@apple.com>
1251
1252         - JavaScriptCore part of <rdar://problem/6121636>
1253           Make fast*alloc() abort() on failure and add "try" variants that
1254           return NULL on failure.
1255
1256         Reviewed by Darin Adler.
1257
1258         * JavaScriptCore.exp: Exported tryFastCalloc().
1259         * VM/RegisterFile.h:
1260         (KJS::RegisterFile::RegisterFile): Removed an ASSERT().
1261         * kjs/JSArray.cpp:
1262         (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc().
1263         (KJS::JSArray::increaseVectorLength): Ditto.
1264         * kjs/ustring.cpp:
1265         (KJS::allocChars): Changed to use tryFastMalloc().
1266         (KJS::reallocChars): Changed to use tryFastRealloc().
1267         * wtf/FastMalloc.cpp:
1268         (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result
1269         and removed extra call to InvokeNewHook().
1270         (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc().
1271         (WTF::tryFastMalloc): Renamed fastMalloc() to this.
1272         (WTF::fastMalloc): Added. This version abort()s if allocation fails.
1273         (WTF::tryFastCalloc): Renamed fastCalloc() to this.
1274         (WTF::fastCalloc): Added. This version abort()s if allocation fails.
1275         (WTF::tryFastRealloc): Renamed fastRealloc() to this.
1276         (WTF::fastRealloc): Added. This version abort()s if allocation fails.
1277         (WTF::do_malloc): Made this a function template. When the abortOnFailure
1278         template parameter is set, the function abort()s on failure to allocate.
1279         Otherwise, it sets errno to ENOMEM and returns zero.
1280         (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure.
1281         (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on
1282         failure.
1283         (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure.
1284         (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on
1285         failure.
1286         (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure.
1287         (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on
1288         failure.
1289         * wtf/FastMalloc.h: Declared the "try" variants.
1290
1291 2008-08-11  Adam Roben  <aroben@apple.com>
1292
1293         Move WTF::notFound into its own header so that it can be used
1294         independently of Vector
1295
1296         Rubberstamped by Darin Adler.
1297
1298         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1299         * JavaScriptCore.xcodeproj/project.pbxproj:
1300         Added NotFound.h to the project.
1301         * wtf/NotFound.h: Added. Moved the notFound constant here...
1302         * wtf/Vector.h: ...from here.
1303
1304 2008-08-11  Alexey Proskuryakov  <ap@webkit.org>
1305
1306         Reviewed by Mark Rowe.
1307
1308         <rdar://problem/6130393> REGRESSION: PhotoBooth hangs after launching under TOT Webkit
1309
1310         * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment.
1311
1312         * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while
1313         sweeping the heap.
1314
1315 == Rolled over to ChangeLog-2008-08-10 ==