diff --git a/boa/src/builtins/bigint/mod.rs b/boa/src/builtins/bigint/mod.rs index 0b374511ef0..f7762b85b39 100644 --- a/boa/src/builtins/bigint/mod.rs +++ b/boa/src/builtins/bigint/mod.rs @@ -63,7 +63,7 @@ impl BuiltIn for BigInt { .value(bigint_object) .writable(true) .enumerable(false) - .configurable(false) + .configurable(true) .build(), ) } diff --git a/boa/src/object/internal_methods.rs b/boa/src/object/internal_methods.rs index 0ee3cdfa454..07099288b18 100644 --- a/boa/src/object/internal_methods.rs +++ b/boa/src/object/internal_methods.rs @@ -302,7 +302,7 @@ impl GcObject { DescriptorKind::Data { value: Some(value), .. } => Ok(value.clone()), - DescriptorKind::Accessor { get: Some(get), .. } => { + DescriptorKind::Accessor { get: Some(get), .. } if !get.is_undefined() => { context.call(get, &receiver, &[]) } _ => Ok(Value::undefined()), @@ -351,19 +351,22 @@ impl GcObject { if !existing_desc.expect_writable() { return Ok(false); } - receiver.__define_own_property__( + return receiver.__define_own_property__( key, PropertyDescriptor::builder().value(value).build(), context, - ) + ); } else { - receiver.create_data_property(key, value, context) + return receiver.create_data_property(key, value, context); } - } else if let Some(set) = own_desc.set() { - context.call(set, &receiver, &[value])?; - Ok(true) - } else { - Ok(false) + } + + match own_desc.set() { + Some(set) if !set.is_undefined() => { + context.call(set, &receiver, &[value])?; + Ok(true) + } + _ => Ok(false), } } @@ -702,7 +705,7 @@ impl GcObject { } for (p, d) in descriptors { - self.__define_own_property__(p, d, context)?; + self.define_property_or_throw(p, d, context)?; } Ok(())