| 7813 | } |
| 7814 | |
| 7815 | fn load_attr_slow(&mut self, vm: &VirtualMachine, oparg: LoadAttr) -> FrameResult { |
| 7816 | let attr_name = self.code.names[oparg.name_idx() as usize]; |
| 7817 | let parent = self.pop_value(); |
| 7818 | |
| 7819 | if oparg.is_method() { |
| 7820 | // Method call: push [method, self_or_null] |
| 7821 | let method = PyMethod::get(parent.clone(), attr_name, vm)?; |
| 7822 | match method { |
| 7823 | PyMethod::Function { target: _, func } => { |
| 7824 | self.push_value(func); |
| 7825 | self.push_value(parent); |
| 7826 | } |
| 7827 | PyMethod::Attribute(val) => { |
| 7828 | self.push_value(val); |
| 7829 | self.push_null(); |
| 7830 | } |
| 7831 | } |
| 7832 | } else { |
| 7833 | // Regular attribute access |
| 7834 | let obj = parent.get_attr(attr_name, vm)?; |
| 7835 | self.push_value(obj); |
| 7836 | } |
| 7837 | Ok(None) |
| 7838 | } |
| 7839 | |
| 7840 | fn specialize_binary_op( |
| 7841 | &mut self, |