Skip to content

Commit e83e3cc

Browse files
committed
Add setattr/setitem
1 parent 1fa55ab commit e83e3cc

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

wasm/lib/src/objjsvalue.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ fn get_prop(value: JsValue, name: &str, vm: &VirtualMachine) -> Option<PyObjectR
2121
}
2222
}
2323

24+
fn set_prop(value: &JsValue, name: &str, val: PyObjectRef, vm: &VirtualMachine) {
25+
Reflect::set(value, &name.into(), &convert::py_to_js(vm, val)).expect("Reflect failed");
26+
}
27+
2428
#[pyclass(name = "JsValue")]
2529
#[derive(Debug)]
2630
pub struct PyJsValue {
@@ -54,6 +58,11 @@ impl PyJsValue {
5458
})
5559
}
5660

61+
#[pymethod(name = "__setattr__")]
62+
fn setattr(&self, attr_name: PyStringRef, val: PyObjectRef, vm: &VirtualMachine) {
63+
set_prop(self.value(), attr_name.as_str(), val, vm);
64+
}
65+
5766
#[pymethod(name = "__repr__")]
5867
fn repr(&self, _vm: &VirtualMachine) -> String {
5968
format!("{:?}", self.value())
@@ -131,6 +140,11 @@ impl PyJsProps {
131140
get_prop(self.value.clone(), item_name.as_str(), vm)
132141
.ok_or_else(|| vm.new_key_error(format!("{:?}", item_name.as_str())))
133142
}
143+
144+
#[pymethod(name = "__setitem__")]
145+
fn setitem(&self, item_name: PyStringRef, val: PyObjectRef, vm: &VirtualMachine) {
146+
set_prop(&self.value, item_name.as_str(), val, vm);
147+
}
134148
}
135149

136150
pub fn init(ctx: &PyContext) {

0 commit comments

Comments
 (0)