Skip to content

Commit 73a65a1

Browse files
committed
dis.rs - small refactor dis_dis.
1 parent 79f43ad commit 73a65a1

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

tests/snippets/dismod.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,17 @@ def f():
1818
raise not ValueError({1 for i in [1,2,3]})
1919

2020
dis.dis(f)
21+
22+
class A(object):
23+
def f():
24+
x += 1
25+
pass
26+
def g():
27+
for i in range(5):
28+
if i:
29+
continue
30+
else:
31+
break
32+
33+
print("A.f\n")
34+
dis.dis(A.f)

vm/src/stdlib/dis.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ use crate::vm::VirtualMachine;
44

55
fn dis_dis(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
66
arg_check!(vm, args, required = [(obj, None)]);
7+
8+
// Method or function:
79
let code_name = vm.new_str("__code__".to_string());
8-
let code = match vm.get_attribute(obj.clone(), code_name) {
9-
Ok(co) => co,
10-
Err(..) => obj.clone(),
11-
};
10+
if let Ok(co) = vm.get_attribute(obj.clone(), code_name) {
11+
return dis_disassemble(vm, PyFuncArgs::new(vec![co], vec![]));
12+
}
1213

13-
dis_disassemble(vm, PyFuncArgs::new(vec![code], vec![]))
14+
dis_disassemble(vm, PyFuncArgs::new(vec![obj.clone()], vec![]))
1415
}
1516

1617
fn dis_disassemble(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {

0 commit comments

Comments
 (0)