fix bug where error would reference wrong file

This commit is contained in:
Mark
2023-11-24 13:19:38 +01:00
parent 12af47d18a
commit 0a9eea2045
29 changed files with 173 additions and 194 deletions

View File

@@ -25,14 +25,14 @@ impl MersStatement for AsType {
comp: CompInfo,
) -> Result<Box<dyn program::run::MersStatement>, CheckError> {
Ok(Box::new(program::run::as_type::AsType {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
statement: self.statement.compile(info, comp)?,
as_type: self.as_type.clone(),
type_pos_in_src: self.type_pos_in_src,
type_pos_in_src: self.type_pos_in_src.clone(),
expand_type: self.expand_type,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -22,13 +22,13 @@ impl MersStatement for AssignTo {
comp: CompInfo,
) -> Result<Box<dyn program::run::MersStatement>, CheckError> {
Ok(Box::new(program::run::assign_to::AssignTo {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
is_init: false,
source: self.source.compile(info, comp)?,
target: self.target.compile(info, comp)?,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -21,7 +21,7 @@ impl MersStatement for Block {
comp: CompInfo,
) -> Result<Box<dyn program::run::MersStatement>, CheckError> {
Ok(Box::new(program::run::block::Block {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
statements: self
.statements
.iter()
@@ -30,6 +30,6 @@ impl MersStatement for Block {
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -21,13 +21,13 @@ impl MersStatement for Chain {
comp: CompInfo,
) -> Result<Box<dyn program::run::MersStatement>, CheckError> {
Ok(Box::new(program::run::chain::Chain {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
first: self.first.compile(info, comp)?,
chained: self.chained.compile(info, comp)?,
as_part_of_include: None,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -23,7 +23,7 @@ impl MersStatement for CustomType {
Err(s) => Err(s.compile(info, comp)?),
};
Ok(Box::new(crate::program::run::custom_type::CustomType {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
name: self.name.clone(),
source: Box::new(move |ci| match &src {
Ok(parsed) => Ok(Ok(Arc::new(type_from_parsed(parsed, ci)?))),
@@ -35,7 +35,7 @@ impl MersStatement for CustomType {
false
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -32,7 +32,7 @@ impl MersStatement for Function {
let arg2: Arc<Box<dyn crate::program::run::MersStatement>> = Arc::clone(&arg_target);
let run2: Arc<Box<dyn crate::program::run::MersStatement>> = Arc::clone(&run);
Ok(Box::new(program::run::function::Function {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
func_no_info: data::function::Function {
info: Arc::new(program::run::Info::neverused()),
info_check: Arc::new(Mutex::new(CheckInfo::neverused())),
@@ -48,6 +48,6 @@ impl MersStatement for Function {
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -23,7 +23,7 @@ impl MersStatement for If {
comp: CompInfo,
) -> Result<Box<dyn program::run::MersStatement>, CheckError> {
Ok(Box::new(program::run::r#if::If {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
condition: self.condition.compile(info, comp)?,
on_true: self.on_true.compile(info, comp)?,
on_false: if let Some(v) = &self.on_false {
@@ -34,6 +34,6 @@ impl MersStatement for If {
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -33,7 +33,7 @@ impl MersStatement for IncludeMers {
Err(e) => {
return Err(CheckError::new()
.src(vec![(
self.pos_in_src,
self.pos_in_src.clone(),
Some(error_colors::HashIncludeErrorInIncludedFile),
)])
.msg(
@@ -41,18 +41,18 @@ impl MersStatement for IncludeMers {
.color(error_colors::HashIncludeErrorInIncludedFile)
.to_string(),
)
.err_with_src(e, self.inner_src.clone()))
.err_with_diff_src(e))
}
};
let compiled2 = Arc::clone(&compiled);
Ok(Box::new(program::run::chain::Chain {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
first: Box::new(program::run::value::Value {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
val: Data::empty_tuple(),
}),
chained: Box::new(program::run::function::Function {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
func_no_info: data::function::Function {
info: Arc::new(info::Info::neverused()),
info_check: Arc::new(Mutex::new(info::Info::neverused())),
@@ -64,6 +64,6 @@ impl MersStatement for IncludeMers {
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -28,13 +28,13 @@ impl MersStatement for InitTo {
let target = self.target.compile(info, comp)?;
comp.is_init = false;
Ok(Box::new(program::run::assign_to::AssignTo {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
is_init: true,
source,
target,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -21,7 +21,7 @@ impl MersStatement for Tuple {
comp: CompInfo,
) -> Result<Box<dyn program::run::MersStatement>, CheckError> {
Ok(Box::new(program::run::tuple::Tuple {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
elems: self
.elems
.iter()
@@ -30,6 +30,6 @@ impl MersStatement for Tuple {
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -22,11 +22,11 @@ impl MersStatement for Value {
_comp: CompInfo,
) -> Result<Box<dyn program::run::MersStatement>, CheckError> {
Ok(Box::new(program::run::value::Value {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
val: self.data.clone(),
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -35,7 +35,7 @@ impl MersStatement for Variable {
}
}
Ok(Box::new(program::run::variable::Variable {
pos_in_src: self.pos_in_src,
pos_in_src: self.pos_in_src.clone(),
is_init: comp.is_init,
is_ref_not_ignore: if comp.is_init {
!init_and_ignore
@@ -48,12 +48,15 @@ impl MersStatement for Variable {
*v
} else {
return Err(CheckError::new()
.src(vec![(self.pos_in_src, Some(error_colors::UnknownVariable))])
.src(vec![(
self.pos_in_src.clone(),
Some(error_colors::UnknownVariable),
)])
.msg(format!("No variable named '{}' found!", self.var)));
},
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}