1
0
Fork 0
mirror of synced 2025-09-23 20:28:36 +00:00

add changelog

This commit is contained in:
dark64 2022-08-22 13:56:07 +02:00
parent 6ab602e88c
commit 1448742642
3 changed files with 26 additions and 19 deletions

View file

@ -0,0 +1 @@
Error out at compile time if the type of a logged value could not be inferred

View file

@ -1,4 +1,4 @@
def main() {
log("{}", 1); // 1 is of internal type {integer}
log("{}", 1 + 1); // 1 is of internal type {integer}
return;
}

View file

@ -1804,27 +1804,33 @@ impl<'ast, T: Field> Checker<'ast, T> {
.collect::<Result<Vec<_>, _>>()
.map_err(|e| vec![e])?;
// we cannot align integer literals here so we ban them
match expressions.iter().any(|e| matches!(e, TypedExpression::Int(..))) {
true => Err(vec![ErrorInner {
pos: Some(pos),
message: "Found {integer} literal in log statement, try annotating with a literal suffix".into(),
}]),
false => {
if expressions.len() != l.len() {
return Err(vec![ErrorInner {
pos: Some(pos),
message: format!(
"Wrong argument count in log call: expected {}, got {}",
l.len(),
expressions.len()
),
}]);
}
let mut errors = vec![];
Ok(TypedStatement::Log(l, expressions))
for e in &expressions {
if let TypedExpression::Int(e) = e {
errors.push(ErrorInner {
pos: Some(pos),
message: format!("Cannot determine type for expression `{}`", e),
});
}
}
if expressions.len() != l.len() {
errors.push(ErrorInner {
pos: Some(pos),
message: format!(
"Wrong argument count in log call: expected {}, got {}",
l.len(),
expressions.len()
),
});
}
if !errors.is_empty() {
return Err(errors);
}
Ok(TypedStatement::Log(l, expressions))
}
Statement::Return(e) => {
let mut errors = vec![];