@@ -21,6 +21,10 @@ fn get_prop(value: JsValue, name: &str, vm: &VirtualMachine) -> Option<PyObjectR
21
21
}
22
22
}
23
23
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
+
24
28
#[ pyclass( name = "JsValue" ) ]
25
29
#[ derive( Debug ) ]
26
30
pub struct PyJsValue {
@@ -54,6 +58,11 @@ impl PyJsValue {
54
58
} )
55
59
}
56
60
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
+
57
66
#[ pymethod( name = "__repr__" ) ]
58
67
fn repr ( & self , _vm : & VirtualMachine ) -> String {
59
68
format ! ( "{:?}" , self . value( ) )
@@ -131,6 +140,11 @@ impl PyJsProps {
131
140
get_prop ( self . value . clone ( ) , item_name. as_str ( ) , vm)
132
141
. ok_or_else ( || vm. new_key_error ( format ! ( "{:?}" , item_name. as_str( ) ) ) )
133
142
}
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
+ }
134
148
}
135
149
136
150
pub fn init ( ctx : & PyContext ) {
0 commit comments