Chromium Code Reviews| Index: src/property-descriptor.cc |
| diff --git a/src/property-descriptor.cc b/src/property-descriptor.cc |
| index 2ecf75a74e593f37587ffb337d81bbe4e8b3dd68..53d6e61f2b89b5f1c486a448e636a02a23602498 100644 |
| --- a/src/property-descriptor.cc |
| +++ b/src/property-descriptor.cc |
| @@ -101,6 +101,46 @@ bool ToPropertyDescriptorFastPath(Isolate* isolate, Handle<Object> obj, |
| } |
| +static void CreateDataProperty(Isolate* isolate, Handle<JSObject> object, |
| + const char* name, Handle<Object> value) { |
| + LookupIterator it(object, |
| + isolate->factory()->NewStringFromAsciiChecked(name)); |
| + Maybe<bool> result = JSObject::CreateDataProperty(&it, value); |
| + CHECK(result.IsJust() && result.FromJust()); |
| +} |
| + |
| + |
| +// ES6 6.2.4.4 "FromPropertyDescriptor" |
| +// We restrict ourselves to the case where the descriptor is either a complete |
| +// accessor descriptor or a complete data descriptor, as is true for the result |
| +// of JSReceiver::GetOwnPropertyDescriptor. |
| +Handle<Object> PropertyDescriptor::ToObject(Isolate* isolate) { |
| + DCHECK(PropertyDescriptor::IsAccessorDescriptor(this) != |
| + PropertyDescriptor::IsDataDescriptor(this)); |
| + Handle<JSObject> result = |
| + isolate->factory()->NewJSObject(isolate->object_function()); |
| + if (PropertyDescriptor::IsAccessorDescriptor(this)) { |
| + DCHECK(has_get()); |
| + CreateDataProperty(isolate, result, "get", get()); |
|
Jakob Kummerow
2015/10/26 13:58:26
I'm a bit concerned about the speed of building ob
|
| + DCHECK(has_set()); |
| + CreateDataProperty(isolate, result, "set", set()); |
| + } else { |
| + DCHECK(has_value()); |
| + CreateDataProperty(isolate, result, "value", value()); |
| + DCHECK(has_writable()); |
| + CreateDataProperty(isolate, result, "writable", |
| + isolate->factory()->ToBoolean(writable())); |
| + } |
| + DCHECK(has_enumerable()); |
| + CreateDataProperty(isolate, result, "enumerable", |
| + isolate->factory()->ToBoolean(enumerable())); |
| + DCHECK(has_configurable()); |
| + CreateDataProperty(isolate, result, "configurable", |
| + isolate->factory()->ToBoolean(configurable())); |
| + return result; |
| +} |
| + |
| + |
| // ES6 6.2.4.5 |
| // Returns false in case of exception. |
| // static |