mirror of
https://github.com/Dummi26/mers.git
synced 2025-12-28 17:16:31 +01:00
better errors, colors, and fix bug where x := x would panic
This commit is contained in:
@@ -8,8 +8,8 @@ use super::{CompInfo, MersStatement};
|
||||
#[derive(Debug)]
|
||||
pub struct AssignTo {
|
||||
pub pos_in_src: SourceRange,
|
||||
pub target: Box<dyn MersStatement>,
|
||||
pub source: Box<dyn MersStatement>,
|
||||
pub target: Box<dyn MersStatement>,
|
||||
}
|
||||
|
||||
impl MersStatement for AssignTo {
|
||||
@@ -24,8 +24,8 @@ impl MersStatement for AssignTo {
|
||||
Ok(Box::new(program::run::assign_to::AssignTo {
|
||||
pos_in_src: self.pos_in_src,
|
||||
is_init: false,
|
||||
target: self.target.compile(info, comp)?,
|
||||
source: self.source.compile(info, comp)?,
|
||||
target: self.target.compile(info, comp)?,
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
|
||||
@@ -7,7 +7,7 @@ use crate::{
|
||||
info::{self, Local},
|
||||
program::{
|
||||
self,
|
||||
run::{CheckError, SourceRange},
|
||||
run::{error_colors, CheckError, SourceRange},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -31,8 +31,8 @@ impl MersStatement for IncludeMers {
|
||||
Ok(v) => Arc::new(v),
|
||||
Err(e) => {
|
||||
return Err(CheckError::new()
|
||||
.src(vec![(self.pos_in_src, Some(colored::Color::Red))])
|
||||
.msg("Error in inner mers statement! (note: inner errors may refer to a different file)".red().to_string())
|
||||
.src(vec![(self.pos_in_src, Some(error_colors::HashIncludeErrorInIncludedFile))])
|
||||
.msg("Error in inner mers statement! (note: inner errors may refer to a different file)".color(error_colors::HashIncludeErrorInIncludedFile).to_string())
|
||||
.err(e))
|
||||
}
|
||||
};
|
||||
|
||||
@@ -6,8 +6,8 @@ use super::{CompInfo, MersStatement};
|
||||
#[derive(Debug)]
|
||||
pub struct InitTo {
|
||||
pub pos_in_src: SourceRange,
|
||||
pub target: Box<dyn MersStatement>,
|
||||
pub source: Box<dyn MersStatement>,
|
||||
pub target: Box<dyn MersStatement>,
|
||||
}
|
||||
|
||||
impl MersStatement for InitTo {
|
||||
@@ -19,15 +19,17 @@ impl MersStatement for InitTo {
|
||||
info: &mut crate::info::Info<super::Local>,
|
||||
mut comp: CompInfo,
|
||||
) -> Result<Box<dyn crate::program::run::MersStatement>, CheckError> {
|
||||
// source must be compiled BEFORE target!
|
||||
comp.is_init = false;
|
||||
let source = self.source.compile(info, comp)?;
|
||||
comp.is_init = true;
|
||||
let target = self.target.compile(info, comp)?;
|
||||
comp.is_init = false;
|
||||
let source = self.source.compile(info, comp)?;
|
||||
Ok(Box::new(program::run::assign_to::AssignTo {
|
||||
pos_in_src: self.pos_in_src,
|
||||
is_init: true,
|
||||
target,
|
||||
source,
|
||||
target,
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::{
|
||||
info::Local,
|
||||
program::{
|
||||
self,
|
||||
run::{CheckError, SourceRange},
|
||||
run::{error_colors, CheckError, SourceRange},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -41,7 +41,7 @@ impl MersStatement for Variable {
|
||||
*v
|
||||
} else {
|
||||
return Err(CheckError::new()
|
||||
.src(vec![(self.pos_in_src, Some(colored::Color::Red))])
|
||||
.src(vec![(self.pos_in_src, Some(error_colors::UnknownVariable))])
|
||||
.msg(format!("No variable named '{}' found!", self.var)));
|
||||
},
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user