Changeset 48067 in webkit for trunk/JavaScriptCore
- Timestamp:
- Sep 4, 2009, 11:53:02 AM (16 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r48066 r48067 1 2009-09-04 Darin Adler <[email protected]> 2 3 Reviewed by Geoff Garen. 4 5 DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32) 6 https://bugs.webkit.org/show_bug.cgi?id=28909 7 8 Part one. 9 10 Make some improvements to garbage collection code: 11 12 1) Fix the two classes that had the default mark bit set but 13 should not. 14 2) Remove checks of the mark bit outside the MarkStack::append 15 function; they are redundant. 16 3) Make more callers use the checked asCell and asObject 17 casting functions rather than unchecked casts. 18 4) Removed some GC-related functions because these operations are 19 no longer things that code other than the core GC code needs 20 to do directly. Fixed callers that were calling them. 21 22 * bytecode/CodeBlock.cpp: 23 (JSC::CodeBlock::markAggregate): Removed unneeded check of the mark 24 bit before calling MarkStack::append. 25 26 * interpreter/Register.h: Removed unneeded marked and markChildren 27 functions. 28 29 * jit/JITStubs.cpp: 30 (op_eq): Removed unneeded assertions, instead using checked casting 31 functions such as asObject. 32 33 * runtime/ArgList.h: Added now-needed forward declaration of MarkStack. 34 35 * runtime/GetterSetter.cpp: 36 (JSC::GetterSetter::markChildren): Remmoved unneeded check of the mark bit. 37 38 * runtime/GlobalEvalFunction.h: 39 (JSC::GlobalEvalFunction::createStructure): Added. Fixes a bug where the 40 HasDefaultMark bit was set. 41 42 * runtime/JSCell.cpp: 43 (JSC::JSCell::getObject): Use asObject to avoid a direct static_cast. 44 45 * runtime/JSObject.h: 46 (JSC::asObject): Added an overload for JSCell* and changed the JSValue 47 version to call it. 48 (JSC::JSValue::get): Use asObject to avoid a direct static_cast. 49 50 * runtime/JSValue.h: Moved some stray includes that were outside the 51 header guard inside it. Not sure how that happened! Removed the 52 GC-related member functions markChildren, hasChildren, marked, and 53 markDirect. 54 55 * runtime/JSWrapperObject.h: Made markChildren private. 56 (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the 57 HasDefaultMark bit was set. Later we may want to optimize this for 58 wrapper types that never have cells in their internal values, but there 59 is no measured performance regression in SunSpider or V8 doing this 60 all the time. 61 62 * runtime/MarkStack.cpp: Tweaked formatting. 63 1 64 2009-09-04 Kevin Ollivier <[email protected]> 2 65 -
trunk/JavaScriptCore/bytecode/CodeBlock.cpp
r47641 r48067 1410 1410 void CodeBlock::markAggregate(MarkStack& markStack) 1411 1411 { 1412 for (size_t i = 0; i < m_constantRegisters.size(); ++i) { 1413 if (!m_constantRegisters[i].marked()) 1414 markStack.append(m_constantRegisters[i].jsValue()); 1415 } 1416 1412 for (size_t i = 0; i < m_constantRegisters.size(); ++i) 1413 markStack.append(m_constantRegisters[i].jsValue()); 1417 1414 for (size_t i = 0; i < m_functionExprs.size(); ++i) 1418 1415 m_functionExprs[i]->markAggregate(markStack); -
trunk/JavaScriptCore/interpreter/Register.h
r47022 r48067 55 55 56 56 JSValue jsValue() const; 57 58 bool marked() const;59 void markChildren(MarkStack&);60 57 61 58 Register(JSActivation*); … … 115 112 return JSValue::decode(u.value); 116 113 } 117 118 ALWAYS_INLINE bool Register::marked() const119 {120 return jsValue().marked();121 }122 114 123 115 // Interpreter functions -
trunk/JavaScriptCore/jit/JITStubs.cpp
r47738 r48067 2359 2359 return src2.isCell() && asCell(src2)->structure()->typeInfo().masqueradesAsUndefined(); 2360 2360 2361 ASSERT(src1.isCell());2362 2363 2361 JSCell* cell1 = asCell(src1); 2364 2362 … … 2376 2374 return static_cast<JSString*>(cell1)->value().toDouble() == 0.0; 2377 2375 2378 ASSERT(src2.isCell());2379 2376 JSCell* cell2 = asCell(src2); 2380 2377 if (cell2->isString()) 2381 2378 return static_cast<JSString*>(cell1)->value() == static_cast<JSString*>(cell2)->value(); 2382 2379 2383 ASSERT(cell2->isObject()); 2384 src2 = static_cast<JSObject*>(cell2)->toPrimitive(stackFrame.callFrame); 2380 src2 = asObject(cell2)->toPrimitive(stackFrame.callFrame); 2385 2381 CHECK_FOR_EXCEPTION(); 2386 2382 goto start; 2387 2383 } 2388 2384 2389 ASSERT(cell1->isObject());2390 2385 if (src2.isObject()) 2391 return static_cast<JSObject*>(cell1) == asObject(src2);2392 src1 = static_cast<JSObject*>(cell1)->toPrimitive(stackFrame.callFrame);2386 return asObject(cell1) == asObject(src2); 2387 src1 = asObject(cell1)->toPrimitive(stackFrame.callFrame); 2393 2388 CHECK_FOR_EXCEPTION(); 2394 2389 goto start; -
trunk/JavaScriptCore/runtime/ArgList.h
r47022 r48067 1 1 /* 2 2 * Copyright (C) 1999-2001 Harri Porten ([email protected]) 3 * Copyright (C) 2003, 2007, 2008, 2009 Apple Computer, Inc.3 * Copyright (C) 2003, 2007, 2008, 2009 Apple Inc. All rights reserved. 4 4 * 5 5 * This library is free software; you can redistribute it and/or … … 24 24 25 25 #include "Register.h" 26 27 26 #include <wtf/HashSet.h> 28 27 #include <wtf/Noncopyable.h> … … 30 29 31 30 namespace JSC { 32 31 32 class MarkStack; 33 33 34 class MarkedArgumentBuffer : public Noncopyable { 34 35 private: -
trunk/JavaScriptCore/runtime/GetterSetter.cpp
r47799 r48067 33 33 JSCell::markChildren(markStack); 34 34 35 if (m_getter && !m_getter->marked())35 if (m_getter) 36 36 markStack.append(m_getter); 37 if (m_setter && !m_setter->marked())37 if (m_setter) 38 38 markStack.append(m_setter); 39 39 } -
trunk/JavaScriptCore/runtime/GlobalEvalFunction.h
r47022 r48067 36 36 JSGlobalObject* cachedGlobalObject() const { return m_cachedGlobalObject; } 37 37 38 static PassRefPtr<Structure> createStructure(JSValue prototype) 39 { 40 return Structure::create(prototype, TypeInfo(ObjectType, ImplementsHasInstance | HasStandardGetOwnPropertySlot)); 41 } 42 38 43 private: 39 44 virtual void markChildren(MarkStack&); -
trunk/JavaScriptCore/runtime/JSCell.cpp
r47799 r48067 106 106 JSObject* JSCell::getObject() 107 107 { 108 return isObject() ? static_cast<JSObject*>(this) : 0;108 return isObject() ? asObject(this) : 0; 109 109 } 110 110 -
trunk/JavaScriptCore/runtime/JSObject.h
r47780 r48067 254 254 JSObject* constructEmptyObject(ExecState*); 255 255 256 inline JSObject* asObject(JSCell* cell) 257 { 258 ASSERT(cell->isObject()); 259 return static_cast<JSObject*>(cell); 260 } 261 256 262 inline JSObject* asObject(JSValue value) 257 263 { 258 ASSERT(asCell(value)->isObject()); 259 return static_cast<JSObject*>(asCell(value)); 264 return asObject(value.asCell()); 260 265 } 261 266 … … 583 588 if (cell->fastGetOwnPropertySlot(exec, propertyName, slot)) 584 589 return slot.getValue(exec, propertyName); 585 ASSERT(cell->isObject()); 586 JSValue prototype = static_cast<JSObject*>(cell)->prototype(); 590 JSValue prototype = asObject(cell)->prototype(); 587 591 if (!prototype.isObject()) 588 592 return jsUndefined(); … … 609 613 if (cell->getOwnPropertySlot(exec, propertyName, slot)) 610 614 return slot.getValue(exec, propertyName); 611 ASSERT(cell->isObject()); 612 JSValue prototype = static_cast<JSObject*>(cell)->prototype(); 615 JSValue prototype = asObject(cell)->prototype(); 613 616 if (!prototype.isObject()) 614 617 return jsUndefined(); … … 658 661 { 659 662 JSCell::markChildren(markStack); 663 660 664 m_structure->markAggregate(markStack); 661 665 -
trunk/JavaScriptCore/runtime/JSWrapperObject.h
r47022 r48067 26 26 27 27 namespace JSC { 28 28 29 29 // This class is used as a base for classes such as String, 30 30 // Number, Boolean and Date which are wrappers for primitive types. … … 36 36 JSValue internalValue() const { return m_internalValue; } 37 37 void setInternalValue(JSValue); 38 38 39 static PassRefPtr<Structure> createStructure(JSValue prototype) 40 { 41 return Structure::create(prototype, TypeInfo(ObjectType, HasStandardGetOwnPropertySlot)); 42 } 43 44 private: 39 45 virtual void markChildren(MarkStack&); 40 46 41 private:42 47 JSValue m_internalValue; 43 48 }; 44 49 45 50 inline JSWrapperObject::JSWrapperObject(PassRefPtr<Structure> structure) 46 51 : JSObject(structure) 47 52 { 48 53 } 49 54 50 55 inline void JSWrapperObject::setInternalValue(JSValue value) 51 56 { -
trunk/JavaScriptCore/runtime/MarkStack.cpp
r47022 r48067 27 27 #include "MarkStack.h" 28 28 29 namespace JSC 30 { 29 namespace JSC { 31 30 32 31 size_t MarkStack::s_pageSize = 0;
Note:
See TracChangeset
for help on using the changeset viewer.