diff --git a/vm/src/builtins/getset.rs b/vm/src/builtins/getset.rs index 8b91ca62de..dffcbc116f 100644 --- a/vm/src/builtins/getset.rs +++ b/vm/src/builtins/getset.rs @@ -336,6 +336,19 @@ impl PyGetSet { } } } + #[pymethod] + fn __set__( + zelf: PyObjectRef, + obj: PyObjectRef, + value: PyObjectRef, + vm: &VirtualMachine, + ) -> PyResult<()> { + Self::descr_set(zelf, obj, Some(value), vm) + } + #[pymethod] + fn __delete__(zelf: PyObjectRef, obj: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> { + Self::descr_set(zelf, obj, None, vm) + } #[pyproperty(magic)] fn name(&self) -> String { diff --git a/vm/src/builtins/make_module.rs b/vm/src/builtins/make_module.rs index d48e5b9f12..10cdf30790 100644 --- a/vm/src/builtins/make_module.rs +++ b/vm/src/builtins/make_module.rs @@ -157,7 +157,8 @@ mod decl { // TODO: compile::compile should probably get bytes let source = match &source { Either::A(string) => string.borrow_value(), - Either::B(bytes) => std::str::from_utf8(bytes).unwrap(), + Either::B(bytes) => std::str::from_utf8(bytes) + .map_err(|e| vm.new_unicode_decode_error(e.to_string()))?, }; let flags = args diff --git a/vm/src/builtins/property.rs b/vm/src/builtins/property.rs index 2917434818..1c44795b45 100644 --- a/vm/src/builtins/property.rs +++ b/vm/src/builtins/property.rs @@ -136,6 +136,19 @@ impl PyProperty { } } } + #[pymethod] + fn __set__( + zelf: PyObjectRef, + obj: PyObjectRef, + value: PyObjectRef, + vm: &VirtualMachine, + ) -> PyResult<()> { + Self::descr_set(zelf, obj, Some(value), vm) + } + #[pymethod] + fn __delete__(zelf: PyObjectRef, obj: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> { + Self::descr_set(zelf, obj, None, vm) + } // Access functions