@@ -7,7 +7,7 @@ use std::ops::Deref;
7
7
8
8
use num_complex:: Complex64 ;
9
9
10
- use rustpython_parser:: { ast, parser} ;
10
+ use rustpython_parser:: { ast, mode :: Mode , parser} ;
11
11
12
12
use crate :: obj:: objlist:: PyListRef ;
13
13
use crate :: obj:: objtype:: PyClassRef ;
@@ -50,11 +50,12 @@ macro_rules! node {
50
50
}
51
51
}
52
52
53
- pub ( crate ) fn source_to_ast ( vm : & VirtualMachine , source : & str ) -> PyResult {
54
- let internal_ast =
55
- parser:: parse_program ( source) . map_err ( |err| vm. new_value_error ( format ! ( "{}" , err) ) ) ?;
56
- let py_body = statements_to_ast ( vm, & internal_ast. statements ) ?;
57
- Ok ( node ! ( vm, Module , { body => py_body } ) . into_object ( ) )
53
+ fn top_to_ast ( vm : & VirtualMachine , top : & ast:: Top ) -> PyResult < PyListRef > {
54
+ match top {
55
+ ast:: Top :: Program ( program) => statements_to_ast ( vm, & program. statements ) ,
56
+ ast:: Top :: Statement ( statements) => statements_to_ast ( vm, statements) ,
57
+ ast:: Top :: Expression ( _) => unimplemented ! ( "top_to_ast unimplemented ast::Top::Expression" ) ,
58
+ }
58
59
}
59
60
60
61
// Create a node class instance
@@ -634,6 +635,12 @@ fn string_to_ast(vm: &VirtualMachine, string: &ast::StringGroup) -> PyResult<Ast
634
635
Ok ( string)
635
636
}
636
637
638
+ pub ( crate ) fn parse ( vm : & VirtualMachine , source : & str , mode : Mode ) -> PyResult {
639
+ let ast = parser:: parse ( source, mode) . map_err ( |err| vm. new_value_error ( format ! ( "{}" , err) ) ) ?;
640
+ let py_body = top_to_ast ( vm, & ast) ?;
641
+ Ok ( node ! ( vm, Module , { body => py_body } ) . into_object ( ) )
642
+ }
643
+
637
644
pub fn make_module ( vm : & VirtualMachine ) -> PyObjectRef {
638
645
let ctx = & vm. ctx ;
639
646
0 commit comments