Skip to content

Commit

Permalink
fix: Slightly improving error reporting for #35
Browse files Browse the repository at this point in the history
  • Loading branch information
phorward committed Dec 23, 2023
1 parent a08e12f commit e00c6d8
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 12 deletions.
13 changes: 7 additions & 6 deletions src/compiler/ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1352,6 +1352,7 @@ fn traverse_node(compiler: &mut Compiler, node: &Dict) -> ImlOp {
let children = children.object::<Dict>().unwrap();

let res = traverse_node_static(compiler, None, children);
let offset = traverse_node_offset(node);

/*
if !res.is_consuming() {
Expand Down Expand Up @@ -1396,12 +1397,12 @@ fn traverse_node(compiler: &mut Compiler, node: &Dict) -> ImlOp {
// mod_kle on Token::Char becomes optional Token::Chars
if parts[2] == "kle" {
chars = chars
.into_generic("Opt", None)
.into_generic("Opt", None, offset.clone())
.try_resolve(compiler);
}

return ImlOp::Call {
offset: traverse_node_offset(node),
offset,
target: chars,
args: None,
};
Expand Down Expand Up @@ -1429,11 +1430,11 @@ fn traverse_node(compiler: &mut Compiler, node: &Dict) -> ImlOp {

ImlOp::call(
compiler,
traverse_node_offset(node),
offset.clone(),
match parts[2] {
"pos" => res.into_generic("Pos", assume_severity),
"kle" => res.into_generic("Kle", assume_severity),
"opt" => res.into_generic("Opt", assume_severity),
"pos" => res.into_generic("Pos", assume_severity, offset),
"kle" => res.into_generic("Kle", assume_severity, offset),
"opt" => res.into_generic("Opt", assume_severity, offset),
_ => unreachable!(),
},
None,
Expand Down
4 changes: 2 additions & 2 deletions src/compiler/compiler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -469,11 +469,11 @@ impl Compiler {

if name == "_" || name == "__" {
// `__` becomes `Value+`
value = value.into_generic("Pos", Some(0)).try_resolve(self);
value = value.into_generic("Pos", Some(0), None).try_resolve(self);
secondary = Some(("__", value.clone()));

// ...and then in-place "_" is defined as `_ : __?`
value = value.into_generic("Opt", Some(0)).try_resolve(self);
value = value.into_generic("Opt", Some(0), None).try_resolve(self);
}

// Insert constant into next constant-holding scope
Expand Down
8 changes: 4 additions & 4 deletions src/compiler/iml/imlvalue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,14 @@ impl ImlValue {
This is used internally to implement `Kle<P>` from `P*` syntax
during the AST traversal.
*/
pub fn into_generic(self, name: &str, severity: Option<u8>) -> Self {
pub fn into_generic(self, name: &str, severity: Option<u8>, offset: Option<Offset>) -> Self {
Self::Instance {
offset: None,
target: Box::new(ImlValue::Name {
offset: None,
name: name.to_string(),
}),
args: vec![(None, self)],
args: vec![(offset, self)],
nargs: IndexMap::new(),
severity,
generated: true,
Expand Down Expand Up @@ -173,8 +173,8 @@ impl ImlValue {
compiler.errors.push(Error::new(
arg.0,
format!(
"Cannot assign non-consumable {} to consumable generic '{}'",
arg.1, name
"Cannot assign non-consumable {} to consumable generic {} of {}",
arg.1, name, parselet
)
));
}
Expand Down

0 comments on commit e00c6d8

Please sign in to comment.