@@ -8,12 +8,13 @@ use rustpython_vm::VirtualMachine;
8
8
9
9
use crate :: convert;
10
10
11
- fn get_prop ( value : & JsValue , name : & str , vm : & VirtualMachine ) -> Option < PyObjectRef > {
11
+ fn get_prop ( value : JsValue , name : & str , vm : & VirtualMachine ) -> Option < PyObjectRef > {
12
12
let name: & JsString = & name. into ( ) ;
13
- if Reflect :: has ( value, name) . expect ( "Reflect.has failed" ) {
14
- Some ( convert:: js_to_py (
13
+ if Reflect :: has ( & value, name) . expect ( "Reflect.has failed" ) {
14
+ Some ( convert:: js_to_py_with_this (
15
15
vm,
16
- Reflect :: get ( value, name) . expect ( "Reflect.get failed" ) ,
16
+ Reflect :: get ( & value, name) . expect ( "Reflect.get failed" ) ,
17
+ Some ( value) ,
17
18
) )
18
19
} else {
19
20
None
@@ -48,7 +49,7 @@ impl PyJsValue {
48
49
49
50
#[ pymethod( name = "__getattr__" ) ]
50
51
fn getattr ( & self , attr_name : PyStringRef , vm : & VirtualMachine ) -> PyResult {
51
- get_prop ( self . value ( ) , attr_name. as_str ( ) , vm) . ok_or_else ( || {
52
+ get_prop ( self . value ( ) . clone ( ) , attr_name. as_str ( ) , vm) . ok_or_else ( || {
52
53
vm. new_attribute_error ( format ! ( "JS value has no property {:?}" , attr_name. as_str( ) ) )
53
54
} )
54
55
}
@@ -113,14 +114,14 @@ impl PyJsProps {
113
114
default : OptionalArg ,
114
115
vm : & VirtualMachine ,
115
116
) -> PyObjectRef {
116
- get_prop ( & self . value , item_name. as_str ( ) , vm)
117
+ get_prop ( self . value . clone ( ) , item_name. as_str ( ) , vm)
117
118
. or ( default. into_option ( ) )
118
119
. unwrap_or_else ( || vm. get_none ( ) )
119
120
}
120
121
121
122
#[ pymethod( name = "__getitem__" ) ]
122
123
fn getitem ( & self , item_name : PyStringRef , vm : & VirtualMachine ) -> PyResult {
123
- get_prop ( & self . value , item_name. as_str ( ) , vm)
124
+ get_prop ( self . value . clone ( ) , item_name. as_str ( ) , vm)
124
125
. ok_or_else ( || vm. new_key_error ( format ! ( "{:?}" , item_name. as_str( ) ) ) )
125
126
}
126
127
}
0 commit comments