rename dynamic-check -> type-inference 2

This commit is contained in:
collin 2020-10-30 12:49:01 -07:00
parent f1e393a9ab
commit 7589fa65c5
49 changed files with 89 additions and 90 deletions

29
Cargo.lock generated
View File

@ -1254,13 +1254,13 @@ dependencies = [
"leo-ast",
"leo-core",
"leo-core-ast",
"leo-dynamic-check",
"leo-gadgets",
"leo-imports",
"leo-input",
"leo-package",
"leo-state",
"leo-symbol-table",
"leo-type-inference",
"num-bigint",
"pest",
"rand",
@ -1310,19 +1310,6 @@ dependencies = [
"snarkos-models",
]
[[package]]
name = "leo-dynamic-check"
version = "1.0.3"
dependencies = [
"leo-ast",
"leo-core-ast",
"leo-imports",
"leo-symbol-table",
"serde",
"serde_json",
"thiserror",
]
[[package]]
name = "leo-gadgets"
version = "1.0.3"
@ -1378,7 +1365,6 @@ dependencies = [
"leo-compiler",
"leo-core",
"leo-core-ast",
"leo-dynamic-check",
"leo-gadgets",
"leo-imports",
"leo-input",
@ -1456,6 +1442,19 @@ dependencies = [
"thiserror",
]
[[package]]
name = "leo-type-inference"
version = "1.0.3"
dependencies = [
"leo-ast",
"leo-core-ast",
"leo-imports",
"leo-symbol-table",
"serde",
"serde_json",
"thiserror",
]
[[package]]
name = "libc"
version = "0.2.76"

View File

@ -30,7 +30,6 @@ members = [
"compiler",
"core-ast",
"core",
"dynamic-check",
"gadgets",
"imports",
"input",
@ -38,6 +37,7 @@ members = [
"package",
"state",
"symbol-table",
"type-inference",
]
[dependencies.leo-compiler]
@ -52,10 +52,6 @@ version = "1.0.1"
path = "./core-ast"
version = "1.0.3"
[dependencies.leo-dynamic-check]
path = "./dynamic-check"
version = "1.0.3"
[dependencies.leo-gadgets]
path = "./gadgets"
version = "1.0.3"

View File

@ -25,8 +25,8 @@ version = "1.0.3"
path = "../core"
version = "1.0.3"
[dependencies.leo-dynamic-check]
path = "../dynamic-check"
[dependencies.leo-core-ast]
path = "../core-ast"
version = "1.0.3"
[dependencies.leo-gadgets]
@ -45,10 +45,6 @@ version = "1.0.3"
path = "../package"
version = "1.0.3"
[dependencies.leo-core-ast]
path = "../core-ast"
version = "1.0.3"
[dependencies.leo-state]
path = "../state"
version = "1.0.3"
@ -57,6 +53,10 @@ version = "1.0.3"
path = "../symbol-table"
version = "1.0.3"
[dependencies.leo-type-inference]
path = "../type-inference"
version = "1.0.3"
[dependencies.snarkos-curves]
version = "1.1.3"
default-features = false

View File

@ -25,12 +25,12 @@ use crate::{
};
use leo_ast::LeoAst;
use leo_core_ast::{Input, LeoCoreAst, MainInput, Program};
use leo_dynamic_check::TypeInference;
use leo_imports::ImportParser;
use leo_input::LeoInputParser;
use leo_package::inputs::InputPairs;
use leo_state::verify_local_data_commitment;
use leo_symbol_table::SymbolTable;
use leo_type_inference::TypeInference;
use snarkos_dpc::{base_dpc::instantiated::Components, SystemParameters};
use snarkos_errors::gadgets::SynthesisError;
@ -187,7 +187,11 @@ impl<F: Field + PrimeField, G: GroupType<F>> Compiler<F, G> {
}
///
/// Runs static and dynamic type checks on the program, imports, and input.
/// Runs a type check on the program, imports, and input.
///
/// First, a symbol table of all user defined types is created.
/// Second, a type inference check is run on the program - inferring a data type for all implicit types and
/// catching type mismatch errors.
///
pub(crate) fn check_program(&self) -> Result<(), CompilerError> {
// Create a new symbol table from the program, imported_programs, and program_input.
@ -198,7 +202,7 @@ impl<F: Field + PrimeField, G: GroupType<F>> Compiler<F, G> {
e
})?;
// Run dynamic check on program.
// Run type inference check on program.
TypeInference::new(&self.program, symbol_table).map_err(|mut e| {
e.set_path(&self.main_file_path);
@ -235,7 +239,7 @@ impl<F: Field + PrimeField, G: GroupType<F>> Compiler<F, G> {
// Create a new symbol table from the program, imported programs, and program input.
let symbol_table = SymbolTable::new(&self.program, &self.imported_programs, &self.program_input)?;
// Run dynamic check on program.
// Run type inference check on program.
TypeInference::new(&self.program, symbol_table)?;
tracing::debug!("Program parsing complete\n{:#?}", self.program);

View File

@ -16,11 +16,11 @@
use crate::errors::{FunctionError, ImportError, OutputBytesError, OutputFileError};
use leo_ast::ParserError;
use leo_dynamic_check::TypeInferenceError;
use leo_imports::ImportParserError;
use leo_input::InputParserError;
use leo_state::LocalDataVerificationError;
use leo_symbol_table::SymbolTableError;
use leo_type_inference::TypeInferenceError;
use bincode::Error as SerdeError;
use std::path::{Path, PathBuf};
@ -28,7 +28,7 @@ use std::path::{Path, PathBuf};
#[derive(Debug, Error)]
pub enum CompilerError {
#[error("{}", _0)]
DynamicCheckError(#[from] TypeInferenceError),
TypeInferenceError(#[from] TypeInferenceError),
#[error("{}", _0)]
ImportError(#[from] ImportError),
@ -79,7 +79,7 @@ pub enum CompilerError {
impl CompilerError {
pub fn set_path(&mut self, path: &Path) {
match self {
CompilerError::DynamicCheckError(error) => error.set_path(path),
CompilerError::TypeInferenceError(error) => error.set_path(path),
CompilerError::InputParserError(error) => error.set_path(path),
CompilerError::FunctionError(error) => error.set_path(path),
CompilerError::OutputStringError(error) => error.set_path(path),

View File

@ -17,7 +17,7 @@
use crate::{
assert_satisfied,
expect_compiler_error,
expect_dynamic_check_error,
expect_type_inference_error,
get_output,
parse_program,
parse_program_with_input,
@ -153,7 +153,7 @@ fn test_multi_fail_initializer() {
let program_bytes = include_bytes!("multi_fail_initializer.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -161,7 +161,7 @@ fn test_multi_inline_fail() {
let program_bytes = include_bytes!("multi_fail_inline.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -177,7 +177,7 @@ fn test_multi_initializer_fail() {
let program_bytes = include_bytes!("multi_initializer_fail.leo");
let err = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(err);
expect_type_inference_error(err);
}
#[test]
@ -193,7 +193,7 @@ fn test_nested_3x2_value_fail() {
let program_bytes = include_bytes!("nested_3x2_value_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -209,7 +209,7 @@ fn test_tuple_3x2_value_fail() {
let program_bytes = include_bytes!("tuple_3x2_value_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -253,7 +253,7 @@ fn test_type_nested_value_nested_3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_nested_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -269,7 +269,7 @@ fn test_type_nested_value_nested_4x3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_nested_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -285,7 +285,7 @@ fn test_type_nested_value_tuple_3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_tuple_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -301,7 +301,7 @@ fn test_type_nested_value_tuple_4x3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_tuple_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -317,7 +317,7 @@ fn test_type_tuple_value_nested_3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_nested_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -333,7 +333,7 @@ fn test_type_tuple_value_nested_4x3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_nested_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -349,7 +349,7 @@ fn test_type_tuple_value_tuple_3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_tuple_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -365,7 +365,7 @@ fn test_type_tuple_value_tuple_4x3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_tuple_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
// Tests for nested multi-dimensional arrays as input to the program

View File

@ -17,7 +17,7 @@
use crate::{
assert_satisfied,
expect_compiler_error,
expect_dynamic_check_error,
expect_type_inference_error,
get_output,
parse_program,
parse_program_with_input,
@ -132,7 +132,7 @@ fn test_true_or_u32() {
let bytes = include_bytes!("true_or_u32.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
// Boolean and &&
@ -166,7 +166,7 @@ fn test_true_and_u32() {
let bytes = include_bytes!("true_and_u32.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
// All

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use crate::{assert_satisfied, expect_compiler_error, expect_dynamic_check_error, parse_program};
use crate::{assert_satisfied, expect_compiler_error, expect_type_inference_error, parse_program};
// Expressions
@ -39,7 +39,7 @@ fn test_inline_undefined() {
let bytes = include_bytes!("inline_undefined.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
// Members
@ -57,7 +57,7 @@ fn test_member_variable_fail() {
let bytes = include_bytes!("member_variable_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -81,7 +81,7 @@ fn test_member_function_fail() {
let bytes = include_bytes!("member_function_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -89,7 +89,7 @@ fn test_member_function_invalid() {
let bytes = include_bytes!("member_function_invalid.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -121,7 +121,7 @@ fn test_member_static_function_invalid() {
let bytes = include_bytes!("member_static_function_invalid.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error)
expect_type_inference_error(error)
}
#[test]
@ -129,7 +129,7 @@ fn test_member_static_function_undefined() {
let bytes = include_bytes!("member_static_function_undefined.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error)
expect_type_inference_error(error)
}
// Mutability
@ -139,7 +139,7 @@ fn test_mutate_function_fail() {
let bytes = include_bytes!("mut_function_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -163,7 +163,7 @@ fn test_mutate_self_function_fail() {
let bytes = include_bytes!("mut_self_function_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -171,7 +171,7 @@ fn test_mutate_self_static_function_fail() {
let bytes = include_bytes!("mut_self_static_function_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -179,7 +179,7 @@ fn test_mutate_static_function_fail() {
let bytes = include_bytes!("mut_static_function_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -205,7 +205,7 @@ fn test_self_fail() {
let bytes = include_bytes!("self_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -229,7 +229,7 @@ fn test_self_member_undefined() {
let bytes = include_bytes!("self_member_undefined.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
// All

View File

@ -16,7 +16,7 @@
use crate::{
assert_satisfied,
expect_dynamic_check_error,
expect_type_inference_error,
generate_main_input,
get_output,
parse_program,
@ -35,7 +35,7 @@ fn test_arguments_length_fail() {
let program_bytes = include_bytes!("arguments_length_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -43,7 +43,7 @@ fn test_arguments_type_fail() {
let program_bytes = include_bytes!("arguments_type_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]

View File

@ -17,7 +17,7 @@
use crate::{
assert_satisfied,
expect_compiler_error,
expect_dynamic_check_error,
expect_type_inference_error,
get_output,
parse_program,
parse_program_with_input,
@ -122,7 +122,7 @@ fn test_undefined() {
let bytes = include_bytes!("undefined.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -138,7 +138,7 @@ fn test_array_input() {
let bytes = include_bytes!("array_input.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error)
expect_type_inference_error(error)
}
// Test return multidimensional arrays
@ -148,7 +148,7 @@ fn test_return_array_nested_fail() {
let bytes = include_bytes!("return_array_nested_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -164,7 +164,7 @@ fn test_return_array_tuple_fail() {
let bytes = include_bytes!("return_array_tuple_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]

View File

@ -181,8 +181,8 @@ pub(crate) fn expect_compiler_error(program: EdwardsTestCompiler) -> CompilerErr
program.generate_constraints_helper(&mut cs).unwrap_err()
}
pub(crate) fn expect_dynamic_check_error(error: CompilerError) {
assert!(matches!(error, CompilerError::DynamicCheckError(_)))
pub(crate) fn expect_type_inference_error(error: CompilerError) {
assert!(matches!(error, CompilerError::TypeInferenceError(_)))
}
pub(crate) fn expect_symbol_table_error(error: CompilerError) {

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use crate::{assert_satisfied, expect_compiler_error, expect_dynamic_check_error, generate_main_input, parse_program};
use crate::{assert_satisfied, expect_compiler_error, expect_type_inference_error, generate_main_input, parse_program};
use leo_core_ast::InputValue;
#[test]
@ -94,7 +94,7 @@ fn test_circuit_function_mut() {
let bytes = include_bytes!("circuit_function_mut.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]
@ -102,7 +102,7 @@ fn test_circuit_static_function_mut() {
let bytes = include_bytes!("circuit_static_function_mut.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}
#[test]

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use crate::{assert_satisfied, expect_dynamic_check_error, generate_main_input, parse_program};
use crate::{assert_satisfied, expect_type_inference_error, generate_main_input, parse_program};
use leo_core_ast::InputValue;
pub mod conditional;
@ -62,5 +62,5 @@ fn test_num_returns_fail() {
let bytes = include_bytes!("num_returns_fail.leo");
let error = parse_program(bytes).err().unwrap();
expect_dynamic_check_error(error);
expect_type_inference_error(error);
}

View File

@ -17,8 +17,8 @@
use crate::{expect_compiler_error, parse_input, parse_program};
use leo_ast::ParserError;
use leo_compiler::errors::{CompilerError, ExpressionError, FunctionError, StatementError};
use leo_dynamic_check::errors::{FrameError, TypeAssertionError, TypeInferenceError};
use leo_input::InputParserError;
use leo_type_inference::errors::{FrameError, TypeAssertionError, TypeInferenceError};
pub mod identifiers;
@ -80,11 +80,11 @@ fn test_compare_mismatched_types() {
let bytes = include_bytes!("compare_mismatched_types.leo");
let error = parse_program(bytes).err().unwrap();
// Expect a dynamic check error.
// Expect a type inference error.
match error {
CompilerError::DynamicCheckError(TypeInferenceError::FrameError(FrameError::TypeAssertionError(
CompilerError::TypeInferenceError(TypeInferenceError::FrameError(FrameError::TypeAssertionError(
TypeAssertionError::Error(_),
))) => {}
error => panic!("Expected dynamic check error, found {}", error),
error => panic!("Expected type inference error, found {}", error),
}
}

View File

@ -1,5 +1,5 @@
[package]
name = "leo-dynamic-check"
name = "leo-type-inference"
version = "1.0.3"
authors = [ "The Aleo Team <hello@aleo.org>" ]
description = "Checks that a program is correct using type inference"
@ -21,20 +21,20 @@ edition = "2018"
path = "../ast"
version = "1.0.3"
[dependencies.leo-core-ast]
path = "../core-ast"
version = "1.0.3"
[dependencies.leo-imports]
path = "../imports"
version = "1.0.3"
[dependencies.serde_json]
version = "1.0"
[dependencies.leo-symbol-table]
path = "../symbol-table"
version = "1.0.3"
[dependencies.leo-core-ast]
path = "../core-ast"
version = "1.0.3"
[dependencies.serde_json]
version = "1.0"
[dependencies.serde]
version = "1.0"

View File

@ -21,7 +21,7 @@ pub mod tuples;
pub mod variables;
use leo_ast::LeoAst;
use leo_dynamic_check::TypeInference;
use leo_type_inference::TypeInference;
use leo_core_ast::{Input, LeoCoreAst, Program};
use leo_imports::ImportParser;