@@ -75,29 +75,16 @@ pub fn compile(
7575 source_path : String ,
7676 opts : CompileOpts ,
7777) -> Result < CodeObject , CompileError > {
78- macro_rules! try_parse {
79- ( $x: expr) => {
80- match $x {
81- Ok ( x) => x,
82- Err ( e) => return Err ( CompileError :: from_parse( e, source, source_path) ) ,
83- }
84- } ;
85- }
86- let res = match mode {
87- compile:: Mode :: Exec => {
88- let ast = try_parse ! ( parser:: parse_program( source) ) ;
89- compile:: compile_program ( ast, source_path, opts)
90- }
91- compile:: Mode :: Eval => {
92- let statement = try_parse ! ( parser:: parse_statement( source) ) ;
93- compile:: compile_statement_eval ( statement, source_path, opts)
94- }
95- compile:: Mode :: Single => {
96- let ast = try_parse ! ( parser:: parse_program( source) ) ;
97- compile:: compile_program_single ( ast, source_path, opts)
98- }
78+ let mode = match mode {
79+ compile:: Mode :: Exec => parser:: Mode :: Module ,
80+ compile:: Mode :: Eval => parser:: Mode :: Expression ,
81+ compile:: Mode :: Single => parser:: Mode :: Interactive ,
82+ } ;
83+ let ast = match parser:: parse ( source, mode) {
84+ Ok ( x) => x,
85+ Err ( e) => return Err ( CompileError :: from_parse ( e, source, source_path) ) ,
9986 } ;
100- res . map_err ( |e| CompileError :: from_compile ( e, source) )
87+ compile :: compile_top ( & ast , source_path , opts ) . map_err ( |e| CompileError :: from_compile ( e, source) )
10188}
10289
10390pub fn compile_symtable (
@@ -119,8 +106,8 @@ pub fn compile_symtable(
119106 symboltable:: make_symbol_table ( & ast)
120107 }
121108 compile:: Mode :: Eval => {
122- let statement = try_parse ! ( parser:: parse_statement ( source) ) ;
123- symboltable:: statements_to_symbol_table ( & statement )
109+ let expr = try_parse ! ( parser:: parse_expression ( source) ) ;
110+ symboltable:: make_symbol_table_expr ( & expr )
124111 }
125112 } ;
126113 res. map_err ( |e| CompileError :: from_symtable ( e, source, source_path. to_owned ( ) ) )
0 commit comments