mirror of
https://github.com/Dummi26/mers.git
synced 2025-12-28 17:16:31 +01:00
fix bug where error would reference wrong file
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user