Chromium Code Reviews| Index: src/property-descriptor.cc |
| diff --git a/src/property-descriptor.cc b/src/property-descriptor.cc |
| index 2ecf75a74e593f37587ffb337d81bbe4e8b3dd68..0600697ff018933ccaca2f581144695ca548eee8 100644 |
| --- a/src/property-descriptor.cc |
| +++ b/src/property-descriptor.cc |
| @@ -101,6 +101,40 @@ 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" |
| +Handle<Object> PropertyDescriptor::ToObject(Isolate* isolate) { |
| + DCHECK(!(PropertyDescriptor::IsAccessorDescriptor(this) && |
| + PropertyDescriptor::IsDataDescriptor(this))); |
| + Handle<JSObject> result = |
| + isolate->factory()->NewJSObject(isolate->object_function()); |
| + if (has_value()) CreateDataProperty(isolate, result, "value", value()); |
|
Jakob Kummerow
2015/10/29 18:06:02
Instead of "value", please use isolate->factory()-
neis
2015/10/30 08:41:30
Done.
|
| + if (has_writable()) { |
| + CreateDataProperty(isolate, result, "writable", |
| + isolate->factory()->ToBoolean(writable())); |
| + } |
| + if (has_get()) CreateDataProperty(isolate, result, "get", get()); |
| + if (has_set()) CreateDataProperty(isolate, result, "set", set()); |
| + if (has_enumerable()) { |
| + CreateDataProperty(isolate, result, "enumerable", |
| + isolate->factory()->ToBoolean(enumerable())); |
| + } |
| + if (has_configurable()) { |
| + CreateDataProperty(isolate, result, "configurable", |
| + isolate->factory()->ToBoolean(configurable())); |
| + } |
| + return result; |
| +} |
| + |
| + |
| // ES6 6.2.4.5 |
| // Returns false in case of exception. |
| // static |