Revert "Revert "Upgrade to 5.0.71.48"" DO NOT MERGE
This reverts commit f2e3994fa5148cc3d9946666f0b0596290192b0e,
and updates the x64 makefile properly so it doesn't break that
build.
FPIIM-449
Change-Id: Ib83e35bfbae6af627451c926a9650ec57c045605
(cherry picked from commit 109988c7ccb6f3fd1a58574fa3dfb88beaef6632)
diff --git a/src/property-descriptor.cc b/src/property-descriptor.cc
index 243a9fa..750f948 100644
--- a/src/property-descriptor.cc
+++ b/src/property-descriptor.cc
@@ -13,6 +13,8 @@
namespace v8 {
namespace internal {
+namespace {
+
// Helper function for ToPropertyDescriptor. Comments describe steps for
// "enumerable", other properties are handled the same way.
// Returns false if an exception was thrown.
@@ -101,19 +103,51 @@
}
-static void CreateDataProperty(Isolate* isolate, Handle<JSObject> object,
- Handle<String> name, Handle<Object> value) {
+void CreateDataProperty(Isolate* isolate, Handle<JSObject> object,
+ Handle<String> name, Handle<Object> value) {
LookupIterator it(object, name, LookupIterator::OWN_SKIP_INTERCEPTOR);
Maybe<bool> result = JSObject::CreateDataProperty(&it, value);
CHECK(result.IsJust() && result.FromJust());
}
+} // namespace
+
// ES6 6.2.4.4 "FromPropertyDescriptor"
Handle<Object> PropertyDescriptor::ToObject(Isolate* isolate) {
DCHECK(!(PropertyDescriptor::IsAccessorDescriptor(this) &&
PropertyDescriptor::IsDataDescriptor(this)));
Factory* factory = isolate->factory();
+ if (IsRegularAccessorProperty()) {
+ // Fast case for regular accessor properties.
+ Handle<JSObject> result = factory->NewJSObjectFromMap(
+ isolate->accessor_property_descriptor_map());
+ result->InObjectPropertyAtPut(JSAccessorPropertyDescriptor::kGetIndex,
+ *get());
+ result->InObjectPropertyAtPut(JSAccessorPropertyDescriptor::kSetIndex,
+ *set());
+ result->InObjectPropertyAtPut(
+ JSAccessorPropertyDescriptor::kEnumerableIndex,
+ isolate->heap()->ToBoolean(enumerable()));
+ result->InObjectPropertyAtPut(
+ JSAccessorPropertyDescriptor::kConfigurableIndex,
+ isolate->heap()->ToBoolean(configurable()));
+ return result;
+ }
+ if (IsRegularDataProperty()) {
+ // Fast case for regular data properties.
+ Handle<JSObject> result =
+ factory->NewJSObjectFromMap(isolate->data_property_descriptor_map());
+ result->InObjectPropertyAtPut(JSDataPropertyDescriptor::kValueIndex,
+ *value());
+ result->InObjectPropertyAtPut(JSDataPropertyDescriptor::kWritableIndex,
+ isolate->heap()->ToBoolean(writable()));
+ result->InObjectPropertyAtPut(JSDataPropertyDescriptor::kEnumerableIndex,
+ isolate->heap()->ToBoolean(enumerable()));
+ result->InObjectPropertyAtPut(JSDataPropertyDescriptor::kConfigurableIndex,
+ isolate->heap()->ToBoolean(configurable()));
+ return result;
+ }
Handle<JSObject> result = factory->NewJSObject(isolate->object_function());
if (has_value()) {
CreateDataProperty(isolate, result, factory->value_string(), value());