| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_OBJECTS_TAGGED_VALUE_H_ |
| #define V8_OBJECTS_TAGGED_VALUE_H_ |
| |
| #include "src/objects/objects.h" |
| |
| #include "include/v8-internal.h" |
| #include "src/objects/tagged-impl.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| // Almost same as Object but this one deals with in-heap and potentially |
| // compressed representation of Objects and provide only limited functionality |
| // which doesn't require decompression. |
| class StrongTaggedValue |
| : public TaggedImpl<HeapObjectReferenceType::STRONG, Tagged_t> { |
| public: |
| constexpr StrongTaggedValue() : TaggedImpl() {} |
| explicit constexpr StrongTaggedValue(Tagged_t ptr) : TaggedImpl(ptr) {} |
| explicit StrongTaggedValue(Object o); |
| |
| inline static Object ToObject(Isolate* isolate, StrongTaggedValue object); |
| }; |
| |
| // Almost same as MaybeObject but this one deals with in-heap and potentially |
| // compressed representation of Objects and provide only limited functionality |
| // which doesn't require decompression. |
| class TaggedValue : public TaggedImpl<HeapObjectReferenceType::WEAK, Tagged_t> { |
| public: |
| constexpr TaggedValue() : TaggedImpl() {} |
| explicit constexpr TaggedValue(Tagged_t ptr) : TaggedImpl(ptr) {} |
| explicit TaggedValue(MaybeObject o); |
| |
| inline static MaybeObject ToMaybeObject(Isolate* isolate, TaggedValue object); |
| }; |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_OBJECTS_TAGGED_VALUE_H_ |