diff options
Diffstat (limited to 'deps/v8/src/property-descriptor.cc')
-rw-r--r-- | deps/v8/src/property-descriptor.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/deps/v8/src/property-descriptor.cc b/deps/v8/src/property-descriptor.cc index 70ddd5d521..1593ce5ed1 100644 --- a/deps/v8/src/property-descriptor.cc +++ b/deps/v8/src/property-descriptor.cc @@ -9,6 +9,7 @@ #include "src/isolate-inl.h" #include "src/lookup.h" #include "src/objects-inl.h" +#include "src/objects/property-descriptor-object-inl.h" namespace v8 { namespace internal { @@ -341,5 +342,33 @@ void PropertyDescriptor::CompletePropertyDescriptor(Isolate* isolate, // 8. Return Desc. } +Handle<PropertyDescriptorObject> PropertyDescriptor::ToPropertyDescriptorObject( + Isolate* isolate) { + Handle<PropertyDescriptorObject> obj = Handle<PropertyDescriptorObject>::cast( + isolate->factory()->NewFixedArray(PropertyDescriptorObject::kLength)); + + int flags = + PropertyDescriptorObject::IsEnumerableBit::encode(enumerable_) | + PropertyDescriptorObject::HasEnumerableBit::encode(has_enumerable_) | + PropertyDescriptorObject::IsConfigurableBit::encode(configurable_) | + PropertyDescriptorObject::HasConfigurableBit::encode(has_configurable_) | + PropertyDescriptorObject::IsWritableBit::encode(writable_) | + PropertyDescriptorObject::HasWritableBit::encode(has_writable_) | + PropertyDescriptorObject::HasValueBit::encode(has_value()) | + PropertyDescriptorObject::HasGetBit::encode(has_get()) | + PropertyDescriptorObject::HasSetBit::encode(has_set()); + + obj->set(PropertyDescriptorObject::kFlagsIndex, Smi::FromInt(flags)); + + obj->set(PropertyDescriptorObject::kValueIndex, + has_value() ? *value_ : isolate->heap()->the_hole_value()); + obj->set(PropertyDescriptorObject::kGetIndex, + has_get() ? *get_ : isolate->heap()->the_hole_value()); + obj->set(PropertyDescriptorObject::kSetIndex, + has_set() ? *set_ : isolate->heap()->the_hole_value()); + + return obj; +} + } // namespace internal } // namespace v8 |