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

@@ -23,7 +23,9 @@ impl Config {
// TODO: Type with generics
self.add_type("List".to_string(),
Err(Arc::new(|s, i| {
let t = crate::parsing::types::parse_type(&mut Source::new_from_string_raw(s.to_owned()))?;
let mut src = Source::new_from_string_raw(s.to_owned());
let srca = Arc::new(src.clone());
let t = crate::parsing::types::parse_type(&mut src, &srca)?;
Ok(Arc::new(ListT(crate::parsing::types::type_from_parsed(&t, i)?)))})))
.add_var(
"pop".to_string(),

View File

@@ -21,7 +21,9 @@ impl Config {
self.add_type(
"Thread".to_string(),
Err(Arc::new(|s, i| {
let t = crate::parsing::types::parse_type(&mut Source::new_from_string_raw(s.to_owned()))?;
let mut src = Source::new_from_string_raw(s.to_owned());
let srca = Arc::new(src.clone());
let t = crate::parsing::types::parse_type(&mut src, &srca)?;
Ok(Arc::new(ThreadT(crate::parsing::types::type_from_parsed(&t, i)?)))
})),
)

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()
}
}

View File

@@ -32,7 +32,7 @@ impl MersStatement for AsType {
crate::parsing::types::type_from_parsed(&self.as_type, info).map_err(|e| {
CheckError::new()
.src(vec![(
self.type_pos_in_src,
self.type_pos_in_src.clone(),
Some(error_colors::BadTypeFromParsed),
)])
.err(e)
@@ -40,9 +40,9 @@ impl MersStatement for AsType {
if !return_type.is_included_in(&as_type) {
return Err(CheckError::new()
.src(vec![
(self.pos_in_src, None),
(self.pos_in_src.clone(), None),
(
self.type_pos_in_src,
self.type_pos_in_src.clone(),
Some(error_colors::AsTypeTypeAnnotation),
),
(
@@ -73,6 +73,6 @@ impl MersStatement for AsType {
false
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -30,7 +30,7 @@ impl MersStatement for AssignTo {
Err(e) => {
return Err(CheckError::new()
.src(vec![
(self.pos_in_src, None),
(self.pos_in_src.clone(), None),
(self.target.source_range(), Some(error_colors::InitTo)),
(self.source.source_range(), Some(error_colors::InitFrom)),
])
@@ -43,7 +43,7 @@ impl MersStatement for AssignTo {
if !source.is_included_in(&t) {
return Err(CheckError::new()
.src(vec![
(self.pos_in_src, None),
(self.pos_in_src.clone(), None),
(self.target.source_range(), Some(error_colors::AssignTo)),
(self.source.source_range(), Some(error_colors::AssignFrom)),
])
@@ -57,7 +57,7 @@ impl MersStatement for AssignTo {
} else {
return Err(CheckError::new()
.src(vec![
(self.pos_in_src, None),
(self.pos_in_src.clone(), None),
(
self.target.source_range(),
Some(error_colors::AssignTargetNonReference),
@@ -81,6 +81,6 @@ impl MersStatement for AssignTo {
false
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -36,6 +36,6 @@ impl MersStatement for Block {
true
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -37,10 +37,10 @@ impl MersStatement for Chain {
match (func.0)(&arg) {
Ok(t) => o.add(Arc::new(t)),
Err(e) => {
return Err(if let Some(inner_src) = &self.as_part_of_include {
return Err(if let Some(_) = &self.as_part_of_include {
CheckError::new()
.src(vec![(
self.pos_in_src,
self.pos_in_src.clone(),
Some(error_colors::HashIncludeErrorInIncludedFile),
)])
.msg(
@@ -48,11 +48,11 @@ impl MersStatement for Chain {
.color(error_colors::HashIncludeErrorInIncludedFile)
.to_string(),
)
.err_with_src(e, inner_src.clone())
.err_with_diff_src(e)
} else {
CheckError::new()
.src(vec![
(self.pos_in_src, None),
(self.pos_in_src.clone(), None),
(
self.first.source_range(),
Some(error_colors::FunctionArgument),
@@ -71,7 +71,7 @@ impl MersStatement for Chain {
} else {
return Err(CheckError::new()
.src(vec![
(self.pos_in_src, None),
(self.pos_in_src.clone(), None),
(
self.chained.source_range(),
Some(error_colors::ChainWithNonFunction),
@@ -99,6 +99,6 @@ impl MersStatement for Chain {
false
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -52,7 +52,7 @@ impl MersStatement for CustomType {
false
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -32,6 +32,6 @@ impl MersStatement for Function {
true
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -30,7 +30,7 @@ impl MersStatement for If {
if !cond_return_type.is_included_in(&data::bool::BoolT) {
return Err(CheckError::new()
.src(vec![
(self.pos_in_src, None),
(self.pos_in_src.clone(), None),
(
self.condition.source_range(),
Some(error_colors::IfConditionNotBool),
@@ -71,6 +71,6 @@ impl MersStatement for If {
true
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -91,6 +91,6 @@ impl MersStatement for Tuple {
false
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -29,6 +29,6 @@ impl MersStatement for Value {
self.val.clone()
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}

View File

@@ -77,6 +77,6 @@ impl MersStatement for Variable {
}
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
self.pos_in_src.clone()
}
}