1- use super :: pyobject:: { DictProtocol , PyContext , PyFuncArgs , PyObjectRef , PyResult } ;
2- use super :: vm:: VirtualMachine ;
3- use std:: env;
1+ use num_bigint:: ToBigInt ;
2+ use obj:: objtype;
3+ use pyobject:: { DictProtocol , PyContext , PyFuncArgs , PyObjectRef , PyResult , TypeProtocol } ;
4+ use std:: rc:: Rc ;
5+ use std:: { env, mem} ;
6+ use vm:: VirtualMachine ;
47
58/*
69 * The magic sys module.
@@ -20,6 +23,19 @@ fn getframe(vm: &mut VirtualMachine, _args: PyFuncArgs) -> PyResult {
2023}
2124}
2225
26+ fn sys_getrefcount ( vm : & mut VirtualMachine , args : PyFuncArgs ) ->PyResult {
27+ arg_check ! ( vm, args, required =[ ( object, None ) ] ) ;
28+ let size =Rc :: strong_count ( & object) ;
29+ Ok ( vm. ctx . new_int ( size. to_bigint ( ) . unwrap ( ) ) )
30+ }
31+
32+ fn sys_getsizeof ( vm : & mut VirtualMachine , args : PyFuncArgs ) ->PyResult {
33+ arg_check ! ( vm, args, required =[ ( object, None ) ] ) ;
34+ // TODO: implement default optional argument.
35+ let size = mem:: size_of_val ( & object. borrow ( ) ) ;
36+ Ok ( vm. ctx . new_int ( size. to_bigint ( ) . unwrap ( ) ) )
37+ }
38+
2339pub fn mk_module ( ctx : & PyContext ) ->PyObjectRef {
2440let path_list =match env:: var_os ( "PYTHONPATH" ) {
2541Some ( paths) => env:: split_paths ( & paths)
@@ -34,7 +50,13 @@ pub fn mk_module(ctx: &PyContext) -> PyObjectRef {
3450 modules. set_item ( & sys_name, sys_mod. clone ( ) ) ;
3551 sys_mod. set_item ( "modules" , modules) ;
3652 sys_mod. set_item ( "argv" , argv ( ctx) ) ;
53+ sys_mod. set_item ( "getrefcount" , ctx. new_rustfunc ( sys_getrefcount) ) ;
54+ sys_mod. set_item ( "getsizeof" , ctx. new_rustfunc ( sys_getsizeof) ) ;
55+ let maxsize = ctx. new_int ( std:: usize:: MAX . to_bigint ( ) . unwrap ( ) ) ;
56+ sys_mod. set_item ( "maxsize" , maxsize) ;
3757 sys_mod. set_item ( "path" , path) ;
58+ sys_mod. set_item ( "ps1" , ctx. new_str ( ">>>>> " . to_string ( ) ) ) ;
59+ sys_mod. set_item ( "ps2" , ctx. new_str ( "..... " . to_string ( ) ) ) ;
3860 sys_mod. set_item ( "_getframe" , ctx. new_rustfunc ( getframe) ) ;
3961 sys_mod
4062}