Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(586)

Unified Diff: src/objects.h

Issue 16631002: Separate Cell and PropertyCell spaces (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Merge with ToT Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index 756631068e719d0345e1889f9b2f63ff367237e8..90f368d389f19bf4a057cc4cddb63a7ad3d622e8 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -348,6 +348,7 @@ const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits;
V(MAP_TYPE) \
V(CODE_TYPE) \
V(ODDBALL_TYPE) \
+ V(CELL_TYPE) \
Michael Starzinger 2013/06/12 13:23:25 Can we add the "Cell" type to the type hierarchy A
danno 2013/06/12 14:24:28 Done.
V(JS_GLOBAL_PROPERTY_CELL_TYPE) \
V(BOX_TYPE) \
\
@@ -669,6 +670,7 @@ enum InstanceType {
MAP_TYPE,
CODE_TYPE,
ODDBALL_TYPE,
+ CELL_TYPE,
JS_GLOBAL_PROPERTY_CELL_TYPE,
BOX_TYPE,
@@ -841,6 +843,7 @@ class Failure;
class FixedArrayBase;
class ObjectVisitor;
class StringStream;
+class Type;
struct ValueInfo : public Malloced {
ValueInfo() : type(FIRST_TYPE), ptr(NULL), str(NULL), number(0) { }
@@ -1011,6 +1014,7 @@ class MaybeObject BASE_EMBEDDED {
V(JSGlobalProxy) \
V(UndetectableObject) \
V(AccessCheckNeeded) \
+ V(Cell) \
V(JSGlobalPropertyCell) \
V(ObjectHashTable) \
@@ -4378,6 +4382,7 @@ class DeoptimizationOutputData: public FixedArray {
// Forward declaration.
+class Cell;
class JSGlobalPropertyCell;
// TypeFeedbackCells is a fixed array used to hold the association between
@@ -4395,8 +4400,8 @@ class TypeFeedbackCells: public FixedArray {
inline void SetAstId(int index, TypeFeedbackId id);
// Accessors for global property cells holding the cache values.
- inline JSGlobalPropertyCell* Cell(int index);
- inline void SetCell(int index, JSGlobalPropertyCell* cell);
+ inline Cell* GetCell(int index);
+ inline void SetCell(int index, Cell* cell);
// The object that indicates an uninitialized cache.
static inline Handle<Object> UninitializedSentinel(Isolate* isolate);
@@ -5403,7 +5408,7 @@ class Map: public HeapObject {
set_bit_field3(NumberOfOwnDescriptorsBits::update(bit_field3(), number));
}
- inline JSGlobalPropertyCell* RetrieveDescriptorsPointer();
+ inline Cell* RetrieveDescriptorsPointer();
int EnumLength() {
return EnumLengthBits::decode(bit_field3());
@@ -8557,16 +8562,17 @@ class Oddball: public HeapObject {
};
-class JSGlobalPropertyCell: public HeapObject {
+class Cell: public HeapObject {
public:
- // [value]: value of the global property.
Michael Starzinger 2013/06/12 13:23:25 I actually like the comment lines and sometimes gr
danno 2013/06/12 14:24:28 Done.
DECL_ACCESSORS(value, Object)
// Casting.
- static inline JSGlobalPropertyCell* cast(Object* obj);
+ static inline Cell* cast(Object* obj);
- static inline JSGlobalPropertyCell* FromValueAddress(Address value) {
- return cast(FromAddress(value - kValueOffset));
+ static inline Cell* FromValueAddress(Address value) {
+ Object* result = FromAddress(value - kValueOffset);
+ ASSERT(result->IsCell() || result->IsJSGlobalPropertyCell());
+ return static_cast<Cell*>(result);
}
inline Address ValueAddress() {
@@ -8574,8 +8580,8 @@ class JSGlobalPropertyCell: public HeapObject {
}
// Dispatched behavior.
- DECLARE_PRINTER(JSGlobalPropertyCell)
- DECLARE_VERIFIER(JSGlobalPropertyCell)
+ DECLARE_PRINTER(Cell)
+ DECLARE_VERIFIER(Cell)
// Layout description.
static const int kValueOffset = HeapObject::kHeaderSize;
@@ -8586,6 +8592,37 @@ class JSGlobalPropertyCell: public HeapObject {
kSize> BodyDescriptor;
private:
+ DISALLOW_IMPLICIT_CONSTRUCTORS(Cell);
+};
+
+
+class JSGlobalPropertyCell: public Cell {
+ public:
+ Type* type();
+ void set_type(Type* value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
Michael Starzinger 2013/06/12 13:23:25 Can we use the DECL_ACCESSORS macro to declare thi
danno 2013/06/12 14:24:28 No, unfortunately not. Note that they are not inli
+
+ // Casting.
+ static inline JSGlobalPropertyCell* cast(Object* obj);
+
+ inline Address TypeAddress() {
+ return address() + kTypeOffset;
+ }
+
+ // Dispatched behavior.
+ DECLARE_PRINTER(JSGlobalPropertyCell)
+ DECLARE_VERIFIER(JSGlobalPropertyCell)
+
+ // Layout description.
+ static const int kTypeOffset = kValueOffset + kPointerSize;
+ static const int kSize = kTypeOffset + kPointerSize;
+
+ typedef FixedBodyDescriptor<
+ kValueOffset,
Michael Starzinger 2013/06/12 13:23:25 nit: Should fit into three lines if we remove the
danno 2013/06/12 14:24:28 Done.
+ kTypeOffset + kPointerSize,
+ JSGlobalPropertyCell::kSize> BodyDescriptor;
+
+ private:
+ DECL_ACCESSORS(type_raw, Object)
DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalPropertyCell);
};

Powered by Google App Engine
This is Rietveld 408576698