Forráskód Böngészése

Create const function for default substrate target

Signed-off-by: Sean Young <sean@mess.org>
Sean Young 4 éve
szülő
commit
74249f64f5

+ 4 - 5
src/codegen/strength_reduce.rs

@@ -1772,11 +1772,10 @@ fn test_highest_bit() {
 
 
 #[test]
 #[test]
 fn expresson_known_bits() {
 fn expresson_known_bits() {
-    let ns = Namespace::new(crate::Target::Substrate {
-        address_length: 32,
-        value_length: 16,
-    });
-    let loc = crate::parser::pt::Loc(0, 0, 0);
+    use crate::{parser::pt::Loc, Target};
+
+    let ns = Namespace::new(Target::default_substrate());
+    let loc = Loc(0, 0, 0);
 
 
     let mut vars: Variables = HashMap::new();
     let mut vars: Variables = HashMap::new();
 
 

+ 11 - 0
src/lib.rs

@@ -42,6 +42,8 @@ impl fmt::Display for Target {
 }
 }
 
 
 impl PartialEq for Target {
 impl PartialEq for Target {
+    // Equality should check if it the same chain, not compare parameters. This
+    // is needed for builtins for example
     fn eq(&self, other: &Self) -> bool {
     fn eq(&self, other: &Self) -> bool {
         match self {
         match self {
             Target::Solana => matches!(other, Target::Solana),
             Target::Solana => matches!(other, Target::Solana),
@@ -52,9 +54,18 @@ impl PartialEq for Target {
 }
 }
 
 
 impl Target {
 impl Target {
+    /// Short-hand for checking for Substrate target
     pub fn is_substrate(&self) -> bool {
     pub fn is_substrate(&self) -> bool {
         matches!(self, Target::Substrate { .. })
         matches!(self, Target::Substrate { .. })
     }
     }
+
+    /// Create the target Substrate with default parameters
+    pub const fn default_substrate() -> Self {
+        Target::Substrate {
+            address_length: 32,
+            value_length: 16,
+        }
+    }
 }
 }
 
 
 /// Compile a solidity file to list of wasm files and their ABIs. The filename is only used for error messages;
 /// Compile a solidity file to list of wasm files and their ABIs. The filename is only used for error messages;

+ 8 - 41
src/sema/builtin.rs

@@ -87,13 +87,7 @@ static BUILTIN_FUNCTIONS: [Prototype; 24] = [
         name: "selfdestruct",
         name: "selfdestruct",
         args: &[Type::Address(true)],
         args: &[Type::Address(true)],
         ret: &[Type::Unreachable],
         ret: &[Type::Unreachable],
-        target: &[
-            Target::Ewasm,
-            Target::Substrate {
-                address_length: 32,
-                value_length: 16,
-            },
-        ],
+        target: &[Target::Ewasm, Target::default_substrate()],
         doc: "Destroys current account and deposits any remaining balance to address",
         doc: "Destroys current account and deposits any remaining balance to address",
         constant: false,
         constant: false,
     },
     },
@@ -133,10 +127,7 @@ static BUILTIN_FUNCTIONS: [Prototype; 24] = [
         name: "blake2_128",
         name: "blake2_128",
         args: &[Type::DynamicBytes],
         args: &[Type::DynamicBytes],
         ret: &[Type::Bytes(16)],
         ret: &[Type::Bytes(16)],
-        target: &[Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        }],
+        target: &[Target::default_substrate()],
         doc: "Calculates blake2-128 hash",
         doc: "Calculates blake2-128 hash",
         constant: true,
         constant: true,
     },
     },
@@ -146,10 +137,7 @@ static BUILTIN_FUNCTIONS: [Prototype; 24] = [
         name: "blake2_256",
         name: "blake2_256",
         args: &[Type::DynamicBytes],
         args: &[Type::DynamicBytes],
         ret: &[Type::Bytes(32)],
         ret: &[Type::Bytes(32)],
-        target: &[Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        }],
+        target: &[Target::default_substrate()],
         doc: "Calculates blake2-256 hash",
         doc: "Calculates blake2-256 hash",
         constant: true,
         constant: true,
     },
     },
@@ -159,13 +147,7 @@ static BUILTIN_FUNCTIONS: [Prototype; 24] = [
         name: "gasleft",
         name: "gasleft",
         args: &[],
         args: &[],
         ret: &[Type::Uint(64)],
         ret: &[Type::Uint(64)],
-        target: &[
-            Target::Substrate {
-                address_length: 32,
-                value_length: 16,
-            },
-            Target::Ewasm,
-        ],
+        target: &[Target::default_substrate(), Target::Ewasm],
         doc: "Return remaing gas left in current call",
         doc: "Return remaing gas left in current call",
         constant: false,
         constant: false,
     },
     },
@@ -185,10 +167,7 @@ static BUILTIN_FUNCTIONS: [Prototype; 24] = [
         name: "random",
         name: "random",
         args: &[Type::DynamicBytes],
         args: &[Type::DynamicBytes],
         ret: &[Type::Bytes(32)],
         ret: &[Type::Bytes(32)],
-        target: &[Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        }],
+        target: &[Target::default_substrate()],
         doc: "Returns deterministic random bytes",
         doc: "Returns deterministic random bytes",
         constant: false,
         constant: false,
     },
     },
@@ -358,10 +337,7 @@ static BUILTIN_VARIABLE: [Prototype; 14] = [
         name: "tombstone_deposit",
         name: "tombstone_deposit",
         args: &[],
         args: &[],
         ret: &[Type::Value],
         ret: &[Type::Value],
-        target: &[Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        }],
+        target: &[Target::default_substrate()],
         doc: "Deposit required for a tombstone",
         doc: "Deposit required for a tombstone",
         constant: false,
         constant: false,
     },
     },
@@ -371,10 +347,7 @@ static BUILTIN_VARIABLE: [Prototype; 14] = [
         name: "minimum_balance",
         name: "minimum_balance",
         args: &[],
         args: &[],
         ret: &[Type::Value],
         ret: &[Type::Value],
-        target: &[Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        }],
+        target: &[Target::default_substrate()],
         doc: "Minimum balance required for an account",
         doc: "Minimum balance required for an account",
         constant: false,
         constant: false,
     },
     },
@@ -424,13 +397,7 @@ static BUILTIN_VARIABLE: [Prototype; 14] = [
         name: "gasprice",
         name: "gasprice",
         args: &[],
         args: &[],
         ret: &[Type::Value],
         ret: &[Type::Value],
-        target: &[
-            Target::Substrate {
-                address_length: 32,
-                value_length: 16,
-            },
-            Target::Ewasm,
-        ],
+        target: &[Target::default_substrate(), Target::Ewasm],
         doc: "gas price for one gas unit",
         doc: "gas price for one gas unit",
         constant: false,
         constant: false,
     },
     },

+ 2 - 8
tests/substrate.rs

@@ -1194,10 +1194,7 @@ pub fn build_solidity(src: &'static str) -> TestRuntime {
         "test.sol",
         "test.sol",
         &mut cache,
         &mut cache,
         inkwell::OptimizationLevel::Default,
         inkwell::OptimizationLevel::Default,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
         false,
         false,
     );
     );
 
 
@@ -1234,10 +1231,7 @@ pub fn build_solidity_with_overflow_check(src: &'static str) -> TestRuntime {
         "test.sol",
         "test.sol",
         &mut cache,
         &mut cache,
         inkwell::OptimizationLevel::Default,
         inkwell::OptimizationLevel::Default,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
         true,
         true,
     );
     );
 
 

+ 34 - 136
tests/substrate_tests/arrays.rs

@@ -22,10 +22,7 @@ fn missing_array_index() {
                     return bar[];
                     return bar[];
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -42,10 +39,7 @@ fn missing_array_index() {
                     return bar[0];
                     return bar[0];
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -232,10 +226,7 @@ fn data_locations() {
             function bar(uint storage) public returns () {
             function bar(uint storage) public returns () {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -249,10 +240,7 @@ fn data_locations() {
             function bar(uint calldata x) public returns () {
             function bar(uint calldata x) public returns () {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -267,10 +255,7 @@ fn data_locations() {
             function bar(foo2 memory x) public returns () {
             function bar(foo2 memory x) public returns () {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -285,10 +270,7 @@ fn data_locations() {
             function bar(foo2 x) public returns (uint calldata) {
             function bar(foo2 x) public returns (uint calldata) {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -303,10 +285,7 @@ fn data_locations() {
             function bar(foo2 x) public returns (bool calldata) {
             function bar(foo2 x) public returns (bool calldata) {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -321,10 +300,7 @@ fn data_locations() {
             function bar(foo2 x) public returns (int storage) {
             function bar(foo2 x) public returns (int storage) {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -339,10 +315,7 @@ fn data_locations() {
             function bar(int[10] storage x) public returns (int) {
             function bar(int[10] storage x) public returns (int) {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -357,10 +330,7 @@ fn data_locations() {
             function bar() public returns (int[10] storage x) {
             function bar() public returns (int[10] storage x) {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -375,10 +345,7 @@ fn data_locations() {
             function bar() public returns (foo2[10] storage x) {
             function bar() public returns (foo2[10] storage x) {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -542,10 +509,7 @@ fn array_dimensions() {
         contract foo {
         contract foo {
             bool[10 - 10] x;
             bool[10 - 10] x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "zero size array not permitted");
     assert_eq!(first_error(ns.diagnostics), "zero size array not permitted");
@@ -555,10 +519,7 @@ fn array_dimensions() {
         contract foo {
         contract foo {
             bool[-10 + 10] x;
             bool[-10 + 10] x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -571,10 +532,7 @@ fn array_dimensions() {
         contract foo {
         contract foo {
             bool[1 / 10] x;
             bool[1 / 10] x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "zero size array not permitted");
     assert_eq!(first_error(ns.diagnostics), "zero size array not permitted");
@@ -585,10 +543,7 @@ fn array_dimensions() {
             enum e { e1, e2, e3 }
             enum e { e1, e2, e3 }
             e[1 / 0] x;
             e[1 / 0] x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "divide by zero");
     assert_eq!(first_error(ns.diagnostics), "divide by zero");
@@ -601,10 +556,7 @@ fn array_dimensions() {
             }
             }
             bar[1 % 0] x;
             bar[1 % 0] x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "divide by zero");
     assert_eq!(first_error(ns.diagnostics), "divide by zero");
@@ -838,10 +790,7 @@ fn memory_dynamic_array_new() {
                 assert(a.length == 5);
                 assert(a.length == 5);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -858,10 +807,7 @@ fn memory_dynamic_array_new() {
                 assert(a.length == 5);
                 assert(a.length == 5);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -878,10 +824,7 @@ fn memory_dynamic_array_new() {
                 assert(a.length == 5);
                 assert(a.length == 5);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -898,10 +841,7 @@ fn memory_dynamic_array_new() {
                 assert(a.length == 5);
                 assert(a.length == 5);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -918,10 +858,7 @@ fn memory_dynamic_array_new() {
                 assert(a.length == 5);
                 assert(a.length == 5);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -968,10 +905,7 @@ fn memory_dynamic_array_deref() {
                 a[-1] = 5;
                 a[-1] = 5;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -989,10 +923,7 @@ fn memory_dynamic_array_deref() {
                 a[i] = 5;
                 a[i] = 5;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1167,10 +1098,7 @@ fn dynamic_array_push() {
                 bar.push(102, 20);
                 bar.push(102, 20);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1300,10 +1228,7 @@ fn dynamic_array_pop() {
                 bar.pop(102);
                 bar.pop(102);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1451,10 +1376,7 @@ fn storage_dynamic_array_push() {
                 bar.push(102, 20);
                 bar.push(102, 20);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1471,10 +1393,7 @@ fn storage_dynamic_array_push() {
                 bar.push(102);
                 bar.push(102);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1540,10 +1459,7 @@ fn storage_dynamic_array_push() {
                 s storage n = bar.push(s(-1, false));
                 s storage n = bar.push(s(-1, false));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1564,10 +1480,7 @@ fn storage_dynamic_array_pop() {
                 bar.pop(102);
                 bar.pop(102);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1584,10 +1497,7 @@ fn storage_dynamic_array_pop() {
                 bar.pop();
                 bar.pop();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1672,10 +1582,7 @@ fn storage_dynamic_array_pop() {
                 s storage x = bar.pop();
                 s storage x = bar.pop();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1695,10 +1602,7 @@ fn storage_delete() {
                 delete 102;
                 delete 102;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1715,10 +1619,7 @@ fn storage_delete() {
                 int32 x = delete bar;
                 int32 x = delete bar;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -2114,10 +2015,7 @@ fn lucas() {
         }
         }
     }
     }
     "#,
     "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);

+ 27 - 108
tests/substrate_tests/builtins.rs

@@ -13,10 +13,7 @@ fn abi_decode() {
                 (int a) = abi.decode(hex"00", feh);
                 (int a) = abi.decode(hex"00", feh);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "type ‘feh’ not found");
     assert_eq!(first_error(ns.diagnostics), "type ‘feh’ not found");
@@ -28,10 +25,7 @@ fn abi_decode() {
                 (int a) = abi.decode(hex"00", (int storage));
                 (int a) = abi.decode(hex"00", (int storage));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -46,10 +40,7 @@ fn abi_decode() {
                 (int a) = abi.decode(hex"00", (int feh));
                 (int a) = abi.decode(hex"00", (int feh));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -64,10 +55,7 @@ fn abi_decode() {
                 (int a) = abi.decode(hex"00", (int,));
                 (int a) = abi.decode(hex"00", (int,));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing type");
     assert_eq!(first_error(ns.diagnostics), "missing type");
@@ -79,10 +67,7 @@ fn abi_decode() {
                 (int a) = abi.decode(hex"00", (int,mapping(uint[] => address)));
                 (int a) = abi.decode(hex"00", (int,mapping(uint[] => address)));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -213,10 +198,7 @@ fn abi_encode_with_selector() {
                 bytes x = abi.encodeWithSelector();
                 bytes x = abi.encodeWithSelector();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -262,10 +244,7 @@ fn abi_encode_with_signature() {
                 bytes x = abi.encodeWithSignature();
                 bytes x = abi.encodeWithSignature();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -313,10 +292,7 @@ fn call() {
                 x.delegatecall(hex"1222");
                 x.delegatecall(hex"1222");
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -333,10 +309,7 @@ fn call() {
                 x.staticcall(hex"1222");
                 x.staticcall(hex"1222");
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -359,10 +332,7 @@ fn call() {
                 print("Baa!");
                 print("Baa!");
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -385,10 +355,7 @@ fn call() {
                 print("Baa!");
                 print("Baa!");
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -529,10 +496,7 @@ fn block() {
                 assert(b == 14_250_083_331_950_119_597);
                 assert(b == 14_250_083_331_950_119_597);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -562,10 +526,7 @@ fn block() {
                 assert(b == 14_250_083_331_950_119_597);
                 assert(b == 14_250_083_331_950_119_597);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -595,10 +556,7 @@ fn block() {
                 assert(b == 93_603_701_976_053);
                 assert(b == 93_603_701_976_053);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -628,10 +586,7 @@ fn block() {
                 assert(b == 93_603_701_976_053);
                 assert(b == 93_603_701_976_053);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -648,10 +603,7 @@ fn block() {
                 assert(b == 93_603_701_976_053);
                 assert(b == 93_603_701_976_053);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -668,10 +620,7 @@ fn block() {
                 assert(b == 93_603_701_976_053);
                 assert(b == 93_603_701_976_053);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -688,10 +637,7 @@ fn block() {
                 assert(b == 93_603_701_976_053);
                 assert(b == 93_603_701_976_053);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -735,10 +681,7 @@ fn tx() {
                 int128 b = tx.gasprice;
                 int128 b = tx.gasprice;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -753,10 +696,7 @@ fn tx() {
                 int128 b = tx.gasprice(4-3);
                 int128 b = tx.gasprice(4-3);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -773,10 +713,7 @@ fn tx() {
                 assert(b == 14_250_083_331_950_119_597);
                 assert(b == 14_250_083_331_950_119_597);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -793,10 +730,7 @@ fn tx() {
                 assert(b == 93_603_701_976_053);
                 assert(b == 93_603_701_976_053);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -830,10 +764,7 @@ fn msg() {
                 assert(b == 14_250_083_331_950_119_597);
                 assert(b == 14_250_083_331_950_119_597);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -848,10 +779,7 @@ fn msg() {
                 return msg.value > v;
                 return msg.value > v;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -902,10 +830,7 @@ fn functions() {
                 assert(b == 14_250_083_331_950_119_597);
                 assert(b == 14_250_083_331_950_119_597);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -922,10 +847,7 @@ fn functions() {
                 assert(b == 14_250_083_331_950_119_597);
                 assert(b == 14_250_083_331_950_119_597);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -940,10 +862,7 @@ fn functions() {
                 bytes32 b = blockhash(1);
                 bytes32 b = blockhash(1);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 17 - 68
tests/substrate_tests/calls.rs

@@ -183,10 +183,7 @@ fn try_catch_external_calls() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -215,10 +212,7 @@ fn try_catch_external_calls() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -298,10 +292,7 @@ fn try_catch_external_calls() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -330,10 +321,7 @@ fn try_catch_external_calls() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "x is already declared");
     assert_eq!(first_error(ns.diagnostics), "x is already declared");
@@ -361,10 +349,7 @@ fn try_catch_external_calls() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -395,10 +380,7 @@ fn try_catch_external_calls() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -542,10 +524,7 @@ fn try_catch_constructor() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -572,10 +551,7 @@ fn try_catch_constructor() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -679,10 +655,7 @@ fn try_catch_constructor() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -697,10 +670,7 @@ fn try_catch_constructor() {
                 x : 1
                 x : 1
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -725,10 +695,7 @@ fn try_catch_constructor() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -757,10 +724,7 @@ fn try_catch_constructor() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "unexpected code block");
     assert_eq!(first_error(ns.diagnostics), "unexpected code block");
@@ -786,10 +750,7 @@ fn try_catch_constructor() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "unexpected code block");
     assert_eq!(first_error(ns.diagnostics), "unexpected code block");
@@ -1005,10 +966,7 @@ fn payable_functions() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1024,10 +982,7 @@ fn payable_functions() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1043,10 +998,7 @@ fn payable_functions() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1062,10 +1014,7 @@ fn payable_functions() {
             }
             }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 21 - 84
tests/substrate_tests/contracts.rs

@@ -13,10 +13,7 @@ fn contract_name() {
         "contract test {
         "contract test {
             function test() public {}
             function test() public {}
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -28,10 +25,7 @@ fn contract_name() {
         "contract test {
         "contract test {
             enum test { a}
             enum test { a}
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -43,10 +37,7 @@ fn contract_name() {
         "contract test {
         "contract test {
             bool test;
             bool test;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -58,10 +49,7 @@ fn contract_name() {
         "contract test {
         "contract test {
             struct test { bool a; }
             struct test { bool a; }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -75,10 +63,7 @@ fn contract_name() {
                 int test;
                 int test;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -91,10 +76,7 @@ fn contract_name() {
             function f(int test) public {
             function f(int test) public {
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -108,10 +90,7 @@ fn contract_name() {
                 return 0;
                 return 0;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -133,10 +112,7 @@ fn contract_name() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -164,10 +140,7 @@ fn contract_name() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -195,10 +168,7 @@ fn contract_type() {
                 printer y = printer(x);
                 printer y = printer(x);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -213,10 +183,7 @@ fn contract_type() {
                 printer x = printer(address(102));
                 printer x = printer(address(102));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -234,10 +201,7 @@ fn contract_type() {
                 address y = 102;
                 address y = 102;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -258,10 +222,7 @@ fn contract_type() {
                 printer y = 102;
                 printer y = 102;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -276,10 +237,7 @@ fn contract_type() {
                 return new printer();
                 return new printer();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -294,10 +252,7 @@ fn contract_type() {
                 return new printer({});
                 return new printer({});
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -322,10 +277,7 @@ fn external_call() {
                 return 1;
                 return 1;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -347,10 +299,7 @@ fn external_call() {
                 return 1;
                 return 1;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -379,10 +328,7 @@ fn external_call() {
                 return x * t;
                 return x * t;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -411,10 +357,7 @@ fn external_call() {
                 return x * t;
                 return x * t;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "duplicate argument name ‘a’");
     assert_eq!(first_error(ns.diagnostics), "duplicate argument name ‘a’");
@@ -586,10 +529,7 @@ fn creation_code() {
                 }
                 }
         }
         }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -604,10 +544,7 @@ fn creation_code() {
                     bytes code = type(a).runtimeCode;
                     bytes code = type(a).runtimeCode;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 5 - 23
tests/substrate_tests/enums.rs

@@ -92,10 +92,7 @@ fn test_cast_errors() {
                 return state.foo;
                 return state.foo;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -110,10 +107,7 @@ fn test_cast_errors() {
                 return state.foo;
                 return state.foo;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "enum ‘state’ has no fields");
     assert_eq!(first_error(ns.diagnostics), "enum ‘state’ has no fields");
@@ -125,10 +119,7 @@ fn test_cast_errors() {
                 return uint8(state.foo);
                 return uint8(state.foo);
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -136,13 +127,7 @@ fn test_cast_errors() {
 
 
 #[test]
 #[test]
 fn incorrect_fields() {
 fn incorrect_fields() {
-    let ns = parse_and_resolve(
-        "enum state { }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve("enum state { }", Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "enum ‘state’ has no fields");
     assert_eq!(first_error(ns.diagnostics), "enum ‘state’ has no fields");
 
 
@@ -176,10 +161,7 @@ fn incorrect_fields() {
         foo243, foo244, foo245, foo246, foo247, foo248, foo249, foo250, foo251,
         foo243, foo244, foo245, foo246, foo247, foo248, foo249, foo250, foo251,
         foo252, foo253, foo254, foo255, foo256
         foo252, foo253, foo254, foo255, foo256
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 27 - 124
tests/substrate_tests/events.rs

@@ -11,10 +11,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo ();
             event foo ();
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -23,10 +20,7 @@ fn event_decl() {
         r#"
         r#"
         enum e { a1 }
         enum e { a1 }
         event e();"#,
         event e();"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -40,10 +34,7 @@ fn event_decl() {
         contract c {
         contract c {
             event e();
             event e();
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -57,10 +48,7 @@ fn event_decl() {
             enum e { a1 }
             enum e { a1 }
             event e();
             event e();
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -73,10 +61,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo (mapping (bool => uint) x);
             event foo (mapping (bool => uint) x);
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -93,10 +78,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo (s x);
             event foo (s x);
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -109,10 +91,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo (bool x, uint32 y, address x);
             event foo (bool x, uint32 y, address x);
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -125,10 +104,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo (bool indexed f1, bool indexed f2, bool indexed f3, bool indexed f4);
             event foo (bool indexed f1, bool indexed f2, bool indexed f3, bool indexed f4);
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -141,10 +117,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo (bool indexed f1, bool indexed f2, bool indexed f3);
             event foo (bool indexed f1, bool indexed f2, bool indexed f3);
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -154,10 +127,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo (bool indexed f1, bool indexed f2, bool indexed f3, bool indexed f4, bool indexed f5) anonymous;
             event foo (bool indexed f1, bool indexed f2, bool indexed f3, bool indexed f4, bool indexed f5) anonymous;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -170,10 +140,7 @@ fn event_decl() {
         contract c {
         contract c {
             event foo (bool indexed f1, bool indexed f2, bool indexed f3, bool indexed f4) anonymous;
             event foo (bool indexed f1, bool indexed f2, bool indexed f3, bool indexed f4) anonymous;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -188,10 +155,7 @@ fn emit() {
                 emit 1 ();
                 emit 1 ();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -207,10 +171,7 @@ fn emit() {
                 emit foo {};
                 emit foo {};
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -226,10 +187,7 @@ fn emit() {
                 emit foo (true);
                 emit foo (true);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -245,10 +203,7 @@ fn emit() {
                 emit foo (true, "ab");
                 emit foo (true, "ab");
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -264,10 +219,7 @@ fn emit() {
                 emit foo ({a:true, a:"ab"});
                 emit foo ({a:true, a:"ab"});
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -283,10 +235,7 @@ fn emit() {
                 emit foo ({a:true, b:"ab"});
                 emit foo ({a:true, b:"ab"});
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -302,10 +251,7 @@ fn emit() {
                 emit foo (true, 102);
                 emit foo (true, 102);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -393,14 +339,7 @@ fn event_imported() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -430,14 +369,7 @@ fn event_imported() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -467,14 +399,7 @@ fn event_imported() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -502,14 +427,7 @@ fn event_imported() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 }
 }
@@ -527,10 +445,7 @@ fn inherited() {
                 emit foo(true, 1);
                 emit foo(true, 1);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -551,10 +466,7 @@ fn signatures() {
                 emit foo(true, 1);
                 emit foo(true, 1);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -571,10 +483,7 @@ fn signatures() {
                 emit foo(true, 1);
                 emit foo(true, 1);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -591,10 +500,7 @@ fn signatures() {
                 emit foo(true, 1);
                 emit foo(true, 1);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -610,10 +516,7 @@ fn signatures() {
                 emit foo(true, 1);
                 emit foo(true, 1);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);

+ 12 - 48
tests/substrate_tests/expressions.rs

@@ -251,10 +251,7 @@ fn test_cast_errors() {
                 bool is_nonzero = bar;
                 bool is_nonzero = bar;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -268,10 +265,7 @@ fn test_cast_errors() {
                 return (foo < bar);
                 return (foo < bar);
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -286,10 +280,7 @@ fn test_cast_errors() {
                 return false;
                 return false;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -302,10 +293,7 @@ fn test_cast_errors() {
                 return false;
                 return false;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -342,10 +330,7 @@ fn test_cast_errors() {
                 set_x(uint32(b));
                 set_x(uint32(b));
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -983,10 +968,7 @@ fn power() {
                 return base ** exp;
                 return base ** exp;
             }
             }
        }",
        }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1000,10 +982,7 @@ fn power() {
                 return base ** exp;
                 return base ** exp;
             }
             }
        }",
        }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1017,10 +996,7 @@ fn power() {
                 return base ** exp;
                 return base ** exp;
             }
             }
        }",
        }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1405,10 +1381,7 @@ fn destructure() {
                 (a, b) = (1, 2, 3);
                 (a, b) = (1, 2, 3);
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1425,10 +1398,7 @@ fn destructure() {
                 (c, b) = (1, 2);
                 (c, b) = (1, 2);
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "`c\' is not found");
     assert_eq!(first_error(ns.diagnostics), "`c\' is not found");
@@ -1442,10 +1412,7 @@ fn destructure() {
                 (a memory, b) = (1, 2);
                 (a memory, b) = (1, 2);
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1462,10 +1429,7 @@ fn destructure() {
                 (a , b) = (1, );
                 (a , b) = (1, );
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "stray comma");
     assert_eq!(first_error(ns.diagnostics), "stray comma");

+ 1 - 7
tests/substrate_tests/first.rs

@@ -7,13 +7,7 @@ use solang::Target;
 #[test]
 #[test]
 fn simple_solidiy_compile_and_run() {
 fn simple_solidiy_compile_and_run() {
     // try empty file
     // try empty file
-    let ns = parse_and_resolve(
-        "",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve("", Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 

+ 9 - 36
tests/substrate_tests/format.rs

@@ -13,10 +13,7 @@ fn parse() {
                 s.format();
                 s.format();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -31,10 +28,7 @@ fn parse() {
                 string s = "foo{".format();
                 string s = "foo{".format();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing closing ‘}’");
     assert_eq!(first_error(ns.diagnostics), "missing closing ‘}’");
@@ -46,10 +40,7 @@ fn parse() {
                 string s = "foo{d".format();
                 string s = "foo{d".format();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "unexpected format char ‘d’");
     assert_eq!(first_error(ns.diagnostics), "unexpected format char ‘d’");
@@ -61,10 +52,7 @@ fn parse() {
                 string s = "foo{:".format();
                 string s = "foo{:".format();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing format specifier");
     assert_eq!(first_error(ns.diagnostics), "missing format specifier");
@@ -76,10 +64,7 @@ fn parse() {
                 string s = "foo{:}s".format();
                 string s = "foo{:}s".format();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing argument to format");
     assert_eq!(first_error(ns.diagnostics), "missing argument to format");
@@ -91,10 +76,7 @@ fn parse() {
                 string s = "f{{oo}s".format();
                 string s = "f{{oo}s".format();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "unmatched ‘}’");
     assert_eq!(first_error(ns.diagnostics), "unmatched ‘}’");
@@ -106,10 +88,7 @@ fn parse() {
                 string s = "f{{oo}}s".format(true);
                 string s = "f{{oo}}s".format(true);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -124,10 +103,7 @@ fn parse() {
                 string s = "{}" "{:x}s".format(1, true);
                 string s = "{}" "{:x}s".format(1, true);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -142,10 +118,7 @@ fn parse() {
                 string s = "{}" "{:x}s".format(1, 0xcafe);
                 string s = "{}" "{:x}s".format(1, 0xcafe);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);

+ 18 - 72
tests/substrate_tests/function_types.rs

@@ -11,10 +11,7 @@ fn decls() {
                 function() public a;
                 function() public a;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -28,10 +25,7 @@ fn decls() {
                 function() private a;
                 function() private a;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -45,10 +39,7 @@ fn decls() {
                 function() returns (bool) internal a;
                 function() returns (bool) internal a;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -62,10 +53,7 @@ fn decls() {
                 function() returns (bool) pure a;
                 function() returns (bool) pure a;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -79,10 +67,7 @@ fn decls() {
                 function() returns (bool x) a;
                 function() returns (bool x) a;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -96,10 +81,7 @@ fn decls() {
                 function(address tre) returns (bool) a;
                 function(address tre) returns (bool) a;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -113,10 +95,7 @@ fn decls() {
             function foo(function(address) pure internal returns (bool) a) public {
             function foo(function(address) pure internal returns (bool) a) public {
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -129,10 +108,7 @@ fn decls() {
             function foo() public returns (function(address) pure internal returns (bool) a) {
             function foo() public returns (function(address) pure internal returns (bool) a) {
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -144,10 +120,7 @@ fn decls() {
         "contract test {
         "contract test {
             function(address) pure internal returns (bool) public a;
             function(address) pure internal returns (bool) public a;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -166,10 +139,7 @@ fn assign() {
                 function(int32) pure a = x;
                 function(int32) pure a = x;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -185,10 +155,7 @@ fn assign() {
                 function(int32) view a = x;
                 function(int32) view a = x;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -204,10 +171,7 @@ fn assign() {
                 function(int32) a = x;
                 function(int32) a = x;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -225,10 +189,7 @@ fn assign() {
                 function(int32) a = x;
                 function(int32) a = x;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -246,10 +207,7 @@ fn assign() {
                 function(int32) returns (bool) a = x;
                 function(int32) returns (bool) a = x;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -467,10 +425,7 @@ fn ext() {
                 return false;
                 return false;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -489,10 +444,7 @@ fn ext() {
                 return false;
                 return false;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -515,10 +467,7 @@ fn ext() {
                 return false;
                 return false;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -676,10 +625,7 @@ fn variable_or_func_type() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);

+ 50 - 269
tests/substrate_tests/functions.rs

@@ -13,10 +13,7 @@ fn constructors() {
         contract test {
         contract test {
             constructor() internal {}
             constructor() internal {}
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -29,10 +26,7 @@ fn constructors() {
         contract test {
         contract test {
             constructor() virtual {}
             constructor() virtual {}
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -134,10 +128,7 @@ fn fallback() {
                 result = 356;
                 result = 356;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -259,10 +250,7 @@ fn mutability() {
                 return foo;
                 return foo;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -276,10 +264,7 @@ fn mutability() {
                 return 102;
                 return 102;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -293,10 +278,7 @@ fn mutability() {
                 return foo[0];
                 return foo[0];
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -312,10 +294,7 @@ fn mutability() {
                 foo = 102;
                 foo = 102;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -329,10 +308,7 @@ fn mutability() {
                 foo[0] = 102;
                 foo[0] = 102;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -346,10 +322,7 @@ fn mutability() {
                 (bool f, bytes memory res) = a.call(hex"0102");
                 (bool f, bytes memory res) = a.call(hex"0102");
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -363,10 +336,7 @@ fn mutability() {
                 (f, res) = a.call(hex"0102");
                 (f, res) = a.call(hex"0102");
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(ns.diagnostics.len(), 1);
     assert_eq!(ns.diagnostics.len(), 1);
@@ -378,10 +348,7 @@ fn mutability() {
                 return true;
                 return true;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_warnings(&ns.diagnostics);
     no_warnings(&ns.diagnostics);
@@ -394,10 +361,7 @@ fn mutability() {
                 return foo;
                 return foo;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_warnings_errors(ns.diagnostics);
     no_warnings_errors(ns.diagnostics);
@@ -408,10 +372,7 @@ fn mutability() {
                 return 102;
                 return 102;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_warnings_errors(ns.diagnostics);
     no_warnings_errors(ns.diagnostics);
@@ -422,10 +383,7 @@ fn mutability() {
                 return 102;
                 return 102;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -437,10 +395,7 @@ fn mutability() {
         "contract test {
         "contract test {
             int64 constant public foo = 1844674;
             int64 constant public foo = 1844674;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_warnings_errors(ns.diagnostics);
     no_warnings_errors(ns.diagnostics);
@@ -468,13 +423,7 @@ fn shadowing() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_warning(ns.diagnostics),
         first_warning(ns.diagnostics),
@@ -514,13 +463,7 @@ fn scopes() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "`a\' is not found");
     assert_eq!(first_error(ns.diagnostics), "`a\' is not found");
 
 
@@ -534,13 +477,7 @@ fn scopes() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "`i\' is not found");
     assert_eq!(first_error(ns.diagnostics), "`i\' is not found");
 }
 }
@@ -557,13 +494,7 @@ fn for_forever() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "unreachable statement");
     assert_eq!(first_error(ns.diagnostics), "unreachable statement");
 }
 }
@@ -689,13 +620,7 @@ fn args_and_returns() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "arg1 is already declared");
     assert_eq!(first_error(ns.diagnostics), "arg1 is already declared");
 
 
@@ -705,13 +630,7 @@ fn args_and_returns() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "arg2 is already declared");
     assert_eq!(first_error(ns.diagnostics), "arg2 is already declared");
 
 
@@ -721,13 +640,7 @@ fn args_and_returns() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "missing return statement");
     assert_eq!(first_error(ns.diagnostics), "missing return statement");
 
 
@@ -750,13 +663,7 @@ fn args_and_returns() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "missing return statement");
     assert_eq!(first_error(ns.diagnostics), "missing return statement");
 
 
@@ -795,13 +702,7 @@ fn named_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -818,13 +719,7 @@ fn named_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "unexpected array type");
     assert_eq!(first_error(ns.diagnostics), "unexpected array type");
 
 
@@ -838,13 +733,7 @@ fn named_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -861,13 +750,7 @@ fn named_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -884,13 +767,7 @@ fn named_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -934,13 +811,7 @@ fn positional_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -957,13 +828,7 @@ fn positional_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "expression is not an array");
     assert_eq!(first_error(ns.diagnostics), "expression is not an array");
 
 
@@ -977,13 +842,7 @@ fn positional_argument_call() {
         }
         }
     }";
     }";
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -1099,13 +958,7 @@ fn payable() {
             }
             }
         }"##;
         }"##;
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -1123,13 +976,7 @@ fn payable() {
             }
             }
         }"##;
         }"##;
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -1147,13 +994,7 @@ fn payable() {
             }
             }
         }"##;
         }"##;
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -1171,13 +1012,7 @@ fn payable() {
             }
             }
         }"##;
         }"##;
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -1192,13 +1027,7 @@ fn payable() {
             }
             }
         }"##;
         }"##;
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -1213,13 +1042,7 @@ fn payable() {
             }
             }
         }"##;
         }"##;
 
 
-    let ns = parse_and_resolve(
-        src,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(src, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -1233,10 +1056,7 @@ fn global_functions() {
         r##"
         r##"
         function() {}
         function() {}
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing function name");
     assert_eq!(first_error(ns.diagnostics), "missing function name");
@@ -1245,10 +1065,7 @@ fn global_functions() {
         r##"
         r##"
         function x();
         function x();
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing function body");
     assert_eq!(first_error(ns.diagnostics), "missing function body");
@@ -1257,10 +1074,7 @@ fn global_functions() {
         r##"
         r##"
         function x() virtual {}
         function x() virtual {}
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1272,10 +1086,7 @@ fn global_functions() {
         r##"
         r##"
         function x() override {}
         function x() override {}
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1287,10 +1098,7 @@ fn global_functions() {
         r##"
         r##"
         function x() feyla {}
         function x() feyla {}
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1302,10 +1110,7 @@ fn global_functions() {
         r##"
         r##"
         function x() feyla {}
         function x() feyla {}
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1319,10 +1124,7 @@ fn global_functions() {
 
 
         function x() pure { emit foo(true); }
         function x() pure { emit foo(true); }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1334,10 +1136,7 @@ fn global_functions() {
         r##"
         r##"
         function x(int[] storage x) pure returns (int) { return x[1]; }
         function x(int[] storage x) pure returns (int) { return x[1]; }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1354,10 +1153,7 @@ fn global_functions() {
 
 
         function x(S storage x) view { x.f1 = 102; }
         function x(S storage x) view { x.f1 = 102; }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1371,10 +1167,7 @@ fn global_functions() {
         function x(int128) pure { return 102; }
         function x(int128) pure { return 102; }
         function x(int128) pure { return 132; }
         function x(int128) pure { return 132; }
         "##,
         "##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1452,10 +1245,7 @@ fn return_not_returns() {
                 return 1;
                 return 1;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1466,22 +1256,13 @@ fn return_not_returns() {
 
 
 #[test]
 #[test]
 fn stray_semicolon() {
 fn stray_semicolon() {
-    let ns = parse_and_resolve(
-        "struct a { uint32 f1; };",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve("struct a { uint32 f1; };", Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "stray semicolon");
     assert_eq!(first_error(ns.diagnostics), "stray semicolon");
 
 
     let ns = parse_and_resolve(
     let ns = parse_and_resolve(
         "contract x { struct a { uint32 f1; }; }",
         "contract x { struct a { uint32 f1; }; }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "stray semicolon");
     assert_eq!(first_error(ns.diagnostics), "stray semicolon");

+ 20 - 160
tests/substrate_tests/imports.rs

@@ -26,14 +26,7 @@ fn enum_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -59,14 +52,7 @@ fn enum_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -92,14 +78,7 @@ fn enum_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -121,14 +100,7 @@ fn enum_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -146,14 +118,7 @@ fn enum_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -170,14 +135,7 @@ fn enum_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -209,14 +167,7 @@ fn struct_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -242,14 +193,7 @@ fn struct_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     assert_eq!(first_error(ns.diagnostics), "type ‘struct_a’ not found");
     assert_eq!(first_error(ns.diagnostics), "type ‘struct_a’ not found");
 }
 }
@@ -286,14 +230,7 @@ fn contract_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -336,14 +273,7 @@ fn contract_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -386,14 +316,7 @@ fn contract_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 }
 }
@@ -416,14 +339,7 @@ fn circular_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "self.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("self.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -464,14 +380,7 @@ fn circular_import() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 }
 }
@@ -505,14 +414,7 @@ fn import_symbol() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -547,14 +449,7 @@ fn import_symbol() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -589,14 +484,7 @@ fn import_symbol() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -641,14 +529,7 @@ fn import_symbol() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 }
 }
@@ -698,14 +579,7 @@ fn enum_import_chain() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 
 
@@ -752,14 +626,7 @@ fn enum_import_chain() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -808,14 +675,7 @@ fn import_base_dir() {
         .to_string(),
         .to_string(),
     );
     );
 
 
-    let ns = solang::parse_and_resolve(
-        "a.sol",
-        &mut cache,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = solang::parse_and_resolve("a.sol", &mut cache, Target::default_substrate());
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
 }
 }

+ 76 - 307
tests/substrate_tests/inheritance.rs

@@ -11,10 +11,7 @@ fn test_virtual() {
         contract c {
         contract c {
             function test() public;
             function test() public;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -27,10 +24,7 @@ fn test_virtual() {
         contract c {
         contract c {
             function test() virtual public {}
             function test() virtual public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -41,10 +35,7 @@ fn test_virtual() {
             function test() virtual public;
             function test() virtual public;
             function test2() virtual public;
             function test2() virtual public;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -71,10 +62,7 @@ fn test_abstract() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -98,10 +86,7 @@ fn test_abstract() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -135,10 +120,7 @@ fn test_abstract() {
         "a.sol",
         "a.sol",
         &mut cache,
         &mut cache,
         inkwell::OptimizationLevel::Default,
         inkwell::OptimizationLevel::Default,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
         false,
         false,
     );
     );
 
 
@@ -176,10 +158,7 @@ fn test_abstract() {
         "a.sol",
         "a.sol",
         &mut cache,
         &mut cache,
         inkwell::OptimizationLevel::Default,
         inkwell::OptimizationLevel::Default,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
         false,
         false,
     );
     );
 
 
@@ -197,10 +176,7 @@ fn test_interface() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -214,10 +190,7 @@ fn test_interface() {
             function bar() external {}
             function bar() external {}
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -231,10 +204,7 @@ fn test_interface() {
             function bar() private;
             function bar() private;
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -248,10 +218,7 @@ fn test_interface() {
             function bar() internal;
             function bar() internal;
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -269,10 +236,7 @@ fn test_interface() {
             function f() internal {}
             function f() internal {}
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -290,10 +254,7 @@ fn test_interface() {
             function f() internal {}
             function f() internal {}
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -307,10 +268,7 @@ fn test_interface() {
             function foo() virtual external;
             function foo() virtual external;
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -324,10 +282,7 @@ fn test_interface() {
             int x;
             int x;
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -341,10 +296,7 @@ fn test_interface() {
             int constant x = 1;
             int constant x = 1;
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -373,10 +325,7 @@ fn test_interface() {
             function f2(address a) public {}
             function f2(address a) public {}
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -391,10 +340,7 @@ fn inherit() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -409,10 +355,7 @@ fn inherit() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "contract ‘foo’ not found");
     assert_eq!(first_error(ns.diagnostics), "contract ‘foo’ not found");
@@ -429,10 +372,7 @@ fn inherit() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -452,10 +392,7 @@ fn inherit() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -480,10 +417,7 @@ fn inherit() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -513,10 +447,7 @@ fn inherit() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -539,10 +470,7 @@ fn inherit_types() {
             enum enum_x { x1, x2 }
             enum enum_x { x1, x2 }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -567,10 +495,7 @@ fn inherit_types() {
             enum enum_x { x1, x2 }
             enum enum_x { x1, x2 }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -595,10 +520,7 @@ fn inherit_types() {
             enum enum_x { x1, x2 }
             enum enum_x { x1, x2 }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -615,10 +537,7 @@ fn inherit_types() {
             enum enum_x { x1, x2 }
             enum enum_x { x1, x2 }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "type ‘enum_x’ not found");
     assert_eq!(first_error(ns.diagnostics), "type ‘enum_x’ not found");
@@ -636,10 +555,7 @@ fn inherit_types() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -662,10 +578,7 @@ fn inherit_types() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "already defined ‘foo’");
     assert_eq!(first_error(ns.diagnostics), "already defined ‘foo’");
@@ -685,10 +598,7 @@ fn inherit_variables() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -705,10 +615,7 @@ fn inherit_variables() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "`foo\' is not found");
     assert_eq!(first_error(ns.diagnostics), "`foo\' is not found");
@@ -729,10 +636,7 @@ fn inherit_variables() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -753,10 +657,7 @@ fn inherit_variables() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -773,10 +674,7 @@ fn inherit_variables() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -881,10 +779,7 @@ fn call_inherited_function() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "cannot call private function");
     assert_eq!(first_error(ns.diagnostics), "cannot call private function");
@@ -903,10 +798,7 @@ fn call_inherited_function() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "cannot call private function");
     assert_eq!(first_error(ns.diagnostics), "cannot call private function");
@@ -929,10 +821,7 @@ fn call_inherited_function() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1038,10 +927,7 @@ fn test_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1057,10 +943,7 @@ fn test_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1080,10 +963,7 @@ fn test_override() {
             function f() private {}
             function f() private {}
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1099,10 +979,7 @@ fn test_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1124,10 +1001,7 @@ fn test_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1153,10 +1027,7 @@ fn test_override() {
             uint64 public x;
             uint64 public x;
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1176,10 +1047,7 @@ fn test_override() {
                 x = 2;
                 x = 2;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1207,10 +1075,7 @@ fn test_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -1298,10 +1163,7 @@ fn test_override() {
                 function bar(int x) public { print ("foo"); }
                 function bar(int x) public { print ("foo"); }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1319,10 +1181,7 @@ fn test_override() {
                 function bar(int64 x) public override;
                 function bar(int64 x) public override;
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1353,10 +1212,7 @@ fn multiple_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1384,10 +1240,7 @@ fn multiple_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1421,10 +1274,7 @@ fn multiple_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1452,10 +1302,7 @@ fn multiple_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1483,10 +1330,7 @@ fn multiple_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1518,10 +1362,7 @@ fn multiple_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1553,10 +1394,7 @@ fn multiple_override() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1582,10 +1420,7 @@ fn base_contract() {
                 return a + 102;
                 return a + 102;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1604,10 +1439,7 @@ fn base_contract() {
                 return a + 102;
                 return a + 102;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1661,10 +1493,7 @@ fn base_contract_on_constructor() {
 
 
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1687,10 +1516,7 @@ fn base_contract_on_constructor() {
 
 
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1705,10 +1531,7 @@ fn base_contract_on_constructor() {
 
 
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1723,10 +1546,7 @@ fn base_contract_on_constructor() {
 
 
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1743,10 +1563,7 @@ fn base_contract_on_constructor() {
         contract apex is base {
         contract apex is base {
                 function foo() pure public {}
                 function foo() pure public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1764,10 +1581,7 @@ fn base_contract_on_constructor() {
             constructor() base(true) base(false) {}
             constructor() base(true) base(false) {}
             function foo() pure public {}
             function foo() pure public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1893,10 +1707,7 @@ fn base_contract_on_constructor() {
             function get_foo() public returns (int64) { return foo; }
             function get_foo() public returns (int64) { return foo; }
             constructor(int64 z) { foo = z; }
             constructor(int64 z) { foo = z; }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -1919,10 +1730,7 @@ fn base_contract_on_constructor() {
             function get_foo() public returns (int64) { return foo; }
             function get_foo() public returns (int64) { return foo; }
             constructor(int64 z) { foo = z; }
             constructor(int64 z) { foo = z; }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "duplicate base contract ‘b’");
     assert_eq!(first_error(ns.diagnostics), "duplicate base contract ‘b’");
@@ -1942,10 +1750,7 @@ fn base_contract_on_constructor() {
             function get_foo() public returns (int64) { return foo; }
             function get_foo() public returns (int64) { return foo; }
             constructor(int64 z) { foo = z; }
             constructor(int64 z) { foo = z; }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -2030,10 +1835,7 @@ fn simple_interface() {
                 return a * 2;
                 return a * 2;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -2101,10 +1903,7 @@ fn cast_contract() {
                 return a / b;
                 return a / b;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -2120,10 +1919,7 @@ fn cast_contract() {
                 foo y = x;
                 foo y = x;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -2134,13 +1930,7 @@ fn cast_contract() {
 
 
 #[test]
 #[test]
 fn test_super() {
 fn test_super() {
-    let ns = parse_and_resolve(
-        r#"contract super {}"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve(r#"contract super {}"#, Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -2151,10 +1941,7 @@ fn test_super() {
         r#"
         r#"
         function f1() { super.a(); }
         function f1() { super.a(); }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -2173,10 +1960,7 @@ fn test_super() {
                 super.f2();
                 super.f2();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "unknown function or type ‘f2’");
     assert_eq!(first_error(ns.diagnostics), "unknown function or type ‘f2’");
@@ -2284,10 +2068,7 @@ fn mutability() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -2307,10 +2088,7 @@ fn mutability() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -2335,10 +2113,7 @@ fn visibility() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -2355,10 +2130,7 @@ fn visibility() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -2378,10 +2150,7 @@ fn visibility() {
             }
             }
         }
         }
         "#,
         "#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 16 - 64
tests/substrate_tests/libraries.rs

@@ -10,10 +10,7 @@ fn restrictions() {
         library c {
         library c {
             constructor() {}
             constructor() {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -26,10 +23,7 @@ fn restrictions() {
         library c {
         library c {
             receive() internal {}
             receive() internal {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -42,10 +36,7 @@ fn restrictions() {
         library c {
         library c {
             fallback() internal {}
             fallback() internal {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -58,10 +49,7 @@ fn restrictions() {
         library c {
         library c {
             function f() public payable {}
             function f() public payable {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -74,10 +62,7 @@ fn restrictions() {
         library c {
         library c {
             function foo() virtual public {}
             function foo() virtual public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -90,10 +75,7 @@ fn restrictions() {
         library c {
         library c {
             function foo() override public {}
             function foo() override public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -106,10 +88,7 @@ fn restrictions() {
         library c is x {
         library c is x {
             fallback() internal {}
             fallback() internal {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -126,10 +105,7 @@ fn restrictions() {
         contract a is c {
         contract a is c {
             function bar() public { }
             function bar() public { }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -142,10 +118,7 @@ fn restrictions() {
         library c {
         library c {
             int x;
             int x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -201,10 +174,7 @@ fn using() {
         contract c {
         contract c {
             using x for x;
             using x for x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "library ‘x’ not found");
     assert_eq!(first_error(ns.diagnostics), "library ‘x’ not found");
@@ -218,10 +188,7 @@ fn using() {
         contract c {
         contract c {
             using x for x;
             using x for x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -240,10 +207,7 @@ fn using() {
         contract c {
         contract c {
             using x for asdf;
             using x for asdf;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "type ‘asdf’ not found");
     assert_eq!(first_error(ns.diagnostics), "type ‘asdf’ not found");
@@ -259,10 +223,7 @@ fn using() {
         contract c {
         contract c {
             using x for x;
             using x for x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -359,10 +320,7 @@ fn using() {
                 return a > b ? a : b;
                 return a > b ? a : b;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "method ‘max’ does not exist");
     assert_eq!(first_error(ns.diagnostics), "method ‘max’ does not exist");
@@ -382,10 +340,7 @@ fn using() {
                 return a > b ? a : b;
                 return a > b ? a : b;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -413,10 +368,7 @@ fn using() {
                 return a;
                 return a;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 1 - 4
tests/substrate_tests/loops.rs

@@ -15,10 +15,7 @@ fn test_infinite_loop() {
                 return 0;
                 return 0;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "unreachable statement");
     assert_eq!(first_error(ns.diagnostics), "unreachable statement");

+ 10 - 40
tests/substrate_tests/mappings.rs

@@ -22,10 +22,7 @@ fn bad_mapping_declares() {
                 x.data[1] = address(1);
                 x.data[1] = address(1);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -38,10 +35,7 @@ fn bad_mapping_declares() {
         contract c {
         contract c {
             mapping(uint[] => address) data;
             mapping(uint[] => address) data;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -57,10 +51,7 @@ fn bad_mapping_declares() {
             }
             }
             mapping(foo => address) data;
             mapping(foo => address) data;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -74,10 +65,7 @@ fn bad_mapping_declares() {
             mapping(int => address) data;
             mapping(int => address) data;
             mapping(data => address) data2;
             mapping(data => address) data2;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "‘data’ is a contract variable");
     assert_eq!(first_error(ns.diagnostics), "‘data’ is a contract variable");
@@ -89,10 +77,7 @@ fn bad_mapping_declares() {
                 //
                 //
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -107,10 +92,7 @@ fn bad_mapping_declares() {
                 //
                 //
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -125,10 +107,7 @@ fn bad_mapping_declares() {
                 //
                 //
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -143,10 +122,7 @@ fn bad_mapping_declares() {
                 //
                 //
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -162,10 +138,7 @@ fn bad_mapping_declares() {
                 //
                 //
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -181,10 +154,7 @@ fn bad_mapping_declares() {
                 delete data;
                 delete data;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 15 - 60
tests/substrate_tests/modifier.rs

@@ -10,10 +10,7 @@ fn declare() {
         contract c {
         contract c {
             modifier foo() public {}
             modifier foo() public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -26,10 +23,7 @@ fn declare() {
         contract c {
         contract c {
             modifier foo() internal {}
             modifier foo() internal {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -42,10 +36,7 @@ fn declare() {
         contract c {
         contract c {
             modifier foo() payable {}
             modifier foo() payable {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -58,10 +49,7 @@ fn declare() {
         contract c {
         contract c {
             modifier foo() pure {}
             modifier foo() pure {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -74,10 +62,7 @@ fn declare() {
         contract c {
         contract c {
             modifier foo bar {}
             modifier foo bar {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -90,10 +75,7 @@ fn declare() {
         contract c {
         contract c {
             modifier foo() {}
             modifier foo() {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing ‘_’ in modifier");
     assert_eq!(first_error(ns.diagnostics), "missing ‘_’ in modifier");
@@ -109,10 +91,7 @@ fn declare() {
                 }
                 }
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -128,10 +107,7 @@ fn declare() {
                 foo();
                 foo();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -146,10 +122,7 @@ fn declare() {
                 _;
                 _;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -167,10 +140,7 @@ fn function_modifier() {
 
 
             function bar() foo2 public {}
             function bar() foo2 public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "unknown modifier ‘foo2’");
     assert_eq!(first_error(ns.diagnostics), "unknown modifier ‘foo2’");
@@ -182,10 +152,7 @@ fn function_modifier() {
 
 
             function bar() foo(1) public {}
             function bar() foo(1) public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -200,10 +167,7 @@ fn function_modifier() {
 
 
             function bar(bool x) foo(x) public {}
             function bar(bool x) foo(x) public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -544,10 +508,7 @@ fn mutability() {
 
 
             function bar() foo(var) public pure {}
             function bar() foo(var) public pure {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -563,10 +524,7 @@ fn mutability() {
 
 
             function bar() foo() public pure {}
             function bar() foo() public pure {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -585,10 +543,7 @@ fn mutability() {
         contract apex is base {
         contract apex is base {
             function foo() public override {}
             function foo() public override {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 34 - 127
tests/substrate_tests/primitives.rs

@@ -91,10 +91,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             uint8 foo = 300;
             uint8 foo = 300;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -106,10 +103,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             uint16 foo = 0x10000;
             uint16 foo = 0x10000;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -121,10 +115,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             int8 foo = 0x8_0;
             int8 foo = 0x8_0;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -136,10 +127,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             int8 foo = -129;
             int8 foo = -129;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -151,10 +139,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             int8 foo = 127;
             int8 foo = 127;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -163,10 +148,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             int8 foo = -128;
             int8 foo = -128;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -175,10 +157,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             uint8 foo = 255;
             uint8 foo = 255;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -187,10 +166,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             uint8 foo = -1_30;
             uint8 foo = -1_30;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -202,10 +178,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             int64 foo = 1844674_4073709551616;
             int64 foo = 1844674_4073709551616;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -217,10 +190,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             bytes4 foo = 0xf12233;
             bytes4 foo = 0xf12233;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -232,10 +202,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             bytes4 foo = 0x0122334455;
             bytes4 foo = 0x0122334455;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -247,10 +214,7 @@ fn test_literal_overflow() {
         "contract test {
         "contract test {
             bytes4 foo = 0x00223344;
             bytes4 foo = 0x00223344;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -347,10 +311,7 @@ fn address() {
         "contract test {
         "contract test {
             address  foo = 0x1844674_4073709551616;
             address  foo = 0x1844674_4073709551616;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -362,10 +323,7 @@ fn address() {
         "contract test {
         "contract test {
             address foo = 0xa368df6dfcd5ba7b0bc108af09e98e4655e35a2c3b2e2d5e3eae6c6f7cd8d2d4;
             address foo = 0xa368df6dfcd5ba7b0bc108af09e98e4655e35a2c3b2e2d5e3eae6c6f7cd8d2d4;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -377,10 +335,7 @@ fn address() {
         r#"contract test {
         r#"contract test {
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sje";
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sje";
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -392,10 +347,7 @@ fn address() {
         r#"contract test {
         r#"contract test {
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sj%Z";
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sj%Z";
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -407,10 +359,7 @@ fn address() {
         r#"contract test {
         r#"contract test {
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjZZ";
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjZZ";
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -422,10 +371,7 @@ fn address() {
         r#"contract test {
         r#"contract test {
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjeZ";
             address foo = address"5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjeZ";
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -438,7 +384,7 @@ fn address() {
                 return foo > address(0);
                 return foo > address(0);
             }
             }
         }",
         }",
-        Target::Substrate { address_length: 32, value_length:  16 },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -451,7 +397,7 @@ fn address() {
                 return foo + address(1);
                 return foo + address(1);
             }
             }
         }",
         }",
-        Target::Substrate { address_length: 32, value_length:  16 },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -467,7 +413,7 @@ fn address() {
                 return foo | address(1);
                 return foo | address(1);
             }
             }
         }",
         }",
-        Target::Substrate { address_length: 32, value_length:  16 },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -479,10 +425,7 @@ fn address() {
         "contract test {
         "contract test {
             address foo = 0x5b0Ddf2835f0A76c96D6113D47F6482e51a55487;
             address foo = 0x5b0Ddf2835f0A76c96D6113D47F6482e51a55487;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -539,10 +482,7 @@ fn address_payable_type() {
                 address b = a;
                 address b = a;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -559,10 +499,7 @@ fn address_payable_type() {
                 return b == a;
                 return b == a;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -579,10 +516,7 @@ fn address_payable_type() {
             function test() public {
             function test() public {
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -602,10 +536,7 @@ fn address_payable_type() {
             function test() public {
             function test() public {
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -625,10 +556,7 @@ fn address_payable_type() {
             function test() public {
             function test() public {
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -640,10 +568,7 @@ fn address_payable_type() {
                 address b = address(a);
                 address b = address(a);
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -655,10 +580,7 @@ fn address_payable_type() {
                 address b = a;
                 address b = a;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -674,10 +596,7 @@ fn address_payable_type() {
                 address payable b = address payable(a);
                 address payable b = address payable(a);
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -746,10 +665,7 @@ fn type_name() {
                 int32 x = type(bool).max;
                 int32 x = type(bool).max;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -798,10 +714,7 @@ fn units() {
                 int32 x = 1 ether;
                 int32 x = 1 ether;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -816,10 +729,7 @@ fn units() {
                 int32 x = 0xa days;
                 int32 x = 0xa days;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -834,10 +744,7 @@ fn units() {
                 int32 x = (1 + 2) days;
                 int32 x = (1 + 2) days;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 11 - 44
tests/substrate_tests/strings.rs

@@ -16,10 +16,7 @@ fn basic_tests() {
                     f[0] = 102;
                     f[0] = 102;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -34,10 +31,7 @@ fn basic_tests() {
                     bytes f = new string(2);
                     bytes f = new string(2);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -52,10 +46,7 @@ fn basic_tests() {
                     string f = new bytes(2);
                     string f = new bytes(2);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -70,10 +61,7 @@ fn basic_tests() {
                     string f = string(new bytes(2));
                     string f = string(new bytes(2));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -85,10 +73,7 @@ fn basic_tests() {
                     bytes f = bytes(new string(2));
                     bytes f = bytes(new string(2));
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -693,10 +678,7 @@ fn string_escape() {
                     string f = "\x";
                     string f = "\x";
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -711,10 +693,7 @@ fn string_escape() {
                     string f = "\x9k";
                     string f = "\x9k";
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -729,10 +708,7 @@ fn string_escape() {
                     string f = "\xたこ";
                     string f = "\xたこ";
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -747,10 +723,7 @@ fn string_escape() {
                     string f = "\u";
                     string f = "\u";
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -765,10 +738,7 @@ fn string_escape() {
                     string f = "\uたこ焼き";
                     string f = "\uたこ焼き";
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -783,10 +753,7 @@ fn string_escape() {
                     string f = "\u9kff";
                     string f = "\u9kff";
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 13 - 52
tests/substrate_tests/structs.rs

@@ -21,10 +21,7 @@ fn parse_structs() {
                 uint a;
                 uint a;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -40,10 +37,7 @@ fn parse_structs() {
                 uint storage b;
                 uint storage b;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -59,10 +53,7 @@ fn parse_structs() {
                 uint calldata b;
                 uint calldata b;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -78,10 +69,7 @@ fn parse_structs() {
                 uint calldata b;
                 uint calldata b;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -95,10 +83,7 @@ fn parse_structs() {
             struct Foo {
             struct Foo {
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -113,10 +98,7 @@ fn parse_structs() {
                 boolean x;
                 boolean x;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "type ‘boolean’ not found");
     assert_eq!(first_error(ns.diagnostics), "type ‘boolean’ not found");
@@ -130,10 +112,7 @@ fn parse_structs() {
                 Foo y;
                 Foo y;
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -158,10 +137,7 @@ fn parse_structs() {
             bytes4 selector;
             bytes4 selector;
             s foo;
             s foo;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "struct ‘s2’ has infinite size");
     assert_eq!(first_error(ns.diagnostics), "struct ‘s2’ has infinite size");
@@ -179,10 +155,7 @@ fn parse_structs() {
                 Foo a = Foo();
                 Foo a = Foo();
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -203,10 +176,7 @@ fn parse_structs() {
                 Foo a = Foo(true, true, true);
                 Foo a = Foo(true, true, true);
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -227,10 +197,7 @@ fn parse_structs() {
                 Foo a = Foo({ });
                 Foo a = Foo({ });
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -251,10 +218,7 @@ fn parse_structs() {
                 Foo a = Foo({ x: true, y: 1, z: 2 });
                 Foo a = Foo({ x: true, y: 1, z: 2 });
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -275,10 +239,7 @@ fn parse_structs() {
                 Foo a = Foo({ x: true, z: 1 });
                 Foo a = Foo({ x: true, z: 1 });
             }
             }
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "struct ‘Foo’ has no field ‘z’");
     assert_eq!(first_error(ns.diagnostics), "struct ‘Foo’ has no field ‘z’");

+ 27 - 111
tests/substrate_tests/tags.rs

@@ -7,10 +7,7 @@ fn contract() {
         r#"
         r#"
         /// @barf
         /// @barf
         contract test {}"#,
         contract test {}"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -28,10 +25,7 @@ fn contract() {
         /// @dev this is
         /// @dev this is
         ///  a contract
         ///  a contract
         contract test {}"#,
         contract test {}"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(ns.contracts[0].tags[0].tag, "notice");
     assert_eq!(ns.contracts[0].tags[0].tag, "notice");
@@ -57,10 +51,7 @@ fn contract() {
          * a contract
          * a contract
          */
          */
         contract test {}"#,
         contract test {}"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(ns.contracts[0].tags[0].tag, "notice");
     assert_eq!(ns.contracts[0].tags[0].tag, "notice");
@@ -75,13 +66,7 @@ fn contract() {
     assert_eq!(ns.contracts[0].tags[3].tag, "dev");
     assert_eq!(ns.contracts[0].tags[3].tag, "dev");
     assert_eq!(ns.contracts[0].tags[3].value, "this is a contract");
     assert_eq!(ns.contracts[0].tags[3].value, "this is a contract");
 
 
-    let ns = parse_and_resolve(
-        "/**\n",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve("/**\n", Target::default_substrate());
 
 
     assert_eq!(ns.diagnostics[0].pos, Some(Loc(0, 0, 4)));
     assert_eq!(ns.diagnostics[0].pos, Some(Loc(0, 0, 4)));
     assert_eq!(ns.diagnostics[0].message, "end of file found in comment");
     assert_eq!(ns.diagnostics[0].message, "end of file found in comment");
@@ -95,10 +80,7 @@ fn struct_tag() {
         struct x {
         struct x {
             uint32 f;
             uint32 f;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -112,10 +94,7 @@ fn struct_tag() {
         struct x {
         struct x {
             uint32 f;
             uint32 f;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "tag ‘@param’ no field ‘g’");
     assert_eq!(first_error(ns.diagnostics), "tag ‘@param’ no field ‘g’");
@@ -127,10 +106,7 @@ fn struct_tag() {
         struct x {
         struct x {
             uint32 f;
             uint32 f;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -146,10 +122,7 @@ fn struct_tag() {
             uint32 f1;
             uint32 f1;
             uint32 f2;
             uint32 f2;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(ns.diagnostics.len(), 0);
     assert_eq!(ns.diagnostics.len(), 0);
@@ -171,10 +144,7 @@ fn event_tag() {
         event x (
         event x (
             uint32 f
             uint32 f
         );"#,
         );"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -188,10 +158,7 @@ fn event_tag() {
         event x (
         event x (
             uint32 f
             uint32 f
         );"#,
         );"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "tag ‘@param’ no field ‘g’");
     assert_eq!(first_error(ns.diagnostics), "tag ‘@param’ no field ‘g’");
@@ -203,10 +170,7 @@ fn event_tag() {
         event x (
         event x (
             uint32 f
             uint32 f
         );"#,
         );"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -222,10 +186,7 @@ fn event_tag() {
             uint32 f1,
             uint32 f1,
             uint32 f2
             uint32 f2
         );"#,
         );"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     //Event never emitted generates a warning
     //Event never emitted generates a warning
@@ -250,10 +211,7 @@ fn event_tag() {
                 uint32 f2
                 uint32 f2
             );
             );
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     //Event never emitted generates a warning
     //Event never emitted generates a warning
@@ -280,10 +238,7 @@ fn enum_tag() {
         enum x {
         enum x {
             foo1
             foo1
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -297,10 +252,7 @@ fn enum_tag() {
          *  @dev bla bla bla
          *  @dev bla bla bla
          * @author f2 bar */
          * @author f2 bar */
         enum x { x1 }"#,
         enum x { x1 }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(ns.diagnostics.len(), 0);
     assert_eq!(ns.diagnostics.len(), 0);
@@ -322,10 +274,7 @@ fn functions() {
             /// @param
             /// @param
             function foo() public {}
             function foo() public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -340,10 +289,7 @@ fn functions() {
             /// @param g
             /// @param g
             function foo(int f) public {}
             function foo(int f) public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "tag ‘@param’ no field ‘g’");
     assert_eq!(first_error(ns.diagnostics), "tag ‘@param’ no field ‘g’");
@@ -357,10 +303,7 @@ fn functions() {
              */
              */
             function foo(int f) public {}
             function foo(int f) public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -374,10 +317,7 @@ fn functions() {
             /// @return so here we are
             /// @return so here we are
             function foo() public {}
             function foo() public {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -391,10 +331,7 @@ fn functions() {
             /// @return so here we are
             /// @return so here we are
             function foo() public returns (int a, bool) {}
             function foo() public returns (int a, bool) {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "tag ‘@return’ no field ‘so’");
     assert_eq!(first_error(ns.diagnostics), "tag ‘@return’ no field ‘so’");
@@ -405,10 +342,7 @@ fn functions() {
             /// @return
             /// @return
             function foo() public returns (int a, bool b) {}
             function foo() public returns (int a, bool b) {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -423,10 +357,7 @@ fn functions() {
             /// @return a barf
             /// @return a barf
             function foo() public returns (int a, bool b) {}
             function foo() public returns (int a, bool b) {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -440,10 +371,7 @@ fn functions() {
             /// @inheritdoc
             /// @inheritdoc
             function foo() public returns (int a, bool b) {}
             function foo() public returns (int a, bool b) {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -457,10 +385,7 @@ fn functions() {
             /// @inheritdoc b
             /// @inheritdoc b
             function foo() public returns (int a, bool b) {}
             function foo() public returns (int a, bool b) {}
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -478,10 +403,7 @@ fn functions() {
         }
         }
 
 
         contract b {}"#,
         contract b {}"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(ns.diagnostics.len(), 5);
     assert_eq!(ns.diagnostics.len(), 5);
@@ -505,10 +427,7 @@ fn variables() {
             /// @param
             /// @param
             int x;
             int x;
         }"#,
         }"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -526,10 +445,7 @@ fn variables() {
         }
         }
 
 
         contract b {}"#,
         contract b {}"#,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     //Variable 'y' has never been used (one item error in diagnostic)
     //Variable 'y' has never been used (one item error in diagnostic)

+ 20 - 80
tests/substrate_tests/value.rs

@@ -21,10 +21,7 @@ fn external_call_value() {
                 a f = new a();
                 a f = new a();
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -47,10 +44,7 @@ fn external_call_value() {
                 a f = new a();
                 a f = new a();
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -73,10 +67,7 @@ fn external_call_value() {
                 a f = new a();
                 a f = new a();
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -99,10 +90,7 @@ fn external_call_value() {
                 a f = new a();
                 a f = new a();
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -125,10 +113,7 @@ fn external_call_value() {
                 a f = new a();
                 a f = new a();
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -151,10 +136,7 @@ fn external_call_value() {
                 a f = new a();
                 a f = new a();
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -177,10 +159,7 @@ fn external_call_value() {
                 a f = new a();
                 a f = new a();
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "missing call arguments");
     assert_eq!(first_error(ns.diagnostics), "missing call arguments");
@@ -200,10 +179,7 @@ fn external_call_value() {
                 f.test{value: 1023}(501);
                 f.test{value: 1023}(501);
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -226,10 +202,7 @@ fn external_call_value() {
                 f.test{value: 1023}({l: 501});
                 f.test{value: 1023}({l: 501});
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -253,10 +226,7 @@ fn external_call_value() {
                 f.test{value: x}({l: 501});
                 f.test{value: x}({l: 501});
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -279,10 +249,7 @@ fn external_call_value() {
                 f.test{value: 2-2}({l: 501});
                 f.test{value: 2-2}({l: 501});
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -302,10 +269,7 @@ fn external_call_value() {
                 f.test{value: 0*10}(501);
                 f.test{value: 0*10}(501);
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -585,10 +549,7 @@ fn this_address() {
                 return payable(this);
                 return payable(this);
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -600,10 +561,7 @@ fn this_address() {
                 return this;
                 return this;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -618,10 +576,7 @@ fn this_address() {
                 this = other;
                 this = other;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "expression is not assignable");
     assert_eq!(first_error(ns.diagnostics), "expression is not assignable");
@@ -710,10 +665,7 @@ fn this_address() {
                 s = n;
                 s = n;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -735,10 +687,7 @@ fn this_address() {
                 s = n;
                 s = n;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -756,10 +705,7 @@ fn balance() {
                 return j.balance;
                 return j.balance;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -774,10 +720,7 @@ fn balance() {
                 return j.balance;
                 return j.balance;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -792,10 +735,7 @@ fn balance() {
                 return j.balance;
                 return j.balance;
             }
             }
         }"##,
         }"##,
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(

+ 26 - 113
tests/substrate_tests/variables.rs

@@ -8,10 +8,7 @@ fn variable_size() {
             function foo(int[12131231313213] memory y) public {}
             function foo(int[12131231313213] memory y) public {}
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -24,10 +21,7 @@ fn variable_size() {
             function foo() public returns (int[12131231313213] memory y) {}
             function foo() public returns (int[12131231313213] memory y) {}
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -42,10 +36,7 @@ fn variable_size() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -65,10 +56,7 @@ fn immutable() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -85,10 +73,7 @@ fn immutable() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -105,10 +90,7 @@ fn immutable() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -125,10 +107,7 @@ fn immutable() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -147,10 +126,7 @@ fn immutable() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -163,10 +139,7 @@ fn immutable() {
             int immutable public immutable y = 1;
             int immutable public immutable y = 1;
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -182,10 +155,7 @@ fn override_attribute() {
             int override y = 1;
             int override y = 1;
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -198,10 +168,7 @@ fn override_attribute() {
             int override internal y = 1;
             int override internal y = 1;
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -214,10 +181,7 @@ fn override_attribute() {
             int override private y = 1;
             int override private y = 1;
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -230,10 +194,7 @@ fn override_attribute() {
             int override override y = 1;
             int override override y = 1;
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -252,10 +213,7 @@ fn override_attribute() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -274,10 +232,7 @@ fn override_attribute() {
             }
             }
         }
         }
         ",
         ",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     no_errors(ns.diagnostics);
     no_errors(ns.diagnostics);
@@ -295,10 +250,7 @@ fn test_variable_errors() {
                 return a * b;
                 return a * b;
             }
             }
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "`b' is not found");
     assert_eq!(first_error(ns.diagnostics), "`b' is not found");
@@ -312,10 +264,7 @@ fn test_variable_initializer_errors() {
             uint x = 102;
             uint x = 102;
             uint constant y = x + 5;
             uint constant y = x + 5;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -331,10 +280,7 @@ fn test_variable_initializer_errors() {
             }
             }
             uint constant y = foo() + 5;
             uint constant y = foo() + 5;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -348,10 +294,7 @@ fn test_variable_initializer_errors() {
             uint x = y + 102;
             uint x = y + 102;
             uint y = 102;
             uint y = 102;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "`y' is not found");
     assert_eq!(first_error(ns.diagnostics), "`y' is not found");
@@ -362,10 +305,7 @@ fn test_variable_initializer_errors() {
             uint x = y + 102;
             uint x = y + 102;
             uint constant y = 102;
             uint constant y = 102;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "`y' is not found");
     assert_eq!(first_error(ns.diagnostics), "`y' is not found");
@@ -375,10 +315,7 @@ fn test_variable_initializer_errors() {
         "contract test {
         "contract test {
             uint x = x + 102;
             uint x = x + 102;
         }",
         }",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(first_error(ns.diagnostics), "`x' is not found");
     assert_eq!(first_error(ns.diagnostics), "`x' is not found");
@@ -386,26 +323,14 @@ fn test_variable_initializer_errors() {
 
 
 #[test]
 #[test]
 fn global_constants() {
 fn global_constants() {
-    let ns = parse_and_resolve(
-        "uint x = 102;",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve("uint x = 102;", Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
         "global variable must be constant"
         "global variable must be constant"
     );
     );
 
 
-    let ns = parse_and_resolve(
-        "uint constant public x = 102;",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve("uint constant public x = 102;", Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -414,10 +339,7 @@ fn global_constants() {
 
 
     let ns = parse_and_resolve(
     let ns = parse_and_resolve(
         "uint constant external x = 102;",
         "uint constant external x = 102;",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(
@@ -425,13 +347,7 @@ fn global_constants() {
         "‘external’: global variable cannot have visibility specifier"
         "‘external’: global variable cannot have visibility specifier"
     );
     );
 
 
-    let ns = parse_and_resolve(
-        "uint constant x;",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
-    );
+    let ns = parse_and_resolve("uint constant x;", Target::default_substrate());
 
 
     assert_eq!(
     assert_eq!(
         first_error(ns.diagnostics),
         first_error(ns.diagnostics),
@@ -440,10 +356,7 @@ fn global_constants() {
 
 
     let ns = parse_and_resolve(
     let ns = parse_and_resolve(
         "uint constant test = 5; contract test {}",
         "uint constant test = 5; contract test {}",
-        Target::Substrate {
-            address_length: 32,
-            value_length: 16,
-        },
+        Target::default_substrate(),
     );
     );
 
 
     assert_eq!(
     assert_eq!(