1+ #![ allow( non_snake_case) ]
12use colored:: Colorize ;
23use inkwell:: targets:: * ;
34use inkwell:: execution_engine:: FunctionLookupError ;
@@ -32,8 +33,7 @@ const INIT_NEEDED: InitializationConfig = InitializationConfig {
3233 info : true ,
3334 machine_code : true
3435} ;
35- #[ allow( non_snake_case) ]
36- fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
36+ fn driver ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
3737 let ERROR = & "error" . bright_red ( ) . bold ( ) ;
3838 let WARNING = & "warning" . bright_yellow ( ) . bold ( ) ;
3939 let MODULE = & "module" . blue ( ) . bold ( ) ;
@@ -89,16 +89,16 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
8989 let file = cobalt:: errors:: files:: add_file ( "<command line>" . to_string ( ) , arg. clone ( ) ) ;
9090 let files = & * cobalt:: errors:: files:: FILES . read ( ) . unwrap ( ) ;
9191 let ( toks, errs) = cobalt:: parser:: lex ( arg. as_str ( ) , ( file, 0 ) , & flags) ;
92- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; }
93- for tok in toks { term:: emit ( & mut stdout, & config, files, & Diagnostic :: note ( ) . with_message ( format ! ( "{tok}" ) ) . with_labels ( vec ! [ Label :: primary( tok. loc. 0 , tok. loc. 1 ) ] ) ) . unwrap ( ) ; }
92+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; }
93+ for tok in toks { term:: emit ( & mut stdout, & config, files, & Diagnostic :: note ( ) . with_message ( format ! ( "{tok}" ) ) . with_labels ( vec ! [ Label :: primary( tok. loc. 0 , tok. loc. 1 ) ] ) ) ? ; }
9494 }
9595 else {
9696 let code = std:: fs:: read_to_string ( arg. as_str ( ) ) ?;
9797 let file = cobalt:: errors:: files:: add_file ( arg. clone ( ) , code. clone ( ) ) ;
9898 let files = & * cobalt:: errors:: files:: FILES . read ( ) . unwrap ( ) ;
9999 let ( toks, errs) = cobalt:: parser:: lex ( code. as_str ( ) , ( file, 0 ) , & flags) ;
100- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; }
101- for tok in toks { term:: emit ( & mut stdout, & config, files, & Diagnostic :: note ( ) . with_message ( format ! ( "{tok}" ) ) . with_labels ( vec ! [ Label :: primary( tok. loc. 0 , tok. loc. 1 ) ] ) ) . unwrap ( ) ; }
100+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; }
101+ for tok in toks { term:: emit ( & mut stdout, & config, files, & Diagnostic :: note ( ) . with_message ( format ! ( "{tok}" ) ) . with_labels ( vec ! [ Label :: primary( tok. loc. 0 , tok. loc. 1 ) ] ) ) ? ; }
102102 }
103103 }
104104 if nfcl {
@@ -139,7 +139,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
139139 let ( toks, mut errs) = cobalt:: parser:: lex ( arg. as_str ( ) , ( file, 0 ) , & flags) ;
140140 let ( ast, mut es) = cobalt:: parser:: parse ( toks. as_slice ( ) , & flags) ;
141141 errs. append ( & mut es) ;
142- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; }
142+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; }
143143 if loc { print ! ( "{:#}" , ast) }
144144 else { print ! ( "{}" , ast) }
145145 }
@@ -150,7 +150,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
150150 let ( toks, mut errs) = cobalt:: parser:: lex ( code. as_str ( ) , ( file, 0 ) , & flags) ;
151151 let ( ast, mut es) = cobalt:: parser:: parse ( toks. as_slice ( ) , & flags) ;
152152 errs. append ( & mut es) ;
153- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; }
153+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; }
154154 if loc { print ! ( "{:#}" , ast) }
155155 else { print ! ( "{}" , ast) }
156156 }
@@ -210,14 +210,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
210210 let file = cobalt:: errors:: files:: add_file ( in_file. to_string ( ) , code. clone ( ) ) ;
211211 let files = & * cobalt:: errors:: files:: FILES . read ( ) . unwrap ( ) ;
212212 let ( toks, errs) = cobalt:: parser:: lex ( code. as_str ( ) , ( file, 0 ) , & flags) ;
213- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; }
213+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; }
214214 let ( ast, errs) = cobalt:: parser:: ast:: parse ( toks. as_slice ( ) , & flags) ;
215- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; }
215+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; }
216216 let ink_ctx = inkwell:: context:: Context :: create ( ) ;
217217 let ctx = cobalt:: context:: CompCtx :: new ( & ink_ctx, in_file) ;
218218 ctx. module . set_triple ( & TargetMachine :: get_default_triple ( ) ) ;
219219 let ( _, errs) = ast. codegen ( & ctx) ;
220- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; }
220+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; }
221221 if let Err ( msg) = ctx. module . verify ( ) {
222222 eprintln ! ( "{ERROR}: {MODULE}: {}" , msg. to_string( ) ) ;
223223 fail = true ;
@@ -483,19 +483,19 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
483483 let file = cobalt:: errors:: files:: add_file ( in_file. to_string ( ) , code. clone ( ) ) ;
484484 let files = & * cobalt:: errors:: files:: FILES . read ( ) . unwrap ( ) ;
485485 let ( toks, errs) = cobalt:: parser:: lex ( code. as_str ( ) , ( file, 0 ) , & ctx. flags ) ;
486- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
486+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
487487 overall_fail |= fail;
488488 fail = false ;
489489 if fail && !continue_if_err { exit ( 101 ) }
490490 let ( ast, errs) = cobalt:: parser:: ast:: parse ( toks. as_slice ( ) , & ctx. flags ) ;
491- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
491+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
492492 overall_fail |= fail;
493493 fail = false ;
494494 if fail && !continue_if_err { exit ( 101 ) }
495495 let ( _, errs) = ast. codegen ( & ctx) ;
496496 overall_fail |= fail;
497497 fail = false ;
498- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
498+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
499499 if fail && !continue_if_err { exit ( 101 ) }
500500 if let Err ( msg) = ctx. module . verify ( ) {
501501 eprintln ! ( "{ERROR}: {MODULE}: {}" , msg. to_string( ) ) ;
@@ -733,19 +733,19 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
733733 let file = cobalt:: errors:: files:: add_file ( in_file. to_string ( ) , code. clone ( ) ) ;
734734 let files = & * cobalt:: errors:: files:: FILES . read ( ) . unwrap ( ) ;
735735 let ( toks, errs) = cobalt:: parser:: lex ( code. as_str ( ) , ( file, 0 ) , & flags) ;
736- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
736+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
737737 overall_fail |= fail;
738738 fail = false ;
739739 if fail && !continue_if_err { exit ( 101 ) }
740740 let ( ast, errs) = cobalt:: parser:: ast:: parse ( toks. as_slice ( ) , & flags) ;
741- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
741+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
742742 overall_fail |= fail;
743743 fail = false ;
744744 if fail && !continue_if_err { exit ( 101 ) }
745745 let ( _, errs) = ast. codegen ( & ctx) ;
746746 overall_fail |= fail;
747747 fail = false ;
748- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
748+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
749749 if fail && !continue_if_err { exit ( 101 ) }
750750 if let Err ( msg) = ctx. module . verify ( ) {
751751 eprintln ! ( "{ERROR}: {MODULE}: {}" , msg. to_string( ) ) ;
@@ -899,11 +899,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
899899 let file = cobalt:: errors:: files:: add_file ( in_file. to_string ( ) , code. clone ( ) ) ;
900900 let files = & * cobalt:: errors:: files:: FILES . read ( ) . unwrap ( ) ;
901901 let ( toks, errs) = cobalt:: parser:: lex ( code. as_str ( ) , ( file, 0 ) , & ctx. flags ) ;
902- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
902+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
903903 let ( ast, errs) = cobalt:: parser:: ast:: parse ( toks. as_slice ( ) , & ctx. flags ) ;
904- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
904+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
905905 let ( _, errs) = ast. codegen ( & ctx) ;
906- for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) . unwrap ( ) ; fail |= err. is_err ( ) ; }
906+ for err in errs { term:: emit ( & mut stdout, & config, files, & err. 0 ) ? ; fail |= err. is_err ( ) ; }
907907 if let Err ( msg) = ctx. module . verify ( ) {
908908 eprintln ! ( "{ERROR}: {MODULE}: {}" , msg. to_string( ) ) ;
909909 exit ( 101 )
@@ -1218,3 +1218,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
12181218 } ;
12191219 Ok ( ( ) )
12201220}
1221+ fn main ( ) {
1222+ if let Err ( err) = driver ( ) {
1223+ let ERROR = & "error" . bright_red ( ) . bold ( ) ;
1224+ eprintln ! ( "{ERROR}: {err}" ) ;
1225+ exit ( 100 ) ;
1226+ }
1227+ }
0 commit comments