Merge branch 'master' into fix/array-slice

This commit is contained in:
Howard Wu 2020-12-10 19:22:31 -04:00 committed by GitHub
commit f8cce8ca4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 3 deletions

View File

@ -34,7 +34,13 @@ impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> {
// Check that assignee exists and is mutable
Ok(match self.get_mut(name) {
Some(value) => match value {
ConstrainedValue::Mutable(mutable_value) => mutable_value,
ConstrainedValue::Mutable(mutable_value) => {
// Get the mutable value.
mutable_value.get_inner_mut();
// Return the mutable value.
mutable_value
}
_ => return Err(StatementError::immutable_assign(name.to_owned(), span.to_owned())),
},
None => return Err(StatementError::undefined_variable(name.to_owned(), span.to_owned())),

View File

@ -136,3 +136,11 @@ fn test_function_input_mut() {
assert_satisfied(program);
}
#[test]
fn test_swap() {
let program_string = include_str!("swap.leo");
let program = parse_program(program_string).unwrap();
assert_satisfied(program);
}

View File

@ -0,0 +1,20 @@
// Swap two elements of an array.
function swap(mut a: [u32; 2], i: u32, j: u32) -> [u32; 2] {
let t = a[i];
a[i] = a[j];
a[j] = t;
return a
}
function main() {
let mut arr: [u32; 2] = [0, 1];
let expected: [u32; 2] = [1, 0];
// Do swap.
let actual = swap(arr, 0, 1);
// Check result.
for i in 0..2 {
console.assert(expected[i] == actual[i]);
}
}

View File

@ -444,8 +444,8 @@ input_tuple = _{ "(" ~ NEWLINE* ~ (input ~ ("," ~ NEWLINE* ~ input)* ~ ","?)? ~
// Declared in imports/import.rs
import = { "import " ~ package ~ LINE_END}
package_name = @{ ((ASCII_ALPHA_LOWER | ASCII_DIGIT) ~ ( "-" ~ (ASCII_ALPHA_LOWER | ASCII_DIGIT))*)+ }
// Declared in imports/package_name.rs
package_name = @{ (ASCII_ALPHA_LOWER | ASCII_DIGIT)+ ~ ( "-" ~ (ASCII_ALPHA_LOWER | ASCII_DIGIT)+)* }
// Declared in imports/package.rs
package = { package_name ~ "." ~ package_access }