Browse Source

LibJS: Never omit setter/getter attributes in accessor descriptor object

These should not be omitted, an accessor with out getter or setter still
yields an undefined for the attribute in its descriptor object.
Linus Groh 4 years ago
parent
commit
3fdad563e2
1 changed files with 8 additions and 11 deletions
  1. 8 11
      Userland/Libraries/LibJS/Runtime/Object.cpp

+ 8 - 11
Userland/Libraries/LibJS/Runtime/Object.cpp

@@ -434,17 +434,14 @@ Value Object::get_own_property_descriptor_object(const PropertyName& property_na
         descriptor_object->define_property(vm.names.writable, Value(descriptor.attributes.is_writable()));
         if (vm.exception())
             return {};
-    } else if (descriptor.is_accessor_descriptor()) {
-        if (descriptor.getter) {
-            descriptor_object->define_property(vm.names.get, Value(descriptor.getter));
-            if (vm.exception())
-                return {};
-        }
-        if (descriptor.setter) {
-            descriptor_object->define_property(vm.names.set, Value(descriptor.setter));
-            if (vm.exception())
-                return {};
-        }
+    } else {
+        VERIFY(descriptor.is_accessor_descriptor());
+        descriptor_object->define_property(vm.names.get, descriptor.getter ? Value(descriptor.getter) : js_undefined());
+        if (vm.exception())
+            return {};
+        descriptor_object->define_property(vm.names.set, descriptor.setter ? Value(descriptor.setter) : js_undefined());
+        if (vm.exception())
+            return {};
     }
     descriptor_object->define_property(vm.names.enumerable, Value(descriptor.attributes.is_enumerable()));
     if (vm.exception())