@@ -29,8 +29,8 @@ pub extern crate simplicity;
2929pub use simplicity:: elements;
3030
3131use crate :: debug:: DebugSymbols ;
32- use crate :: error:: WithFile ;
33- use crate :: parse:: ParseFromStr ;
32+ use crate :: error:: { ErrorHandler , WithFile } ;
33+ use crate :: parse:: ParseFromStrWithErrors ;
3434pub use crate :: types:: ResolvedType ;
3535pub use crate :: value:: Value ;
3636pub use crate :: witness:: { Arguments , Parameters , WitnessTypes , WitnessValues } ;
@@ -52,12 +52,17 @@ impl TemplateProgram {
5252 /// The string is not a valid SimplicityHL program.
5353 pub fn new < Str : Into < Arc < str > > > ( s : Str ) -> Result < Self , String > {
5454 let file = s. into ( ) ;
55- let parse_program = parse:: Program :: parse_from_str ( & file) ?;
56- let ast_program = ast:: Program :: analyze ( & parse_program) . with_file ( Arc :: clone ( & file) ) ?;
57- Ok ( Self {
58- simfony : ast_program,
59- file,
60- } )
55+ let mut error_handler = ErrorHandler :: new ( file. clone ( ) ) ;
56+ let parse_program = parse:: Program :: parse_from_str_with_errors ( & file, & mut error_handler) ;
57+ if let Some ( program) = parse_program {
58+ let ast_program = ast:: Program :: analyze ( & program) . with_file ( Arc :: clone ( & file) ) ?;
59+ Ok ( Self {
60+ simfony : ast_program,
61+ file,
62+ } )
63+ } else {
64+ Err ( error_handler) ?
65+ }
6166 }
6267
6368 /// Access the parameters of the program.
@@ -265,6 +270,7 @@ pub trait ArbitraryOfType: Sized {
265270
266271#[ cfg( test) ]
267272pub ( crate ) mod tests {
273+ use crate :: parse:: ParseFromStr ;
268274 use base64:: display:: Base64Display ;
269275 use base64:: engine:: general_purpose:: STANDARD ;
270276 use simplicity:: BitMachine ;
0 commit comments