<rdar://problem/6150322> In Gmail, a crash occurs at KJS::Machine::privateExecute...
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-08-17  Oliver Hunt  <oliver@apple.com>
2
3         Reviewed by Cameron Zwarich.
4
5         <rdar://problem/6150322> In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed
6         <https://bugs.webkit.org/show_bug.cgi?id=20386>
7
8         This crash was caused by "depth()" incorrectly determining the scope depth 
9         of a 0 depth function without a full scope chain.  Because such a function
10         would not have an activation the depth function would return the scope depth
11         of the parent frame, thus triggering an incorrect unwind.  Any subsequent 
12         look up that walked the scope chain would result in incorrect behaviour,
13         leading to a crash or incorrect variable resolution.  This can only actually
14         happen in try...finally statements as that's the only path that can result in
15         the need to unwind the scope chain, but not force the function to need a
16         full scope chain.
17
18         The fix is simply to check for this case before attempting to walk the scope chain.
19
20         * VM/Machine.cpp:
21         (KJS::depth):
22         (KJS::Machine::throwException):
23
24 2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
25
26         Reviewed by Maciej.
27
28         Bug 20419: Remove op_jless
29         <https://bugs.webkit.org/show_bug.cgi?id=20419>
30
31         Remove op_jless, which is rarely used now that we have op_loop_if_less.
32
33         * VM/CodeBlock.cpp:
34         (KJS::CodeBlock::dump):
35         * VM/CodeGenerator.cpp:
36         (KJS::CodeGenerator::emitJumpIfTrue):
37         * VM/Machine.cpp:
38         (KJS::Machine::privateExecute):
39         * VM/Opcode.h:
40
41 2008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
42
43         Reviewed by Dan Bernstein.
44
45         Fix a typo in r35807 that is also causing build failures for
46         non-AllInOne builds.
47
48         * kjs/NumberConstructor.cpp:
49
50 2008-08-17  Geoffrey Garen  <ggaren@apple.com>
51
52         Reviewed by Cameron Zwarich.
53
54         Made room for a free word in JSCell.
55         
56         SunSpider says no change.
57         
58         I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to
59         store auxiliary data in a secondary structure.
60
61         I changed InternalFunction to store the function's name in the property
62         map.
63         
64         I changed JSGlobalObjectData to use a virtual destructor, so WebCore's
65         JSDOMWindowBaseData could inherit from it safely. (It's a strange design
66         for JSDOMWindowBase to allocate an object that JSGlobalObject deletes,
67         but that's really our only option, given the size constraint.)
68         
69         I also added a bunch of compile-time ASSERTs, and removed lots of comments
70         in JSObject.h because they were often out of date, and they got in the
71         way of reading what was actually going on.
72         
73         Also renamed JSArray::getLength to JSArray::length, to match our style
74         guidelines.
75
76 2008-08-16  Geoffrey Garen  <ggaren@apple.com>
77
78         Reviewed by Oliver Hunt.
79         
80         Sped up property access for array.length and string.length by adding a
81         mechanism for returning a temporary value directly instead of returning
82         a pointer to a function that retrieves the value.
83         
84         Also removed some unused cruft from PropertySlot.
85         
86         SunSpider says 0.5% - 1.2% faster.
87
88         NOTE: This optimization is not a good idea in general, because it's
89         actually a pessimization in the case of resolve for assignment,
90         and it may get in the way of other optimizations in the future.
91         
92 2008-08-16  Dan Bernstein  <mitz@apple.com>
93
94         Reviewed by Geoffrey Garen.
95
96         Disable dead code stripping in debug builds.
97
98         * Configurations/Base.xcconfig:
99         * JavaScriptCore.xcodeproj/project.pbxproj:
100
101 2008-08-15  Mark Rowe  <mrowe@apple.com>
102
103         Reviewed by Oliver Hunt.
104
105         <rdar://problem/6143072> FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap
106
107         * wtf/FastMalloc.cpp:
108         (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with
109         a pointer that has not been mapped.  Instead, calculate a local address for the pointer and compare with that.
110         (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can
111         be used when calculating local addresses.
112         (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto.
113
114 2008-08-15  Mark Rowe  <mrowe@apple.com>
115
116         Rubber-stamped by Geoff Garen.
117
118         <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework
119
120         * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared
121         between the Debug configuration and debug Production variant.
122         * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant.
123
124 2008-08-15  Mark Rowe  <mrowe@apple.com>
125
126         Fix the 64-bit build.
127
128         Add extra cast to avoid warnings about loss of precision when casting from
129         JSValue* to an integer type.
130
131         * kjs/JSImmediate.h:
132         (KJS::JSImmediate::intValue):
133         (KJS::JSImmediate::uintValue):
134
135 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
136
137         Still fixing Windows build.
138
139         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString
140         to yet another place.
141
142 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
143
144         Trying to fix non-Apple builds.
145
146         * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added.
147
148 2008-08-15  Gavin Barraclough  <barraclough@apple.com>
149
150         Reviewed by Geoff Garen.
151
152         Allow JSImmediate to hold 31 bit signed integer immediate values.  The low two bits of a
153         JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a
154         JSCell.  Non-zero tag values used to indicate that the JSValue* is not a real pointer,
155         but instead holds an immediate value encoded within the pointer.  This patch changes the
156         encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing
157         a 31 bit value to be stored.  All other immediates are tagged with the value 10, and
158         distinguished by a secondary tag.
159
160         Roughly +2% on SunSpider.
161
162         * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for
163                              descption of new layout.
164
165 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
166
167         More build fixes.
168
169         * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC.
170         * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly.
171         * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build.
172
173 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
174
175         Build fix.
176
177         * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private
178
179         * kjs/identifier.cpp:
180         (KJS::Identifier::checkSameIdentifierTable):
181         * kjs/identifier.h:
182         (KJS::Identifier::add):
183         Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be
184         non-inline in release builds, too.
185
186         * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor.
187
188 2008-08-15  Alexey Proskuryakov  <ap@webkit.org>
189
190         Reviewed by Geoff Garen.
191
192         JSStringRef is created context-free, but can get linked to one via an identifier table,
193         breaking an implicit API contract.
194
195         Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString.
196
197         * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a
198         simple typecast.
199
200         * kjs/identifier.cpp:
201         (KJS::Identifier::checkSameIdentifierTable):
202         * kjs/identifier.h:
203         (KJS::Identifier::add):
204         (KJS::UString::checkSameIdentifierTable):
205         Added assertions to verify that an identifier is not being added to a different JSGlobalData.
206
207         * API/JSObjectRef.cpp:
208         (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to
209         hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance
210         in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast.
211
212         * API/OpaqueJSString.cpp: Added.
213         (OpaqueJSString::create):
214         (OpaqueJSString::ustring):
215         (OpaqueJSString::identifier):
216         * API/OpaqueJSString.h: Added.
217         (OpaqueJSString::create):
218         (OpaqueJSString::characters):
219         (OpaqueJSString::length):
220         (OpaqueJSString::OpaqueJSString):
221         (OpaqueJSString::~OpaqueJSString):
222
223         * API/JSBase.cpp:
224         (JSEvaluateScript):
225         (JSCheckScriptSyntax):
226         * API/JSCallbackObjectFunctions.h:
227         (KJS::::getOwnPropertySlot):
228         (KJS::::put):
229         (KJS::::deleteProperty):
230         (KJS::::staticValueGetter):
231         (KJS::::callbackGetter):
232         * API/JSStringRef.cpp:
233         (JSStringCreateWithCharacters):
234         (JSStringCreateWithUTF8CString):
235         (JSStringRetain):
236         (JSStringRelease):
237         (JSStringGetLength):
238         (JSStringGetCharactersPtr):
239         (JSStringGetMaximumUTF8CStringSize):
240         (JSStringGetUTF8CString):
241         (JSStringIsEqual):
242         * API/JSStringRefCF.cpp:
243         (JSStringCreateWithCFString):
244         (JSStringCopyCFString):
245         * API/JSValueRef.cpp:
246         (JSValueMakeString):
247         (JSValueToStringCopy):
248         Updated to use OpaqueJSString.
249
250         * GNUmakefile.am:
251         * JavaScriptCore.exp:
252         * JavaScriptCore.pri:
253         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
254         * JavaScriptCore.xcodeproj/project.pbxproj:
255         * JavaScriptCoreSources.bkl:
256         Added OpaqueJSString.
257
258 2008-08-14  Kevin McCullough  <kmccullough@apple.com>
259
260         Reviewed by Tim.
261
262         <rdar://problem/6115819> Notify of profile in console
263         - Profiles now have a unique ID so that they can be linked to the
264         console message that announces that a profile completed.
265
266         * profiler/HeavyProfile.cpp: 
267         (KJS::HeavyProfile::HeavyProfile):
268         * profiler/Profile.cpp:
269         (KJS::Profile::create):
270         (KJS::Profile::Profile):
271         * profiler/Profile.h:
272         (KJS::Profile::uid):
273         * profiler/ProfileGenerator.cpp:
274         (KJS::ProfileGenerator::create):
275         (KJS::ProfileGenerator::ProfileGenerator):
276         * profiler/ProfileGenerator.h:
277         * profiler/Profiler.cpp:
278         (KJS::Profiler::startProfiling):
279         * profiler/TreeProfile.cpp:
280         (KJS::TreeProfile::create):
281         (KJS::TreeProfile::TreeProfile):
282         * profiler/TreeProfile.h:
283
284 2008-08-13  Geoffrey Garen  <ggaren@apple.com>
285
286         Reviewed by Oliver Hunt.
287         
288         Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing
289         fillGetterProperty, which references a global function pointer,
290         out-of-line.
291         
292         .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a
293         custom property access benchmark for objects with one property.
294
295         * kjs/JSObject.cpp:
296         (KJS::JSObject::fillGetterPropertySlot):
297
298 2008-08-13  Alp Toker  <alp@nuanti.com>
299
300         Reviewed by Eric Seidel.
301
302         https://bugs.webkit.org/show_bug.cgi?id=20349
303         WTF::initializeThreading() fails if threading is already initialized
304
305         Fix threading initialization logic to support cases where
306         g_thread_init() has already been called elsewhere.
307
308         Resolves database-related crashers reported in several applications.
309
310         * wtf/ThreadingGtk.cpp:
311         (WTF::initializeThreading):
312
313 2008-08-13  Brad Hughes <bhughes@trolltech.com>
314
315         Reviewed by Simon.
316
317         Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux
318
319         The latest upgrade of the intel compiler allows us to compile all of
320         Qt with optimizations enabled (yay!).
321
322         * JavaScriptCore.pro:
323
324 2008-08-12  Oliver Hunt  <oliver@apple.com>
325
326         Reviewed by Geoff Garen.
327
328         Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) )
329
330         This is a very slight win in sunspider, and a fairly substantial win
331         in hot code that does if(!...), etc.
332
333         * VM/CodeGenerator.cpp:
334         (KJS::CodeGenerator::retrieveLastUnaryOp):
335         (KJS::CodeGenerator::rewindBinaryOp):
336         (KJS::CodeGenerator::rewindUnaryOp):
337         (KJS::CodeGenerator::emitJumpIfFalse):
338         * VM/CodeGenerator.h:
339
340 2008-08-12  Dan Bernstein  <mitz@apple.com>
341
342         - JavaScriptCore part of <rdar://problem/6121636>
343           Make fast*alloc() abort() on failure and add "try" variants that
344           return NULL on failure.
345
346         Reviewed by Darin Adler.
347
348         * JavaScriptCore.exp: Exported tryFastCalloc().
349         * VM/RegisterFile.h:
350         (KJS::RegisterFile::RegisterFile): Removed an ASSERT().
351         * kjs/JSArray.cpp:
352         (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc().
353         (KJS::JSArray::increaseVectorLength): Ditto.
354         * kjs/ustring.cpp:
355         (KJS::allocChars): Changed to use tryFastMalloc().
356         (KJS::reallocChars): Changed to use tryFastRealloc().
357         * wtf/FastMalloc.cpp:
358         (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result
359         and removed extra call to InvokeNewHook().
360         (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc().
361         (WTF::tryFastMalloc): Renamed fastMalloc() to this.
362         (WTF::fastMalloc): Added. This version abort()s if allocation fails.
363         (WTF::tryFastCalloc): Renamed fastCalloc() to this.
364         (WTF::fastCalloc): Added. This version abort()s if allocation fails.
365         (WTF::tryFastRealloc): Renamed fastRealloc() to this.
366         (WTF::fastRealloc): Added. This version abort()s if allocation fails.
367         (WTF::do_malloc): Made this a function template. When the abortOnFailure
368         template parameter is set, the function abort()s on failure to allocate.
369         Otherwise, it sets errno to ENOMEM and returns zero.
370         (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure.
371         (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on
372         failure.
373         (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure.
374         (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on
375         failure.
376         (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure.
377         (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on
378         failure.
379         * wtf/FastMalloc.h: Declared the "try" variants.
380
381 2008-08-11  Adam Roben  <aroben@apple.com>
382
383         Move WTF::notFound into its own header so that it can be used
384         independently of Vector
385
386         Rubberstamped by Darin Adler.
387
388         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
389         * JavaScriptCore.xcodeproj/project.pbxproj:
390         Added NotFound.h to the project.
391         * wtf/NotFound.h: Added. Moved the notFound constant here...
392         * wtf/Vector.h: ...from here.
393
394 2008-08-11  Alexey Proskuryakov  <ap@webkit.org>
395
396         Reviewed by Mark Rowe.
397
398         <rdar://problem/6130393> REGRESSION: PhotoBooth hangs after launching under TOT Webkit
399
400         * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment.
401
402         * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while
403         sweeping the heap.
404
405 == Rolled over to ChangeLog-2008-08-10 ==