OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
917 #define DECLARE_PRINTER(Name) void Name##Print(FILE* out = stdout); | 917 #define DECLARE_PRINTER(Name) void Name##Print(FILE* out = stdout); |
918 #else | 918 #else |
919 #define DECLARE_PRINTER(Name) | 919 #define DECLARE_PRINTER(Name) |
920 #endif | 920 #endif |
921 | 921 |
922 class MaybeObject BASE_EMBEDDED { | 922 class MaybeObject BASE_EMBEDDED { |
923 public: | 923 public: |
924 inline bool IsFailure(); | 924 inline bool IsFailure(); |
925 inline bool IsRetryAfterGC(); | 925 inline bool IsRetryAfterGC(); |
926 inline bool IsException(); | 926 inline bool IsException(); |
927 INLINE(bool IsTheHole()); | |
928 INLINE(bool IsUninitialized()); | |
929 inline bool ToObject(Object** obj) { | 927 inline bool ToObject(Object** obj) { |
930 if (IsFailure()) return false; | 928 if (IsFailure()) return false; |
931 *obj = reinterpret_cast<Object*>(this); | 929 *obj = reinterpret_cast<Object*>(this); |
932 return true; | 930 return true; |
933 } | 931 } |
934 inline Failure* ToFailureUnchecked() { | |
935 ASSERT(IsFailure()); | |
936 return reinterpret_cast<Failure*>(this); | |
937 } | |
938 inline Object* ToObjectUnchecked() { | 932 inline Object* ToObjectUnchecked() { |
939 // TODO(jkummerow): Turn this back into an ASSERT when we can be certain | 933 // TODO(jkummerow): Turn this back into an ASSERT when we can be certain |
940 // that it never fires in Release mode in the wild. | 934 // that it never fires in Release mode in the wild. |
941 CHECK(!IsFailure()); | 935 CHECK(!IsFailure()); |
942 return reinterpret_cast<Object*>(this); | 936 return reinterpret_cast<Object*>(this); |
943 } | 937 } |
944 inline Object* ToObjectChecked() { | 938 inline Object* ToObjectChecked() { |
945 CHECK(!IsFailure()); | 939 CHECK(!IsFailure()); |
946 return reinterpret_cast<Object*>(this); | 940 return reinterpret_cast<Object*>(this); |
947 } | 941 } |
948 | 942 |
949 template<typename T> | 943 template<typename T> |
950 inline bool To(T** obj) { | 944 inline bool To(T** obj) { |
951 if (IsFailure()) return false; | 945 if (IsFailure()) return false; |
952 *obj = T::cast(reinterpret_cast<Object*>(this)); | 946 *obj = T::cast(reinterpret_cast<Object*>(this)); |
953 return true; | 947 return true; |
954 } | 948 } |
955 | 949 |
956 template<typename T> | |
957 inline bool ToHandle(Handle<T>* obj, Isolate* isolate) { | |
958 if (IsFailure()) return false; | |
959 *obj = handle(T::cast(reinterpret_cast<Object*>(this)), isolate); | |
960 return true; | |
961 } | |
962 | |
963 #ifdef OBJECT_PRINT | 950 #ifdef OBJECT_PRINT |
964 // Prints this object with details. | 951 // Prints this object with details. |
965 void Print(); | 952 void Print(); |
966 void Print(FILE* out); | 953 void Print(FILE* out); |
967 void PrintLn(); | 954 void PrintLn(); |
968 void PrintLn(FILE* out); | 955 void PrintLn(FILE* out); |
969 #endif | 956 #endif |
970 #ifdef VERIFY_HEAP | 957 #ifdef VERIFY_HEAP |
971 // Verifies the object. | 958 // Verifies the object. |
972 void Verify(); | 959 void Verify(); |
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1703 // is in Isolate::pending_exception. | 1690 // is in Isolate::pending_exception. |
1704 INTERNAL_ERROR = 2, | 1691 INTERNAL_ERROR = 2, |
1705 OUT_OF_MEMORY_EXCEPTION = 3 | 1692 OUT_OF_MEMORY_EXCEPTION = 3 |
1706 }; | 1693 }; |
1707 | 1694 |
1708 inline Type type() const; | 1695 inline Type type() const; |
1709 | 1696 |
1710 // Returns the space that needs to be collected for RetryAfterGC failures. | 1697 // Returns the space that needs to be collected for RetryAfterGC failures. |
1711 inline AllocationSpace allocation_space() const; | 1698 inline AllocationSpace allocation_space() const; |
1712 | 1699 |
1713 inline bool IsInternalError() const; | |
1714 | |
1715 static inline Failure* RetryAfterGC(AllocationSpace space); | 1700 static inline Failure* RetryAfterGC(AllocationSpace space); |
1716 static inline Failure* RetryAfterGC(); // NEW_SPACE | 1701 static inline Failure* RetryAfterGC(); // NEW_SPACE |
1717 static inline Failure* Exception(); | 1702 static inline Failure* Exception(); |
1718 static inline Failure* InternalError(); | 1703 static inline Failure* InternalError(); |
1719 // Casting. | 1704 // Casting. |
1720 static inline Failure* cast(MaybeObject* object); | 1705 static inline Failure* cast(MaybeObject* object); |
1721 | 1706 |
1722 // Dispatched behavior. | 1707 // Dispatched behavior. |
1723 void FailurePrint(FILE* out = stdout); | 1708 void FailurePrint(FILE* out = stdout); |
1724 void FailurePrint(StringStream* accumulator); | 1709 void FailurePrint(StringStream* accumulator); |
(...skipping 9329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11054 } else { | 11039 } else { |
11055 value &= ~(1 << bit_position); | 11040 value &= ~(1 << bit_position); |
11056 } | 11041 } |
11057 return value; | 11042 return value; |
11058 } | 11043 } |
11059 }; | 11044 }; |
11060 | 11045 |
11061 } } // namespace v8::internal | 11046 } } // namespace v8::internal |
11062 | 11047 |
11063 #endif // V8_OBJECTS_H_ | 11048 #endif // V8_OBJECTS_H_ |
OLD | NEW |