1
1
use crate :: import;
2
+ use crate :: obj:: objbytes:: PyBytesRef ;
2
3
use crate :: obj:: objcode:: PyCode ;
3
4
use crate :: obj:: objmodule:: PyModuleRef ;
4
5
use crate :: obj:: objstr;
5
6
use crate :: obj:: objstr:: PyStringRef ;
6
7
use crate :: pyobject:: { ItemProtocol , PyObjectRef , PyResult } ;
8
+ use crate :: stdlib:: thread:: RawRMutex ;
7
9
use crate :: vm:: VirtualMachine ;
8
10
11
+ static IMP_LOCK : RawRMutex = RawRMutex :: INIT ;
12
+
9
13
fn imp_extension_suffixes ( vm : & VirtualMachine ) -> PyResult {
10
14
Ok ( vm. ctx . new_list ( vec ! [ ] ) )
11
15
}
12
16
13
- fn imp_acquire_lock ( _vm : & VirtualMachine ) -> PyResult < ( ) > {
14
- // TODO
15
- Ok ( ( ) )
17
+ fn imp_acquire_lock ( _vm : & VirtualMachine ) {
18
+ IMP_LOCK . lock ( )
16
19
}
17
20
18
- fn imp_release_lock ( _vm : & VirtualMachine ) -> PyResult < ( ) > {
19
- // TODO
20
- Ok ( ( ) )
21
+ fn imp_release_lock ( vm : & VirtualMachine ) -> PyResult < ( ) > {
22
+ if !IMP_LOCK . is_locked ( ) {
23
+ Err ( vm. new_runtime_error ( "Global import lock not held" . to_owned ( ) ) )
24
+ } else {
25
+ IMP_LOCK . unlock ( ) ;
26
+ Ok ( ( ) )
27
+ }
21
28
}
22
29
23
- fn imp_lock_held ( _vm : & VirtualMachine ) -> PyResult < ( ) > {
24
- // TODO
25
- Ok ( ( ) )
30
+ fn imp_lock_held ( _vm : & VirtualMachine ) -> bool {
31
+ IMP_LOCK . is_locked ( )
26
32
}
27
33
28
34
fn imp_is_builtin ( name : PyStringRef , vm : & VirtualMachine ) -> bool {
@@ -90,6 +96,11 @@ fn imp_fix_co_filename(_code: PyObjectRef, _path: PyStringRef) {
90
96
// TODO:
91
97
}
92
98
99
+ fn imp_source_hash ( _key : u64 , _source : PyBytesRef , vm : & VirtualMachine ) -> PyResult {
100
+ // TODO:
101
+ Ok ( vm. get_none ( ) )
102
+ }
103
+
93
104
pub fn make_module ( vm : & VirtualMachine ) -> PyObjectRef {
94
105
let ctx = & vm. ctx ;
95
106
py_module ! ( vm, "_imp" , {
@@ -105,5 +116,6 @@ pub fn make_module(vm: &VirtualMachine) -> PyObjectRef {
105
116
"init_frozen" => ctx. new_function( imp_init_frozen) ,
106
117
"is_frozen_package" => ctx. new_function( imp_is_frozen_package) ,
107
118
"_fix_co_filename" => ctx. new_function( imp_fix_co_filename) ,
119
+ "source_hash" => ctx. new_function( imp_source_hash)
108
120
} )
109
121
}
0 commit comments