add dynamic check errors for circuits 2

This commit is contained in:
collin 2020-10-24 13:07:27 -07:00
parent 973e2a6afc
commit e19616b4e5
4 changed files with 35 additions and 8 deletions

View File

@ -138,9 +138,9 @@ fn test_member_static_function_undefined() {
#[test]
fn test_mutate_function_fail() {
let bytes = include_bytes!("mut_function_fail.leo");
let program = parse_program(bytes).unwrap();
let error = parse_program(bytes).err().unwrap();
expect_compiler_error(program);
expect_dynamic_check_error(error);
}
#[test]
@ -178,9 +178,9 @@ fn test_mutate_self_static_function_fail() {
#[test]
fn test_mutate_static_function_fail() {
let bytes = include_bytes!("mut_static_function_fail.leo");
let program = parse_program(bytes).unwrap();
let error = parse_program(bytes).err().unwrap();
expect_compiler_error(program);
expect_dynamic_check_error(error);
}
#[test]

View File

@ -1,4 +1,6 @@
circuit Foo {
a: u8,
function bar() {}
}

View File

@ -1039,7 +1039,11 @@ impl Frame {
// Check the length of the circuit members.
if circuit_type.variables.len() != members.len() {
unimplemented!("Number of circuit arguments invalid")
return Err(FrameError::num_variables(
circuit_type.variables.len(),
members.len(),
span,
));
}
// Assert members are circuit type member types.
@ -1224,7 +1228,7 @@ impl Frame {
// Check the length of arguments
if function_type.inputs.len() != inputs.len() {
unimplemented!("Number of function arguments invalid")
return Err(FrameError::num_inputs(function_type.inputs.len(), inputs.len(), span));
}
// Assert function inputs are correct types.

View File

@ -69,7 +69,7 @@ impl FrameError {
/// Attempted to call non-static member using `::`.
///
pub fn invalid_member_access(identifier: &Identifier) -> Self {
let message = format!("non-static member `{}` must be accessed using `.` syntax", identifier);
let message = format!("non-static member `{}` must be accessed using `.` syntax.", identifier);
Self::new_from_span(message, identifier.span.to_owned())
}
@ -78,11 +78,32 @@ impl FrameError {
/// Attempted to call static member using `.`.
///
pub fn invalid_static_access(identifier: &Identifier) -> Self {
let message = format!("static member `{}` must be accessed using `::` syntax", identifier);
let message = format!("static member `{}` must be accessed using `::` syntax.", identifier);
Self::new_from_span(message, identifier.span.to_owned())
}
///
/// Attempted to call a function with the incorrect number of inputs.
///
pub fn num_inputs(expected: usize, actual: usize, span: &Span) -> Self {
let message = format!(
"Function expected {} input variables, found {} inputs.",
expected, actual
);
Self::new_from_span(message, span.clone())
}
///
/// Attempted to create a circuit with the incorrect number of member variables.
///
pub fn num_variables(expected: usize, actual: usize, span: &Span) -> Self {
let message = format!("Circuit expected {} variables, found {} variables.", expected, actual);
Self::new_from_span(message, span.clone())
}
///
/// Attempted to call a circuit type that is not defined in the current context.
///