diff --git a/ast/benches/ast.rs b/ast/benches/ast.rs
index 3d48721638..4d0eb690ec 100644
--- a/ast/benches/ast.rs
+++ b/ast/benches/ast.rs
@@ -16,22 +16,18 @@
use leo_ast::LeoAst;
-use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use criterion::{criterion_group, criterion_main, Criterion};
use std::path::{Path, PathBuf};
-fn leo_ast<'ast>(filepath: &'ast PathBuf, program_string: &'ast str) {
- let result = LeoAst::<'ast>::new(filepath, program_string).unwrap();
- black_box(result);
+fn leo_ast<'ast>(filepath: &'ast PathBuf, program_string: &'ast str) -> LeoAst<'ast> {
+ LeoAst::<'ast>::new(filepath, program_string).unwrap()
}
fn criterion_benchmark(c: &mut Criterion) {
let filepath = Path::new("./main.leo").to_path_buf();
- // let program_string = &LeoAst::load_file(&filepath).unwrap();
let program_string = include_str!("./main.leo");
- c.bench_function("LeoAst::new", |b| {
- b.iter(|| leo_ast(black_box(&filepath), black_box(program_string)))
- });
+ c.bench_function("LeoAst::new", |b| b.iter(|| leo_ast(&filepath, program_string)));
}
criterion_group!(benches, criterion_benchmark);
diff --git a/ast/benches/main.leo b/ast/benches/main.leo
index ef22115243..6b094d9aae 100644
--- a/ast/benches/main.leo
+++ b/ast/benches/main.leo
@@ -1,3 +1,26 @@
-function main() {
- return 1 + 1
+circuit PedersenHash {
+ parameters: [group; 256],
+
+ // Instantiates a Pedersen hash circuit
+ static function new(parameters: [group; 256]) -> Self {
+ return Self { parameters: parameters }
+ }
+
+ function hash(bits: [bool; 256]) -> group {
+ let mut digest: group = 0;
+ for i in 0..256 {
+ if bits[i] {
+ digest += self.parameters[i];
+ }
+ }
+ return digest
+ }
+}
+
+// The 'pedersen-hash' main function.
+function main() -> group {
+ const parameters = [1group; 256];
+ const pedersen = PedersenHash::new(parameters);
+ let hash_input: [bool; 256] = [true; 256];
+ return pedersen.hash(hash_input)
}
diff --git a/ast/src/access/call_access.rs b/ast/src/access/call_access.rs
index 0b26c5c6f3..00bd0e19d6 100644
--- a/ast/src/access/call_access.rs
+++ b/ast/src/access/call_access.rs
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see .
-use crate::{ast::Rule, expressions::TupleExpression, SpanDef};
+use crate::{ast::Rule, expressions::Expression, SpanDef};
use pest::Span;
use pest_ast::FromPest;
@@ -23,7 +23,7 @@ use serde::Serialize;
#[derive(Clone, Debug, FromPest, PartialEq, Serialize)]
#[pest_ast(rule(Rule::access_call))]
pub struct CallAccess<'ast> {
- pub expressions: TupleExpression<'ast>,
+ pub expressions: Vec>,
#[pest_ast(outer())]
#[serde(with = "SpanDef")]
pub span: Span<'ast>,
diff --git a/ast/src/ast.rs b/ast/src/ast.rs
index 8506abf29d..f1fde50a9e 100644
--- a/ast/src/ast.rs
+++ b/ast/src/ast.rs
@@ -159,8 +159,7 @@ impl<'ast> FromPest<'ast> for Expression<'ast> {
type Rule = Rule;
fn from_pest(pest: &mut Pairs<'ast, Rule>) -> Result> {
- let mut clone = pest.clone();
- let pair = clone.next().ok_or(::from_pest::ConversionError::NoMatch)?;
+ let pair = pest.peek().ok_or(::from_pest::ConversionError::NoMatch)?;
match pair.as_rule() {
Rule::expression => {
// Transfer iterated state to pest.
diff --git a/ast/src/leo.pest b/ast/src/leo.pest
index 69a002f37d..71024b6439 100644
--- a/ast/src/leo.pest
+++ b/ast/src/leo.pest
@@ -226,7 +226,7 @@ dimension_single = {
// Declared in types/array_dimensions.rs
dimension_multiple = { "(" ~ number_positive ~ ("," ~ number_positive)* ~ ")"}
-type_tuple = { "(" ~ NEWLINE* ~ type_ ~ ("," ~ NEWLINE* ~ type_)+ ~ ","? ~ NEWLINE* ~ ")" }
+type_tuple = { "(" ~ NEWLINE* ~ (type_ ~ ("," ~ NEWLINE* ~ type_)+ ~ ","?)? ~ NEWLINE* ~ ")" }
/// Values
@@ -302,7 +302,7 @@ access_tuple = ${ "." ~ number_positive }
access_assignee = { access_array | access_tuple | access_member }
// Declared in access/call_access.rs
-access_call = !{ expression_tuple }
+access_call = !{ "(" ~ (expression ~ ("," ~ expression)*)? ~ ")" }
// Declared in access/member_access.rs
access_member = ${ "." ~ identifier }
@@ -351,7 +351,7 @@ expression_term = {
expression = { expression_term ~ (operation_binary ~ expression_term)* }
// Declared in expressions/expression_tuple.rs
-expression_tuple = { "(" ~ (expression ~ ("," ~ expression)*)? ~ ")" }
+expression_tuple = { "(" ~ (expression ~ ("," ~ expression)+)? ~ ")" }
// Declared in expressions/array_initializer_expression.rs
expression_array_initializer = { "[" ~ expression ~ ";" ~ array_dimensions ~ "]" }
diff --git a/ast/src/lib.rs b/ast/src/lib.rs
index a81e827486..0b04d6787e 100644
--- a/ast/src/lib.rs
+++ b/ast/src/lib.rs
@@ -21,7 +21,7 @@ extern crate pest_derive;
#[macro_use]
extern crate thiserror;
-mod ast;
+pub mod ast;
pub mod access;
pub mod annotations;
diff --git a/ast/tests/expression.rs b/ast/tests/expression.rs
new file mode 100644
index 0000000000..c168d34750
--- /dev/null
+++ b/ast/tests/expression.rs
@@ -0,0 +1,39 @@
+use leo_ast::ast::{LanguageParser, Rule};
+
+use pest::*;
+
+#[test]
+fn redundant_parens() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "(true)",
+ rule: Rule::expression,
+ tokens: [
+ expression(0, 6, [
+ expression_term(0, 6, [expression(1, 5, [expression_term(1, 5, [value(1, 5, [value_boolean(1, 5, [])])])])])
+ ])
+ ]
+ }
+}
+
+#[test]
+fn multiple_redundant_parens() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "(((true)))",
+ rule: Rule::expression,
+ tokens: [
+ expression(0, 10, [
+ expression_term(0, 10, [
+ expression(1, 9, [expression_term(1, 9, [
+ expression(2, 8, [expression_term(2, 8, [
+ expression(3, 7, [expression_term(3, 7, [
+ value(3, 7, [value_boolean(3, 7, [])])
+ ])])
+ ])])
+ ])])
+ ])
+ ])
+ ]
+ }
+}
diff --git a/ast/tests/function.rs b/ast/tests/function.rs
new file mode 100644
index 0000000000..f35ed1f47e
--- /dev/null
+++ b/ast/tests/function.rs
@@ -0,0 +1,115 @@
+use leo_ast::ast::{LanguageParser, Rule};
+
+use pest::*;
+
+#[test]
+fn call_wo_args() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "x()",
+ rule: Rule::expression_postfix,
+ tokens: [
+ expression_postfix(0, 3, [
+ keyword_or_identifier(0, 1, [self_keyword_or_identifier(0, 1, [identifier(0, 1, [])])]),
+ access(1, 3, [access_call(1, 3, [])])
+ ])
+ ]
+ }
+}
+
+#[test]
+fn call_with_arg() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "x(true)",
+ rule: Rule::expression_postfix,
+ tokens: [
+ expression_postfix(0, 7, [
+ keyword_or_identifier(0, 1, [self_keyword_or_identifier(0, 1, [identifier(0, 1, [])])]),
+ access(1, 7, [access_call(1, 7, [
+ expression(2, 6, [expression_term(2, 6, [value(2, 6, [value_boolean(2, 6, [])])])])
+ ])])
+ ])
+ ]
+ }
+}
+
+#[test]
+fn call_with_2_args() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "x(true, false)",
+ rule: Rule::expression_postfix,
+ tokens: [
+ expression_postfix(0, 14, [
+ keyword_or_identifier(0, 1, [self_keyword_or_identifier(0, 1, [identifier(0, 1, [])])]),
+ access(1, 14, [access_call(1, 14, [
+ expression(2, 6, [expression_term(2, 6, [value(2, 6, [value_boolean(2, 6, [])])])]),
+ expression(8, 13, [expression_term(8, 13, [value(8, 13, [value_boolean(8, 13, [])])])])
+ ])])
+ ])
+ ]
+ }
+}
+
+#[test]
+fn empty_def() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "function x() {}",
+ rule: Rule::function,
+ tokens: [
+ function(0, 15, [identifier(9, 10, [])])
+ ]
+ }
+}
+
+#[test]
+fn returning_unit_type() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "function x() -> () {}",
+ rule: Rule::function,
+ tokens: [
+ function(0, 21, [identifier(9, 10, []), type_(16, 18, [type_tuple(16, 18, [])])])
+ ]
+ }
+}
+
+#[test]
+fn returning_unit_value() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "function x() { return () }",
+ rule: Rule::function,
+ tokens: [
+ function(0, 26, [identifier(9, 10, []), statement(15, 25, [
+ statement_return(15, 25, [expression(22, 25, [expression_term(22, 24, [expression_tuple(22, 24, [])])])])
+ ])])
+ ]
+ }
+}
+
+#[test]
+fn id_def() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "function id(x: u8) -> u8 { return x }",
+ rule: Rule::function,
+ tokens: [
+ function(0, 37, [
+ identifier(9, 11, []),
+ input(12, 17, [
+ function_input(12, 17, [
+ identifier(12, 13, []),
+ type_(15, 17, [type_data(15, 17, [type_integer(15, 17, [type_integer_unsigned(15, 17, [type_u8(15, 17, [])])])])])
+ ])
+ ]),
+ type_(22, 24, [type_data(22, 24, [type_integer(22, 24, [type_integer_unsigned(22, 24, [type_u8(22, 24, [])])])])]),
+ statement(27, 36, [statement_return(27, 36, [
+ expression(34, 36, [expression_term(34, 35, [identifier(34, 35, [])])])
+ ])])
+ ])
+ ]
+ }
+}
diff --git a/ast/tests/mod.rs b/ast/tests/mod.rs
index 6698b5585a..b4ed4e6d07 100644
--- a/ast/tests/mod.rs
+++ b/ast/tests/mod.rs
@@ -14,4 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with the Leo library. If not, see .
+mod expression;
+mod function;
mod serialization;
+mod tuple;
diff --git a/ast/tests/tuple.rs b/ast/tests/tuple.rs
new file mode 100644
index 0000000000..4b550214fe
--- /dev/null
+++ b/ast/tests/tuple.rs
@@ -0,0 +1,91 @@
+use leo_ast::ast::{LanguageParser, Rule};
+
+use pest::*;
+
+#[test]
+fn implicitly_typed() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "(true, false)",
+ rule: Rule::expression_tuple,
+ tokens: [
+ expression_tuple(0, 13, [
+ expression(1, 5, [expression_term(1, 5, [value(1, 5, [value_boolean(1, 5, [])])])]),
+ expression(7, 12, [expression_term(7, 12, [value(7, 12, [value_boolean(7, 12, [])])])])
+ ])
+ ]
+ }
+}
+
+#[test]
+fn explicitly_typed() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "let tup: (bool, bool) = (true, false);",
+ rule: Rule::statement_definition,
+ tokens: [
+ statement_definition(0, 38, [
+ declare(0, 4, [let_(0, 4, [])]),
+ variables(4, 21, [
+ variable_name(4, 7, [identifier(4, 7, [])]),
+ type_(9, 21, [type_tuple(9, 21, [
+ type_(10, 14, [type_data(10, 14, [type_boolean(10, 14, [])])]),
+ type_(16, 20, [type_data(16, 20, [type_boolean(16, 20, [])])]),
+ ])])
+ ]),
+ expression(24, 37, [expression_term(24, 37, [expression_tuple(24, 37, [
+ expression(25, 29, [expression_term(25, 29, [value(25, 29, [value_boolean(25, 29, [])])])]),
+ expression(31, 36, [expression_term(31, 36, [value(31, 36, [value_boolean(31, 36, [])])])]),
+ ])])]),
+ LINE_END(37, 38, [])
+ ])
+ ]
+ }
+}
+
+#[test]
+fn access() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "x.0",
+ rule: Rule::expression_postfix,
+ tokens: [
+ expression_postfix(0, 3, [
+ keyword_or_identifier(0, 1, [self_keyword_or_identifier(0, 1, [identifier(0, 1, [])])]),
+ access(1, 3, [access_tuple(1, 3, [number_positive(2, 3, [])])])
+ ])
+ ]
+ }
+}
+
+#[test]
+fn implicit_unit() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "()",
+ rule: Rule::expression_tuple,
+ tokens: [
+ expression_tuple(0, 2, [])
+ ]
+ }
+}
+
+#[test]
+fn explicit_unit() {
+ parses_to! {
+ parser: LanguageParser,
+ input: "let x: () = ();",
+ rule: Rule::statement_definition,
+ tokens: [
+ statement_definition(0, 15, [
+ declare(0, 4, [let_(0, 4, [])]),
+ variables(4, 9, [
+ variable_name(4, 5, [identifier(4, 5, [])]),
+ type_(7, 9, [type_tuple(7, 9, [])])
+ ]),
+ expression(12, 14, [expression_term(12, 14, [expression_tuple(12, 14, [])])]),
+ LINE_END(14, 15, [])
+ ])
+ ]
+ }
+}
diff --git a/compiler/src/expression/expression.rs b/compiler/src/expression/expression.rs
index 9609a4ff69..18967d0069 100644
--- a/compiler/src/expression/expression.rs
+++ b/compiler/src/expression/expression.rs
@@ -54,7 +54,7 @@ impl> ConstrainedProgram {
Expression::Address(address, span) => Ok(ConstrainedValue::Address(Address::constant(address, span)?)),
Expression::Boolean(boolean, span) => Ok(ConstrainedValue::Boolean(new_bool_constant(boolean, span)?)),
Expression::Field(field, span) => Ok(ConstrainedValue::Field(FieldType::constant(field, span)?)),
- Expression::Group(group_element) => Ok(ConstrainedValue::Group(G::constant(group_element)?)),
+ Expression::Group(group_element) => Ok(ConstrainedValue::Group(G::constant(*group_element)?)),
Expression::Implicit(value, span) => Ok(enforce_number_implicit(expected_type, value, span)?),
Expression::Integer(type_, integer, span) => {
Ok(ConstrainedValue::Integer(Integer::new_constant(&type_, integer, span)?))
diff --git a/typed/benches/big_circuit.leo b/typed/benches/big_circuit.leo
new file mode 100644
index 0000000000..32011551c0
--- /dev/null
+++ b/typed/benches/big_circuit.leo
@@ -0,0 +1,265 @@
+function main() {
+ let foo = Foo { x0: 0, x1: 1, x2: 2, x3: 3, x4: 4, x5: 5, x6: 6, x7: 7, x8: 8, x9: 9, x10: 10, x11: 11, x12: 12, x13: 13, x14: 14, x15: 15, x16: 16, x17: 17, x18: 18, x19: 19, x20: 20, x21: 21, x22: 22, x23: 23, x24: 24, x25: 25, x26: 26, x27: 27, x28: 28, x29: 29, x30: 30, x31: 31, x32: 32, x33: 33, x34: 34, x35: 35, x36: 36, x37: 37, x38: 38, x39: 39, x40: 40, x41: 41, x42: 42, x43: 43, x44: 44, x45: 45, x46: 46, x47: 47, x48: 48, x49: 49, x50: 50, x51: 51, x52: 52, x53: 53, x54: 54, x55: 55, x56: 56, x57: 57, x58: 58, x59: 59, x60: 60, x61: 61, x62: 62, x63: 63, x64: 64, x65: 65, x66: 66, x67: 67, x68: 68, x69: 69, x70: 70, x71: 71, x72: 72, x73: 73, x74: 74, x75: 75, x76: 76, x77: 77, x78: 78, x79: 79, x80: 80, x81: 81, x82: 82, x83: 83, x84: 84, x85: 85, x86: 86, x87: 87, x88: 88, x89: 89, x90: 90, x91: 91, x92: 92, x93: 93, x94: 94, x95: 95, x96: 96, x97: 97, x98: 98, x99: 99, x100: 100, x101: 101, x102: 102, x103: 103, x104: 104, x105: 105, x106: 106, x107: 107, x108: 108, x109: 109, x110: 110, x111: 111, x112: 112, x113: 113, x114: 114, x115: 115, x116: 116, x117: 117, x118: 118, x119: 119, x120: 120, x121: 121, x122: 122, x123: 123, x124: 124, x125: 125, x126: 126, x127: 127, x128: 128, x129: 129, x130: 130, x131: 131, x132: 132, x133: 133, x134: 134, x135: 135, x136: 136, x137: 137, x138: 138, x139: 139, x140: 140, x141: 141, x142: 142, x143: 143, x144: 144, x145: 145, x146: 146, x147: 147, x148: 148, x149: 149, x150: 150, x151: 151, x152: 152, x153: 153, x154: 154, x155: 155, x156: 156, x157: 157, x158: 158, x159: 159, x160: 160, x161: 161, x162: 162, x163: 163, x164: 164, x165: 165, x166: 166, x167: 167, x168: 168, x169: 169, x170: 170, x171: 171, x172: 172, x173: 173, x174: 174, x175: 175, x176: 176, x177: 177, x178: 178, x179: 179, x180: 180, x181: 181, x182: 182, x183: 183, x184: 184, x185: 185, x186: 186, x187: 187, x188: 188, x189: 189, x190: 190, x191: 191, x192: 192, x193: 193, x194: 194, x195: 195, x196: 196, x197: 197, x198: 198, x199: 199, x200: 200, x201: 201, x202: 202, x203: 203, x204: 204, x205: 205, x206: 206, x207: 207, x208: 208, x209: 209, x210: 210, x211: 211, x212: 212, x213: 213, x214: 214, x215: 215, x216: 216, x217: 217, x218: 218, x219: 219, x220: 220, x221: 221, x222: 222, x223: 223, x224: 224, x225: 225, x226: 226, x227: 227, x228: 228, x229: 229, x230: 230, x231: 231, x232: 232, x233: 233, x234: 234, x235: 235, x236: 236, x237: 237, x238: 238, x239: 239, x240: 240, x241: 241, x242: 242, x243: 243, x244: 244, x245: 245, x246: 246, x247: 247, x248: 248, x249: 249, x250: 250, x251: 251, x252: 252, x253: 253, x254: 254, x255: 255 };
+ let bar = Foo { x0: 0, x1: 1, x2: 2, x3: 3, x4: 4, x5: 5, x6: 6, x7: 7, x8: 8, x9: 9, x10: 10, x11: 11, x12: 12, x13: 13, x14: 14, x15: 15, x16: 16, x17: 17, x18: 18, x19: 19, x20: 20, x21: 21, x22: 22, x23: 23, x24: 24, x25: 25, x26: 26, x27: 27, x28: 28, x29: 29, x30: 30, x31: 31, x32: 32, x33: 33, x34: 34, x35: 35, x36: 36, x37: 37, x38: 38, x39: 39, x40: 40, x41: 41, x42: 42, x43: 43, x44: 44, x45: 45, x46: 46, x47: 47, x48: 48, x49: 49, x50: 50, x51: 51, x52: 52, x53: 53, x54: 54, x55: 55, x56: 56, x57: 57, x58: 58, x59: 59, x60: 60, x61: 61, x62: 62, x63: 63, x64: 64, x65: 65, x66: 66, x67: 67, x68: 68, x69: 69, x70: 70, x71: 71, x72: 72, x73: 73, x74: 74, x75: 75, x76: 76, x77: 77, x78: 78, x79: 79, x80: 80, x81: 81, x82: 82, x83: 83, x84: 84, x85: 85, x86: 86, x87: 87, x88: 88, x89: 89, x90: 90, x91: 91, x92: 92, x93: 93, x94: 94, x95: 95, x96: 96, x97: 97, x98: 98, x99: 99, x100: 100, x101: 101, x102: 102, x103: 103, x104: 104, x105: 105, x106: 106, x107: 107, x108: 108, x109: 109, x110: 110, x111: 111, x112: 112, x113: 113, x114: 114, x115: 115, x116: 116, x117: 117, x118: 118, x119: 119, x120: 120, x121: 121, x122: 122, x123: 123, x124: 124, x125: 125, x126: 126, x127: 127, x128: 128, x129: 129, x130: 130, x131: 131, x132: 132, x133: 133, x134: 134, x135: 135, x136: 136, x137: 137, x138: 138, x139: 139, x140: 140, x141: 141, x142: 142, x143: 143, x144: 144, x145: 145, x146: 146, x147: 147, x148: 148, x149: 149, x150: 150, x151: 151, x152: 152, x153: 153, x154: 154, x155: 155, x156: 156, x157: 157, x158: 158, x159: 159, x160: 160, x161: 161, x162: 162, x163: 163, x164: 164, x165: 165, x166: 166, x167: 167, x168: 168, x169: 169, x170: 170, x171: 171, x172: 172, x173: 173, x174: 174, x175: 175, x176: 176, x177: 177, x178: 178, x179: 179, x180: 180, x181: 181, x182: 182, x183: 183, x184: 184, x185: 185, x186: 186, x187: 187, x188: 188, x189: 189, x190: 190, x191: 191, x192: 192, x193: 193, x194: 194, x195: 195, x196: 196, x197: 197, x198: 198, x199: 199, x200: 200, x201: 201, x202: 202, x203: 203, x204: 204, x205: 205, x206: 206, x207: 207, x208: 208, x209: 209, x210: 210, x211: 211, x212: 212, x213: 213, x214: 214, x215: 215, x216: 216, x217: 217, x218: 218, x219: 219, x220: 220, x221: 221, x222: 222, x223: 223, x224: 224, x225: 225, x226: 226, x227: 227, x228: 228, x229: 229, x230: 230, x231: 231, x232: 232, x233: 233, x234: 234, x235: 235, x236: 236, x237: 237, x238: 238, x239: 239, x240: 240, x241: 241, x242: 242, x243: 243, x244: 244, x245: 245, x246: 246, x247: 247, x248: 248, x249: 249, x250: 250, x251: 251, x252: 252, x253: 253, x254: 254, x255: 255 };
+
+ return foo.x0 + bar.x255
+}
+
+circuit Foo {
+ x0: u8,
+ x1: u8,
+ x2: u8,
+ x3: u8,
+ x4: u8,
+ x5: u8,
+ x6: u8,
+ x7: u8,
+ x8: u8,
+ x9: u8,
+ x10: u8,
+ x11: u8,
+ x12: u8,
+ x13: u8,
+ x14: u8,
+ x15: u8,
+ x16: u8,
+ x17: u8,
+ x18: u8,
+ x19: u8,
+ x20: u8,
+ x21: u8,
+ x22: u8,
+ x23: u8,
+ x24: u8,
+ x25: u8,
+ x26: u8,
+ x27: u8,
+ x28: u8,
+ x29: u8,
+ x30: u8,
+ x31: u8,
+ x32: u8,
+ x33: u8,
+ x34: u8,
+ x35: u8,
+ x36: u8,
+ x37: u8,
+ x38: u8,
+ x39: u8,
+ x40: u8,
+ x41: u8,
+ x42: u8,
+ x43: u8,
+ x44: u8,
+ x45: u8,
+ x46: u8,
+ x47: u8,
+ x48: u8,
+ x49: u8,
+ x50: u8,
+ x51: u8,
+ x52: u8,
+ x53: u8,
+ x54: u8,
+ x55: u8,
+ x56: u8,
+ x57: u8,
+ x58: u8,
+ x59: u8,
+ x60: u8,
+ x61: u8,
+ x62: u8,
+ x63: u8,
+ x64: u8,
+ x65: u8,
+ x66: u8,
+ x67: u8,
+ x68: u8,
+ x69: u8,
+ x70: u8,
+ x71: u8,
+ x72: u8,
+ x73: u8,
+ x74: u8,
+ x75: u8,
+ x76: u8,
+ x77: u8,
+ x78: u8,
+ x79: u8,
+ x80: u8,
+ x81: u8,
+ x82: u8,
+ x83: u8,
+ x84: u8,
+ x85: u8,
+ x86: u8,
+ x87: u8,
+ x88: u8,
+ x89: u8,
+ x90: u8,
+ x91: u8,
+ x92: u8,
+ x93: u8,
+ x94: u8,
+ x95: u8,
+ x96: u8,
+ x97: u8,
+ x98: u8,
+ x99: u8,
+ x100: u8,
+ x101: u8,
+ x102: u8,
+ x103: u8,
+ x104: u8,
+ x105: u8,
+ x106: u8,
+ x107: u8,
+ x108: u8,
+ x109: u8,
+ x110: u8,
+ x111: u8,
+ x112: u8,
+ x113: u8,
+ x114: u8,
+ x115: u8,
+ x116: u8,
+ x117: u8,
+ x118: u8,
+ x119: u8,
+ x120: u8,
+ x121: u8,
+ x122: u8,
+ x123: u8,
+ x124: u8,
+ x125: u8,
+ x126: u8,
+ x127: u8,
+ x128: u8,
+ x129: u8,
+ x130: u8,
+ x131: u8,
+ x132: u8,
+ x133: u8,
+ x134: u8,
+ x135: u8,
+ x136: u8,
+ x137: u8,
+ x138: u8,
+ x139: u8,
+ x140: u8,
+ x141: u8,
+ x142: u8,
+ x143: u8,
+ x144: u8,
+ x145: u8,
+ x146: u8,
+ x147: u8,
+ x148: u8,
+ x149: u8,
+ x150: u8,
+ x151: u8,
+ x152: u8,
+ x153: u8,
+ x154: u8,
+ x155: u8,
+ x156: u8,
+ x157: u8,
+ x158: u8,
+ x159: u8,
+ x160: u8,
+ x161: u8,
+ x162: u8,
+ x163: u8,
+ x164: u8,
+ x165: u8,
+ x166: u8,
+ x167: u8,
+ x168: u8,
+ x169: u8,
+ x170: u8,
+ x171: u8,
+ x172: u8,
+ x173: u8,
+ x174: u8,
+ x175: u8,
+ x176: u8,
+ x177: u8,
+ x178: u8,
+ x179: u8,
+ x180: u8,
+ x181: u8,
+ x182: u8,
+ x183: u8,
+ x184: u8,
+ x185: u8,
+ x186: u8,
+ x187: u8,
+ x188: u8,
+ x189: u8,
+ x190: u8,
+ x191: u8,
+ x192: u8,
+ x193: u8,
+ x194: u8,
+ x195: u8,
+ x196: u8,
+ x197: u8,
+ x198: u8,
+ x199: u8,
+ x200: u8,
+ x201: u8,
+ x202: u8,
+ x203: u8,
+ x204: u8,
+ x205: u8,
+ x206: u8,
+ x207: u8,
+ x208: u8,
+ x209: u8,
+ x210: u8,
+ x211: u8,
+ x212: u8,
+ x213: u8,
+ x214: u8,
+ x215: u8,
+ x216: u8,
+ x217: u8,
+ x218: u8,
+ x219: u8,
+ x220: u8,
+ x221: u8,
+ x222: u8,
+ x223: u8,
+ x224: u8,
+ x225: u8,
+ x226: u8,
+ x227: u8,
+ x228: u8,
+ x229: u8,
+ x230: u8,
+ x231: u8,
+ x232: u8,
+ x233: u8,
+ x234: u8,
+ x235: u8,
+ x236: u8,
+ x237: u8,
+ x238: u8,
+ x239: u8,
+ x240: u8,
+ x241: u8,
+ x242: u8,
+ x243: u8,
+ x244: u8,
+ x245: u8,
+ x246: u8,
+ x247: u8,
+ x248: u8,
+ x249: u8,
+ x250: u8,
+ x251: u8,
+ x252: u8,
+ x253: u8,
+ x254: u8,
+ x255: u8
+}
\ No newline at end of file
diff --git a/typed/benches/big_if_else.leo b/typed/benches/big_if_else.leo
new file mode 100644
index 0000000000..6c974f12a3
--- /dev/null
+++ b/typed/benches/big_if_else.leo
@@ -0,0 +1,389 @@
+function main() {
+ let x: u8 = 191;
+
+ if x == 0 {
+ return x
+ } else if x == 1 {
+ return x - 1
+ } else if x == 2 {
+ return x - 2
+ } else if x == 3 {
+ return x - 3
+ } else if x == 4 {
+ return x - 4
+ } else if x == 5 {
+ return x - 5
+ } else if x == 6 {
+ return x - 6
+ } else if x == 7 {
+ return x - 7
+ } else if x == 8 {
+ return x - 8
+ } else if x == 9 {
+ return x - 9
+ } else if x == 10 {
+ return x - 10
+ } else if x == 11 {
+ return x - 11
+ } else if x == 12 {
+ return x - 12
+ } else if x == 13 {
+ return x - 13
+ } else if x == 14 {
+ return x - 14
+ } else if x == 15 {
+ return x - 15
+ } else if x == 16 {
+ return x - 16
+ } else if x == 17 {
+ return x - 17
+ } else if x == 18 {
+ return x - 18
+ } else if x == 19 {
+ return x - 19
+ } else if x == 20 {
+ return x - 20
+ } else if x == 21 {
+ return x - 21
+ } else if x == 22 {
+ return x - 22
+ } else if x == 23 {
+ return x - 23
+ } else if x == 24 {
+ return x - 24
+ } else if x == 25 {
+ return x - 25
+ } else if x == 26 {
+ return x - 26
+ } else if x == 27 {
+ return x - 27
+ } else if x == 28 {
+ return x - 28
+ } else if x == 29 {
+ return x - 29
+ } else if x == 30 {
+ return x - 30
+ } else if x == 31 {
+ return x - 31
+ } else if x == 32 {
+ return x - 32
+ } else if x == 33 {
+ return x - 33
+ } else if x == 34 {
+ return x - 34
+ } else if x == 35 {
+ return x - 35
+ } else if x == 36 {
+ return x - 36
+ } else if x == 37 {
+ return x - 37
+ } else if x == 38 {
+ return x - 38
+ } else if x == 39 {
+ return x - 39
+ } else if x == 40 {
+ return x - 40
+ } else if x == 41 {
+ return x - 41
+ } else if x == 42 {
+ return x - 42
+ } else if x == 43 {
+ return x - 43
+ } else if x == 44 {
+ return x - 44
+ } else if x == 45 {
+ return x - 45
+ } else if x == 46 {
+ return x - 46
+ } else if x == 47 {
+ return x - 47
+ } else if x == 48 {
+ return x - 48
+ } else if x == 49 {
+ return x - 49
+ } else if x == 50 {
+ return x - 50
+ } else if x == 51 {
+ return x - 51
+ } else if x == 52 {
+ return x - 52
+ } else if x == 53 {
+ return x - 53
+ } else if x == 54 {
+ return x - 54
+ } else if x == 55 {
+ return x - 55
+ } else if x == 56 {
+ return x - 56
+ } else if x == 57 {
+ return x - 57
+ } else if x == 58 {
+ return x - 58
+ } else if x == 59 {
+ return x - 59
+ } else if x == 60 {
+ return x - 60
+ } else if x == 61 {
+ return x - 61
+ } else if x == 62 {
+ return x - 62
+ } else if x == 63 {
+ return x - 63
+ } else if x == 64 {
+ return x - 64
+ } else if x == 65 {
+ return x - 65
+ } else if x == 66 {
+ return x - 66
+ } else if x == 67 {
+ return x - 67
+ } else if x == 68 {
+ return x - 68
+ } else if x == 69 {
+ return x - 69
+ } else if x == 70 {
+ return x - 70
+ } else if x == 71 {
+ return x - 71
+ } else if x == 72 {
+ return x - 72
+ } else if x == 73 {
+ return x - 73
+ } else if x == 74 {
+ return x - 74
+ } else if x == 75 {
+ return x - 75
+ } else if x == 76 {
+ return x - 76
+ } else if x == 77 {
+ return x - 77
+ } else if x == 78 {
+ return x - 78
+ } else if x == 79 {
+ return x - 79
+ } else if x == 80 {
+ return x - 80
+ } else if x == 81 {
+ return x - 81
+ } else if x == 82 {
+ return x - 82
+ } else if x == 83 {
+ return x - 83
+ } else if x == 84 {
+ return x - 84
+ } else if x == 85 {
+ return x - 85
+ } else if x == 86 {
+ return x - 86
+ } else if x == 87 {
+ return x - 87
+ } else if x == 88 {
+ return x - 88
+ } else if x == 89 {
+ return x - 89
+ } else if x == 90 {
+ return x - 90
+ } else if x == 91 {
+ return x - 91
+ } else if x == 92 {
+ return x - 92
+ } else if x == 93 {
+ return x - 93
+ } else if x == 94 {
+ return x - 94
+ } else if x == 95 {
+ return x - 95
+ } else if x == 96 {
+ return x - 96
+ } else if x == 97 {
+ return x - 97
+ } else if x == 98 {
+ return x - 98
+ } else if x == 99 {
+ return x - 99
+ } else if x == 100 {
+ return x - 100
+ } else if x == 101 {
+ return x - 101
+ } else if x == 102 {
+ return x - 102
+ } else if x == 103 {
+ return x - 103
+ } else if x == 104 {
+ return x - 104
+ } else if x == 105 {
+ return x - 105
+ } else if x == 106 {
+ return x - 106
+ } else if x == 107 {
+ return x - 107
+ } else if x == 108 {
+ return x - 108
+ } else if x == 109 {
+ return x - 109
+ } else if x == 110 {
+ return x - 110
+ } else if x == 111 {
+ return x - 111
+ } else if x == 112 {
+ return x - 112
+ } else if x == 113 {
+ return x - 113
+ } else if x == 114 {
+ return x - 114
+ } else if x == 115 {
+ return x - 115
+ } else if x == 116 {
+ return x - 116
+ } else if x == 117 {
+ return x - 117
+ } else if x == 118 {
+ return x - 118
+ } else if x == 119 {
+ return x - 119
+ } else if x == 120 {
+ return x - 120
+ } else if x == 121 {
+ return x - 121
+ } else if x == 122 {
+ return x - 122
+ } else if x == 123 {
+ return x - 123
+ } else if x == 124 {
+ return x - 124
+ } else if x == 125 {
+ return x - 125
+ } else if x == 126 {
+ return x - 126
+ } else if x == 127 {
+ return x - 127
+ } else if x == 128 {
+ return x - 128
+ } else if x == 129 {
+ return x - 129
+ } else if x == 130 {
+ return x - 130
+ } else if x == 131 {
+ return x - 131
+ } else if x == 132 {
+ return x - 132
+ } else if x == 133 {
+ return x - 133
+ } else if x == 134 {
+ return x - 134
+ } else if x == 135 {
+ return x - 135
+ } else if x == 136 {
+ return x - 136
+ } else if x == 137 {
+ return x - 137
+ } else if x == 138 {
+ return x - 138
+ } else if x == 139 {
+ return x - 139
+ } else if x == 140 {
+ return x - 140
+ } else if x == 141 {
+ return x - 141
+ } else if x == 142 {
+ return x - 142
+ } else if x == 143 {
+ return x - 143
+ } else if x == 144 {
+ return x - 144
+ } else if x == 145 {
+ return x - 145
+ } else if x == 146 {
+ return x - 146
+ } else if x == 147 {
+ return x - 147
+ } else if x == 148 {
+ return x - 148
+ } else if x == 149 {
+ return x - 149
+ } else if x == 150 {
+ return x - 150
+ } else if x == 151 {
+ return x - 151
+ } else if x == 152 {
+ return x - 152
+ } else if x == 153 {
+ return x - 153
+ } else if x == 154 {
+ return x - 154
+ } else if x == 155 {
+ return x - 155
+ } else if x == 156 {
+ return x - 156
+ } else if x == 157 {
+ return x - 157
+ } else if x == 158 {
+ return x - 158
+ } else if x == 159 {
+ return x - 159
+ } else if x == 160 {
+ return x - 160
+ } else if x == 161 {
+ return x - 161
+ } else if x == 162 {
+ return x - 162
+ } else if x == 163 {
+ return x - 163
+ } else if x == 164 {
+ return x - 164
+ } else if x == 165 {
+ return x - 165
+ } else if x == 166 {
+ return x - 166
+ } else if x == 167 {
+ return x - 167
+ } else if x == 168 {
+ return x - 168
+ } else if x == 169 {
+ return x - 169
+ } else if x == 170 {
+ return x - 170
+ } else if x == 171 {
+ return x - 171
+ } else if x == 172 {
+ return x - 172
+ } else if x == 173 {
+ return x - 173
+ } else if x == 174 {
+ return x - 174
+ } else if x == 175 {
+ return x - 175
+ } else if x == 176 {
+ return x - 176
+ } else if x == 177 {
+ return x - 177
+ } else if x == 178 {
+ return x - 178
+ } else if x == 179 {
+ return x - 179
+ } else if x == 180 {
+ return x - 180
+ } else if x == 181 {
+ return x - 181
+ } else if x == 182 {
+ return x - 182
+ } else if x == 183 {
+ return x - 183
+ } else if x == 184 {
+ return x - 184
+ } else if x == 185 {
+ return x - 185
+ } else if x == 186 {
+ return x - 186
+ } else if x == 187 {
+ return x - 187
+ } else if x == 188 {
+ return x - 188
+ } else if x == 189 {
+ return x - 189
+ } else if x == 190 {
+ return x - 190
+ } else if x == 191 {
+ return x - 191
+ }
+}
\ No newline at end of file
diff --git a/typed/benches/big_ternary.leo b/typed/benches/big_ternary.leo
new file mode 100644
index 0000000000..34d8669aaf
--- /dev/null
+++ b/typed/benches/big_ternary.leo
@@ -0,0 +1,5 @@
+function main() {
+ let x: u8 = 255;
+
+ return if x == 0 ? x : (if x == 1 ? x : (if x == 2 ? x : (if x == 3 ? x : (if x == 4 ? x : (if x == 5 ? x : (if x == 6 ? x : (if x == 7 ? x : (if x == 8 ? x : (if x == 9 ? x : (if x == 10 ? x : (if x == 11 ? x : (if x == 12 ? x : (if x == 13 ? x : (if x == 14 ? x : (if x == 15 ? x : (if x == 16 ? x : (if x == 17 ? x : (if x == 18 ? x : (if x == 19 ? x : (if x == 20 ? x : (if x == 21 ? x : (if x == 22 ? x : (if x == 23 ? x : (if x == 24 ? x : (if x == 25 ? x : (if x == 26 ? x : (if x == 27 ? x : (if x == 28 ? x : (if x == 29 ? x : (if x == 30 ? x : (if x == 31 ? x : (if x == 32 ? x : (if x == 33 ? x : (if x == 34 ? x : (if x == 35 ? x : (if x == 36 ? x : (if x == 37 ? x : (if x == 38 ? x : (if x == 39 ? x : (if x == 40 ? x : (if x == 41 ? x : (if x == 42 ? x : (if x == 43 ? x : (if x == 44 ? x : (if x == 45 ? x : (if x == 46 ? x : (if x == 47 ? x : (if x == 48 ? x : (if x == 49 ? x : (if x == 50 ? x : (if x == 51 ? x : (if x == 52 ? x : (if x == 53 ? x : (if x == 54 ? x : (if x == 55 ? x : (if x == 56 ? x : (if x == 57 ? x : (if x == 58 ? x : (if x == 59 ? x : (if x == 60 ? x : (if x == 61 ? x : (if x == 62 ? x : (if x == 63 ? x : (if x == 64 ? x : (if x == 65 ? x : (if x == 66 ? x : (if x == 67 ? x : (if x == 68 ? x : (if x == 69 ? x : (if x == 70 ? x : (if x == 71 ? x : (if x == 72 ? x : (if x == 73 ? x : (if x == 74 ? x : (if x == 75 ? x : (if x == 76 ? x : (if x == 77 ? x : (if x == 78 ? x : (if x == 79 ? x : (if x == 80 ? x : (if x == 81 ? x : (if x == 82 ? x : (if x == 83 ? x : (if x == 84 ? x : (if x == 85 ? x : (if x == 86 ? x : (if x == 87 ? x : (if x == 88 ? x : (if x == 89 ? x : (if x == 90 ? x : (if x == 91 ? x : (if x == 92 ? x : (if x == 93 ? x : (if x == 94 ? x : (if x == 95 ? x : (if x == 96 ? x : (if x == 97 ? x : (if x == 98 ? x : (if x == 99 ? x : (if x == 100 ? x : (if x == 101 ? x : (if x == 102 ? x : (if x == 103 ? x : (if x == 104 ? x : (if x == 105 ? x : (if x == 106 ? x : (if x == 107 ? x : (if x == 108 ? x : (if x == 109 ? x : (if x == 110 ? x : (if x == 111 ? x : (if x == 112 ? x : (if x == 113 ? x : (if x == 114 ? x : (if x == 115 ? x : (if x == 116 ? x : (if x == 117 ? x : (if x == 118 ? x : (if x == 119 ? x : (if x == 120 ? x : (if x == 121 ? x : (if x == 122 ? x : (if x == 123 ? x : (if x == 124 ? x : (if x == 125 ? x : (if x == 126 ? x : (if x == 127 ? x : (if x == 128 ? x : (if x == 129 ? x : (if x == 130 ? x : (if x == 131 ? x : (if x == 132 ? x : (if x == 133 ? x : (if x == 134 ? x : (if x == 135 ? x : (if x == 136 ? x : (if x == 137 ? x : (if x == 138 ? x : (if x == 139 ? x : (if x == 140 ? x : (if x == 141 ? x : (if x == 142 ? x : (if x == 143 ? x : (if x == 144 ? x : (if x == 145 ? x : (if x == 146 ? x : (if x == 147 ? x : (if x == 148 ? x : (if x == 149 ? x : (if x == 150 ? x : (if x == 151 ? x : (if x == 152 ? x : (if x == 153 ? x : (if x == 154 ? x : (if x == 155 ? x : (if x == 156 ? x : (if x == 157 ? x : (if x == 158 ? x : (if x == 159 ? x : (if x == 160 ? x : (if x == 161 ? x : (if x == 162 ? x : (if x == 163 ? x : (if x == 164 ? x : (if x == 165 ? x : (if x == 166 ? x : (if x == 167 ? x : (if x == 168 ? x : (if x == 169 ? x : (if x == 170 ? x : (if x == 171 ? x : (if x == 172 ? x : (if x == 173 ? x : (if x == 174 ? x : (if x == 175 ? x : (if x == 176 ? x : (if x == 177 ? x : (if x == 178 ? x : (if x == 179 ? x : (if x == 180 ? x : (if x == 181 ? x : (if x == 182 ? x : (if x == 183 ? x : (if x == 184 ? x : (if x == 185 ? x : (if x == 186 ? x : (if x == 187 ? x : (if x == 188 ? x : (if x == 189 ? x : (if x == 190 ? x : (if x == 191 ? x : (if x == 192 ? x : (if x == 193 ? x : (if x == 194 ? x : (if x == 195 ? x : (if x == 196 ? x : (if x == 197 ? x : (if x == 198 ? x : (if x == 199 ? x : (if x == 200 ? x : (if x == 201 ? x : (if x == 202 ? x : (if x == 203 ? x : (if x == 204 ? x : (if x == 205 ? x : (if x == 206 ? x : (if x == 207 ? x : (if x == 208 ? x : (if x == 209 ? x : (if x == 210 ? x : (if x == 211 ? x : (if x == 212 ? x : (if x == 213 ? x : (if x == 214 ? x : (if x == 215 ? x : (if x == 216 ? x : (if x == 217 ? x : (if x == 218 ? x : (if x == 219 ? x : (if x == 220 ? x : (if x == 221 ? x : (if x == 222 ? x : (if x == 223 ? x : (if x == 224 ? x : (if x == 225 ? x : (if x == 226 ? x : (if x == 227 ? x : (if x == 228 ? x : (if x == 229 ? x : (if x == 230 ? x : (if x == 231 ? x : (if x == 232 ? x : (if x == 233 ? x : (if x == 234 ? x : (if x == 235 ? x : (if x == 236 ? x : (if x == 237 ? x : (if x == 238 ? x : (if x == 239 ? x : (if x == 240 ? x : (if x == 241 ? x : (if x == 242 ? x : (if x == 243 ? x : (if x == 244 ? x : (if x == 245 ? x : (if x == 246 ? x : (if x == 247 ? x : (if x == 248 ? x : (if x == 249 ? x : (if x == 250 ? x : (if x == 251 ? x : (if x == 252 ? x : (if x == 253 ? x : (if x == 254 ? x : (if x == 255 ? x : 0)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+}
\ No newline at end of file
diff --git a/typed/benches/long_array.leo b/typed/benches/long_array.leo
new file mode 100644
index 0000000000..282feb66d0
--- /dev/null
+++ b/typed/benches/long_array.leo
@@ -0,0 +1,57 @@
+function main() {
+ let arr1: [u8; (32, 32)] = [
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31]
+ ];
+
+ let arr2: [u8; (16, 32)] = [
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31],
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 31]
+ ];
+
+ return arr1[31][31] + arr2[15][31]
+}
diff --git a/typed/benches/long_expr.leo b/typed/benches/long_expr.leo
new file mode 100644
index 0000000000..8cbfb99939
--- /dev/null
+++ b/typed/benches/long_expr.leo
@@ -0,0 +1,9 @@
+function main() {
+ let a = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1;
+ let b = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1;
+ let c = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1;
+ let d = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1;
+ let e = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1;
+
+ return a + b + c + d + e
+}
diff --git a/typed/benches/main.leo b/typed/benches/main.leo
deleted file mode 100644
index ef22115243..0000000000
--- a/typed/benches/main.leo
+++ /dev/null
@@ -1,3 +0,0 @@
-function main() {
- return 1 + 1
-}
diff --git a/typed/benches/many_assigns.leo b/typed/benches/many_assigns.leo
new file mode 100644
index 0000000000..8f174abc4b
--- /dev/null
+++ b/typed/benches/many_assigns.leo
@@ -0,0 +1,388 @@
+function main() {
+ let x0: u8 = 0;
+ let x1: u8 = x0;
+ let x2: u8 = x1;
+ let x3: u8 = x2;
+ let x4: u8 = x3;
+ let x5: u8 = x4;
+ let x6: u8 = x5;
+ let x7: u8 = x6;
+ let x8: u8 = x7;
+ let x9: u8 = x8;
+ let x10: u8 = x9;
+ let x11: u8 = x10;
+ let x12: u8 = x11;
+ let x13: u8 = x12;
+ let x14: u8 = x13;
+ let x15: u8 = x14;
+ let x16: u8 = x15;
+ let x17: u8 = x16;
+ let x18: u8 = x17;
+ let x19: u8 = x18;
+ let x20: u8 = x19;
+ let x21: u8 = x20;
+ let x22: u8 = x21;
+ let x23: u8 = x22;
+ let x24: u8 = x23;
+ let x25: u8 = x24;
+ let x26: u8 = x25;
+ let x27: u8 = x26;
+ let x28: u8 = x27;
+ let x29: u8 = x28;
+ let x30: u8 = x29;
+ let x31: u8 = x30;
+ let x32: u8 = x31;
+ let x33: u8 = x32;
+ let x34: u8 = x33;
+ let x35: u8 = x34;
+ let x36: u8 = x35;
+ let x37: u8 = x36;
+ let x38: u8 = x37;
+ let x39: u8 = x38;
+ let x40: u8 = x39;
+ let x41: u8 = x40;
+ let x42: u8 = x41;
+ let x43: u8 = x42;
+ let x44: u8 = x43;
+ let x45: u8 = x44;
+ let x46: u8 = x45;
+ let x47: u8 = x46;
+ let x48: u8 = x47;
+ let x49: u8 = x48;
+ let x50: u8 = x49;
+ let x51: u8 = x50;
+ let x52: u8 = x51;
+ let x53: u8 = x52;
+ let x54: u8 = x53;
+ let x55: u8 = x54;
+ let x56: u8 = x55;
+ let x57: u8 = x56;
+ let x58: u8 = x57;
+ let x59: u8 = x58;
+ let x60: u8 = x59;
+ let x61: u8 = x60;
+ let x62: u8 = x61;
+ let x63: u8 = x62;
+ let x64: u8 = x63;
+ let x65: u8 = x64;
+ let x66: u8 = x65;
+ let x67: u8 = x66;
+ let x68: u8 = x67;
+ let x69: u8 = x68;
+ let x70: u8 = x69;
+ let x71: u8 = x70;
+ let x72: u8 = x71;
+ let x73: u8 = x72;
+ let x74: u8 = x73;
+ let x75: u8 = x74;
+ let x76: u8 = x75;
+ let x77: u8 = x76;
+ let x78: u8 = x77;
+ let x79: u8 = x78;
+ let x80: u8 = x79;
+ let x81: u8 = x80;
+ let x82: u8 = x81;
+ let x83: u8 = x82;
+ let x84: u8 = x83;
+ let x85: u8 = x84;
+ let x86: u8 = x85;
+ let x87: u8 = x86;
+ let x88: u8 = x87;
+ let x89: u8 = x88;
+ let x90: u8 = x89;
+ let x91: u8 = x90;
+ let x92: u8 = x91;
+ let x93: u8 = x92;
+ let x94: u8 = x93;
+ let x95: u8 = x94;
+ let x96: u8 = x95;
+ let x97: u8 = x96;
+ let x98: u8 = x97;
+ let x99: u8 = x98;
+ let x100: u8 = x99;
+ let x101: u8 = x100;
+ let x102: u8 = x101;
+ let x103: u8 = x102;
+ let x104: u8 = x103;
+ let x105: u8 = x104;
+ let x106: u8 = x105;
+ let x107: u8 = x106;
+ let x108: u8 = x107;
+ let x109: u8 = x108;
+ let x110: u8 = x109;
+ let x111: u8 = x110;
+ let x112: u8 = x111;
+ let x113: u8 = x112;
+ let x114: u8 = x113;
+ let x115: u8 = x114;
+ let x116: u8 = x115;
+ let x117: u8 = x116;
+ let x118: u8 = x117;
+ let x119: u8 = x118;
+ let x120: u8 = x119;
+ let x121: u8 = x120;
+ let x122: u8 = x121;
+ let x123: u8 = x122;
+ let x124: u8 = x123;
+ let x125: u8 = x124;
+ let x126: u8 = x125;
+ let x127: u8 = x126;
+ let x128: u8 = x127;
+ let x129: u8 = x128;
+ let x130: u8 = x129;
+ let x131: u8 = x130;
+ let x132: u8 = x131;
+ let x133: u8 = x132;
+ let x134: u8 = x133;
+ let x135: u8 = x134;
+ let x136: u8 = x135;
+ let x137: u8 = x136;
+ let x138: u8 = x137;
+ let x139: u8 = x138;
+ let x140: u8 = x139;
+ let x141: u8 = x140;
+ let x142: u8 = x141;
+ let x143: u8 = x142;
+ let x144: u8 = x143;
+ let x145: u8 = x144;
+ let x146: u8 = x145;
+ let x147: u8 = x146;
+ let x148: u8 = x147;
+ let x149: u8 = x148;
+ let x150: u8 = x149;
+ let x151: u8 = x150;
+ let x152: u8 = x151;
+ let x153: u8 = x152;
+ let x154: u8 = x153;
+ let x155: u8 = x154;
+ let x156: u8 = x155;
+ let x157: u8 = x156;
+ let x158: u8 = x157;
+ let x159: u8 = x158;
+ let x160: u8 = x159;
+ let x161: u8 = x160;
+ let x162: u8 = x161;
+ let x163: u8 = x162;
+ let x164: u8 = x163;
+ let x165: u8 = x164;
+ let x166: u8 = x165;
+ let x167: u8 = x166;
+ let x168: u8 = x167;
+ let x169: u8 = x168;
+ let x170: u8 = x169;
+ let x171: u8 = x170;
+ let x172: u8 = x171;
+ let x173: u8 = x172;
+ let x174: u8 = x173;
+ let x175: u8 = x174;
+ let x176: u8 = x175;
+ let x177: u8 = x176;
+ let x178: u8 = x177;
+ let x179: u8 = x178;
+ let x180: u8 = x179;
+ let x181: u8 = x180;
+ let x182: u8 = x181;
+ let x183: u8 = x182;
+ let x184: u8 = x183;
+ let x185: u8 = x184;
+ let x186: u8 = x185;
+ let x187: u8 = x186;
+ let x188: u8 = x187;
+ let x189: u8 = x188;
+ let x190: u8 = x189;
+ let x191: u8 = x190;
+ let x192: u8 = x191;
+ let x193: u8 = x192;
+ let x194: u8 = x193;
+ let x195: u8 = x194;
+ let x196: u8 = x195;
+ let x197: u8 = x196;
+ let x198: u8 = x197;
+ let x199: u8 = x198;
+ let x200: u8 = x199;
+ let x201: u8 = x200;
+ let x202: u8 = x201;
+ let x203: u8 = x202;
+ let x204: u8 = x203;
+ let x205: u8 = x204;
+ let x206: u8 = x205;
+ let x207: u8 = x206;
+ let x208: u8 = x207;
+ let x209: u8 = x208;
+ let x210: u8 = x209;
+ let x211: u8 = x210;
+ let x212: u8 = x211;
+ let x213: u8 = x212;
+ let x214: u8 = x213;
+ let x215: u8 = x214;
+ let x216: u8 = x215;
+ let x217: u8 = x216;
+ let x218: u8 = x217;
+ let x219: u8 = x218;
+ let x220: u8 = x219;
+ let x221: u8 = x220;
+ let x222: u8 = x221;
+ let x223: u8 = x222;
+ let x224: u8 = x223;
+ let x225: u8 = x224;
+ let x226: u8 = x225;
+ let x227: u8 = x226;
+ let x228: u8 = x227;
+ let x229: u8 = x228;
+ let x230: u8 = x229;
+ let x231: u8 = x230;
+ let x232: u8 = x231;
+ let x233: u8 = x232;
+ let x234: u8 = x233;
+ let x235: u8 = x234;
+ let x236: u8 = x235;
+ let x237: u8 = x236;
+ let x238: u8 = x237;
+ let x239: u8 = x238;
+ let x240: u8 = x239;
+ let x241: u8 = x240;
+ let x242: u8 = x241;
+ let x243: u8 = x242;
+ let x244: u8 = x243;
+ let x245: u8 = x244;
+ let x246: u8 = x245;
+ let x247: u8 = x246;
+ let x248: u8 = x247;
+ let x249: u8 = x248;
+ let x250: u8 = x249;
+ let x251: u8 = x250;
+ let x252: u8 = x251;
+ let x253: u8 = x252;
+ let x254: u8 = x253;
+ let x255: u8 = x254;
+ let x256: u8 = x255;
+ let x257: u8 = x256;
+ let x258: u8 = x257;
+ let x259: u8 = x258;
+ let x260: u8 = x259;
+ let x261: u8 = x260;
+ let x262: u8 = x261;
+ let x263: u8 = x262;
+ let x264: u8 = x263;
+ let x265: u8 = x264;
+ let x266: u8 = x265;
+ let x267: u8 = x266;
+ let x268: u8 = x267;
+ let x269: u8 = x268;
+ let x270: u8 = x269;
+ let x271: u8 = x270;
+ let x272: u8 = x271;
+ let x273: u8 = x272;
+ let x274: u8 = x273;
+ let x275: u8 = x274;
+ let x276: u8 = x275;
+ let x277: u8 = x276;
+ let x278: u8 = x277;
+ let x279: u8 = x278;
+ let x280: u8 = x279;
+ let x281: u8 = x280;
+ let x282: u8 = x281;
+ let x283: u8 = x282;
+ let x284: u8 = x283;
+ let x285: u8 = x284;
+ let x286: u8 = x285;
+ let x287: u8 = x286;
+ let x288: u8 = x287;
+ let x289: u8 = x288;
+ let x290: u8 = x289;
+ let x291: u8 = x290;
+ let x292: u8 = x291;
+ let x293: u8 = x292;
+ let x294: u8 = x293;
+ let x295: u8 = x294;
+ let x296: u8 = x295;
+ let x297: u8 = x296;
+ let x298: u8 = x297;
+ let x299: u8 = x298;
+ let x300: u8 = x299;
+ let x301: u8 = x300;
+ let x302: u8 = x301;
+ let x303: u8 = x302;
+ let x304: u8 = x303;
+ let x305: u8 = x304;
+ let x306: u8 = x305;
+ let x307: u8 = x306;
+ let x308: u8 = x307;
+ let x309: u8 = x308;
+ let x310: u8 = x309;
+ let x311: u8 = x310;
+ let x312: u8 = x311;
+ let x313: u8 = x312;
+ let x314: u8 = x313;
+ let x315: u8 = x314;
+ let x316: u8 = x315;
+ let x317: u8 = x316;
+ let x318: u8 = x317;
+ let x319: u8 = x318;
+ let x320: u8 = x319;
+ let x321: u8 = x320;
+ let x322: u8 = x321;
+ let x323: u8 = x322;
+ let x324: u8 = x323;
+ let x325: u8 = x324;
+ let x326: u8 = x325;
+ let x327: u8 = x326;
+ let x328: u8 = x327;
+ let x329: u8 = x328;
+ let x330: u8 = x329;
+ let x331: u8 = x330;
+ let x332: u8 = x331;
+ let x333: u8 = x332;
+ let x334: u8 = x333;
+ let x335: u8 = x334;
+ let x336: u8 = x335;
+ let x337: u8 = x336;
+ let x338: u8 = x337;
+ let x339: u8 = x338;
+ let x340: u8 = x339;
+ let x341: u8 = x340;
+ let x342: u8 = x341;
+ let x343: u8 = x342;
+ let x344: u8 = x343;
+ let x345: u8 = x344;
+ let x346: u8 = x345;
+ let x347: u8 = x346;
+ let x348: u8 = x347;
+ let x349: u8 = x348;
+ let x350: u8 = x349;
+ let x351: u8 = x350;
+ let x352: u8 = x351;
+ let x353: u8 = x352;
+ let x354: u8 = x353;
+ let x355: u8 = x354;
+ let x356: u8 = x355;
+ let x357: u8 = x356;
+ let x358: u8 = x357;
+ let x359: u8 = x358;
+ let x360: u8 = x359;
+ let x361: u8 = x360;
+ let x362: u8 = x361;
+ let x363: u8 = x362;
+ let x364: u8 = x363;
+ let x365: u8 = x364;
+ let x366: u8 = x365;
+ let x367: u8 = x366;
+ let x368: u8 = x367;
+ let x369: u8 = x368;
+ let x370: u8 = x369;
+ let x371: u8 = x370;
+ let x372: u8 = x371;
+ let x373: u8 = x372;
+ let x374: u8 = x373;
+ let x375: u8 = x374;
+ let x376: u8 = x375;
+ let x377: u8 = x376;
+ let x378: u8 = x377;
+ let x379: u8 = x378;
+ let x380: u8 = x379;
+ let x381: u8 = x380;
+ let x382: u8 = x381;
+ let x383: u8 = x382;
+
+ return x383
+}
diff --git a/typed/benches/many_foos.leo b/typed/benches/many_foos.leo
new file mode 100644
index 0000000000..099f04857d
--- /dev/null
+++ b/typed/benches/many_foos.leo
@@ -0,0 +1,196 @@
+function main() {
+ return x191(0u32)
+}
+
+function x0(val: u8) -> u8 { return val }
+function x1(val: u8) -> u8 { return x0(val) }
+function x2(val: u8) -> u8 { return x1(val) }
+function x3(val: u8) -> u8 { return x2(val) }
+function x4(val: u8) -> u8 { return x3(val) }
+function x5(val: u8) -> u8 { return x4(val) }
+function x6(val: u8) -> u8 { return x5(val) }
+function x7(val: u8) -> u8 { return x6(val) }
+function x8(val: u8) -> u8 { return x7(val) }
+function x9(val: u8) -> u8 { return x8(val) }
+function x10(val: u8) -> u8 { return x9(val) }
+function x11(val: u8) -> u8 { return x10(val) }
+function x12(val: u8) -> u8 { return x11(val) }
+function x13(val: u8) -> u8 { return x12(val) }
+function x14(val: u8) -> u8 { return x13(val) }
+function x15(val: u8) -> u8 { return x14(val) }
+function x16(val: u8) -> u8 { return x15(val) }
+function x17(val: u8) -> u8 { return x16(val) }
+function x18(val: u8) -> u8 { return x17(val) }
+function x19(val: u8) -> u8 { return x18(val) }
+function x20(val: u8) -> u8 { return x19(val) }
+function x21(val: u8) -> u8 { return x20(val) }
+function x22(val: u8) -> u8 { return x21(val) }
+function x23(val: u8) -> u8 { return x22(val) }
+function x24(val: u8) -> u8 { return x23(val) }
+function x25(val: u8) -> u8 { return x24(val) }
+function x26(val: u8) -> u8 { return x25(val) }
+function x27(val: u8) -> u8 { return x26(val) }
+function x28(val: u8) -> u8 { return x27(val) }
+function x29(val: u8) -> u8 { return x28(val) }
+function x30(val: u8) -> u8 { return x29(val) }
+function x31(val: u8) -> u8 { return x30(val) }
+function x32(val: u8) -> u8 { return x31(val) }
+function x33(val: u8) -> u8 { return x32(val) }
+function x34(val: u8) -> u8 { return x33(val) }
+function x35(val: u8) -> u8 { return x34(val) }
+function x36(val: u8) -> u8 { return x35(val) }
+function x37(val: u8) -> u8 { return x36(val) }
+function x38(val: u8) -> u8 { return x37(val) }
+function x39(val: u8) -> u8 { return x38(val) }
+function x40(val: u8) -> u8 { return x39(val) }
+function x41(val: u8) -> u8 { return x40(val) }
+function x42(val: u8) -> u8 { return x41(val) }
+function x43(val: u8) -> u8 { return x42(val) }
+function x44(val: u8) -> u8 { return x43(val) }
+function x45(val: u8) -> u8 { return x44(val) }
+function x46(val: u8) -> u8 { return x45(val) }
+function x47(val: u8) -> u8 { return x46(val) }
+function x48(val: u8) -> u8 { return x47(val) }
+function x49(val: u8) -> u8 { return x48(val) }
+function x50(val: u8) -> u8 { return x49(val) }
+function x51(val: u8) -> u8 { return x50(val) }
+function x52(val: u8) -> u8 { return x51(val) }
+function x53(val: u8) -> u8 { return x52(val) }
+function x54(val: u8) -> u8 { return x53(val) }
+function x55(val: u8) -> u8 { return x54(val) }
+function x56(val: u8) -> u8 { return x55(val) }
+function x57(val: u8) -> u8 { return x56(val) }
+function x58(val: u8) -> u8 { return x57(val) }
+function x59(val: u8) -> u8 { return x58(val) }
+function x60(val: u8) -> u8 { return x59(val) }
+function x61(val: u8) -> u8 { return x60(val) }
+function x62(val: u8) -> u8 { return x61(val) }
+function x63(val: u8) -> u8 { return x62(val) }
+function x64(val: u8) -> u8 { return x63(val) }
+function x65(val: u8) -> u8 { return x64(val) }
+function x66(val: u8) -> u8 { return x65(val) }
+function x67(val: u8) -> u8 { return x66(val) }
+function x68(val: u8) -> u8 { return x67(val) }
+function x69(val: u8) -> u8 { return x68(val) }
+function x70(val: u8) -> u8 { return x69(val) }
+function x71(val: u8) -> u8 { return x70(val) }
+function x72(val: u8) -> u8 { return x71(val) }
+function x73(val: u8) -> u8 { return x72(val) }
+function x74(val: u8) -> u8 { return x73(val) }
+function x75(val: u8) -> u8 { return x74(val) }
+function x76(val: u8) -> u8 { return x75(val) }
+function x77(val: u8) -> u8 { return x76(val) }
+function x78(val: u8) -> u8 { return x77(val) }
+function x79(val: u8) -> u8 { return x78(val) }
+function x80(val: u8) -> u8 { return x79(val) }
+function x81(val: u8) -> u8 { return x80(val) }
+function x82(val: u8) -> u8 { return x81(val) }
+function x83(val: u8) -> u8 { return x82(val) }
+function x84(val: u8) -> u8 { return x83(val) }
+function x85(val: u8) -> u8 { return x84(val) }
+function x86(val: u8) -> u8 { return x85(val) }
+function x87(val: u8) -> u8 { return x86(val) }
+function x88(val: u8) -> u8 { return x87(val) }
+function x89(val: u8) -> u8 { return x88(val) }
+function x90(val: u8) -> u8 { return x89(val) }
+function x91(val: u8) -> u8 { return x90(val) }
+function x92(val: u8) -> u8 { return x91(val) }
+function x93(val: u8) -> u8 { return x92(val) }
+function x94(val: u8) -> u8 { return x93(val) }
+function x95(val: u8) -> u8 { return x94(val) }
+function x96(val: u8) -> u8 { return x95(val) }
+function x97(val: u8) -> u8 { return x96(val) }
+function x98(val: u8) -> u8 { return x97(val) }
+function x99(val: u8) -> u8 { return x98(val) }
+function x100(val: u8) -> u8 { return x99(val) }
+function x101(val: u8) -> u8 { return x100(val) }
+function x102(val: u8) -> u8 { return x101(val) }
+function x103(val: u8) -> u8 { return x102(val) }
+function x104(val: u8) -> u8 { return x103(val) }
+function x105(val: u8) -> u8 { return x104(val) }
+function x106(val: u8) -> u8 { return x105(val) }
+function x107(val: u8) -> u8 { return x106(val) }
+function x108(val: u8) -> u8 { return x107(val) }
+function x109(val: u8) -> u8 { return x108(val) }
+function x110(val: u8) -> u8 { return x109(val) }
+function x111(val: u8) -> u8 { return x110(val) }
+function x112(val: u8) -> u8 { return x111(val) }
+function x113(val: u8) -> u8 { return x112(val) }
+function x114(val: u8) -> u8 { return x113(val) }
+function x115(val: u8) -> u8 { return x114(val) }
+function x116(val: u8) -> u8 { return x115(val) }
+function x117(val: u8) -> u8 { return x116(val) }
+function x118(val: u8) -> u8 { return x117(val) }
+function x119(val: u8) -> u8 { return x118(val) }
+function x120(val: u8) -> u8 { return x119(val) }
+function x121(val: u8) -> u8 { return x120(val) }
+function x122(val: u8) -> u8 { return x121(val) }
+function x123(val: u8) -> u8 { return x122(val) }
+function x124(val: u8) -> u8 { return x123(val) }
+function x125(val: u8) -> u8 { return x124(val) }
+function x126(val: u8) -> u8 { return x125(val) }
+function x127(val: u8) -> u8 { return x126(val) }
+function x128(val: u8) -> u8 { return x127(val) }
+function x129(val: u8) -> u8 { return x128(val) }
+function x130(val: u8) -> u8 { return x129(val) }
+function x131(val: u8) -> u8 { return x130(val) }
+function x132(val: u8) -> u8 { return x131(val) }
+function x133(val: u8) -> u8 { return x132(val) }
+function x134(val: u8) -> u8 { return x133(val) }
+function x135(val: u8) -> u8 { return x134(val) }
+function x136(val: u8) -> u8 { return x135(val) }
+function x137(val: u8) -> u8 { return x136(val) }
+function x138(val: u8) -> u8 { return x137(val) }
+function x139(val: u8) -> u8 { return x138(val) }
+function x140(val: u8) -> u8 { return x139(val) }
+function x141(val: u8) -> u8 { return x140(val) }
+function x142(val: u8) -> u8 { return x141(val) }
+function x143(val: u8) -> u8 { return x142(val) }
+function x144(val: u8) -> u8 { return x143(val) }
+function x145(val: u8) -> u8 { return x144(val) }
+function x146(val: u8) -> u8 { return x145(val) }
+function x147(val: u8) -> u8 { return x146(val) }
+function x148(val: u8) -> u8 { return x147(val) }
+function x149(val: u8) -> u8 { return x148(val) }
+function x150(val: u8) -> u8 { return x149(val) }
+function x151(val: u8) -> u8 { return x150(val) }
+function x152(val: u8) -> u8 { return x151(val) }
+function x153(val: u8) -> u8 { return x152(val) }
+function x154(val: u8) -> u8 { return x153(val) }
+function x155(val: u8) -> u8 { return x154(val) }
+function x156(val: u8) -> u8 { return x155(val) }
+function x157(val: u8) -> u8 { return x156(val) }
+function x158(val: u8) -> u8 { return x157(val) }
+function x159(val: u8) -> u8 { return x158(val) }
+function x160(val: u8) -> u8 { return x159(val) }
+function x161(val: u8) -> u8 { return x160(val) }
+function x162(val: u8) -> u8 { return x161(val) }
+function x163(val: u8) -> u8 { return x162(val) }
+function x164(val: u8) -> u8 { return x163(val) }
+function x165(val: u8) -> u8 { return x164(val) }
+function x166(val: u8) -> u8 { return x165(val) }
+function x167(val: u8) -> u8 { return x166(val) }
+function x168(val: u8) -> u8 { return x167(val) }
+function x169(val: u8) -> u8 { return x168(val) }
+function x170(val: u8) -> u8 { return x169(val) }
+function x171(val: u8) -> u8 { return x170(val) }
+function x172(val: u8) -> u8 { return x171(val) }
+function x173(val: u8) -> u8 { return x172(val) }
+function x174(val: u8) -> u8 { return x173(val) }
+function x175(val: u8) -> u8 { return x174(val) }
+function x176(val: u8) -> u8 { return x175(val) }
+function x177(val: u8) -> u8 { return x176(val) }
+function x178(val: u8) -> u8 { return x177(val) }
+function x179(val: u8) -> u8 { return x178(val) }
+function x180(val: u8) -> u8 { return x179(val) }
+function x181(val: u8) -> u8 { return x180(val) }
+function x182(val: u8) -> u8 { return x181(val) }
+function x183(val: u8) -> u8 { return x182(val) }
+function x184(val: u8) -> u8 { return x183(val) }
+function x185(val: u8) -> u8 { return x184(val) }
+function x186(val: u8) -> u8 { return x185(val) }
+function x187(val: u8) -> u8 { return x186(val) }
+function x188(val: u8) -> u8 { return x187(val) }
+function x189(val: u8) -> u8 { return x188(val) }
+function x190(val: u8) -> u8 { return x189(val) }
+function x191(val: u8) -> u8 { return x190(val) }
diff --git a/typed/benches/typed_ast.rs b/typed/benches/typed_ast.rs
index 38d0f70500..6fbda56b7a 100644
--- a/typed/benches/typed_ast.rs
+++ b/typed/benches/typed_ast.rs
@@ -17,22 +17,81 @@
use leo_ast::LeoAst;
use leo_typed::LeoTypedAst;
-use criterion::{black_box, criterion_group, criterion_main, Criterion};
-use std::path::Path;
+use criterion::{criterion_group, criterion_main, Criterion};
+use std::{
+ path::{Path, PathBuf},
+ time::Duration,
+};
-fn leo_typed_ast<'ast>(ast: &LeoAst<'ast>) {
- let typed_ast = LeoTypedAst::new("leo_typed_tree", &ast);
- black_box(typed_ast);
+fn leo_typed_ast<'ast>(ast: &LeoAst<'ast>) -> LeoTypedAst {
+ LeoTypedAst::new("leo_typed_tree", &ast)
}
-fn criterion_benchmark(c: &mut Criterion) {
- let filepath = Path::new("./main.leo").to_path_buf();
- // let program_string = &LeoAst::load_file(&filepath).unwrap();
- let program_string = include_str!("./main.leo");
+fn bench_big_if_else(c: &mut Criterion) {
+ let filepath = Path::new("./big_if_else.leo").to_path_buf();
+ let program_string = include_str!("./big_if_else.leo");
let ast = LeoAst::new(&filepath, program_string).unwrap();
- c.bench_function("LeoTypedAst::new", |b| b.iter(|| leo_typed_ast(black_box(&ast))));
+ c.bench_function("LeoTypedAst::big_if_else", |b| b.iter(|| leo_typed_ast(&ast)));
}
-criterion_group!(benches, criterion_benchmark);
+fn bench_big_ternary(c: &mut Criterion) {
+ let filepath = Path::new("./big_ternary.leo").to_path_buf();
+ let program_string = include_str!("./big_ternary.leo");
+ let ast = LeoAst::new(&filepath, program_string).unwrap();
+
+ c.bench_function("LeoTypedAst::big_ternary", |b| b.iter(|| leo_typed_ast(&ast)));
+}
+
+fn bench_big_circuit(c: &mut Criterion) {
+ let filepath = Path::new("./big_circuit.leo").to_path_buf();
+ let program_string = include_str!("./big_circuit.leo");
+ let ast = LeoAst::new(&filepath, program_string).unwrap();
+
+ c.bench_function("LeoTypedAst::big_circuit", |b| b.iter(|| leo_typed_ast(&ast)));
+}
+
+fn bench_long_expr(c: &mut Criterion) {
+ let filepath = Path::new("./long_expr.leo").to_path_buf();
+ let program_string = include_str!("./long_expr.leo");
+ let ast = LeoAst::new(&filepath, program_string).unwrap();
+
+ c.bench_function("LeoTypedAst::long_expr", |b| b.iter(|| leo_typed_ast(&ast)));
+}
+
+fn bench_long_array(c: &mut Criterion) {
+ let filepath = Path::new("./long_array.leo").to_path_buf();
+ let program_string = include_str!("./long_array.leo");
+ let ast = LeoAst::new(&filepath, program_string).unwrap();
+
+ c.bench_function("LeoTypedAst::long_array", |b| b.iter(|| leo_typed_ast(&ast)));
+}
+
+fn bench_many_foos(c: &mut Criterion) {
+ let filepath = Path::new("./many_foos.leo").to_path_buf();
+ let program_string = include_str!("./many_foos.leo");
+ let ast = LeoAst::new(&filepath, program_string).unwrap();
+
+ c.bench_function("LeoTypedAst::many_foos", |b| b.iter(|| leo_typed_ast(&ast)));
+}
+
+fn bench_many_assigns(c: &mut Criterion) {
+ let filepath = Path::new("./many_assigns.leo").to_path_buf();
+ let program_string = include_str!("./many_assigns.leo");
+ let ast = LeoAst::new(&filepath, program_string).unwrap();
+
+ c.bench_function("LeoTypedAst::many_assigns", |b| b.iter(|| leo_typed_ast(&ast)));
+}
+
+criterion_group!(
+ name = benches;
+ config = Criterion::default().sample_size(200).measurement_time(Duration::from_secs(10)).nresamples(200_000);
+ targets = bench_big_circuit,
+ bench_long_expr,
+ bench_big_if_else,
+ bench_big_ternary,
+ bench_long_array,
+ bench_many_assigns,
+ bench_many_foos,
+);
criterion_main!(benches);
diff --git a/typed/src/common/span.rs b/typed/src/common/span.rs
index b5af258eb2..5867b7bb8d 100644
--- a/typed/src/common/span.rs
+++ b/typed/src/common/span.rs
@@ -16,8 +16,9 @@
use pest::Span as AstSpan;
use serde::{Deserialize, Serialize};
+use std::hash::{Hash, Hasher};
-#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
+#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Span {
/// text of input string
pub text: String,
@@ -29,6 +30,22 @@ pub struct Span {
pub end: usize,
}
+impl PartialEq for Span {
+ fn eq(&self, other: &Self) -> bool {
+ self.line == other.line && self.start == other.start && self.end == other.end
+ }
+}
+
+impl Eq for Span {}
+
+impl Hash for Span {
+ fn hash(&self, state: &mut H) {
+ self.line.hash(state);
+ self.start.hash(state);
+ self.end.hash(state);
+ }
+}
+
impl<'ast> From> for Span {
fn from(span: AstSpan<'ast>) -> Self {
let mut text = " ".to_string();
diff --git a/typed/src/expression.rs b/typed/src/expression.rs
index 2147d1a739..8bdfbc8284 100644
--- a/typed/src/expression.rs
+++ b/typed/src/expression.rs
@@ -64,7 +64,7 @@ pub enum Expression {
Address(String, Span),
Boolean(String, Span),
Field(String, Span),
- Group(GroupValue),
+ Group(Box),
Implicit(String, Span),
Integer(IntegerType, String, Span),
@@ -336,12 +336,7 @@ impl<'ast> From> for Expression {
let span = Span::from(function.span);
Expression::FunctionCall(
Box::new(acc),
- function
- .expressions
- .expressions
- .into_iter()
- .map(Expression::from)
- .collect(),
+ function.expressions.into_iter().map(Expression::from).collect(),
span,
)
}
@@ -576,7 +571,7 @@ impl<'ast> From> for Expression {
impl<'ast> From> for Expression {
fn from(ast_group: AstGroupValue<'ast>) -> Self {
- Expression::Group(GroupValue::from(ast_group))
+ Expression::Group(Box::new(GroupValue::from(ast_group)))
}
}
diff --git a/typed/src/functions/function.rs b/typed/src/functions/function.rs
index b68526cbe6..b24a4995f8 100644
--- a/typed/src/functions/function.rs
+++ b/typed/src/functions/function.rs
@@ -20,7 +20,7 @@ use leo_ast::functions::Function as AstFunction;
use serde::{Deserialize, Serialize};
use std::fmt;
-#[derive(Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub struct Function {
pub identifier: Identifier,
pub input: Vec,
@@ -29,6 +29,14 @@ pub struct Function {
pub span: Span,
}
+impl PartialEq for Function {
+ fn eq(&self, other: &Self) -> bool {
+ self.identifier == other.identifier
+ }
+}
+
+impl Eq for Function {}
+
impl<'ast> From> for Function {
fn from(function: AstFunction<'ast>) -> Self {
let function_name = Identifier::from(function.identifier);