Parcourir la source

struct member expressions not are written to graphviz dot file

The handling was incorrect and no nodes were generated.

Signed-off-by: Sean Young <sean@mess.org>
Sean Young il y a 3 ans
Parent
commit
4a46365212

+ 12 - 16
src/sema/dotgraphviz.rs

@@ -867,23 +867,19 @@ impl Dot {
                 self.add_expression(index, func, ns, node, String::from("index"));
                 self.add_expression(index, func, ns, node, String::from("index"));
             }
             }
             Expression::StructMember(loc, ty, var, member) => {
             Expression::StructMember(loc, ty, var, member) => {
-                if let Type::Struct(struct_no) = ty {
-                    let field = &ns.structs[*struct_no].fields[*member];
-                    let node = self.add_node(
-                        Node::new(
-                            "struct member",
-                            vec![
-                                format!("struct member {}", ty.to_string(ns),),
-                                format!("field {} {}", field.ty.to_string(ns), field.name_as_str()),
-                                ns.loc_to_string(loc),
-                            ],
-                        ),
-                        Some(parent),
-                        Some(parent_rel),
-                    );
+                let node = self.add_node(
+                    Node::new(
+                        "structmember",
+                        vec![
+                            format!("struct member #{} {}", member, ty.to_string(ns)),
+                            ns.loc_to_string(loc),
+                        ],
+                    ),
+                    Some(parent),
+                    Some(parent_rel),
+                );
 
 
-                    self.add_expression(var, func, ns, node, String::from("var"));
-                }
+                self.add_expression(var, func, ns, node, String::from("var"));
             }
             }
 
 
             Expression::AllocDynamicArray(loc, ty, length, initializer) => {
             Expression::AllocDynamicArray(loc, ty, length, initializer) => {

+ 478 - 430
tests/contract_testcases/ewasm/rubixi.dot

@@ -128,240 +128,264 @@ strict digraph "tests/contract_testcases/ewasm/rubixi.sol" {
 	storage_load_128 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:25-32"]
 	storage_load_128 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:25-32"]
 	storage_var_129 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:66:25-32"]
 	storage_var_129 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:66:25-32"]
 	storage_load_130 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:35-67"]
 	storage_load_130 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:35-67"]
-	var_decl_131 [label="variable decl uint256 payoutToSend\ntests/contract_testcases/ewasm/rubixi.sol:67:26-78"]
-	storage_load_132 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:67:72-78"]
-	expr_133 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:70:26-69"]
-	assign_134 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:70:34-36"]
-	storage_var_135 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:26-33"]
-	subtract_136 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:70:34-36"]
-	storage_load_137 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:34-36"]
-	storage_var_138 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:26-33"]
-	storage_load_139 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:37-69"]
-	expr_140 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:71:26-42"]
-	assign_141 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:71:38-40"]
-	storage_var_142 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:71:26-37"]
-	add_143 [label="add\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:71:38-40"]
-	storage_load_144 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:71:38-40"]
-	storage_var_145 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:71:26-37"]
-	number_literal_146 [label="uint256 literal: 1\ntests/contract_testcases/ewasm/rubixi.sol:71:41-42"]
+	structmember [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:66:61-67"]
+	subscript [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:66:35-60"]
+	storage_var_133 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:66:35-47"]
+	storage_load_134 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:48-59"]
+	storage_var_135 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:66:48-59"]
+	var_decl_136 [label="variable decl uint256 payoutToSend\ntests/contract_testcases/ewasm/rubixi.sol:67:26-78"]
+	storage_load_137 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:67:72-78"]
+	structmember_138 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:67:72-78"]
+	subscript_139 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:67:46-71"]
+	storage_var_140 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:67:46-58"]
+	storage_load_141 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:67:59-70"]
+	storage_var_142 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:67:59-70"]
+	expr_143 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:70:26-69"]
+	assign_144 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:70:34-36"]
+	storage_var_145 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:26-33"]
+	subtract_146 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:70:34-36"]
+	storage_load_147 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:34-36"]
+	storage_var_148 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:26-33"]
+	storage_load_149 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:37-69"]
+	structmember_150 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:63-69"]
+	subscript_151 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:70:37-62"]
+	storage_var_152 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:70:37-49"]
+	storage_load_153 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:50-61"]
+	storage_var_154 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:50-61"]
+	expr_155 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:71:26-42"]
+	assign_156 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:71:38-40"]
+	storage_var_157 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:71:26-37"]
+	add_158 [label="add\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:71:38-40"]
+	storage_load_159 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:71:38-40"]
+	storage_var_160 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:71:26-37"]
+	number_literal_161 [label="uint256 literal: 1\ntests/contract_testcases/ewasm/rubixi.sol:71:41-42"]
 	collectAllFees [label="function collectAllFees\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:76:10-52\nsignature collectAllFees()\nvisibility public\nmutability nonpayable"]
 	collectAllFees [label="function collectAllFees\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:76:10-52\nsignature collectAllFees()\nvisibility public\nmutability nonpayable"]
-	if_148 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:77:18-51"]
-	equal_149 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:77:36-38"]
-	storage_load_150 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:77:22-35"]
-	storage_var_151 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:77:22-35"]
-	number_literal_152 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:77:39-40"]
-	expr_153 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:77:42-50"]
-	builtins_154 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:77:42-48"]
-	expr_155 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:79:18-67"]
-	builtins_156 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:79:18-67"]
-	cast_157 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:79:18-34"]
-	storage_load_158 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:79:18-34"]
-	storage_var_159 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:79:26-33"]
-	cast_160 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
+	if_163 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:77:18-51"]
+	equal_164 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:77:36-38"]
+	storage_load_165 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:77:22-35"]
+	storage_var_166 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:77:22-35"]
+	number_literal_167 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:77:39-40"]
+	expr_168 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:77:42-50"]
+	builtins_169 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:77:42-48"]
+	expr_170 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:79:18-67"]
+	builtins_171 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:79:18-67"]
+	cast_172 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:79:18-34"]
+	storage_load_173 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:79:18-34"]
+	storage_var_174 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:79:26-33"]
+	cast_175 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
 	trunc [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
 	trunc [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
-	storage_load_162 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
-	storage_var_163 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:79:52-65"]
-	expr_164 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:80:18-35"]
-	assign_165 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:80:18-31"]
-	storage_var_166 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:80:18-31"]
-	number_literal_167 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:80:34-35"]
+	storage_load_177 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
+	storage_var_178 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:79:52-65"]
+	expr_179 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:80:18-35"]
+	assign_180 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:80:18-31"]
+	storage_var_181 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:80:18-31"]
+	number_literal_182 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:80:34-35"]
 	collectFeesInEther [label="function collectFeesInEther\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:83:10-65\nsignature collectFeesInEther(uint256)\nvisibility public\nmutability nonpayable"]
 	collectFeesInEther [label="function collectFeesInEther\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:83:10-65\nsignature collectFeesInEther(uint256)\nvisibility public\nmutability nonpayable"]
-	parameters_169 [label="parameters\nuint256 _amt"]
-	expr_170 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:84:18-33"]
-	assign_171 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:84:23-25"]
-	variable_172 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:18-22"]
-	multiply_173 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:23-25"]
-	variable_174 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:18-22"]
-	number_literal_175 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:84:26-33"]
-	if_176 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:85:18-61"]
-	more_177 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:85:27-28"]
-	variable_178 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:85:22-26"]
-	storage_load_179 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:85:29-42"]
-	storage_var_180 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:85:29-42"]
-	expr_181 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
-	call_internal_function_182 [label="call internal function\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
-	internal_function_183 [label="function() internal returns (void)\nRubixi.collectAllFees\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
-	if_184 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:87:18-51"]
-	equal_185 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:87:36-38"]
-	storage_load_186 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:87:22-35"]
-	storage_var_187 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:87:22-35"]
-	number_literal_188 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:87:39-40"]
-	expr_189 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:87:42-50"]
-	builtins_190 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:87:42-48"]
-	expr_191 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:89:18-58"]
-	builtins_192 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:89:18-58"]
-	cast_193 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:89:18-34"]
-	storage_load_194 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:89:18-34"]
-	storage_var_195 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:89:26-33"]
-	cast_196 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:89:44-57"]
-	trunc_197 [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:89:44-57"]
-	variable_198 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:89:52-56"]
-	expr_199 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:90:18-39"]
-	assign_200 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:90:32-34"]
-	storage_var_201 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:90:18-31"]
-	subtract_202 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:90:32-34"]
-	storage_load_203 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:90:32-34"]
-	storage_var_204 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:90:18-31"]
-	variable_205 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:90:35-39"]
+	parameters_184 [label="parameters\nuint256 _amt"]
+	expr_185 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:84:18-33"]
+	assign_186 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:84:23-25"]
+	variable_187 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:18-22"]
+	multiply_188 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:23-25"]
+	variable_189 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:18-22"]
+	number_literal_190 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:84:26-33"]
+	if_191 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:85:18-61"]
+	more_192 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:85:27-28"]
+	variable_193 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:85:22-26"]
+	storage_load_194 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:85:29-42"]
+	storage_var_195 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:85:29-42"]
+	expr_196 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
+	call_internal_function_197 [label="call internal function\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
+	internal_function_198 [label="function() internal returns (void)\nRubixi.collectAllFees\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
+	if_199 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:87:18-51"]
+	equal_200 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:87:36-38"]
+	storage_load_201 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:87:22-35"]
+	storage_var_202 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:87:22-35"]
+	number_literal_203 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:87:39-40"]
+	expr_204 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:87:42-50"]
+	builtins_205 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:87:42-48"]
+	expr_206 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:89:18-58"]
+	builtins_207 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:89:18-58"]
+	cast_208 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:89:18-34"]
+	storage_load_209 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:89:18-34"]
+	storage_var_210 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:89:26-33"]
+	cast_211 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:89:44-57"]
+	trunc_212 [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:89:44-57"]
+	variable_213 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:89:52-56"]
+	expr_214 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:90:18-39"]
+	assign_215 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:90:32-34"]
+	storage_var_216 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:90:18-31"]
+	subtract_217 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:90:32-34"]
+	storage_load_218 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:90:32-34"]
+	storage_var_219 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:90:18-31"]
+	variable_220 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:90:35-39"]
 	collectPercentOfFees [label="function collectPercentOfFees\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:93:10-69\nsignature collectPercentOfFees(uint256)\nvisibility public\nmutability nonpayable"]
 	collectPercentOfFees [label="function collectPercentOfFees\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:93:10-69\nsignature collectPercentOfFees(uint256)\nvisibility public\nmutability nonpayable"]
-	parameters_207 [label="parameters\nuint256 _pcent"]
-	if_208 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:94:18-67"]
+	parameters_222 [label="parameters\nuint256 _pcent"]
+	if_223 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:94:18-67"]
 	logical_or [label="logical or\ntests/contract_testcases/ewasm/rubixi.sol:94:41-43"]
 	logical_or [label="logical or\ntests/contract_testcases/ewasm/rubixi.sol:94:41-43"]
-	equal_210 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:94:36-38"]
-	storage_load_211 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:94:22-35"]
-	storage_var_212 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:94:22-35"]
-	number_literal_213 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:94:39-40"]
-	more_214 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:94:51-52"]
-	variable_215 [label="variable: _pcent\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:94:44-50"]
-	number_literal_216 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:94:53-56"]
-	expr_217 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:94:58-66"]
-	builtins_218 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:94:58-64"]
-	var_decl_219 [label="variable decl uint256 feesToCollect\ntests/contract_testcases/ewasm/rubixi.sol:96:18-67"]
-	multiply_220 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:59-60"]
-	divide_221 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:53-54"]
-	storage_load_222 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:96:39-52"]
-	storage_var_223 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:96:39-52"]
-	number_literal_224 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:96:55-58"]
-	variable_225 [label="variable: _pcent\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:61-67"]
-	expr_226 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:97:18-67"]
-	builtins_227 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:97:18-67"]
-	cast_228 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:97:18-34"]
-	storage_load_229 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:97:18-34"]
-	storage_var_230 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:97:26-33"]
-	cast_231 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:97:44-66"]
-	trunc_232 [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:97:44-66"]
-	variable_233 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:97:52-65"]
-	expr_234 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:98:18-48"]
-	assign_235 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:98:32-34"]
-	storage_var_236 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:98:18-31"]
-	subtract_237 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:98:32-34"]
-	storage_load_238 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:98:32-34"]
-	storage_var_239 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:98:18-31"]
-	variable_240 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:98:35-48"]
+	equal_225 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:94:36-38"]
+	storage_load_226 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:94:22-35"]
+	storage_var_227 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:94:22-35"]
+	number_literal_228 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:94:39-40"]
+	more_229 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:94:51-52"]
+	variable_230 [label="variable: _pcent\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:94:44-50"]
+	number_literal_231 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:94:53-56"]
+	expr_232 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:94:58-66"]
+	builtins_233 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:94:58-64"]
+	var_decl_234 [label="variable decl uint256 feesToCollect\ntests/contract_testcases/ewasm/rubixi.sol:96:18-67"]
+	multiply_235 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:59-60"]
+	divide_236 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:53-54"]
+	storage_load_237 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:96:39-52"]
+	storage_var_238 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:96:39-52"]
+	number_literal_239 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:96:55-58"]
+	variable_240 [label="variable: _pcent\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:61-67"]
+	expr_241 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:97:18-67"]
+	builtins_242 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:97:18-67"]
+	cast_243 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:97:18-34"]
+	storage_load_244 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:97:18-34"]
+	storage_var_245 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:97:26-33"]
+	cast_246 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:97:44-66"]
+	trunc_247 [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:97:44-66"]
+	variable_248 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:97:52-65"]
+	expr_249 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:98:18-48"]
+	assign_250 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:98:32-34"]
+	storage_var_251 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:98:18-31"]
+	subtract_252 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:98:32-34"]
+	storage_load_253 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:98:32-34"]
+	storage_var_254 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:98:18-31"]
+	variable_255 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:98:35-48"]
 	changeOwner [label="function changeOwner\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:102:10-63\nsignature changeOwner(address)\nvisibility public\nmutability nonpayable"]
 	changeOwner [label="function changeOwner\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:102:10-63\nsignature changeOwner(address)\nvisibility public\nmutability nonpayable"]
-	parameters_242 [label="parameters\naddress _owner"]
-	expr_243 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:103:18-34"]
-	assign_244 [label="assign\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:103:18-25"]
-	storage_var_245 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:103:18-25"]
-	variable_246 [label="variable: _owner\naddress\ntests/contract_testcases/ewasm/rubixi.sol:103:28-34"]
+	parameters_257 [label="parameters\naddress _owner"]
+	expr_258 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:103:18-34"]
+	assign_259 [label="assign\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:103:18-25"]
+	storage_var_260 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:103:18-25"]
+	variable_261 [label="variable: _owner\naddress\ntests/contract_testcases/ewasm/rubixi.sol:103:28-34"]
 	changeMultiplier [label="function changeMultiplier\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:106:10-64\nsignature changeMultiplier(uint256)\nvisibility public\nmutability nonpayable"]
 	changeMultiplier [label="function changeMultiplier\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:106:10-64\nsignature changeMultiplier(uint256)\nvisibility public\nmutability nonpayable"]
-	parameters_248 [label="parameters\nuint256 _mult"]
-	if_249 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:107:18-59"]
-	logical_or_250 [label="logical or\ntests/contract_testcases/ewasm/rubixi.sol:107:34-36"]
-	more_251 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:107:28-29"]
-	variable_252 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:107:22-27"]
-	number_literal_253 [label="uint256 literal: 300\ntests/contract_testcases/ewasm/rubixi.sol:107:30-33"]
-	less_254 [label="less\ntests/contract_testcases/ewasm/rubixi.sol:107:43-44"]
-	variable_255 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:107:37-42"]
-	number_literal_256 [label="uint256 literal: 120\ntests/contract_testcases/ewasm/rubixi.sol:107:45-48"]
-	expr_257 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:107:50-58"]
-	builtins_258 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:107:50-56"]
-	expr_259 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:109:18-43"]
-	assign_260 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:109:18-35"]
-	storage_var_261 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:109:18-35"]
-	variable_262 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:109:38-43"]
+	parameters_263 [label="parameters\nuint256 _mult"]
+	if_264 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:107:18-59"]
+	logical_or_265 [label="logical or\ntests/contract_testcases/ewasm/rubixi.sol:107:34-36"]
+	more_266 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:107:28-29"]
+	variable_267 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:107:22-27"]
+	number_literal_268 [label="uint256 literal: 300\ntests/contract_testcases/ewasm/rubixi.sol:107:30-33"]
+	less_269 [label="less\ntests/contract_testcases/ewasm/rubixi.sol:107:43-44"]
+	variable_270 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:107:37-42"]
+	number_literal_271 [label="uint256 literal: 120\ntests/contract_testcases/ewasm/rubixi.sol:107:45-48"]
+	expr_272 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:107:50-58"]
+	builtins_273 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:107:50-56"]
+	expr_274 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:109:18-43"]
+	assign_275 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:109:18-35"]
+	storage_var_276 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:109:18-35"]
+	variable_277 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:109:38-43"]
 	changeFeePercentage [label="function changeFeePercentage\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:112:10-66\nsignature changeFeePercentage(uint256)\nvisibility public\nmutability nonpayable"]
 	changeFeePercentage [label="function changeFeePercentage\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:112:10-66\nsignature changeFeePercentage(uint256)\nvisibility public\nmutability nonpayable"]
-	parameters_264 [label="parameters\nuint256 _fee"]
-	if_265 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:113:18-42"]
-	more_266 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:113:27-28"]
-	variable_267 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:113:22-26"]
-	number_literal_268 [label="uint256 literal: 10\ntests/contract_testcases/ewasm/rubixi.sol:113:29-31"]
-	expr_269 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:113:33-41"]
-	builtins_270 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:113:33-39"]
-	expr_271 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:115:18-35"]
-	assign_272 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:115:18-28"]
-	storage_var_273 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:115:18-28"]
-	variable_274 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:115:31-35"]
+	parameters_279 [label="parameters\nuint256 _fee"]
+	if_280 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:113:18-42"]
+	more_281 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:113:27-28"]
+	variable_282 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:113:22-26"]
+	number_literal_283 [label="uint256 literal: 10\ntests/contract_testcases/ewasm/rubixi.sol:113:29-31"]
+	expr_284 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:113:33-41"]
+	builtins_285 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:113:33-39"]
+	expr_286 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:115:18-35"]
+	assign_287 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:115:18-28"]
+	storage_var_288 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:115:18-28"]
+	variable_289 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:115:31-35"]
 	currentMultiplier [label="function currentMultiplier\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:119:10-95\nsignature currentMultiplier()\nvisibility public\nmutability view"]
 	currentMultiplier [label="function currentMultiplier\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:119:10-95\nsignature currentMultiplier()\nvisibility public\nmutability view"]
 	returns [label="returns\nuint256 multiplier\nstring info"]
 	returns [label="returns\nuint256 multiplier\nstring info"]
-	expr_277 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:120:18-48"]
-	assign_278 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:120:29-30"]
-	variable_279 [label="variable: multiplier\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:120:18-28"]
-	storage_load_280 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:120:31-48"]
-	storage_var_281 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:120:31-48"]
-	expr_282 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:121:18-314"]
-	assign_283 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:121:23-24"]
-	variable_284 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:121:18-22"]
+	expr_292 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:120:18-48"]
+	assign_293 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:120:29-30"]
+	variable_294 [label="variable: multiplier\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:120:18-28"]
+	storage_load_295 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:120:31-48"]
+	storage_var_296 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:120:31-48"]
+	expr_297 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:121:18-314"]
+	assign_298 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:121:23-24"]
+	variable_299 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:121:18-22"]
 	alloc_array [label="alloc array string\ninitializer: 54686973206d756c7469706c696572206170706c69657320746f20796f7520617320736f6f6e206173207472616e73616374696f6e2069732072656365697665642c206d6179206265206c6f776572656420746f2068617374656e207061796f757473206f7220696e63726561736564206966207061796f75747320617265206661737420656e6f7567682e2044756520746f206e6f20666c6f6174206f7220646563696d616c732c206d756c7469706c696572206973207831303020666f722061206672616374696f6e616c206d756c7469706c69657220652e672e203235302069732061637475616c6c79206120322e3578206d756c7469706c6965722e20436170706564206174203378206d617820616e6420312e3278206d696e2e\ntests/contract_testcases/ewasm/rubixi.sol:121:25-314"]
 	alloc_array [label="alloc array string\ninitializer: 54686973206d756c7469706c696572206170706c69657320746f20796f7520617320736f6f6e206173207472616e73616374696f6e2069732072656365697665642c206d6179206265206c6f776572656420746f2068617374656e207061796f757473206f7220696e63726561736564206966207061796f75747320617265206661737420656e6f7567682e2044756520746f206e6f20666c6f6174206f7220646563696d616c732c206d756c7469706c696572206973207831303020666f722061206672616374696f6e616c206d756c7469706c69657220652e672e203235302069732061637475616c6c79206120322e3578206d756c7469706c6965722e20436170706564206174203378206d617820616e6420312e3278206d696e2e\ntests/contract_testcases/ewasm/rubixi.sol:121:25-314"]
-	number_literal_286 [label="uint32 literal: 287\ntests/contract_testcases/ewasm/rubixi.sol:121:25-314"]
+	number_literal_301 [label="uint32 literal: 287\ntests/contract_testcases/ewasm/rubixi.sol:121:25-314"]
 	currentFeePercentage [label="function currentFeePercentage\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:124:10-91\nsignature currentFeePercentage()\nvisibility public\nmutability view"]
 	currentFeePercentage [label="function currentFeePercentage\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:124:10-91\nsignature currentFeePercentage()\nvisibility public\nmutability view"]
-	returns_288 [label="returns\nuint256 fee\nstring info"]
-	expr_289 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:125:18-34"]
-	assign_290 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:125:22-23"]
-	variable_291 [label="variable: fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:125:18-21"]
-	storage_load_292 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:125:24-34"]
-	storage_var_293 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:125:24-34"]
-	expr_294 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:126:18-159"]
-	assign_295 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:126:23-24"]
-	variable_296 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:126:18-22"]
-	alloc_array_297 [label="alloc array string\ninitializer: 53686f776e20696e202520666f726d2e204665652069732068616c766564283530252920666f7220616d6f756e747320657175616c206f722067726561746572207468616e203530206574686572732e2028466565206d6179206368616e67652c206275742069732063617070656420746f2061206d6178696d756d206f662031302529\ntests/contract_testcases/ewasm/rubixi.sol:126:25-159"]
-	number_literal_298 [label="uint32 literal: 132\ntests/contract_testcases/ewasm/rubixi.sol:126:25-159"]
+	returns_303 [label="returns\nuint256 fee\nstring info"]
+	expr_304 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:125:18-34"]
+	assign_305 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:125:22-23"]
+	variable_306 [label="variable: fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:125:18-21"]
+	storage_load_307 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:125:24-34"]
+	storage_var_308 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:125:24-34"]
+	expr_309 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:126:18-159"]
+	assign_310 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:126:23-24"]
+	variable_311 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:126:18-22"]
+	alloc_array_312 [label="alloc array string\ninitializer: 53686f776e20696e202520666f726d2e204665652069732068616c766564283530252920666f7220616d6f756e747320657175616c206f722067726561746572207468616e203530206574686572732e2028466565206d6179206368616e67652c206275742069732063617070656420746f2061206d6178696d756d206f662031302529\ntests/contract_testcases/ewasm/rubixi.sol:126:25-159"]
+	number_literal_313 [label="uint32 literal: 132\ntests/contract_testcases/ewasm/rubixi.sol:126:25-159"]
 	currentPyramidBalanceApproximately [label="function currentPyramidBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:129:10-116\nsignature currentPyramidBalanceApproximately()\nvisibility public\nmutability view"]
 	currentPyramidBalanceApproximately [label="function currentPyramidBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:129:10-116\nsignature currentPyramidBalanceApproximately()\nvisibility public\nmutability view"]
-	returns_300 [label="returns\nuint256 pyramidBalance\nstring info"]
-	expr_301 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:130:18-52"]
-	assign_302 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:33-34"]
-	variable_303 [label="variable: pyramidBalance\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:18-32"]
-	divide_304 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:43-44"]
-	storage_load_305 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:130:35-42"]
-	storage_var_306 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:130:35-42"]
-	number_literal_307 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:130:45-52"]
-	expr_308 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:131:18-229"]
-	assign_309 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:131:23-24"]
-	variable_310 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:131:18-22"]
-	alloc_array_311 [label="alloc array string\ninitializer: 416c6c2062616c616e63652076616c75657320617265206d6561737572656420696e204574686572732c206e6f746520746861742064756520746f206e6f20646563696d616c20706c6163696e672c2074686573652076616c7565732073686f7720757020617320696e746567657273206f6e6c792c2077697468696e2074686520636f6e747261637420697473656c6620796f752077696c6c206765742074686520657861637420646563696d616c2076616c756520796f752061726520737570706f73656420746f\ntests/contract_testcases/ewasm/rubixi.sol:131:25-229"]
-	number_literal_312 [label="uint32 literal: 202\ntests/contract_testcases/ewasm/rubixi.sol:131:25-229"]
+	returns_315 [label="returns\nuint256 pyramidBalance\nstring info"]
+	expr_316 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:130:18-52"]
+	assign_317 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:33-34"]
+	variable_318 [label="variable: pyramidBalance\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:18-32"]
+	divide_319 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:43-44"]
+	storage_load_320 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:130:35-42"]
+	storage_var_321 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:130:35-42"]
+	number_literal_322 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:130:45-52"]
+	expr_323 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:131:18-229"]
+	assign_324 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:131:23-24"]
+	variable_325 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:131:18-22"]
+	alloc_array_326 [label="alloc array string\ninitializer: 416c6c2062616c616e63652076616c75657320617265206d6561737572656420696e204574686572732c206e6f746520746861742064756520746f206e6f20646563696d616c20706c6163696e672c2074686573652076616c7565732073686f7720757020617320696e746567657273206f6e6c792c2077697468696e2074686520636f6e747261637420697473656c6620796f752077696c6c206765742074686520657861637420646563696d616c2076616c756520796f752061726520737570706f73656420746f\ntests/contract_testcases/ewasm/rubixi.sol:131:25-229"]
+	number_literal_327 [label="uint32 literal: 202\ntests/contract_testcases/ewasm/rubixi.sol:131:25-229"]
 	nextPayoutWhenPyramidBalanceTotalsApproximately [label="function nextPayoutWhenPyramidBalanceTotalsApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:134:10-108\nsignature nextPayoutWhenPyramidBalanceTotalsApproximately()\nvisibility public\nmutability view"]
 	nextPayoutWhenPyramidBalanceTotalsApproximately [label="function nextPayoutWhenPyramidBalanceTotalsApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:134:10-108\nsignature nextPayoutWhenPyramidBalanceTotalsApproximately()\nvisibility public\nmutability view"]
-	returns_314 [label="returns\nuint256 balancePayout"]
-	expr_315 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:135:18-76"]
-	assign_316 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:32-33"]
-	variable_317 [label="variable: balancePayout\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:18-31"]
-	divide_318 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:67-68"]
-	storage_load_319 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:135:34-66"]
-	number_literal_320 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:135:69-76"]
+	returns_329 [label="returns\nuint256 balancePayout"]
+	expr_330 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:135:18-76"]
+	assign_331 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:32-33"]
+	variable_332 [label="variable: balancePayout\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:18-31"]
+	divide_333 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:67-68"]
+	storage_load_334 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:135:34-66"]
+	structmember_335 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:135:60-66"]
+	subscript_336 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:135:34-59"]
+	storage_var_337 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:135:34-46"]
+	storage_load_338 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:135:47-58"]
+	storage_var_339 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:135:47-58"]
+	number_literal_340 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:135:69-76"]
 	feesSeperateFromBalanceApproximately [label="function feesSeperateFromBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:138:10-88\nsignature feesSeperateFromBalanceApproximately()\nvisibility public\nmutability view"]
 	feesSeperateFromBalanceApproximately [label="function feesSeperateFromBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:138:10-88\nsignature feesSeperateFromBalanceApproximately()\nvisibility public\nmutability view"]
-	returns_322 [label="returns\nuint256 fees"]
-	expr_323 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:139:18-48"]
-	assign_324 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:23-24"]
-	variable_325 [label="variable: fees\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:18-22"]
-	divide_326 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:39-40"]
-	storage_load_327 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:139:25-38"]
-	storage_var_328 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:139:25-38"]
-	number_literal_329 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:139:41-48"]
+	returns_342 [label="returns\nuint256 fees"]
+	expr_343 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:139:18-48"]
+	assign_344 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:23-24"]
+	variable_345 [label="variable: fees\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:18-22"]
+	divide_346 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:39-40"]
+	storage_load_347 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:139:25-38"]
+	storage_var_348 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:139:25-38"]
+	number_literal_349 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:139:41-48"]
 	totalParticipants [label="function totalParticipants\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:142:10-70\nsignature totalParticipants()\nvisibility public\nmutability view"]
 	totalParticipants [label="function totalParticipants\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:142:10-70\nsignature totalParticipants()\nvisibility public\nmutability view"]
-	returns_331 [label="returns\nuint256 count"]
-	expr_332 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:143:18-45"]
-	assign_333 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:143:24-25"]
-	variable_334 [label="variable: count\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:143:18-23"]
-	array_length_335 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:143:39-45"]
-	storage_var_336 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:143:26-38"]
+	returns_351 [label="returns\nuint256 count"]
+	expr_352 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:143:18-45"]
+	assign_353 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:143:24-25"]
+	variable_354 [label="variable: count\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:143:18-23"]
+	array_length_355 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:143:39-45"]
+	storage_var_356 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:143:26-38"]
 	numberOfParticipantsWaitingForPayout [label="function numberOfParticipantsWaitingForPayout\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:146:10-89\nsignature numberOfParticipantsWaitingForPayout()\nvisibility public\nmutability view"]
 	numberOfParticipantsWaitingForPayout [label="function numberOfParticipantsWaitingForPayout\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:146:10-89\nsignature numberOfParticipantsWaitingForPayout()\nvisibility public\nmutability view"]
-	returns_338 [label="returns\nuint256 count"]
-	expr_339 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:147:18-59"]
-	assign_340 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:24-25"]
-	variable_341 [label="variable: count\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:18-23"]
-	subtract_342 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:46-47"]
-	array_length_343 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:147:39-45"]
-	storage_var_344 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:147:26-38"]
-	storage_load_345 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:147:48-59"]
-	storage_var_346 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:147:48-59"]
+	returns_358 [label="returns\nuint256 count"]
+	expr_359 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:147:18-59"]
+	assign_360 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:24-25"]
+	variable_361 [label="variable: count\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:18-23"]
+	subtract_362 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:46-47"]
+	array_length_363 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:147:39-45"]
+	storage_var_364 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:147:26-38"]
+	storage_load_365 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:147:48-59"]
+	storage_var_366 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:147:48-59"]
 	participantDetails [label="function participantDetails\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:150:10-108\nsignature participantDetails(uint256)\nvisibility public\nmutability view"]
 	participantDetails [label="function participantDetails\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:150:10-108\nsignature participantDetails(uint256)\nvisibility public\nmutability view"]
-	parameters_348 [label="parameters\nuint256 orderInPyramid"]
-	returns_349 [label="returns\naddress Address\nuint256 Payout"]
-	if_350 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:151:18-154:19"]
+	parameters_368 [label="parameters\nuint256 orderInPyramid"]
+	returns_369 [label="returns\naddress Address\nuint256 Payout"]
+	if_370 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:151:18-154:19"]
 	less_equal [label="less equal\ntests/contract_testcases/ewasm/rubixi.sol:151:37-39"]
 	less_equal [label="less equal\ntests/contract_testcases/ewasm/rubixi.sol:151:37-39"]
-	variable_352 [label="variable: orderInPyramid\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:151:22-36"]
-	array_length_353 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:151:53-59"]
-	storage_var_354 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:151:40-52"]
-	expr_355 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:153:26-80"]
-	assign_356 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:33-34"]
-	variable_357 [label="variable: Payout\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:26-32"]
-	divide_358 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:71-72"]
-	storage_load_359 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:153:35-70"]
-	number_literal_360 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:153:73-80"]
+	variable_372 [label="variable: orderInPyramid\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:151:22-36"]
+	array_length_373 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:151:53-59"]
+	storage_var_374 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:151:40-52"]
+	expr_375 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:153:26-80"]
+	assign_376 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:33-34"]
+	variable_377 [label="variable: Payout\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:26-32"]
+	divide_378 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:71-72"]
+	storage_load_379 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:153:35-70"]
+	structmember_380 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:153:64-70"]
+	subscript_381 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:153:35-63"]
+	storage_var_382 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:153:35-47"]
+	variable_383 [label="variable: orderInPyramid\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:48-62"]
+	number_literal_384 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:153:73-80"]
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/ewasm/rubixi.sol:2:2-25"]
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/ewasm/rubixi.sol:2:2-25"]
-	diagnostic_363 [label="found contract ‘Rubixi’\nlevel Debug\ntests/contract_testcases/ewasm/rubixi.sol:4:2-18"]
-	diagnostic_364 [label="local variable ‘payoutToSend‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/ewasm/rubixi.sol:67:31-43"]
-	diagnostic_365 [label="return variable ‘Address‘ has never been assigned\nlevel Warning\ntests/contract_testcases/ewasm/rubixi.sol:150:87-94"]
+	diagnostic_387 [label="found contract ‘Rubixi’\nlevel Debug\ntests/contract_testcases/ewasm/rubixi.sol:4:2-18"]
+	diagnostic_388 [label="local variable ‘payoutToSend‘ has been assigned, but never read\nlevel Warning\ntests/contract_testcases/ewasm/rubixi.sol:67:31-43"]
+	diagnostic_389 [label="return variable ‘Address‘ has never been assigned\nlevel Warning\ntests/contract_testcases/ewasm/rubixi.sol:150:87-94"]
 	structs -> Participant
 	structs -> Participant
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
@@ -491,238 +515,262 @@ strict digraph "tests/contract_testcases/ewasm/rubixi.sol" {
 	more -> storage_load_128 [label="left"]
 	more -> storage_load_128 [label="left"]
 	storage_load_128 -> storage_var_129 [label="expr"]
 	storage_load_128 -> storage_var_129 [label="expr"]
 	more -> storage_load_130 [label="right"]
 	more -> storage_load_130 [label="right"]
-	while -> var_decl_131 [label="body"]
-	var_decl_131 -> storage_load_132 [label="init"]
-	var_decl_131 -> expr_133 [label="next"]
-	expr_133 -> assign_134 [label="expr"]
-	assign_134 -> storage_var_135 [label="left"]
-	assign_134 -> subtract_136 [label="right"]
-	subtract_136 -> storage_load_137 [label="left"]
-	storage_load_137 -> storage_var_138 [label="expr"]
-	subtract_136 -> storage_load_139 [label="right"]
-	expr_133 -> expr_140 [label="next"]
-	expr_140 -> assign_141 [label="expr"]
-	assign_141 -> storage_var_142 [label="left"]
-	assign_141 -> add_143 [label="right"]
-	add_143 -> storage_load_144 [label="left"]
-	storage_load_144 -> storage_var_145 [label="expr"]
-	add_143 -> number_literal_146 [label="right"]
+	storage_load_130 -> structmember [label="expr"]
+	structmember -> subscript [label="var"]
+	subscript -> storage_var_133 [label="array"]
+	subscript -> storage_load_134 [label="index"]
+	storage_load_134 -> storage_var_135 [label="expr"]
+	while -> var_decl_136 [label="body"]
+	var_decl_136 -> storage_load_137 [label="init"]
+	storage_load_137 -> structmember_138 [label="expr"]
+	structmember_138 -> subscript_139 [label="var"]
+	subscript_139 -> storage_var_140 [label="array"]
+	subscript_139 -> storage_load_141 [label="index"]
+	storage_load_141 -> storage_var_142 [label="expr"]
+	var_decl_136 -> expr_143 [label="next"]
+	expr_143 -> assign_144 [label="expr"]
+	assign_144 -> storage_var_145 [label="left"]
+	assign_144 -> subtract_146 [label="right"]
+	subtract_146 -> storage_load_147 [label="left"]
+	storage_load_147 -> storage_var_148 [label="expr"]
+	subtract_146 -> storage_load_149 [label="right"]
+	storage_load_149 -> structmember_150 [label="expr"]
+	structmember_150 -> subscript_151 [label="var"]
+	subscript_151 -> storage_var_152 [label="array"]
+	subscript_151 -> storage_load_153 [label="index"]
+	storage_load_153 -> storage_var_154 [label="expr"]
+	expr_143 -> expr_155 [label="next"]
+	expr_155 -> assign_156 [label="expr"]
+	assign_156 -> storage_var_157 [label="left"]
+	assign_156 -> add_158 [label="right"]
+	add_158 -> storage_load_159 [label="left"]
+	storage_load_159 -> storage_var_160 [label="expr"]
+	add_158 -> number_literal_161 [label="right"]
 	contract -> collectAllFees [label="function"]
 	contract -> collectAllFees [label="function"]
-	collectAllFees -> if_148 [label="body"]
-	if_148 -> equal_149 [label="cond"]
-	equal_149 -> storage_load_150 [label="left"]
-	storage_load_150 -> storage_var_151 [label="expr"]
-	equal_149 -> number_literal_152 [label="right"]
-	if_148 -> expr_153 [label="then"]
-	expr_153 -> builtins_154 [label="expr"]
-	if_148 -> expr_155 [label="next"]
-	expr_155 -> builtins_156 [label="expr"]
-	builtins_156 -> cast_157 [label="arg #0"]
-	cast_157 -> storage_load_158 [label="expr"]
-	storage_load_158 -> storage_var_159 [label="expr"]
-	builtins_156 -> cast_160 [label="arg #1"]
-	cast_160 -> trunc [label="expr"]
-	trunc -> storage_load_162 [label="expr"]
-	storage_load_162 -> storage_var_163 [label="expr"]
-	expr_155 -> expr_164 [label="next"]
-	expr_164 -> assign_165 [label="expr"]
-	assign_165 -> storage_var_166 [label="left"]
-	assign_165 -> number_literal_167 [label="right"]
+	collectAllFees -> if_163 [label="body"]
+	if_163 -> equal_164 [label="cond"]
+	equal_164 -> storage_load_165 [label="left"]
+	storage_load_165 -> storage_var_166 [label="expr"]
+	equal_164 -> number_literal_167 [label="right"]
+	if_163 -> expr_168 [label="then"]
+	expr_168 -> builtins_169 [label="expr"]
+	if_163 -> expr_170 [label="next"]
+	expr_170 -> builtins_171 [label="expr"]
+	builtins_171 -> cast_172 [label="arg #0"]
+	cast_172 -> storage_load_173 [label="expr"]
+	storage_load_173 -> storage_var_174 [label="expr"]
+	builtins_171 -> cast_175 [label="arg #1"]
+	cast_175 -> trunc [label="expr"]
+	trunc -> storage_load_177 [label="expr"]
+	storage_load_177 -> storage_var_178 [label="expr"]
+	expr_170 -> expr_179 [label="next"]
+	expr_179 -> assign_180 [label="expr"]
+	assign_180 -> storage_var_181 [label="left"]
+	assign_180 -> number_literal_182 [label="right"]
 	contract -> collectFeesInEther [label="function"]
 	contract -> collectFeesInEther [label="function"]
-	collectFeesInEther -> parameters_169 [label="parameters"]
-	collectFeesInEther -> expr_170 [label="body"]
-	expr_170 -> assign_171 [label="expr"]
-	assign_171 -> variable_172 [label="left"]
-	assign_171 -> multiply_173 [label="right"]
-	multiply_173 -> variable_174 [label="left"]
-	multiply_173 -> number_literal_175 [label="right"]
-	expr_170 -> if_176 [label="next"]
-	if_176 -> more_177 [label="cond"]
-	more_177 -> variable_178 [label="left"]
-	more_177 -> storage_load_179 [label="right"]
-	storage_load_179 -> storage_var_180 [label="expr"]
-	if_176 -> expr_181 [label="then"]
-	expr_181 -> call_internal_function_182 [label="expr"]
-	call_internal_function_182 -> internal_function_183 [label="function"]
-	if_176 -> if_184 [label="next"]
-	if_184 -> equal_185 [label="cond"]
-	equal_185 -> storage_load_186 [label="left"]
-	storage_load_186 -> storage_var_187 [label="expr"]
-	equal_185 -> number_literal_188 [label="right"]
-	if_184 -> expr_189 [label="then"]
-	expr_189 -> builtins_190 [label="expr"]
-	if_184 -> expr_191 [label="next"]
-	expr_191 -> builtins_192 [label="expr"]
-	builtins_192 -> cast_193 [label="arg #0"]
-	cast_193 -> storage_load_194 [label="expr"]
+	collectFeesInEther -> parameters_184 [label="parameters"]
+	collectFeesInEther -> expr_185 [label="body"]
+	expr_185 -> assign_186 [label="expr"]
+	assign_186 -> variable_187 [label="left"]
+	assign_186 -> multiply_188 [label="right"]
+	multiply_188 -> variable_189 [label="left"]
+	multiply_188 -> number_literal_190 [label="right"]
+	expr_185 -> if_191 [label="next"]
+	if_191 -> more_192 [label="cond"]
+	more_192 -> variable_193 [label="left"]
+	more_192 -> storage_load_194 [label="right"]
 	storage_load_194 -> storage_var_195 [label="expr"]
 	storage_load_194 -> storage_var_195 [label="expr"]
-	builtins_192 -> cast_196 [label="arg #1"]
-	cast_196 -> trunc_197 [label="expr"]
-	trunc_197 -> variable_198 [label="expr"]
-	expr_191 -> expr_199 [label="next"]
-	expr_199 -> assign_200 [label="expr"]
-	assign_200 -> storage_var_201 [label="left"]
-	assign_200 -> subtract_202 [label="right"]
-	subtract_202 -> storage_load_203 [label="left"]
-	storage_load_203 -> storage_var_204 [label="expr"]
-	subtract_202 -> variable_205 [label="right"]
+	if_191 -> expr_196 [label="then"]
+	expr_196 -> call_internal_function_197 [label="expr"]
+	call_internal_function_197 -> internal_function_198 [label="function"]
+	if_191 -> if_199 [label="next"]
+	if_199 -> equal_200 [label="cond"]
+	equal_200 -> storage_load_201 [label="left"]
+	storage_load_201 -> storage_var_202 [label="expr"]
+	equal_200 -> number_literal_203 [label="right"]
+	if_199 -> expr_204 [label="then"]
+	expr_204 -> builtins_205 [label="expr"]
+	if_199 -> expr_206 [label="next"]
+	expr_206 -> builtins_207 [label="expr"]
+	builtins_207 -> cast_208 [label="arg #0"]
+	cast_208 -> storage_load_209 [label="expr"]
+	storage_load_209 -> storage_var_210 [label="expr"]
+	builtins_207 -> cast_211 [label="arg #1"]
+	cast_211 -> trunc_212 [label="expr"]
+	trunc_212 -> variable_213 [label="expr"]
+	expr_206 -> expr_214 [label="next"]
+	expr_214 -> assign_215 [label="expr"]
+	assign_215 -> storage_var_216 [label="left"]
+	assign_215 -> subtract_217 [label="right"]
+	subtract_217 -> storage_load_218 [label="left"]
+	storage_load_218 -> storage_var_219 [label="expr"]
+	subtract_217 -> variable_220 [label="right"]
 	contract -> collectPercentOfFees [label="function"]
 	contract -> collectPercentOfFees [label="function"]
-	collectPercentOfFees -> parameters_207 [label="parameters"]
-	collectPercentOfFees -> if_208 [label="body"]
-	if_208 -> logical_or [label="cond"]
-	logical_or -> equal_210 [label="left"]
-	equal_210 -> storage_load_211 [label="left"]
-	storage_load_211 -> storage_var_212 [label="expr"]
-	equal_210 -> number_literal_213 [label="right"]
-	logical_or -> more_214 [label="right"]
-	more_214 -> variable_215 [label="left"]
-	more_214 -> number_literal_216 [label="right"]
-	if_208 -> expr_217 [label="then"]
-	expr_217 -> builtins_218 [label="expr"]
-	if_208 -> var_decl_219 [label="next"]
-	var_decl_219 -> multiply_220 [label="init"]
-	multiply_220 -> divide_221 [label="left"]
-	divide_221 -> storage_load_222 [label="left"]
-	storage_load_222 -> storage_var_223 [label="expr"]
-	divide_221 -> number_literal_224 [label="right"]
-	multiply_220 -> variable_225 [label="right"]
-	var_decl_219 -> expr_226 [label="next"]
-	expr_226 -> builtins_227 [label="expr"]
-	builtins_227 -> cast_228 [label="arg #0"]
-	cast_228 -> storage_load_229 [label="expr"]
-	storage_load_229 -> storage_var_230 [label="expr"]
-	builtins_227 -> cast_231 [label="arg #1"]
-	cast_231 -> trunc_232 [label="expr"]
-	trunc_232 -> variable_233 [label="expr"]
-	expr_226 -> expr_234 [label="next"]
-	expr_234 -> assign_235 [label="expr"]
-	assign_235 -> storage_var_236 [label="left"]
-	assign_235 -> subtract_237 [label="right"]
-	subtract_237 -> storage_load_238 [label="left"]
-	storage_load_238 -> storage_var_239 [label="expr"]
-	subtract_237 -> variable_240 [label="right"]
+	collectPercentOfFees -> parameters_222 [label="parameters"]
+	collectPercentOfFees -> if_223 [label="body"]
+	if_223 -> logical_or [label="cond"]
+	logical_or -> equal_225 [label="left"]
+	equal_225 -> storage_load_226 [label="left"]
+	storage_load_226 -> storage_var_227 [label="expr"]
+	equal_225 -> number_literal_228 [label="right"]
+	logical_or -> more_229 [label="right"]
+	more_229 -> variable_230 [label="left"]
+	more_229 -> number_literal_231 [label="right"]
+	if_223 -> expr_232 [label="then"]
+	expr_232 -> builtins_233 [label="expr"]
+	if_223 -> var_decl_234 [label="next"]
+	var_decl_234 -> multiply_235 [label="init"]
+	multiply_235 -> divide_236 [label="left"]
+	divide_236 -> storage_load_237 [label="left"]
+	storage_load_237 -> storage_var_238 [label="expr"]
+	divide_236 -> number_literal_239 [label="right"]
+	multiply_235 -> variable_240 [label="right"]
+	var_decl_234 -> expr_241 [label="next"]
+	expr_241 -> builtins_242 [label="expr"]
+	builtins_242 -> cast_243 [label="arg #0"]
+	cast_243 -> storage_load_244 [label="expr"]
+	storage_load_244 -> storage_var_245 [label="expr"]
+	builtins_242 -> cast_246 [label="arg #1"]
+	cast_246 -> trunc_247 [label="expr"]
+	trunc_247 -> variable_248 [label="expr"]
+	expr_241 -> expr_249 [label="next"]
+	expr_249 -> assign_250 [label="expr"]
+	assign_250 -> storage_var_251 [label="left"]
+	assign_250 -> subtract_252 [label="right"]
+	subtract_252 -> storage_load_253 [label="left"]
+	storage_load_253 -> storage_var_254 [label="expr"]
+	subtract_252 -> variable_255 [label="right"]
 	contract -> changeOwner [label="function"]
 	contract -> changeOwner [label="function"]
-	changeOwner -> parameters_242 [label="parameters"]
-	changeOwner -> expr_243 [label="body"]
-	expr_243 -> assign_244 [label="expr"]
-	assign_244 -> storage_var_245 [label="left"]
-	assign_244 -> variable_246 [label="right"]
+	changeOwner -> parameters_257 [label="parameters"]
+	changeOwner -> expr_258 [label="body"]
+	expr_258 -> assign_259 [label="expr"]
+	assign_259 -> storage_var_260 [label="left"]
+	assign_259 -> variable_261 [label="right"]
 	contract -> changeMultiplier [label="function"]
 	contract -> changeMultiplier [label="function"]
-	changeMultiplier -> parameters_248 [label="parameters"]
-	changeMultiplier -> if_249 [label="body"]
-	if_249 -> logical_or_250 [label="cond"]
-	logical_or_250 -> more_251 [label="left"]
-	more_251 -> variable_252 [label="left"]
-	more_251 -> number_literal_253 [label="right"]
-	logical_or_250 -> less_254 [label="right"]
-	less_254 -> variable_255 [label="left"]
-	less_254 -> number_literal_256 [label="right"]
-	if_249 -> expr_257 [label="then"]
-	expr_257 -> builtins_258 [label="expr"]
-	if_249 -> expr_259 [label="next"]
-	expr_259 -> assign_260 [label="expr"]
-	assign_260 -> storage_var_261 [label="left"]
-	assign_260 -> variable_262 [label="right"]
-	contract -> changeFeePercentage [label="function"]
-	changeFeePercentage -> parameters_264 [label="parameters"]
-	changeFeePercentage -> if_265 [label="body"]
-	if_265 -> more_266 [label="cond"]
+	changeMultiplier -> parameters_263 [label="parameters"]
+	changeMultiplier -> if_264 [label="body"]
+	if_264 -> logical_or_265 [label="cond"]
+	logical_or_265 -> more_266 [label="left"]
 	more_266 -> variable_267 [label="left"]
 	more_266 -> variable_267 [label="left"]
 	more_266 -> number_literal_268 [label="right"]
 	more_266 -> number_literal_268 [label="right"]
-	if_265 -> expr_269 [label="then"]
-	expr_269 -> builtins_270 [label="expr"]
-	if_265 -> expr_271 [label="next"]
-	expr_271 -> assign_272 [label="expr"]
-	assign_272 -> storage_var_273 [label="left"]
-	assign_272 -> variable_274 [label="right"]
+	logical_or_265 -> less_269 [label="right"]
+	less_269 -> variable_270 [label="left"]
+	less_269 -> number_literal_271 [label="right"]
+	if_264 -> expr_272 [label="then"]
+	expr_272 -> builtins_273 [label="expr"]
+	if_264 -> expr_274 [label="next"]
+	expr_274 -> assign_275 [label="expr"]
+	assign_275 -> storage_var_276 [label="left"]
+	assign_275 -> variable_277 [label="right"]
+	contract -> changeFeePercentage [label="function"]
+	changeFeePercentage -> parameters_279 [label="parameters"]
+	changeFeePercentage -> if_280 [label="body"]
+	if_280 -> more_281 [label="cond"]
+	more_281 -> variable_282 [label="left"]
+	more_281 -> number_literal_283 [label="right"]
+	if_280 -> expr_284 [label="then"]
+	expr_284 -> builtins_285 [label="expr"]
+	if_280 -> expr_286 [label="next"]
+	expr_286 -> assign_287 [label="expr"]
+	assign_287 -> storage_var_288 [label="left"]
+	assign_287 -> variable_289 [label="right"]
 	contract -> currentMultiplier [label="function"]
 	contract -> currentMultiplier [label="function"]
 	currentMultiplier -> returns [label="returns"]
 	currentMultiplier -> returns [label="returns"]
-	currentMultiplier -> expr_277 [label="body"]
-	expr_277 -> assign_278 [label="expr"]
-	assign_278 -> variable_279 [label="left"]
-	assign_278 -> storage_load_280 [label="right"]
-	storage_load_280 -> storage_var_281 [label="expr"]
-	expr_277 -> expr_282 [label="next"]
-	expr_282 -> assign_283 [label="expr"]
-	assign_283 -> variable_284 [label="left"]
-	assign_283 -> alloc_array [label="right"]
-	alloc_array -> number_literal_286 [label="length"]
+	currentMultiplier -> expr_292 [label="body"]
+	expr_292 -> assign_293 [label="expr"]
+	assign_293 -> variable_294 [label="left"]
+	assign_293 -> storage_load_295 [label="right"]
+	storage_load_295 -> storage_var_296 [label="expr"]
+	expr_292 -> expr_297 [label="next"]
+	expr_297 -> assign_298 [label="expr"]
+	assign_298 -> variable_299 [label="left"]
+	assign_298 -> alloc_array [label="right"]
+	alloc_array -> number_literal_301 [label="length"]
 	contract -> currentFeePercentage [label="function"]
 	contract -> currentFeePercentage [label="function"]
-	currentFeePercentage -> returns_288 [label="returns"]
-	currentFeePercentage -> expr_289 [label="body"]
-	expr_289 -> assign_290 [label="expr"]
-	assign_290 -> variable_291 [label="left"]
-	assign_290 -> storage_load_292 [label="right"]
-	storage_load_292 -> storage_var_293 [label="expr"]
-	expr_289 -> expr_294 [label="next"]
-	expr_294 -> assign_295 [label="expr"]
-	assign_295 -> variable_296 [label="left"]
-	assign_295 -> alloc_array_297 [label="right"]
-	alloc_array_297 -> number_literal_298 [label="length"]
+	currentFeePercentage -> returns_303 [label="returns"]
+	currentFeePercentage -> expr_304 [label="body"]
+	expr_304 -> assign_305 [label="expr"]
+	assign_305 -> variable_306 [label="left"]
+	assign_305 -> storage_load_307 [label="right"]
+	storage_load_307 -> storage_var_308 [label="expr"]
+	expr_304 -> expr_309 [label="next"]
+	expr_309 -> assign_310 [label="expr"]
+	assign_310 -> variable_311 [label="left"]
+	assign_310 -> alloc_array_312 [label="right"]
+	alloc_array_312 -> number_literal_313 [label="length"]
 	contract -> currentPyramidBalanceApproximately [label="function"]
 	contract -> currentPyramidBalanceApproximately [label="function"]
-	currentPyramidBalanceApproximately -> returns_300 [label="returns"]
-	currentPyramidBalanceApproximately -> expr_301 [label="body"]
-	expr_301 -> assign_302 [label="expr"]
-	assign_302 -> variable_303 [label="left"]
-	assign_302 -> divide_304 [label="right"]
-	divide_304 -> storage_load_305 [label="left"]
-	storage_load_305 -> storage_var_306 [label="expr"]
-	divide_304 -> number_literal_307 [label="right"]
-	expr_301 -> expr_308 [label="next"]
-	expr_308 -> assign_309 [label="expr"]
-	assign_309 -> variable_310 [label="left"]
-	assign_309 -> alloc_array_311 [label="right"]
-	alloc_array_311 -> number_literal_312 [label="length"]
-	contract -> nextPayoutWhenPyramidBalanceTotalsApproximately [label="function"]
-	nextPayoutWhenPyramidBalanceTotalsApproximately -> returns_314 [label="returns"]
-	nextPayoutWhenPyramidBalanceTotalsApproximately -> expr_315 [label="body"]
-	expr_315 -> assign_316 [label="expr"]
-	assign_316 -> variable_317 [label="left"]
-	assign_316 -> divide_318 [label="right"]
-	divide_318 -> storage_load_319 [label="left"]
-	divide_318 -> number_literal_320 [label="right"]
-	contract -> feesSeperateFromBalanceApproximately [label="function"]
-	feesSeperateFromBalanceApproximately -> returns_322 [label="returns"]
-	feesSeperateFromBalanceApproximately -> expr_323 [label="body"]
+	currentPyramidBalanceApproximately -> returns_315 [label="returns"]
+	currentPyramidBalanceApproximately -> expr_316 [label="body"]
+	expr_316 -> assign_317 [label="expr"]
+	assign_317 -> variable_318 [label="left"]
+	assign_317 -> divide_319 [label="right"]
+	divide_319 -> storage_load_320 [label="left"]
+	storage_load_320 -> storage_var_321 [label="expr"]
+	divide_319 -> number_literal_322 [label="right"]
+	expr_316 -> expr_323 [label="next"]
 	expr_323 -> assign_324 [label="expr"]
 	expr_323 -> assign_324 [label="expr"]
 	assign_324 -> variable_325 [label="left"]
 	assign_324 -> variable_325 [label="left"]
-	assign_324 -> divide_326 [label="right"]
-	divide_326 -> storage_load_327 [label="left"]
-	storage_load_327 -> storage_var_328 [label="expr"]
-	divide_326 -> number_literal_329 [label="right"]
+	assign_324 -> alloc_array_326 [label="right"]
+	alloc_array_326 -> number_literal_327 [label="length"]
+	contract -> nextPayoutWhenPyramidBalanceTotalsApproximately [label="function"]
+	nextPayoutWhenPyramidBalanceTotalsApproximately -> returns_329 [label="returns"]
+	nextPayoutWhenPyramidBalanceTotalsApproximately -> expr_330 [label="body"]
+	expr_330 -> assign_331 [label="expr"]
+	assign_331 -> variable_332 [label="left"]
+	assign_331 -> divide_333 [label="right"]
+	divide_333 -> storage_load_334 [label="left"]
+	storage_load_334 -> structmember_335 [label="expr"]
+	structmember_335 -> subscript_336 [label="var"]
+	subscript_336 -> storage_var_337 [label="array"]
+	subscript_336 -> storage_load_338 [label="index"]
+	storage_load_338 -> storage_var_339 [label="expr"]
+	divide_333 -> number_literal_340 [label="right"]
+	contract -> feesSeperateFromBalanceApproximately [label="function"]
+	feesSeperateFromBalanceApproximately -> returns_342 [label="returns"]
+	feesSeperateFromBalanceApproximately -> expr_343 [label="body"]
+	expr_343 -> assign_344 [label="expr"]
+	assign_344 -> variable_345 [label="left"]
+	assign_344 -> divide_346 [label="right"]
+	divide_346 -> storage_load_347 [label="left"]
+	storage_load_347 -> storage_var_348 [label="expr"]
+	divide_346 -> number_literal_349 [label="right"]
 	contract -> totalParticipants [label="function"]
 	contract -> totalParticipants [label="function"]
-	totalParticipants -> returns_331 [label="returns"]
-	totalParticipants -> expr_332 [label="body"]
-	expr_332 -> assign_333 [label="expr"]
-	assign_333 -> variable_334 [label="left"]
-	assign_333 -> array_length_335 [label="right"]
-	array_length_335 -> storage_var_336 [label="array"]
+	totalParticipants -> returns_351 [label="returns"]
+	totalParticipants -> expr_352 [label="body"]
+	expr_352 -> assign_353 [label="expr"]
+	assign_353 -> variable_354 [label="left"]
+	assign_353 -> array_length_355 [label="right"]
+	array_length_355 -> storage_var_356 [label="array"]
 	contract -> numberOfParticipantsWaitingForPayout [label="function"]
 	contract -> numberOfParticipantsWaitingForPayout [label="function"]
-	numberOfParticipantsWaitingForPayout -> returns_338 [label="returns"]
-	numberOfParticipantsWaitingForPayout -> expr_339 [label="body"]
-	expr_339 -> assign_340 [label="expr"]
-	assign_340 -> variable_341 [label="left"]
-	assign_340 -> subtract_342 [label="right"]
-	subtract_342 -> array_length_343 [label="left"]
-	array_length_343 -> storage_var_344 [label="array"]
-	subtract_342 -> storage_load_345 [label="right"]
-	storage_load_345 -> storage_var_346 [label="expr"]
+	numberOfParticipantsWaitingForPayout -> returns_358 [label="returns"]
+	numberOfParticipantsWaitingForPayout -> expr_359 [label="body"]
+	expr_359 -> assign_360 [label="expr"]
+	assign_360 -> variable_361 [label="left"]
+	assign_360 -> subtract_362 [label="right"]
+	subtract_362 -> array_length_363 [label="left"]
+	array_length_363 -> storage_var_364 [label="array"]
+	subtract_362 -> storage_load_365 [label="right"]
+	storage_load_365 -> storage_var_366 [label="expr"]
 	contract -> participantDetails [label="function"]
 	contract -> participantDetails [label="function"]
-	participantDetails -> parameters_348 [label="parameters"]
-	participantDetails -> returns_349 [label="returns"]
-	participantDetails -> if_350 [label="body"]
-	if_350 -> less_equal [label="cond"]
-	less_equal -> variable_352 [label="left"]
-	less_equal -> array_length_353 [label="right"]
-	array_length_353 -> storage_var_354 [label="array"]
-	if_350 -> expr_355 [label="then"]
-	expr_355 -> assign_356 [label="expr"]
-	assign_356 -> variable_357 [label="left"]
-	assign_356 -> divide_358 [label="right"]
-	divide_358 -> storage_load_359 [label="left"]
-	divide_358 -> number_literal_360 [label="right"]
+	participantDetails -> parameters_368 [label="parameters"]
+	participantDetails -> returns_369 [label="returns"]
+	participantDetails -> if_370 [label="body"]
+	if_370 -> less_equal [label="cond"]
+	less_equal -> variable_372 [label="left"]
+	less_equal -> array_length_373 [label="right"]
+	array_length_373 -> storage_var_374 [label="array"]
+	if_370 -> expr_375 [label="then"]
+	expr_375 -> assign_376 [label="expr"]
+	assign_376 -> variable_377 [label="left"]
+	assign_376 -> divide_378 [label="right"]
+	divide_378 -> storage_load_379 [label="left"]
+	storage_load_379 -> structmember_380 [label="expr"]
+	structmember_380 -> subscript_381 [label="var"]
+	subscript_381 -> storage_var_382 [label="array"]
+	subscript_381 -> variable_383 [label="index"]
+	divide_378 -> number_literal_384 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_363 [label="Debug"]
-	diagnostics -> diagnostic_364 [label="Warning"]
-	diagnostics -> diagnostic_365 [label="Warning"]
+	diagnostics -> diagnostic_387 [label="Debug"]
+	diagnostics -> diagnostic_388 [label="Warning"]
+	diagnostics -> diagnostic_389 [label="Warning"]
 }
 }

+ 71 - 43
tests/contract_testcases/solana/account_meta.dot

@@ -12,31 +12,45 @@ strict digraph "tests/contract_testcases/solana/account_meta.sol" {
 	return [label="return\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
 	return [label="return\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
 	list [label="list\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
 	list [label="list\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
 	load [label="load bool\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
 	load [label="load bool\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
-	load_15 [label="load address\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
-	load_16 [label="load address\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
+	structmember [label="struct member #1 bool\ntests/contract_testcases/solana/account_meta.sol:4:16-27"]
+	variable [label="variable: meta\nstruct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:4:11-15"]
+	load_17 [label="load address\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
+	load_18 [label="load address\ntests/contract_testcases/solana/account_meta.sol:4:3-41"]
+	structmember_19 [label="struct member #0 address\ntests/contract_testcases/solana/account_meta.sol:4:34-40"]
+	variable_20 [label="variable: meta\nstruct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:4:29-33"]
 	bar [label="function bar\ncontract: spl\ntests/contract_testcases/solana/account_meta.sol:7:2-56\nsignature bar(bytes32)\nvisibility public\nmutability nonpayable"]
 	bar [label="function bar\ncontract: spl\ntests/contract_testcases/solana/account_meta.sol:7:2-56\nsignature bar(bytes32)\nvisibility public\nmutability nonpayable"]
 	parameters [label="parameters\naddress x"]
 	parameters [label="parameters\naddress x"]
-	returns_19 [label="returns\nbool \naddress "]
-	var_decl_20 [label="variable decl struct AccountMeta[2] meta\ntests/contract_testcases/solana/account_meta.sol:8:3-11:4"]
+	returns_23 [label="returns\nbool \naddress "]
+	var_decl_24 [label="variable decl struct AccountMeta[2] meta\ntests/contract_testcases/solana/account_meta.sol:8:3-11:4"]
 	array_literal [label="array literal: struct AccountMeta[2]\ntests/contract_testcases/solana/account_meta.sol:8:25-11:4"]
 	array_literal [label="array literal: struct AccountMeta[2]\ntests/contract_testcases/solana/account_meta.sol:8:25-11:4"]
-	struct_literal_22 [label="struct literal: struct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:9:4-30"]
-	getref_23 [label="getref address\ntests/contract_testcases/solana/account_meta.sol:9:4-30"]
-	variable [label="variable: x\naddress\ntests/contract_testcases/solana/account_meta.sol:9:16-17"]
-	bool_literal_25 [label="bool literal: true\ntests/contract_testcases/solana/account_meta.sol:9:19-23"]
-	bool_literal_26 [label="bool literal: true\ntests/contract_testcases/solana/account_meta.sol:9:25-29"]
-	struct_literal_27 [label="struct literal: struct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:10:4-66"]
-	getref_28 [label="getref address\ntests/contract_testcases/solana/account_meta.sol:10:4-66"]
-	variable_29 [label="variable: x\naddress\ntests/contract_testcases/solana/account_meta.sol:10:25-26"]
-	bool_literal_30 [label="bool literal: false\ntests/contract_testcases/solana/account_meta.sol:10:41-46"]
-	bool_literal_31 [label="bool literal: false\ntests/contract_testcases/solana/account_meta.sol:10:59-64"]
-	return_32 [label="return\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
-	list_33 [label="list\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
-	load_34 [label="load bool\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
-	load_35 [label="load address\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
-	load_36 [label="load address\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
+	struct_literal_26 [label="struct literal: struct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:9:4-30"]
+	getref_27 [label="getref address\ntests/contract_testcases/solana/account_meta.sol:9:4-30"]
+	variable_28 [label="variable: x\naddress\ntests/contract_testcases/solana/account_meta.sol:9:16-17"]
+	bool_literal_29 [label="bool literal: true\ntests/contract_testcases/solana/account_meta.sol:9:19-23"]
+	bool_literal_30 [label="bool literal: true\ntests/contract_testcases/solana/account_meta.sol:9:25-29"]
+	struct_literal_31 [label="struct literal: struct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:10:4-66"]
+	getref_32 [label="getref address\ntests/contract_testcases/solana/account_meta.sol:10:4-66"]
+	variable_33 [label="variable: x\naddress\ntests/contract_testcases/solana/account_meta.sol:10:25-26"]
+	bool_literal_34 [label="bool literal: false\ntests/contract_testcases/solana/account_meta.sol:10:41-46"]
+	bool_literal_35 [label="bool literal: false\ntests/contract_testcases/solana/account_meta.sol:10:59-64"]
+	return_36 [label="return\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
+	list_37 [label="list\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
+	load_38 [label="load bool\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
+	structmember_39 [label="struct member #1 bool\ntests/contract_testcases/solana/account_meta.sol:13:19-30"]
+	load_40 [label="load struct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:13:11-30"]
+	subscript [label="subscript struct AccountMeta[2]\ntests/contract_testcases/solana/account_meta.sol:13:11-18"]
+	variable_42 [label="variable: meta\nstruct AccountMeta[2]\ntests/contract_testcases/solana/account_meta.sol:13:11-15"]
+	number_literal [label="uint32 literal: 1\ntests/contract_testcases/solana/account_meta.sol:13:16-17"]
+	load_44 [label="load address\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
+	load_45 [label="load address\ntests/contract_testcases/solana/account_meta.sol:13:3-47"]
+	structmember_46 [label="struct member #0 address\ntests/contract_testcases/solana/account_meta.sol:13:40-46"]
+	load_47 [label="load struct AccountMeta\ntests/contract_testcases/solana/account_meta.sol:13:32-46"]
+	subscript_48 [label="subscript struct AccountMeta[2]\ntests/contract_testcases/solana/account_meta.sol:13:32-39"]
+	variable_49 [label="variable: meta\nstruct AccountMeta[2]\ntests/contract_testcases/solana/account_meta.sol:13:32-36"]
+	number_literal_50 [label="uint32 literal: 0\ntests/contract_testcases/solana/account_meta.sol:13:37-38"]
 	diagnostic [label="found contract ‘spl’\nlevel Debug\ntests/contract_testcases/solana/account_meta.sol:1:1-14"]
 	diagnostic [label="found contract ‘spl’\nlevel Debug\ntests/contract_testcases/solana/account_meta.sol:1:1-14"]
-	diagnostic_39 [label="function can be declared ‘pure’\nlevel Warning\ntests/contract_testcases/solana/account_meta.sol:2:2-47"]
-	diagnostic_40 [label="function can be declared ‘pure’\nlevel Warning\ntests/contract_testcases/solana/account_meta.sol:7:2-56"]
+	diagnostic_53 [label="function can be declared ‘pure’\nlevel Warning\ntests/contract_testcases/solana/account_meta.sol:2:2-47"]
+	diagnostic_54 [label="function can be declared ‘pure’\nlevel Warning\ntests/contract_testcases/solana/account_meta.sol:7:2-56"]
 	contracts -> contract
 	contracts -> contract
 	contract -> foo [label="function"]
 	contract -> foo [label="function"]
 	foo -> returns [label="returns"]
 	foo -> returns [label="returns"]
@@ -50,29 +64,43 @@ strict digraph "tests/contract_testcases/solana/account_meta.sol" {
 	var_decl -> return [label="next"]
 	var_decl -> return [label="next"]
 	return -> list [label="expr"]
 	return -> list [label="expr"]
 	list -> load [label="entry #0"]
 	list -> load [label="entry #0"]
-	list -> load_15 [label="entry #1"]
-	load_15 -> load_16 [label="expr"]
+	load -> structmember [label="expr"]
+	structmember -> variable [label="var"]
+	list -> load_17 [label="entry #1"]
+	load_17 -> load_18 [label="expr"]
+	load_18 -> structmember_19 [label="expr"]
+	structmember_19 -> variable_20 [label="var"]
 	contract -> bar [label="function"]
 	contract -> bar [label="function"]
 	bar -> parameters [label="parameters"]
 	bar -> parameters [label="parameters"]
-	bar -> returns_19 [label="returns"]
-	bar -> var_decl_20 [label="body"]
-	var_decl_20 -> array_literal [label="init"]
-	array_literal -> struct_literal_22 [label="arg #0"]
-	struct_literal_22 -> getref_23 [label="arg #0"]
-	getref_23 -> variable [label="expr"]
-	struct_literal_22 -> bool_literal_25 [label="arg #1"]
-	struct_literal_22 -> bool_literal_26 [label="arg #2"]
-	array_literal -> struct_literal_27 [label="arg #1"]
-	struct_literal_27 -> getref_28 [label="arg #0"]
-	getref_28 -> variable_29 [label="expr"]
-	struct_literal_27 -> bool_literal_30 [label="arg #1"]
-	struct_literal_27 -> bool_literal_31 [label="arg #2"]
-	var_decl_20 -> return_32 [label="next"]
-	return_32 -> list_33 [label="expr"]
-	list_33 -> load_34 [label="entry #0"]
-	list_33 -> load_35 [label="entry #1"]
-	load_35 -> load_36 [label="expr"]
+	bar -> returns_23 [label="returns"]
+	bar -> var_decl_24 [label="body"]
+	var_decl_24 -> array_literal [label="init"]
+	array_literal -> struct_literal_26 [label="arg #0"]
+	struct_literal_26 -> getref_27 [label="arg #0"]
+	getref_27 -> variable_28 [label="expr"]
+	struct_literal_26 -> bool_literal_29 [label="arg #1"]
+	struct_literal_26 -> bool_literal_30 [label="arg #2"]
+	array_literal -> struct_literal_31 [label="arg #1"]
+	struct_literal_31 -> getref_32 [label="arg #0"]
+	getref_32 -> variable_33 [label="expr"]
+	struct_literal_31 -> bool_literal_34 [label="arg #1"]
+	struct_literal_31 -> bool_literal_35 [label="arg #2"]
+	var_decl_24 -> return_36 [label="next"]
+	return_36 -> list_37 [label="expr"]
+	list_37 -> load_38 [label="entry #0"]
+	load_38 -> structmember_39 [label="expr"]
+	structmember_39 -> load_40 [label="var"]
+	load_40 -> subscript [label="expr"]
+	subscript -> variable_42 [label="array"]
+	subscript -> number_literal [label="index"]
+	list_37 -> load_44 [label="entry #1"]
+	load_44 -> load_45 [label="expr"]
+	load_45 -> structmember_46 [label="expr"]
+	structmember_46 -> load_47 [label="var"]
+	load_47 -> subscript_48 [label="expr"]
+	subscript_48 -> variable_49 [label="array"]
+	subscript_48 -> number_literal_50 [label="index"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_39 [label="Warning"]
-	diagnostics -> diagnostic_40 [label="Warning"]
+	diagnostics -> diagnostic_53 [label="Warning"]
+	diagnostics -> diagnostic_54 [label="Warning"]
 }
 }

+ 211 - 163
tests/contract_testcases/solana/issues678.dot

@@ -39,100 +39,124 @@ strict digraph "tests/contract_testcases/solana/issues678.sol" {
 	variable_40 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:23:24-25"]
 	variable_40 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:23:24-25"]
 	cast [label="cast address\ntests/contract_testcases/solana/issues678.sol:23:29-50"]
 	cast [label="cast address\ntests/contract_testcases/solana/issues678.sol:23:29-50"]
 	storage_load [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:23:29-50"]
 	storage_load [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:23:29-50"]
-	expr_43 [label="expression\ntests/contract_testcases/solana/issues678.sol:24:13-44"]
-	assign_44 [label="assign\nuint256\ntests/contract_testcases/solana/issues678.sol:24:25-26"]
-	subscript_45 [label="subscript uint256[]\ntests/contract_testcases/solana/issues678.sol:24:13-24"]
-	variable_46 [label="variable: retShare\nuint256[]\ntests/contract_testcases/solana/issues678.sol:24:13-21"]
-	variable_47 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:24:22-23"]
-	storage_load_48 [label="storage load uint256\ntests/contract_testcases/solana/issues678.sol:24:27-44"]
+	structmember [label="struct member #0 address payable storage\ntests/contract_testcases/solana/issues678.sol:23:40-50"]
+	subscript_44 [label="subscript struct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:23:29-39"]
+	storage_var_45 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:23:29-36"]
+	variable_46 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:23:37-38"]
+	expr_47 [label="expression\ntests/contract_testcases/solana/issues678.sol:24:13-44"]
+	assign_48 [label="assign\nuint256\ntests/contract_testcases/solana/issues678.sol:24:25-26"]
+	subscript_49 [label="subscript uint256[]\ntests/contract_testcases/solana/issues678.sol:24:13-24"]
+	variable_50 [label="variable: retShare\nuint256[]\ntests/contract_testcases/solana/issues678.sol:24:13-21"]
+	variable_51 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:24:22-23"]
+	storage_load_52 [label="storage load uint256\ntests/contract_testcases/solana/issues678.sol:24:27-44"]
+	structmember_53 [label="struct member #1 uint256 storage\ntests/contract_testcases/solana/issues678.sol:24:38-44"]
+	subscript_54 [label="subscript struct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:24:27-37"]
+	storage_var_55 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:24:27-34"]
+	variable_56 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:24:35-36"]
 	return [label="return\ntests/contract_testcases/solana/issues678.sol:26:9-38"]
 	return [label="return\ntests/contract_testcases/solana/issues678.sol:26:9-38"]
 	list [label="list\ntests/contract_testcases/solana/issues678.sol:26:9-38"]
 	list [label="list\ntests/contract_testcases/solana/issues678.sol:26:9-38"]
-	variable_51 [label="variable: retAddress\naddress[]\ntests/contract_testcases/solana/issues678.sol:26:17-27"]
-	variable_52 [label="variable: retShare\nuint256[]\ntests/contract_testcases/solana/issues678.sol:26:29-37"]
+	variable_59 [label="variable: retAddress\naddress[]\ntests/contract_testcases/solana/issues678.sol:26:17-27"]
+	variable_60 [label="variable: retShare\nuint256[]\ntests/contract_testcases/solana/issues678.sol:26:29-37"]
 	_senderIsAShareOwner [label="function _senderIsAShareOwner\ncontract: Shares\ntests/contract_testcases/solana/issues678.sol:29:5-64\nsignature _senderIsAShareOwner()\nvisibility private\nmutability view"]
 	_senderIsAShareOwner [label="function _senderIsAShareOwner\ncontract: Shares\ntests/contract_testcases/solana/issues678.sol:29:5-64\nsignature _senderIsAShareOwner()\nvisibility private\nmutability view"]
-	returns_54 [label="returns\nbool "]
-	for_55 [label="for\ntests/contract_testcases/solana/issues678.sol:30:9-34:10"]
-	var_decl_56 [label="variable decl uint256 i\ntests/contract_testcases/solana/issues678.sol:30:14-24"]
-	number_literal_57 [label="uint256 literal: 0\ntests/contract_testcases/solana/issues678.sol:30:23-24"]
-	less_58 [label="less\ntests/contract_testcases/solana/issues678.sol:30:28-29"]
-	variable_59 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:30:26-27"]
-	zero_ext_60 [label="zero extend uint256\ntests/contract_testcases/solana/issues678.sol:30:30-44"]
-	array_length_61 [label="array length uint32\nelement struct Shares.Share\ntests/contract_testcases/solana/issues678.sol:30:38-44"]
-	storage_var_62 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:30:30-37"]
-	expr_63 [label="expression\ntests/contract_testcases/solana/issues678.sol:30:46-49"]
-	post_increment_64 [label="post increment\nuint256\ntests/contract_testcases/solana/issues678.sol:30:46-49"]
-	variable_65 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:30:46-47"]
+	returns_62 [label="returns\nbool "]
+	for_63 [label="for\ntests/contract_testcases/solana/issues678.sol:30:9-34:10"]
+	var_decl_64 [label="variable decl uint256 i\ntests/contract_testcases/solana/issues678.sol:30:14-24"]
+	number_literal_65 [label="uint256 literal: 0\ntests/contract_testcases/solana/issues678.sol:30:23-24"]
+	less_66 [label="less\ntests/contract_testcases/solana/issues678.sol:30:28-29"]
+	variable_67 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:30:26-27"]
+	zero_ext_68 [label="zero extend uint256\ntests/contract_testcases/solana/issues678.sol:30:30-44"]
+	array_length_69 [label="array length uint32\nelement struct Shares.Share\ntests/contract_testcases/solana/issues678.sol:30:38-44"]
+	storage_var_70 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:30:30-37"]
+	expr_71 [label="expression\ntests/contract_testcases/solana/issues678.sol:30:46-49"]
+	post_increment_72 [label="post increment\nuint256\ntests/contract_testcases/solana/issues678.sol:30:46-49"]
+	variable_73 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:30:46-47"]
 	if [label="if\ntests/contract_testcases/solana/issues678.sol:31:13-33:14"]
 	if [label="if\ntests/contract_testcases/solana/issues678.sol:31:13-33:14"]
 	equal [label="equal\ntests/contract_testcases/solana/issues678.sol:31:39-41"]
 	equal [label="equal\ntests/contract_testcases/solana/issues678.sol:31:39-41"]
-	storage_load_68 [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:31:17-38"]
-	builtins_69 [label="builtin Sender\ntests/contract_testcases/solana/issues678.sol:31:42-52"]
-	return_70 [label="return\ntests/contract_testcases/solana/issues678.sol:32:17-28"]
+	storage_load_76 [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:31:17-38"]
+	structmember_77 [label="struct member #0 address payable storage\ntests/contract_testcases/solana/issues678.sol:31:28-38"]
+	subscript_78 [label="subscript struct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:31:17-27"]
+	storage_var_79 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:31:17-24"]
+	variable_80 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:31:25-26"]
+	builtins_81 [label="builtin Sender\ntests/contract_testcases/solana/issues678.sol:31:42-52"]
+	return_82 [label="return\ntests/contract_testcases/solana/issues678.sol:32:17-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/solana/issues678.sol:32:24-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/solana/issues678.sol:32:24-28"]
-	return_72 [label="return\ntests/contract_testcases/solana/issues678.sol:35:9-21"]
-	bool_literal_73 [label="bool literal: false\ntests/contract_testcases/solana/issues678.sol:35:16-21"]
+	return_84 [label="return\ntests/contract_testcases/solana/issues678.sol:35:9-21"]
+	bool_literal_85 [label="bool literal: false\ntests/contract_testcases/solana/issues678.sol:35:16-21"]
 	withdraw [label="function withdraw\ncontract: Shares\ntests/contract_testcases/solana/issues678.sol:41:5-33\nsignature withdraw()\nvisibility external\nmutability nonpayable"]
 	withdraw [label="function withdraw\ncontract: Shares\ntests/contract_testcases/solana/issues678.sol:41:5-33\nsignature withdraw()\nvisibility external\nmutability nonpayable"]
-	tags_75 [label="dev: Allow a share owner to retrieve his money. It empty the money contained inside of the smart contract to give it to owners."]
-	expr_76 [label="expression\ntests/contract_testcases/solana/issues678.sol:42:9-91"]
-	builtins_77 [label="builtin Require\ntests/contract_testcases/solana/issues678.sol:42:9-16"]
+	tags_87 [label="dev: Allow a share owner to retrieve his money. It empty the money contained inside of the smart contract to give it to owners."]
+	expr_88 [label="expression\ntests/contract_testcases/solana/issues678.sol:42:9-91"]
+	builtins_89 [label="builtin Require\ntests/contract_testcases/solana/issues678.sol:42:9-16"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/issues678.sol:42:17-39"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/issues678.sol:42:17-39"]
 	internal_function [label="function() internal view returns (bool)\nShares._senderIsAShareOwner\ntests/contract_testcases/solana/issues678.sol:42:17-39"]
 	internal_function [label="function() internal view returns (bool)\nShares._senderIsAShareOwner\ntests/contract_testcases/solana/issues678.sol:42:17-39"]
-	alloc_array_80 [label="alloc array string\ninitializer: 596f752063616e277420776974686472617720696620796f7520617265206e6f742061207368617265206f776e6572\ntests/contract_testcases/solana/issues678.sol:42:41-90"]
-	number_literal_81 [label="uint32 literal: 47\ntests/contract_testcases/solana/issues678.sol:42:41-90"]
-	var_decl_82 [label="variable decl uint256 curr_balance\ntests/contract_testcases/solana/issues678.sol:43:9-50"]
+	alloc_array_92 [label="alloc array string\ninitializer: 596f752063616e277420776974686472617720696620796f7520617265206e6f742061207368617265206f776e6572\ntests/contract_testcases/solana/issues678.sol:42:41-90"]
+	number_literal_93 [label="uint32 literal: 47\ntests/contract_testcases/solana/issues678.sol:42:41-90"]
+	var_decl_94 [label="variable decl uint256 curr_balance\ntests/contract_testcases/solana/issues678.sol:43:9-50"]
 	sign_ext [label="sign extend uint256\ntests/contract_testcases/solana/issues678.sol:43:29-50"]
 	sign_ext [label="sign extend uint256\ntests/contract_testcases/solana/issues678.sol:43:29-50"]
-	builtins_84 [label="builtin Balance\ntests/contract_testcases/solana/issues678.sol:43:29-50"]
-	cast_85 [label="cast address\ntests/contract_testcases/solana/issues678.sol:43:29-42"]
-	builtins_86 [label="builtin GetAddress\ntests/contract_testcases/solana/issues678.sol:43:37-41"]
-	expr_87 [label="expression\ntests/contract_testcases/solana/issues678.sol:44:9-66"]
-	builtins_88 [label="builtin Require\ntests/contract_testcases/solana/issues678.sol:44:9-16"]
+	builtins_96 [label="builtin Balance\ntests/contract_testcases/solana/issues678.sol:43:29-50"]
+	cast_97 [label="cast address\ntests/contract_testcases/solana/issues678.sol:43:29-42"]
+	builtins_98 [label="builtin GetAddress\ntests/contract_testcases/solana/issues678.sol:43:37-41"]
+	expr_99 [label="expression\ntests/contract_testcases/solana/issues678.sol:44:9-66"]
+	builtins_100 [label="builtin Require\ntests/contract_testcases/solana/issues678.sol:44:9-16"]
 	more [label="more\ntests/contract_testcases/solana/issues678.sol:44:30-31"]
 	more [label="more\ntests/contract_testcases/solana/issues678.sol:44:30-31"]
-	variable_90 [label="variable: curr_balance\nuint256\ntests/contract_testcases/solana/issues678.sol:44:17-29"]
-	number_literal_91 [label="uint256 literal: 0\ntests/contract_testcases/solana/issues678.sol:44:32-33"]
-	alloc_array_92 [label="alloc array string\ninitializer: 5468657265206973206e6f7468696e6720746f207769746864726177\ntests/contract_testcases/solana/issues678.sol:44:35-65"]
-	number_literal_93 [label="uint32 literal: 28\ntests/contract_testcases/solana/issues678.sol:44:35-65"]
-	for_94 [label="for\ntests/contract_testcases/solana/issues678.sol:45:9-49:10"]
-	var_decl_95 [label="variable decl uint256 i\ntests/contract_testcases/solana/issues678.sol:45:14-24"]
-	number_literal_96 [label="uint256 literal: 0\ntests/contract_testcases/solana/issues678.sol:45:23-24"]
-	less_97 [label="less\ntests/contract_testcases/solana/issues678.sol:45:28-29"]
-	variable_98 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:45:26-27"]
-	zero_ext_99 [label="zero extend uint256\ntests/contract_testcases/solana/issues678.sol:45:30-44"]
-	array_length_100 [label="array length uint32\nelement struct Shares.Share\ntests/contract_testcases/solana/issues678.sol:45:38-44"]
-	storage_var_101 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:45:30-37"]
-	expr_102 [label="expression\ntests/contract_testcases/solana/issues678.sol:45:46-49"]
-	post_increment_103 [label="post increment\nuint256\ntests/contract_testcases/solana/issues678.sol:45:46-49"]
-	variable_104 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:45:46-47"]
-	var_decl_105 [label="variable decl uint256 to_transfer\ntests/contract_testcases/solana/issues678.sol:46:13-71"]
+	variable_102 [label="variable: curr_balance\nuint256\ntests/contract_testcases/solana/issues678.sol:44:17-29"]
+	number_literal_103 [label="uint256 literal: 0\ntests/contract_testcases/solana/issues678.sol:44:32-33"]
+	alloc_array_104 [label="alloc array string\ninitializer: 5468657265206973206e6f7468696e6720746f207769746864726177\ntests/contract_testcases/solana/issues678.sol:44:35-65"]
+	number_literal_105 [label="uint32 literal: 28\ntests/contract_testcases/solana/issues678.sol:44:35-65"]
+	for_106 [label="for\ntests/contract_testcases/solana/issues678.sol:45:9-49:10"]
+	var_decl_107 [label="variable decl uint256 i\ntests/contract_testcases/solana/issues678.sol:45:14-24"]
+	number_literal_108 [label="uint256 literal: 0\ntests/contract_testcases/solana/issues678.sol:45:23-24"]
+	less_109 [label="less\ntests/contract_testcases/solana/issues678.sol:45:28-29"]
+	variable_110 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:45:26-27"]
+	zero_ext_111 [label="zero extend uint256\ntests/contract_testcases/solana/issues678.sol:45:30-44"]
+	array_length_112 [label="array length uint32\nelement struct Shares.Share\ntests/contract_testcases/solana/issues678.sol:45:38-44"]
+	storage_var_113 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:45:30-37"]
+	expr_114 [label="expression\ntests/contract_testcases/solana/issues678.sol:45:46-49"]
+	post_increment_115 [label="post increment\nuint256\ntests/contract_testcases/solana/issues678.sol:45:46-49"]
+	variable_116 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:45:46-47"]
+	var_decl_117 [label="variable decl uint256 to_transfer\ntests/contract_testcases/solana/issues678.sol:46:13-71"]
 	divide [label="divide\nuint256\ntests/contract_testcases/solana/issues678.sol:46:65-66"]
 	divide [label="divide\nuint256\ntests/contract_testcases/solana/issues678.sol:46:65-66"]
 	multiply [label="multiply\nuint256\ntests/contract_testcases/solana/issues678.sol:46:45-46"]
 	multiply [label="multiply\nuint256\ntests/contract_testcases/solana/issues678.sol:46:45-46"]
-	variable_108 [label="variable: curr_balance\nuint256\ntests/contract_testcases/solana/issues678.sol:46:32-44"]
-	storage_load_109 [label="storage load uint256\ntests/contract_testcases/solana/issues678.sol:46:47-64"]
-	number_literal_110 [label="uint256 literal: 1000\ntests/contract_testcases/solana/issues678.sol:46:67-71"]
-	expr_111 [label="expression\ntests/contract_testcases/solana/issues678.sol:47:13-64"]
-	builtins_112 [label="builtin PayableTransfer\ntests/contract_testcases/solana/issues678.sol:47:13-64"]
-	storage_load_113 [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:47:24-34"]
-	cast_114 [label="cast uint64\ntests/contract_testcases/solana/issues678.sol:47:44-63"]
+	variable_120 [label="variable: curr_balance\nuint256\ntests/contract_testcases/solana/issues678.sol:46:32-44"]
+	storage_load_121 [label="storage load uint256\ntests/contract_testcases/solana/issues678.sol:46:47-64"]
+	structmember_122 [label="struct member #1 uint256 storage\ntests/contract_testcases/solana/issues678.sol:46:58-64"]
+	subscript_123 [label="subscript struct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:46:47-57"]
+	storage_var_124 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:46:47-54"]
+	variable_125 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:46:55-56"]
+	number_literal_126 [label="uint256 literal: 1000\ntests/contract_testcases/solana/issues678.sol:46:67-71"]
+	expr_127 [label="expression\ntests/contract_testcases/solana/issues678.sol:47:13-64"]
+	builtins_128 [label="builtin PayableTransfer\ntests/contract_testcases/solana/issues678.sol:47:13-64"]
+	storage_load_129 [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:47:24-34"]
+	structmember_130 [label="struct member #0 address payable storage\ntests/contract_testcases/solana/issues678.sol:47:24-34"]
+	subscript_131 [label="subscript struct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:47:13-23"]
+	storage_var_132 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:47:13-20"]
+	variable_133 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:47:21-22"]
+	cast_134 [label="cast uint64\ntests/contract_testcases/solana/issues678.sol:47:44-63"]
 	trunc [label="truncate uint64\ntests/contract_testcases/solana/issues678.sol:47:44-63"]
 	trunc [label="truncate uint64\ntests/contract_testcases/solana/issues678.sol:47:44-63"]
-	variable_116 [label="variable: to_transfer\nuint256\ntests/contract_testcases/solana/issues678.sol:47:51-62"]
+	variable_136 [label="variable: to_transfer\nuint256\ntests/contract_testcases/solana/issues678.sol:47:51-62"]
 	emit [label="emit\nevent Shares.Transfer\ntests/contract_testcases/solana/issues678.sol:48:13-76"]
 	emit [label="emit\nevent Shares.Transfer\ntests/contract_testcases/solana/issues678.sol:48:13-76"]
-	cast_118 [label="cast address\ntests/contract_testcases/solana/issues678.sol:48:38-48"]
-	storage_load_119 [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:48:38-48"]
-	variable_120 [label="variable: to_transfer\nuint256\ntests/contract_testcases/solana/issues678.sol:48:50-61"]
-	variable_121 [label="variable: curr_balance\nuint256\ntests/contract_testcases/solana/issues678.sol:48:63-75"]
-	if_122 [label="if\ntests/contract_testcases/solana/issues678.sol:50:9-54:10"]
-	more_123 [label="more\ntests/contract_testcases/solana/issues678.sol:50:35-36"]
-	cast_124 [label="cast uint64\ntests/contract_testcases/solana/issues678.sol:50:13-34"]
-	builtins_125 [label="builtin Balance\ntests/contract_testcases/solana/issues678.sol:50:13-34"]
-	cast_126 [label="cast address\ntests/contract_testcases/solana/issues678.sol:50:13-26"]
-	builtins_127 [label="builtin GetAddress\ntests/contract_testcases/solana/issues678.sol:50:21-25"]
-	number_literal_128 [label="uint64 literal: 0\ntests/contract_testcases/solana/issues678.sol:50:37-38"]
-	expr_129 [label="expression\ntests/contract_testcases/solana/issues678.sol:53:13-64"]
-	builtins_130 [label="builtin PayableTransfer\ntests/contract_testcases/solana/issues678.sol:53:13-64"]
-	builtins_131 [label="builtin Sender\ntests/contract_testcases/solana/issues678.sol:53:21-31"]
-	builtins_132 [label="builtin Balance\ntests/contract_testcases/solana/issues678.sol:53:42-63"]
-	cast_133 [label="cast address\ntests/contract_testcases/solana/issues678.sol:53:42-55"]
-	builtins_134 [label="builtin GetAddress\ntests/contract_testcases/solana/issues678.sol:53:50-54"]
+	cast_138 [label="cast address\ntests/contract_testcases/solana/issues678.sol:48:38-48"]
+	storage_load_139 [label="storage load address payable\ntests/contract_testcases/solana/issues678.sol:48:38-48"]
+	structmember_140 [label="struct member #0 address payable storage\ntests/contract_testcases/solana/issues678.sol:48:38-48"]
+	subscript_141 [label="subscript struct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:48:27-37"]
+	storage_var_142 [label="storage variable\nShares._shares\nstruct Shares.Share[] storage\ntests/contract_testcases/solana/issues678.sol:48:27-34"]
+	variable_143 [label="variable: i\nuint256\ntests/contract_testcases/solana/issues678.sol:48:35-36"]
+	variable_144 [label="variable: to_transfer\nuint256\ntests/contract_testcases/solana/issues678.sol:48:50-61"]
+	variable_145 [label="variable: curr_balance\nuint256\ntests/contract_testcases/solana/issues678.sol:48:63-75"]
+	if_146 [label="if\ntests/contract_testcases/solana/issues678.sol:50:9-54:10"]
+	more_147 [label="more\ntests/contract_testcases/solana/issues678.sol:50:35-36"]
+	cast_148 [label="cast uint64\ntests/contract_testcases/solana/issues678.sol:50:13-34"]
+	builtins_149 [label="builtin Balance\ntests/contract_testcases/solana/issues678.sol:50:13-34"]
+	cast_150 [label="cast address\ntests/contract_testcases/solana/issues678.sol:50:13-26"]
+	builtins_151 [label="builtin GetAddress\ntests/contract_testcases/solana/issues678.sol:50:21-25"]
+	number_literal_152 [label="uint64 literal: 0\ntests/contract_testcases/solana/issues678.sol:50:37-38"]
+	expr_153 [label="expression\ntests/contract_testcases/solana/issues678.sol:53:13-64"]
+	builtins_154 [label="builtin PayableTransfer\ntests/contract_testcases/solana/issues678.sol:53:13-64"]
+	builtins_155 [label="builtin Sender\ntests/contract_testcases/solana/issues678.sol:53:21-31"]
+	builtins_156 [label="builtin Balance\ntests/contract_testcases/solana/issues678.sol:53:42-63"]
+	cast_157 [label="cast address\ntests/contract_testcases/solana/issues678.sol:53:42-55"]
+	builtins_158 [label="builtin GetAddress\ntests/contract_testcases/solana/issues678.sol:53:50-54"]
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/solana/issues678.sol:1:32-2:23"]
 	diagnostic [label="pragma ‘solidity’ is ignored\nlevel Debug\ntests/contract_testcases/solana/issues678.sol:1:32-2:23"]
-	diagnostic_137 [label="found contract ‘Shares’\nlevel Debug\ntests/contract_testcases/solana/issues678.sol:3:1-4:17"]
+	diagnostic_161 [label="found contract ‘Shares’\nlevel Debug\ntests/contract_testcases/solana/issues678.sol:3:1-4:17"]
 	structs -> Share
 	structs -> Share
 	events -> Transfer
 	events -> Transfer
 	contracts -> contract
 	contracts -> contract
@@ -173,98 +197,122 @@ strict digraph "tests/contract_testcases/solana/issues678.sol" {
 	subscript -> variable_40 [label="index"]
 	subscript -> variable_40 [label="index"]
 	assign -> cast [label="right"]
 	assign -> cast [label="right"]
 	cast -> storage_load [label="expr"]
 	cast -> storage_load [label="expr"]
-	expr_36 -> expr_43 [label="next"]
-	expr_43 -> assign_44 [label="expr"]
-	assign_44 -> subscript_45 [label="left"]
-	subscript_45 -> variable_46 [label="array"]
-	subscript_45 -> variable_47 [label="index"]
-	assign_44 -> storage_load_48 [label="right"]
+	storage_load -> structmember [label="expr"]
+	structmember -> subscript_44 [label="var"]
+	subscript_44 -> storage_var_45 [label="array"]
+	subscript_44 -> variable_46 [label="index"]
+	expr_36 -> expr_47 [label="next"]
+	expr_47 -> assign_48 [label="expr"]
+	assign_48 -> subscript_49 [label="left"]
+	subscript_49 -> variable_50 [label="array"]
+	subscript_49 -> variable_51 [label="index"]
+	assign_48 -> storage_load_52 [label="right"]
+	storage_load_52 -> structmember_53 [label="expr"]
+	structmember_53 -> subscript_54 [label="var"]
+	subscript_54 -> storage_var_55 [label="array"]
+	subscript_54 -> variable_56 [label="index"]
 	for -> return [label="next"]
 	for -> return [label="next"]
 	return -> list [label="expr"]
 	return -> list [label="expr"]
-	list -> variable_51 [label="entry #0"]
-	list -> variable_52 [label="entry #1"]
+	list -> variable_59 [label="entry #0"]
+	list -> variable_60 [label="entry #1"]
 	contract -> _senderIsAShareOwner [label="function"]
 	contract -> _senderIsAShareOwner [label="function"]
-	_senderIsAShareOwner -> returns_54 [label="returns"]
-	_senderIsAShareOwner -> for_55 [label="body"]
-	for_55 -> var_decl_56 [label="init"]
-	var_decl_56 -> number_literal_57 [label="init"]
-	for_55 -> less_58 [label="cond"]
-	less_58 -> variable_59 [label="left"]
-	less_58 -> zero_ext_60 [label="right"]
-	zero_ext_60 -> array_length_61 [label="expr"]
-	array_length_61 -> storage_var_62 [label="array"]
-	for_55 -> expr_63 [label="next"]
-	expr_63 -> post_increment_64 [label="expr"]
-	post_increment_64 -> variable_65 [label="expr"]
-	for_55 -> if [label="body"]
+	_senderIsAShareOwner -> returns_62 [label="returns"]
+	_senderIsAShareOwner -> for_63 [label="body"]
+	for_63 -> var_decl_64 [label="init"]
+	var_decl_64 -> number_literal_65 [label="init"]
+	for_63 -> less_66 [label="cond"]
+	less_66 -> variable_67 [label="left"]
+	less_66 -> zero_ext_68 [label="right"]
+	zero_ext_68 -> array_length_69 [label="expr"]
+	array_length_69 -> storage_var_70 [label="array"]
+	for_63 -> expr_71 [label="next"]
+	expr_71 -> post_increment_72 [label="expr"]
+	post_increment_72 -> variable_73 [label="expr"]
+	for_63 -> if [label="body"]
 	if -> equal [label="cond"]
 	if -> equal [label="cond"]
-	equal -> storage_load_68 [label="left"]
-	equal -> builtins_69 [label="right"]
-	if -> return_70 [label="then"]
-	return_70 -> bool_literal [label="expr"]
-	for_55 -> return_72 [label="next"]
-	return_72 -> bool_literal_73 [label="expr"]
+	equal -> storage_load_76 [label="left"]
+	storage_load_76 -> structmember_77 [label="expr"]
+	structmember_77 -> subscript_78 [label="var"]
+	subscript_78 -> storage_var_79 [label="array"]
+	subscript_78 -> variable_80 [label="index"]
+	equal -> builtins_81 [label="right"]
+	if -> return_82 [label="then"]
+	return_82 -> bool_literal [label="expr"]
+	for_63 -> return_84 [label="next"]
+	return_84 -> bool_literal_85 [label="expr"]
 	contract -> withdraw [label="function"]
 	contract -> withdraw [label="function"]
-	withdraw -> tags_75 [label="tags"]
-	withdraw -> expr_76 [label="body"]
-	expr_76 -> builtins_77 [label="expr"]
-	builtins_77 -> call_internal_function [label="arg #0"]
+	withdraw -> tags_87 [label="tags"]
+	withdraw -> expr_88 [label="body"]
+	expr_88 -> builtins_89 [label="expr"]
+	builtins_89 -> call_internal_function [label="arg #0"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
-	builtins_77 -> alloc_array_80 [label="arg #1"]
-	alloc_array_80 -> number_literal_81 [label="length"]
-	expr_76 -> var_decl_82 [label="next"]
-	var_decl_82 -> sign_ext [label="init"]
-	sign_ext -> builtins_84 [label="expr"]
-	builtins_84 -> cast_85 [label="arg #0"]
-	cast_85 -> builtins_86 [label="expr"]
-	var_decl_82 -> expr_87 [label="next"]
-	expr_87 -> builtins_88 [label="expr"]
-	builtins_88 -> more [label="arg #0"]
-	more -> variable_90 [label="left"]
-	more -> number_literal_91 [label="right"]
-	builtins_88 -> alloc_array_92 [label="arg #1"]
+	builtins_89 -> alloc_array_92 [label="arg #1"]
 	alloc_array_92 -> number_literal_93 [label="length"]
 	alloc_array_92 -> number_literal_93 [label="length"]
-	expr_87 -> for_94 [label="next"]
-	for_94 -> var_decl_95 [label="init"]
-	var_decl_95 -> number_literal_96 [label="init"]
-	for_94 -> less_97 [label="cond"]
-	less_97 -> variable_98 [label="left"]
-	less_97 -> zero_ext_99 [label="right"]
-	zero_ext_99 -> array_length_100 [label="expr"]
-	array_length_100 -> storage_var_101 [label="array"]
-	for_94 -> expr_102 [label="next"]
-	expr_102 -> post_increment_103 [label="expr"]
-	post_increment_103 -> variable_104 [label="expr"]
-	for_94 -> var_decl_105 [label="body"]
-	var_decl_105 -> divide [label="init"]
+	expr_88 -> var_decl_94 [label="next"]
+	var_decl_94 -> sign_ext [label="init"]
+	sign_ext -> builtins_96 [label="expr"]
+	builtins_96 -> cast_97 [label="arg #0"]
+	cast_97 -> builtins_98 [label="expr"]
+	var_decl_94 -> expr_99 [label="next"]
+	expr_99 -> builtins_100 [label="expr"]
+	builtins_100 -> more [label="arg #0"]
+	more -> variable_102 [label="left"]
+	more -> number_literal_103 [label="right"]
+	builtins_100 -> alloc_array_104 [label="arg #1"]
+	alloc_array_104 -> number_literal_105 [label="length"]
+	expr_99 -> for_106 [label="next"]
+	for_106 -> var_decl_107 [label="init"]
+	var_decl_107 -> number_literal_108 [label="init"]
+	for_106 -> less_109 [label="cond"]
+	less_109 -> variable_110 [label="left"]
+	less_109 -> zero_ext_111 [label="right"]
+	zero_ext_111 -> array_length_112 [label="expr"]
+	array_length_112 -> storage_var_113 [label="array"]
+	for_106 -> expr_114 [label="next"]
+	expr_114 -> post_increment_115 [label="expr"]
+	post_increment_115 -> variable_116 [label="expr"]
+	for_106 -> var_decl_117 [label="body"]
+	var_decl_117 -> divide [label="init"]
 	divide -> multiply [label="left"]
 	divide -> multiply [label="left"]
-	multiply -> variable_108 [label="left"]
-	multiply -> storage_load_109 [label="right"]
-	divide -> number_literal_110 [label="right"]
-	var_decl_105 -> expr_111 [label="next"]
-	expr_111 -> builtins_112 [label="expr"]
-	builtins_112 -> storage_load_113 [label="arg #0"]
-	builtins_112 -> cast_114 [label="arg #1"]
-	cast_114 -> trunc [label="expr"]
-	trunc -> variable_116 [label="expr"]
-	expr_111 -> emit [label="next"]
-	emit -> cast_118 [label="arg #0"]
-	cast_118 -> storage_load_119 [label="expr"]
-	emit -> variable_120 [label="arg #1"]
-	emit -> variable_121 [label="arg #2"]
-	for_94 -> if_122 [label="next"]
-	if_122 -> more_123 [label="cond"]
-	more_123 -> cast_124 [label="left"]
-	cast_124 -> builtins_125 [label="expr"]
-	builtins_125 -> cast_126 [label="arg #0"]
-	cast_126 -> builtins_127 [label="expr"]
-	more_123 -> number_literal_128 [label="right"]
-	if_122 -> expr_129 [label="then"]
-	expr_129 -> builtins_130 [label="expr"]
-	builtins_130 -> builtins_131 [label="arg #0"]
-	builtins_130 -> builtins_132 [label="arg #1"]
-	builtins_132 -> cast_133 [label="arg #0"]
-	cast_133 -> builtins_134 [label="expr"]
+	multiply -> variable_120 [label="left"]
+	multiply -> storage_load_121 [label="right"]
+	storage_load_121 -> structmember_122 [label="expr"]
+	structmember_122 -> subscript_123 [label="var"]
+	subscript_123 -> storage_var_124 [label="array"]
+	subscript_123 -> variable_125 [label="index"]
+	divide -> number_literal_126 [label="right"]
+	var_decl_117 -> expr_127 [label="next"]
+	expr_127 -> builtins_128 [label="expr"]
+	builtins_128 -> storage_load_129 [label="arg #0"]
+	storage_load_129 -> structmember_130 [label="expr"]
+	structmember_130 -> subscript_131 [label="var"]
+	subscript_131 -> storage_var_132 [label="array"]
+	subscript_131 -> variable_133 [label="index"]
+	builtins_128 -> cast_134 [label="arg #1"]
+	cast_134 -> trunc [label="expr"]
+	trunc -> variable_136 [label="expr"]
+	expr_127 -> emit [label="next"]
+	emit -> cast_138 [label="arg #0"]
+	cast_138 -> storage_load_139 [label="expr"]
+	storage_load_139 -> structmember_140 [label="expr"]
+	structmember_140 -> subscript_141 [label="var"]
+	subscript_141 -> storage_var_142 [label="array"]
+	subscript_141 -> variable_143 [label="index"]
+	emit -> variable_144 [label="arg #1"]
+	emit -> variable_145 [label="arg #2"]
+	for_106 -> if_146 [label="next"]
+	if_146 -> more_147 [label="cond"]
+	more_147 -> cast_148 [label="left"]
+	cast_148 -> builtins_149 [label="expr"]
+	builtins_149 -> cast_150 [label="arg #0"]
+	cast_150 -> builtins_151 [label="expr"]
+	more_147 -> number_literal_152 [label="right"]
+	if_146 -> expr_153 [label="then"]
+	expr_153 -> builtins_154 [label="expr"]
+	builtins_154 -> builtins_155 [label="arg #0"]
+	builtins_154 -> builtins_156 [label="arg #1"]
+	builtins_156 -> cast_157 [label="arg #0"]
+	cast_157 -> builtins_158 [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_137 [label="Debug"]
+	diagnostics -> diagnostic_161 [label="Debug"]
 }
 }

+ 6 - 2
tests/contract_testcases/substrate/functions/global_functions_08.dot

@@ -4,17 +4,21 @@ strict digraph "tests/contract_testcases/substrate/functions/global_functions_08
 	parameters [label="parameters\nstruct S storage x"]
 	parameters [label="parameters\nstruct S storage x"]
 	expr [label="expression\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:40-50"]
 	expr [label="expression\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:40-50"]
 	assign [label="assign\nint32 storage\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:45-46"]
 	assign [label="assign\nint32 storage\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:45-46"]
+	structmember [label="struct member #0 int32 storage\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:42-44"]
+	variable [label="variable: x\nstruct S storage\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:40-41"]
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:47-50"]
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:47-50"]
 	diagnostic [label="declaration of ‘x’ shadows function\nlevel Warning\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:30-31"]
 	diagnostic [label="declaration of ‘x’ shadows function\nlevel Warning\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:30-31"]
 	note [label="previous declaration of function\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:18-19"]
 	note [label="previous declaration of function\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:18-19"]
-	diagnostic_12 [label="function declared ‘view’ but this expression writes to state\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:42-44"]
+	diagnostic_14 [label="function declared ‘view’ but this expression writes to state\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_08.sol:7:42-44"]
 	structs -> S
 	structs -> S
 	free_functions -> x [label="function"]
 	free_functions -> x [label="function"]
 	x -> parameters [label="parameters"]
 	x -> parameters [label="parameters"]
 	x -> expr [label="body"]
 	x -> expr [label="body"]
 	expr -> assign [label="expr"]
 	expr -> assign [label="expr"]
+	assign -> structmember [label="left"]
+	structmember -> variable [label="var"]
 	assign -> number_literal [label="right"]
 	assign -> number_literal [label="right"]
 	diagnostics -> diagnostic [label="Warning"]
 	diagnostics -> diagnostic [label="Warning"]
 	diagnostic -> note [label="note"]
 	diagnostic -> note [label="note"]
-	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_14 [label="Error"]
 }
 }