@@ -13,31 +13,19 @@ pub fn init(context: &PyContext) {
13
13
let code_type = & context. code_type ;
14
14
context. set_attr ( code_type, "__new__" , context. new_rustfunc ( code_new) ) ;
15
15
context. set_attr ( code_type, "__repr__" , context. new_rustfunc ( code_repr) ) ;
16
- context. set_attr (
17
- code_type,
18
- "co_argcount" ,
19
- context. new_member_descriptor ( code_co_argcount) ,
20
- ) ;
21
- context. set_attr (
22
- code_type,
23
- "co_cellvars" ,
24
- context. new_member_descriptor ( code_co_cellvars) ,
25
- ) ;
26
- context. set_attr (
27
- code_type,
28
- "co_consts" ,
29
- context. new_member_descriptor ( code_co_consts) ,
30
- ) ;
31
- context. set_attr (
32
- code_type,
33
- "co_filename" ,
34
- context. new_member_descriptor ( code_co_filename) ,
35
- ) ;
36
- context. set_attr (
37
- code_type,
38
- "co_firstlineno" ,
39
- context. new_member_descriptor ( code_co_firstlineno) ,
40
- ) ;
16
+
17
+ for ( name, f) in vec ! [
18
+ (
19
+ "co_argcount" ,
20
+ code_co_argcount as fn ( & mut VirtualMachine , PyFuncArgs ) -> PyResult ,
21
+ ) ,
22
+ ( "co_filename" , code_co_filename) ,
23
+ ( "co_firstlineno" , code_co_firstlineno) ,
24
+ ( "co_kwonlyargcount" , code_co_kwonlyargcount) ,
25
+ ( "co_name" , code_co_name) ,
26
+ ] {
27
+ context. set_attr ( code_type, name, context. new_member_descriptor ( f) )
28
+ }
41
29
}
42
30
43
31
pub fn get_value ( obj : & PyObjectRef ) -> bytecode:: CodeObject {
@@ -87,16 +75,6 @@ fn code_co_argcount(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
87
75
Ok ( vm. ctx . new_int ( code_obj. arg_names . len ( ) ) )
88
76
}
89
77
90
- fn code_co_cellvars ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
91
- let _code_obj = member_code_obj ( vm, args) ?;
92
- Ok ( vm. ctx . new_tuple ( vec ! [ ] ) )
93
- }
94
-
95
- fn code_co_consts ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
96
- let _code_obj = member_code_obj ( vm, args) ?;
97
- Ok ( vm. ctx . new_tuple ( vec ! [ vm. get_none( ) ] ) )
98
- }
99
-
100
78
fn code_co_filename ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
101
79
let code_obj = member_code_obj ( vm, args) ?;
102
80
let source_path = code_obj. source_path ;
@@ -107,3 +85,13 @@ fn code_co_firstlineno(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
107
85
let code_obj = member_code_obj ( vm, args) ?;
108
86
Ok ( vm. ctx . new_int ( code_obj. first_line_number ) )
109
87
}
88
+
89
+ fn code_co_kwonlyargcount ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
90
+ let code_obj = member_code_obj ( vm, args) ?;
91
+ Ok ( vm. ctx . new_int ( code_obj. kwonlyarg_names . len ( ) ) )
92
+ }
93
+
94
+ fn code_co_name ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
95
+ let code_obj = member_code_obj ( vm, args) ?;
96
+ Ok ( vm. new_str ( code_obj. obj_name ) )
97
+ }
0 commit comments