| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 5347309da35ca3d0d5628da34d836a3c447cd2b7..43707841fbcf1578b1a353a1c1b64b391c7b8103 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -29,116 +29,113 @@
|
| // Most object types in the V8 JavaScript are described in this file.
|
| //
|
| // Inheritance hierarchy:
|
| -// - MaybeObject (an object or a failure)
|
| -// - Failure (immediate for marking failed operation)
|
| -// - Object
|
| -// - Smi (immediate small integer)
|
| -// - HeapObject (superclass for everything allocated in the heap)
|
| -// - JSReceiver (suitable for property access)
|
| -// - JSObject
|
| -// - JSArray
|
| -// - JSArrayBuffer
|
| -// - JSArrayBufferView
|
| -// - JSTypedArray
|
| -// - JSDataView
|
| -// - JSSet
|
| -// - JSMap
|
| -// - JSSetIterator
|
| -// - JSMapIterator
|
| -// - JSWeakCollection
|
| -// - JSWeakMap
|
| -// - JSWeakSet
|
| -// - JSRegExp
|
| -// - JSFunction
|
| -// - JSGeneratorObject
|
| -// - JSModule
|
| -// - GlobalObject
|
| -// - JSGlobalObject
|
| -// - JSBuiltinsObject
|
| -// - JSGlobalProxy
|
| -// - JSValue
|
| -// - JSDate
|
| -// - JSMessageObject
|
| -// - JSProxy
|
| -// - JSFunctionProxy
|
| -// - FixedArrayBase
|
| -// - ByteArray
|
| -// - FixedArray
|
| -// - DescriptorArray
|
| -// - HashTable
|
| -// - Dictionary
|
| -// - StringTable
|
| -// - CompilationCacheTable
|
| -// - CodeCacheHashTable
|
| -// - MapCache
|
| -// - OrderedHashTable
|
| -// - OrderedHashSet
|
| -// - OrderedHashMap
|
| -// - Context
|
| -// - JSFunctionResultCache
|
| -// - ScopeInfo
|
| -// - TransitionArray
|
| -// - FixedDoubleArray
|
| -// - ExternalArray
|
| -// - ExternalUint8ClampedArray
|
| -// - ExternalInt8Array
|
| -// - ExternalUint8Array
|
| -// - ExternalInt16Array
|
| -// - ExternalUint16Array
|
| -// - ExternalInt32Array
|
| -// - ExternalUint32Array
|
| -// - ExternalFloat32Array
|
| -// - Name
|
| -// - String
|
| -// - SeqString
|
| -// - SeqOneByteString
|
| -// - SeqTwoByteString
|
| -// - SlicedString
|
| -// - ConsString
|
| -// - ExternalString
|
| -// - ExternalAsciiString
|
| -// - ExternalTwoByteString
|
| -// - InternalizedString
|
| -// - SeqInternalizedString
|
| -// - SeqOneByteInternalizedString
|
| -// - SeqTwoByteInternalizedString
|
| -// - ConsInternalizedString
|
| -// - ExternalInternalizedString
|
| -// - ExternalAsciiInternalizedString
|
| -// - ExternalTwoByteInternalizedString
|
| -// - Symbol
|
| -// - HeapNumber
|
| -// - Cell
|
| -// - PropertyCell
|
| -// - Code
|
| -// - Map
|
| -// - Oddball
|
| -// - Foreign
|
| -// - SharedFunctionInfo
|
| -// - Struct
|
| -// - Box
|
| -// - DeclaredAccessorDescriptor
|
| -// - AccessorInfo
|
| -// - DeclaredAccessorInfo
|
| -// - ExecutableAccessorInfo
|
| -// - AccessorPair
|
| -// - AccessCheckInfo
|
| -// - InterceptorInfo
|
| -// - CallHandlerInfo
|
| -// - TemplateInfo
|
| -// - FunctionTemplateInfo
|
| -// - ObjectTemplateInfo
|
| -// - Script
|
| -// - SignatureInfo
|
| -// - TypeSwitchInfo
|
| -// - DebugInfo
|
| -// - BreakPointInfo
|
| -// - CodeCache
|
| +// - Object
|
| +// - Smi (immediate small integer)
|
| +// - HeapObject (superclass for everything allocated in the heap)
|
| +// - JSReceiver (suitable for property access)
|
| +// - JSObject
|
| +// - JSArray
|
| +// - JSArrayBuffer
|
| +// - JSArrayBufferView
|
| +// - JSTypedArray
|
| +// - JSDataView
|
| +// - JSSet
|
| +// - JSMap
|
| +// - JSSetIterator
|
| +// - JSMapIterator
|
| +// - JSWeakCollection
|
| +// - JSWeakMap
|
| +// - JSWeakSet
|
| +// - JSRegExp
|
| +// - JSFunction
|
| +// - JSGeneratorObject
|
| +// - JSModule
|
| +// - GlobalObject
|
| +// - JSGlobalObject
|
| +// - JSBuiltinsObject
|
| +// - JSGlobalProxy
|
| +// - JSValue
|
| +// - JSDate
|
| +// - JSMessageObject
|
| +// - JSProxy
|
| +// - JSFunctionProxy
|
| +// - FixedArrayBase
|
| +// - ByteArray
|
| +// - FixedArray
|
| +// - DescriptorArray
|
| +// - HashTable
|
| +// - Dictionary
|
| +// - StringTable
|
| +// - CompilationCacheTable
|
| +// - CodeCacheHashTable
|
| +// - MapCache
|
| +// - OrderedHashTable
|
| +// - OrderedHashSet
|
| +// - OrderedHashMap
|
| +// - Context
|
| +// - JSFunctionResultCache
|
| +// - ScopeInfo
|
| +// - TransitionArray
|
| +// - FixedDoubleArray
|
| +// - ExternalArray
|
| +// - ExternalUint8ClampedArray
|
| +// - ExternalInt8Array
|
| +// - ExternalUint8Array
|
| +// - ExternalInt16Array
|
| +// - ExternalUint16Array
|
| +// - ExternalInt32Array
|
| +// - ExternalUint32Array
|
| +// - ExternalFloat32Array
|
| +// - Name
|
| +// - String
|
| +// - SeqString
|
| +// - SeqOneByteString
|
| +// - SeqTwoByteString
|
| +// - SlicedString
|
| +// - ConsString
|
| +// - ExternalString
|
| +// - ExternalAsciiString
|
| +// - ExternalTwoByteString
|
| +// - InternalizedString
|
| +// - SeqInternalizedString
|
| +// - SeqOneByteInternalizedString
|
| +// - SeqTwoByteInternalizedString
|
| +// - ConsInternalizedString
|
| +// - ExternalInternalizedString
|
| +// - ExternalAsciiInternalizedString
|
| +// - ExternalTwoByteInternalizedString
|
| +// - Symbol
|
| +// - HeapNumber
|
| +// - Cell
|
| +// - PropertyCell
|
| +// - Code
|
| +// - Map
|
| +// - Oddball
|
| +// - Foreign
|
| +// - SharedFunctionInfo
|
| +// - Struct
|
| +// - Box
|
| +// - DeclaredAccessorDescriptor
|
| +// - AccessorInfo
|
| +// - DeclaredAccessorInfo
|
| +// - ExecutableAccessorInfo
|
| +// - AccessorPair
|
| +// - AccessCheckInfo
|
| +// - InterceptorInfo
|
| +// - CallHandlerInfo
|
| +// - TemplateInfo
|
| +// - FunctionTemplateInfo
|
| +// - ObjectTemplateInfo
|
| +// - Script
|
| +// - SignatureInfo
|
| +// - TypeSwitchInfo
|
| +// - DebugInfo
|
| +// - BreakPointInfo
|
| +// - CodeCache
|
| //
|
| // Formats of Object*:
|
| // Smi: [31 bit signed int] 0
|
| // HeapObject: [32 bit direct pointer] (4 byte aligned) | 01
|
| -// Failure: [30 bit signed int] 11
|
|
|
| namespace v8 {
|
| namespace internal {
|
| @@ -861,7 +858,6 @@ class AllocationSiteCreationContext;
|
| class AllocationSiteUsageContext;
|
| class DictionaryElementsAccessor;
|
| class ElementsAccessor;
|
| -class Failure;
|
| class FixedArrayBase;
|
| class GlobalObject;
|
| class ObjectVisitor;
|
| @@ -887,46 +883,6 @@ template <class C> inline bool Is(Object* obj);
|
| #define DECLARE_PRINTER(Name)
|
| #endif
|
|
|
| -class MaybeObject BASE_EMBEDDED {
|
| - public:
|
| - inline bool IsFailure();
|
| - inline bool IsRetryAfterGC();
|
| - inline bool ToObject(Object** obj) {
|
| - if (IsFailure()) return false;
|
| - *obj = reinterpret_cast<Object*>(this);
|
| - return true;
|
| - }
|
| - inline Object* ToObjectUnchecked() {
|
| - // TODO(jkummerow): Turn this back into an ASSERT when we can be certain
|
| - // that it never fires in Release mode in the wild.
|
| - CHECK(!IsFailure());
|
| - return reinterpret_cast<Object*>(this);
|
| - }
|
| - inline Object* ToObjectChecked() {
|
| - CHECK(!IsFailure());
|
| - return reinterpret_cast<Object*>(this);
|
| - }
|
| -
|
| - template<typename T>
|
| - inline bool To(T** obj) {
|
| - if (IsFailure()) return false;
|
| - *obj = T::cast(reinterpret_cast<Object*>(this));
|
| - return true;
|
| - }
|
| -
|
| -#ifdef OBJECT_PRINT
|
| - // Prints this object with details.
|
| - void Print();
|
| - void Print(FILE* out);
|
| - void PrintLn();
|
| - void PrintLn(FILE* out);
|
| -#endif
|
| -#ifdef VERIFY_HEAP
|
| - // Verifies the object.
|
| - void Verify();
|
| -#endif
|
| -};
|
| -
|
|
|
| #define OBJECT_TYPE_LIST(V) \
|
| V(Smi) \
|
| @@ -1383,9 +1339,9 @@ const char* GetBailoutReason(BailoutReason reason);
|
| // object hierarchy.
|
| // Object does not use any virtual functions to avoid the
|
| // allocation of the C++ vtable.
|
| -// Since Smi and Failure are subclasses of Object no
|
| +// Since both Smi and HeapObject are subclasses of Object no
|
| // data members can be present in Object.
|
| -class Object : public MaybeObject {
|
| +class Object {
|
| public:
|
| // Type testing.
|
| bool IsObject() { return true; }
|
| @@ -1418,7 +1374,6 @@ class Object : public MaybeObject {
|
| INLINE(bool IsTrue());
|
| INLINE(bool IsFalse());
|
| inline bool IsArgumentsMarker();
|
| - inline bool NonFailureIsHeapObject();
|
|
|
| // Filler objects (fillers and free space objects).
|
| inline bool IsFiller();
|
| @@ -1583,6 +1538,14 @@ class Object : public MaybeObject {
|
| // Layout description.
|
| static const int kHeaderSize = 0; // Object does not take up any space.
|
|
|
| +#ifdef OBJECT_PRINT
|
| + // Prints this object with details.
|
| + void Print();
|
| + void Print(FILE* out);
|
| + void PrintLn();
|
| + void PrintLn(FILE* out);
|
| +#endif
|
| +
|
| private:
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(Object);
|
| };
|
| @@ -1625,59 +1588,6 @@ class Smi: public Object {
|
| };
|
|
|
|
|
| -// Failure is mainly used for reporting a situation requiring a GC.
|
| -// Failure objects are transient and cannot occur as part of the object graph.
|
| -//
|
| -// Failures are a single word, encoded as follows:
|
| -// +-------------------------+---+--+--+
|
| -// |.........unused..........|sss|tt|11|
|
| -// +-------------------------+---+--+--+
|
| -// 7 6 4 32 10
|
| -//
|
| -//
|
| -// The low two bits, 0-1, are the failure tag, 11. The next two bits,
|
| -// 2-3, are a failure type tag 'tt' with possible values:
|
| -// 00 RETRY_AFTER_GC
|
| -//
|
| -// The next three bits, 4-6, are an allocation space tag 'sss'. The
|
| -// allocation space tag is 000 for all failure types except
|
| -// RETRY_AFTER_GC. For RETRY_AFTER_GC, the possible values are the
|
| -// allocation spaces (the encoding is found in globals.h).
|
| -
|
| -// Failure type tag info.
|
| -const int kFailureTypeTagSize = 2;
|
| -const int kFailureTypeTagMask = (1 << kFailureTypeTagSize) - 1;
|
| -
|
| -class Failure: public MaybeObject {
|
| - public:
|
| - enum Type {
|
| - RETRY_AFTER_GC = 0
|
| - };
|
| -
|
| - inline Type type() const;
|
| -
|
| - // Returns the space that needs to be collected for RetryAfterGC failures.
|
| - inline AllocationSpace allocation_space() const;
|
| -
|
| - static inline Failure* RetryAfterGC(AllocationSpace space);
|
| - static inline Failure* RetryAfterGC(); // NEW_SPACE
|
| - // Casting.
|
| - static inline Failure* cast(MaybeObject* object);
|
| -
|
| - // Dispatched behavior.
|
| - void FailurePrint(FILE* out = stdout);
|
| - void FailurePrint(StringStream* accumulator);
|
| -
|
| - DECLARE_VERIFIER(Failure)
|
| -
|
| - private:
|
| - inline intptr_t value() const;
|
| - static inline Failure* Construct(Type type, intptr_t value = 0);
|
| -
|
| - DISALLOW_IMPLICIT_CONSTRUCTORS(Failure);
|
| -};
|
| -
|
| -
|
| // Heap objects typically have a map pointer in their first word. However,
|
| // during GC other data (e.g. mark bits, forwarding addresses) is sometimes
|
| // encoded in the first word. The class MapWord is an abstraction of the
|
|
|