File tree Expand file tree Collapse file tree 3 files changed +100
-0
lines changed
Expand file tree Collapse file tree 3 files changed +100
-0
lines changed Original file line number Diff line number Diff line change 1+ use rustpython_vm as vm;
2+ use vm:: {
3+ builtins:: PyIntRef ,
4+ protocol:: { PyIter , PyIterReturn } ,
5+ Interpreter , PyResult ,
6+ } ;
7+
8+ fn py_main ( interp : & Interpreter ) -> vm:: PyResult < ( ) > {
9+ let generator = interp. enter ( |vm| {
10+ let scope = vm. new_scope_with_builtins ( ) ;
11+ let generator = vm. run_block_expr (
12+ scope. clone ( ) ,
13+ r#"
14+ def gen():
15+ for i in range(10):
16+ yield i
17+
18+ gen()
19+ "# ,
20+ ) ?;
21+ Ok ( generator)
22+ } ) ?;
23+
24+ loop {
25+ let r = interp. enter ( |vm| {
26+ let v = match PyIter :: new ( generator. clone ( ) ) . next ( vm) ? {
27+ PyIterReturn :: Return ( obj) => {
28+ PyIterReturn :: Return ( obj. try_into_value :: < PyIntRef > ( vm) ?)
29+ }
30+ PyIterReturn :: StopIteration ( x) => PyIterReturn :: StopIteration ( x) ,
31+ } ;
32+ PyResult :: Ok ( v)
33+ } ) ?;
34+ match r {
35+ PyIterReturn :: Return ( value) => println ! ( "{}" , value) ,
36+ PyIterReturn :: StopIteration ( _) => break ,
37+ }
38+ }
39+
40+ Ok ( ( ) )
41+ }
42+
43+ fn main ( ) {
44+ let interp = vm:: Interpreter :: with_init ( Default :: default ( ) , |vm| {
45+ vm. add_native_modules ( rustpython_stdlib:: get_module_inits ( ) ) ;
46+ } ) ;
47+ let result = py_main ( & interp) ;
48+ std:: process:: exit ( interp. run ( |_vm| result) ) ;
49+ }
Original file line number Diff line number Diff line change 1+ from dataclasses import dataclass
2+ from typing import Any
3+
4+ __all__ = ["context" ]
5+
6+
7+ @dataclass
8+ class Context :
9+ name : str
10+ something : Any
11+
12+
13+ _context = Context (
14+ name = "test name" ,
15+ something = None ,
16+ )
17+
18+
19+ def context () -> Context :
20+ return _context
21+
22+
23+ if __name__ == "__main__" :
24+ print (context ().name )
Original file line number Diff line number Diff line change 1+ use rustpython_vm as vm;
2+ use vm:: { builtins:: PyStrRef , Interpreter } ;
3+
4+ fn py_main ( interp : & Interpreter ) -> vm:: PyResult < PyStrRef > {
5+ interp. enter ( |vm| {
6+ vm. insert_sys_path ( vm. new_pyobj ( "examples" ) )
7+ . expect ( "add path" ) ;
8+ let module = vm. import ( "package_embed" , None , 0 ) ?;
9+ let name_func = module. get_attr ( "context" , vm) ?;
10+ let result = vm. invoke ( & name_func, ( ) ) ?;
11+ let result: PyStrRef = result. get_attr ( "name" , vm) ?. try_into_value ( vm) ?;
12+ vm:: PyResult :: Ok ( result)
13+ } )
14+ }
15+
16+ fn main ( ) -> vm:: PyResult < ( ) > {
17+ let interp = vm:: Interpreter :: with_init ( Default :: default ( ) , |vm| {
18+ vm. add_native_modules ( rustpython_stdlib:: get_module_inits ( ) ) ;
19+ } ) ;
20+ let result = py_main ( & interp) ;
21+ let result = result. and_then ( |result| {
22+ println ! ( "name: {}" , result) ;
23+ Ok ( ( ) )
24+ } ) ;
25+ let exit_code = interp. run ( |_vm| result) ;
26+ std:: process:: exit ( exit_code) ;
27+ }
You can’t perform that action at this time.
0 commit comments