File tree Expand file tree Collapse file tree 1 file changed +14
-6
lines changed
Expand file tree Collapse file tree 1 file changed +14
-6
lines changed Original file line number Diff line number Diff line change @@ -70,13 +70,21 @@ impl PyDict {
7070 Err ( other) => other,
7171 } ;
7272 let dict = & self . entries ;
73- if let Some ( keys) = vm. get_method ( other. clone ( ) , vm. ctx . intern_str ( "keys" ) ) {
74- let keys = keys?. call ( ( ) , vm) ?. get_iter ( vm) ?;
75- while let PyIterReturn :: Return ( key) = keys. next ( vm) ? {
76- let val = other. get_item ( & * key, vm) ?;
77- dict. insert ( vm, & * key, val) ?;
73+ // Use get_attr to properly invoke __getattribute__ for proxy objects
74+ let keys_result = other. get_attr ( vm. ctx . intern_str ( "keys" ) , vm) ;
75+ let has_keys = match keys_result {
76+ Ok ( keys_method) => {
77+ let keys = keys_method. call ( ( ) , vm) ?. get_iter ( vm) ?;
78+ while let PyIterReturn :: Return ( key) = keys. next ( vm) ? {
79+ let val = other. get_item ( & * key, vm) ?;
80+ dict. insert ( vm, & * key, val) ?;
81+ }
82+ true
7883 }
79- } else {
84+ Err ( e) if e. fast_isinstance ( vm. ctx . exceptions . attribute_error ) => false ,
85+ Err ( e) => return Err ( e) ,
86+ } ;
87+ if !has_keys {
8088 let iter = other. get_iter ( vm) ?;
8189 loop {
8290 fn err ( vm : & VirtualMachine ) -> PyBaseExceptionRef {
You can’t perform that action at this time.
0 commit comments