diff --git a/mers_lib/Cargo.toml b/mers_lib/Cargo.toml index 1da9484..cbc52fb 100755 --- a/mers_lib/Cargo.toml +++ b/mers_lib/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mers_lib" -version = "0.8.3" +version = "0.8.4" edition = "2021" license = "MIT OR Apache-2.0" description = "library to use the mers language in other projects" diff --git a/mers_lib/src/errors/mod.rs b/mers_lib/src/errors/mod.rs index b39395f..b4642c0 100644 --- a/mers_lib/src/errors/mod.rs +++ b/mers_lib/src/errors/mod.rs @@ -276,20 +276,28 @@ impl CheckError { if first_line_nr == last_line_nr { writeln!( f, - "{}Line {first_line_nr} ({}..{}){}", - indent!(true, false), - start_with_comments + 1 - first_line_start, - end_with_comments - last_line_start, - src_from, + "{}", + format!( + "{}Line {first_line_nr} ({}..{}){}", + indent!(true, false), + start_with_comments + 1 - first_line_start, + end_with_comments - last_line_start, + src_from, + ) + .bright_black() )?; } else { writeln!( f, - "{}Lines {first_line_nr}-{last_line_nr} ({}..{}){}", - indent!(true, false), - start_with_comments + 1 - first_line_start, - end_with_comments - last_line_start, - src_from, + "{}", + format!( + "{}Lines {first_line_nr}-{last_line_nr} ({}..{}){}", + indent!(true, false), + start_with_comments + 1 - first_line_start, + end_with_comments - last_line_start, + src_from, + ) + .bright_black() )?; } let lines = if cfg.show_comments { diff --git a/mers_lib/src/program/run/custom_type.rs b/mers_lib/src/program/run/custom_type.rs index 190b937..3963e2e 100644 --- a/mers_lib/src/program/run/custom_type.rs +++ b/mers_lib/src/program/run/custom_type.rs @@ -1,5 +1,7 @@ use std::{fmt::Debug, sync::Arc}; +use colored::Colorize; + use crate::{ data::{Data, Type}, errors::{CheckError, SourceRange}, @@ -33,12 +35,25 @@ impl MersStatement for CustomType { if init_to.is_some() { return Err("can't init to `type` statement".to_string().into()); } - let t = (self.source)(info)?; - info.scopes - .last_mut() - .unwrap() - .types - .insert(self.name.clone(), t); + let t = (self.source)(info); + if self.name != "_" { + info.scopes + .last_mut() + .unwrap() + .types + .insert(self.name.clone(), t?); + } else { + if let Err(e) = t { + return Err(CheckError::new() + .msg(format!( + " {} {} {} (`[[_] := ...]` indicates that `...` must be type-correct)", + "<<".bright_red(), + "Custom type-test failed!".bright_red(), + ">>".bright_red(), + )) + .err(e)); + } + } Ok(Type::empty_tuple()) } fn run_custom(&self, _info: &mut Info) -> Data {