summaryrefslogtreecommitdiff
path: root/deps/v8/src/property-descriptor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/property-descriptor.cc')
-rw-r--r--deps/v8/src/property-descriptor.cc29
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