瀏覽代碼

Do not create node for free functions unless some exist

Simple logic error.

Signed-off-by: Sean Young <sean@mess.org>
Sean Young 3 年之前
父節點
當前提交
263d358955
共有 100 個文件被更改,包括 772 次插入522 次删除
  1. 1 1
      src/sema/dotgraphviz.rs
  2. 2 2
      tests/contract_testcases/ewasm/public_internal_function.dot
  3. 2 2
      tests/contract_testcases/solana/comment.dot
  4. 5 5
      tests/contract_testcases/solana/create_contract/base_contract.dot
  5. 10 10
      tests/contract_testcases/solana/create_contract/base_contract_01.dot
  6. 10 10
      tests/contract_testcases/solana/create_contract/base_contract_02.dot
  7. 16 6
      tests/contract_testcases/solana/expressions/selector_in_free_function.dot
  8. 4 4
      tests/contract_testcases/solana/immutable_function.dot
  9. 36 14
      tests/contract_testcases/solana/import_contracts_via_object.dot
  10. 54 36
      tests/contract_testcases/solana/keep_on_resolving.dot
  11. 122 100
      tests/contract_testcases/solana/override.dot
  12. 3 3
      tests/contract_testcases/solana/structs/parse_structs_06.dot
  13. 29 15
      tests/contract_testcases/solana/type_called_error.dot
  14. 12 8
      tests/contract_testcases/solana/type_decl_broken_more.dot
  15. 69 25
      tests/contract_testcases/solana/using_import.dot
  16. 41 21
      tests/contract_testcases/solana/using_list.dot
  17. 21 7
      tests/contract_testcases/solana/using_literal.dot
  18. 6 6
      tests/contract_testcases/substrate/account_info.dot
  19. 2 2
      tests/contract_testcases/substrate/arrays/array_dimensions.dot
  20. 2 2
      tests/contract_testcases/substrate/arrays/array_dimensions_01.dot
  21. 2 2
      tests/contract_testcases/substrate/arrays/array_dimensions_02.dot
  22. 2 2
      tests/contract_testcases/substrate/arrays/array_dimensions_03.dot
  23. 2 2
      tests/contract_testcases/substrate/arrays/array_dimensions_04.dot
  24. 2 2
      tests/contract_testcases/substrate/arrays/data_locations.dot
  25. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_01.dot
  26. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_02.dot
  27. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_03.dot
  28. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_04.dot
  29. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_05.dot
  30. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_06.dot
  31. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_07.dot
  32. 2 2
      tests/contract_testcases/substrate/arrays/data_locations_08.dot
  33. 2 2
      tests/contract_testcases/substrate/calls/payable_functions.dot
  34. 2 2
      tests/contract_testcases/substrate/calls/payable_functions_01.dot
  35. 2 2
      tests/contract_testcases/substrate/calls/payable_functions_02.dot
  36. 2 2
      tests/contract_testcases/substrate/calls/payable_functions_03.dot
  37. 2 2
      tests/contract_testcases/substrate/contracts/contract_name.dot
  38. 3 3
      tests/contract_testcases/substrate/contracts/contract_name_01.dot
  39. 4 4
      tests/contract_testcases/substrate/contracts/contract_name_02.dot
  40. 3 3
      tests/contract_testcases/substrate/contracts/contract_name_03.dot
  41. 2 2
      tests/contract_testcases/substrate/events/event_decl.dot
  42. 5 5
      tests/contract_testcases/substrate/events/event_decl_02.dot
  43. 3 3
      tests/contract_testcases/substrate/events/event_decl_03.dot
  44. 2 2
      tests/contract_testcases/substrate/events/event_decl_04.dot
  45. 2 2
      tests/contract_testcases/substrate/events/event_decl_05.dot
  46. 3 3
      tests/contract_testcases/substrate/events/event_decl_06.dot
  47. 2 2
      tests/contract_testcases/substrate/events/event_decl_07.dot
  48. 2 2
      tests/contract_testcases/substrate/events/event_decl_08.dot
  49. 2 2
      tests/contract_testcases/substrate/events/event_decl_09.dot
  50. 2 2
      tests/contract_testcases/substrate/events/event_decl_10.dot
  51. 2 2
      tests/contract_testcases/substrate/function_types/decls_06.dot
  52. 2 2
      tests/contract_testcases/substrate/function_types/decls_07.dot
  53. 2 2
      tests/contract_testcases/substrate/function_types/decls_08.dot
  54. 4 4
      tests/contract_testcases/substrate/functions/payable.dot
  55. 4 4
      tests/contract_testcases/substrate/functions/payable_01.dot
  56. 4 4
      tests/contract_testcases/substrate/functions/payable_02.dot
  57. 4 4
      tests/contract_testcases/substrate/functions/payable_03.dot
  58. 2 2
      tests/contract_testcases/substrate/functions/return_not_returns.dot
  59. 2 2
      tests/contract_testcases/substrate/functions/stray_semicolon_01.dot
  60. 6 6
      tests/contract_testcases/substrate/inheritance/inherit_types_03.dot
  61. 4 4
      tests/contract_testcases/substrate/inheritance/test_interface.dot
  62. 2 2
      tests/contract_testcases/substrate/inheritance/test_interface_01.dot
  63. 3 3
      tests/contract_testcases/substrate/inheritance/test_interface_02.dot
  64. 2 2
      tests/contract_testcases/substrate/inheritance/test_interface_03.dot
  65. 2 2
      tests/contract_testcases/substrate/inheritance/test_interface_07.dot
  66. 2 2
      tests/contract_testcases/substrate/inheritance/test_interface_08.dot
  67. 3 3
      tests/contract_testcases/substrate/inheritance/test_override.dot
  68. 2 2
      tests/contract_testcases/substrate/inheritance/test_super.dot
  69. 2 2
      tests/contract_testcases/substrate/inheritance/test_virtual.dot
  70. 2 2
      tests/contract_testcases/substrate/libraries/restrictions.dot
  71. 2 2
      tests/contract_testcases/substrate/libraries/restrictions_01.dot
  72. 2 2
      tests/contract_testcases/substrate/libraries/restrictions_02.dot
  73. 2 2
      tests/contract_testcases/substrate/libraries/restrictions_03.dot
  74. 2 2
      tests/contract_testcases/substrate/libraries/restrictions_05.dot
  75. 4 4
      tests/contract_testcases/substrate/libraries/restrictions_06.dot
  76. 2 2
      tests/contract_testcases/substrate/libraries/restrictions_08.dot
  77. 2 2
      tests/contract_testcases/substrate/libraries/using.dot
  78. 76 34
      tests/contract_testcases/substrate/libraries/using_07.dot
  79. 35 15
      tests/contract_testcases/substrate/libraries/using_08.dot
  80. 33 13
      tests/contract_testcases/substrate/libraries/using_09.dot
  81. 2 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_01.dot
  82. 2 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_02.dot
  83. 2 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_03.dot
  84. 2 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_04.dot
  85. 2 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_05.dot
  86. 2 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_06.dot
  87. 2 2
      tests/contract_testcases/substrate/mappings/bad_mapping_declares_07.dot
  88. 2 2
      tests/contract_testcases/substrate/modifier/declare_02.dot
  89. 2 2
      tests/contract_testcases/substrate/modifier/declare_03.dot
  90. 2 2
      tests/contract_testcases/substrate/primitives/address.dot
  91. 2 2
      tests/contract_testcases/substrate/primitives/address_01.dot
  92. 2 2
      tests/contract_testcases/substrate/primitives/address_02.dot
  93. 2 2
      tests/contract_testcases/substrate/primitives/address_03.dot
  94. 2 2
      tests/contract_testcases/substrate/primitives/address_04.dot
  95. 2 2
      tests/contract_testcases/substrate/primitives/address_05.dot
  96. 2 2
      tests/contract_testcases/substrate/primitives/address_09.dot
  97. 2 2
      tests/contract_testcases/substrate/primitives/address_payable_type_06.dot
  98. 2 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow.dot
  99. 2 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_01.dot
  100. 2 2
      tests/contract_testcases/substrate/primitives/test_literal_overflow_02.dot

+ 1 - 1
src/sema/dotgraphviz.rs

@@ -2166,7 +2166,7 @@ impl Namespace {
         }
         }
 
 
         // free functions
         // free functions
-        if !self.functions.iter().any(|func| func.contract_no.is_some()) {
+        if self.functions.iter().any(|func| func.contract_no.is_none()) {
             let functions = dot.add_node(Node::new("free_functions", Vec::new()), None, None);
             let functions = dot.add_node(Node::new("free_functions", Vec::new()), None, None);
 
 
             for func in &self.functions {
             for func in &self.functions {

+ 2 - 2
tests/contract_testcases/ewasm/public_internal_function.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/ewasm/public_internal_function.sol" {
 	A [label="name:A\ncontract: foo\ntests/contract_testcases/ewasm/public_internal_function.sol:2:12-13\nfield name:a ty:function() internal"]
 	A [label="name:A\ncontract: foo\ntests/contract_testcases/ewasm/public_internal_function.sol:2:12-13\nfield name:a ty:function() internal"]
 	contract [label="contract foo\ntests/contract_testcases/ewasm/public_internal_function.sol:1:1-7:2"]
 	contract [label="contract foo\ntests/contract_testcases/ewasm/public_internal_function.sol:1:1-7:2"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/ewasm/public_internal_function.sol:1:1-7:2"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/ewasm/public_internal_function.sol:1:1-7:2"]
-	diagnostic_7 [label="variable of type internal function cannot be 'public'\nlevel Error\ntests/contract_testcases/ewasm/public_internal_function.sol:6:5-8"]
+	diagnostic_6 [label="variable of type internal function cannot be 'public'\nlevel Error\ntests/contract_testcases/ewasm/public_internal_function.sol:6:5-8"]
 	structs -> A
 	structs -> A
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/solana/comment.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/solana/comment.sol" {
 strict digraph "tests/contract_testcases/solana/comment.sol" {
 	contract [label="contract Hello\ntests/contract_testcases/solana/comment.sol:1:24-4:2"]
 	contract [label="contract Hello\ntests/contract_testcases/solana/comment.sol:1:24-4:2"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/solana/comment.sol:1:1-23"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/solana/comment.sol:1:1-23"]
-	diagnostic_6 [label="found contract 'Hello'\nlevel Debug\ntests/contract_testcases/solana/comment.sol:1:24-4:2"]
+	diagnostic_5 [label="found contract 'Hello'\nlevel Debug\ntests/contract_testcases/solana/comment.sol:1:24-4:2"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Debug"]
+	diagnostics -> diagnostic_5 [label="Debug"]
 }
 }

+ 5 - 5
tests/contract_testcases/solana/create_contract/base_contract.dot

@@ -2,15 +2,15 @@ strict digraph "tests/contract_testcases/solana/create_contract/base_contract.so
 	MathError [label="name: MathError\ncontract: Math\ntests/contract_testcases/solana/create_contract/base_contract.sol:3:13-5:14\nvalue: NO_ERROR"]
 	MathError [label="name: MathError\ncontract: Math\ntests/contract_testcases/solana/create_contract/base_contract.sol:3:13-5:14\nvalue: NO_ERROR"]
 	WithMath [label="name:WithMath\ncontract: IsMath\ntests/contract_testcases/solana/create_contract/base_contract.sol:9:20-28\nfield name:math ty:enum Math.MathError"]
 	WithMath [label="name:WithMath\ncontract: IsMath\ntests/contract_testcases/solana/create_contract/base_contract.sol:9:20-28\nfield name:math ty:enum Math.MathError"]
 	contract [label="contract Math\ntests/contract_testcases/solana/create_contract/base_contract.sol:2:9-6:10"]
 	contract [label="contract Math\ntests/contract_testcases/solana/create_contract/base_contract.sol:2:9-6:10"]
-	contract_7 [label="contract IsMath\ntests/contract_testcases/solana/create_contract/base_contract.sol:8:9-12:10"]
+	contract_6 [label="contract IsMath\ntests/contract_testcases/solana/create_contract/base_contract.sol:8:9-12:10"]
 	base [label="base Math\ntests/contract_testcases/solana/create_contract/base_contract.sol:8:28-32"]
 	base [label="base Math\ntests/contract_testcases/solana/create_contract/base_contract.sol:8:28-32"]
 	diagnostic [label="found contract 'Math'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract.sol:2:9-6:10"]
 	diagnostic [label="found contract 'Math'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract.sol:2:9-6:10"]
-	diagnostic_11 [label="found contract 'IsMath'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract.sol:8:9-12:10"]
+	diagnostic_10 [label="found contract 'IsMath'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract.sol:8:9-12:10"]
 	enums -> MathError
 	enums -> MathError
 	structs -> WithMath
 	structs -> WithMath
 	contracts -> contract
 	contracts -> contract
-	contracts -> contract_7
-	contract_7 -> base [label="base"]
+	contracts -> contract_6
+	contract_6 -> base [label="base"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_11 [label="Debug"]
+	diagnostics -> diagnostic_10 [label="Debug"]
 }
 }

+ 10 - 10
tests/contract_testcases/solana/create_contract/base_contract_01.dot

@@ -3,22 +3,22 @@ strict digraph "tests/contract_testcases/solana/create_contract/base_contract_01
 	MathError [label="name: MathError\ncontract: Math\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:8:13-10:14\nvalue: NO_ERROR"]
 	MathError [label="name: MathError\ncontract: Math\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:8:13-10:14\nvalue: NO_ERROR"]
 	WithMath [label="name:WithMath\ncontract: IsMath\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:14:20-28\nfield name:math ty:enum Math.MathError\nfield name:logic ty:enum Logic.LogicError"]
 	WithMath [label="name:WithMath\ncontract: IsMath\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:14:20-28\nfield name:math ty:enum Math.MathError\nfield name:logic ty:enum Logic.LogicError"]
 	contract [label="contract Logic\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:2:9-6:10"]
 	contract [label="contract Logic\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:2:9-6:10"]
-	contract_8 [label="contract Math\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:7:9-11:10"]
+	contract_7 [label="contract Math\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:7:9-11:10"]
 	base [label="base Logic\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:7:26-31"]
 	base [label="base Logic\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:7:26-31"]
-	contract_10 [label="contract IsMath\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:13:9-18:10"]
-	base_11 [label="base Math\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:13:28-32"]
+	contract_9 [label="contract IsMath\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:13:9-18:10"]
+	base_10 [label="base Math\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:13:28-32"]
 	diagnostic [label="found contract 'Logic'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:2:9-6:10"]
 	diagnostic [label="found contract 'Logic'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:2:9-6:10"]
-	diagnostic_14 [label="found contract 'Math'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:7:9-11:10"]
-	diagnostic_15 [label="found contract 'IsMath'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:13:9-18:10"]
+	diagnostic_13 [label="found contract 'Math'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:7:9-11:10"]
+	diagnostic_14 [label="found contract 'IsMath'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_01.sol:13:9-18:10"]
 	enums -> LogicError
 	enums -> LogicError
 	enums -> MathError
 	enums -> MathError
 	structs -> WithMath
 	structs -> WithMath
 	contracts -> contract
 	contracts -> contract
-	contracts -> contract_8
-	contract_8 -> base [label="base"]
-	contracts -> contract_10
-	contract_10 -> base_11 [label="base"]
+	contracts -> contract_7
+	contract_7 -> base [label="base"]
+	contracts -> contract_9
+	contract_9 -> base_10 [label="base"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 	diagnostics -> diagnostic_14 [label="Debug"]
 	diagnostics -> diagnostic_14 [label="Debug"]
-	diagnostics -> diagnostic_15 [label="Debug"]
 }
 }

+ 10 - 10
tests/contract_testcases/solana/create_contract/base_contract_02.dot

@@ -2,21 +2,21 @@ strict digraph "tests/contract_testcases/solana/create_contract/base_contract_02
 	LogicFields [label="name:LogicFields\ncontract: Logic\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:3:20-31\nfield name:logia ty:uint256"]
 	LogicFields [label="name:LogicFields\ncontract: Logic\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:3:20-31\nfield name:logia ty:uint256"]
 	WithMath [label="name:WithMath\ncontract: IsMath\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:11:20-28\nfield name:logia ty:struct Logic.LogicFields"]
 	WithMath [label="name:WithMath\ncontract: IsMath\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:11:20-28\nfield name:logia ty:struct Logic.LogicFields"]
 	contract [label="contract Logic\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:2:9-6:10"]
 	contract [label="contract Logic\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:2:9-6:10"]
-	contract_6 [label="contract Math\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:7:9-8:10"]
+	contract_5 [label="contract Math\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:7:9-8:10"]
 	base [label="base Logic\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:7:26-31"]
 	base [label="base Logic\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:7:26-31"]
-	contract_8 [label="contract IsMath\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:10:9-14:10"]
-	base_9 [label="base Math\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:10:28-32"]
+	contract_7 [label="contract IsMath\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:10:9-14:10"]
+	base_8 [label="base Math\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:10:28-32"]
 	diagnostic [label="found contract 'Logic'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:2:9-6:10"]
 	diagnostic [label="found contract 'Logic'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:2:9-6:10"]
-	diagnostic_12 [label="found contract 'Math'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:7:9-8:10"]
-	diagnostic_13 [label="found contract 'IsMath'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:10:9-14:10"]
+	diagnostic_11 [label="found contract 'Math'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:7:9-8:10"]
+	diagnostic_12 [label="found contract 'IsMath'\nlevel Debug\ntests/contract_testcases/solana/create_contract/base_contract_02.sol:10:9-14:10"]
 	structs -> LogicFields
 	structs -> LogicFields
 	structs -> WithMath
 	structs -> WithMath
 	contracts -> contract
 	contracts -> contract
-	contracts -> contract_6
-	contract_6 -> base [label="base"]
-	contracts -> contract_8
-	contract_8 -> base_9 [label="base"]
+	contracts -> contract_5
+	contract_5 -> base [label="base"]
+	contracts -> contract_7
+	contract_7 -> base_8 [label="base"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_11 [label="Debug"]
 	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Debug"]
 }
 }

+ 16 - 6
tests/contract_testcases/solana/expressions/selector_in_free_function.dot

@@ -1,16 +1,26 @@
 strict digraph "tests/contract_testcases/solana/expressions/selector_in_free_function.sol" {
 strict digraph "tests/contract_testcases/solana/expressions/selector_in_free_function.sol" {
+	x [label="function x\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:6:9-38\nsignature x()\nvisibility internal\nmutability nonpayable"]
+	returns [label="returns\nbytes4 "]
+	return [label="return\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:7:13-32"]
+	builtins [label="builtin FunctionSelector\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:7:20-23"]
+	internal_function [label="function(bytes) internal returns (void)\nI.X\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:7:20-21"]
 	contract [label="contract I\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:2:9-4:10"]
 	contract [label="contract I\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:2:9-4:10"]
 	X [label="function X\ncontract: I\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:3:13-39\nsignature X(bytes)\nvisibility external\nmutability nonpayable\nvirtual"]
 	X [label="function X\ncontract: I\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:3:13-39\nsignature X(bytes)\nvisibility external\nmutability nonpayable\nvirtual"]
 	parameters [label="parameters\nbytes "]
 	parameters [label="parameters\nbytes "]
-	contract_5 [label="contract foo\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:10:9-24"]
+	contract_11 [label="contract foo\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:10:9-24"]
 	diagnostic [label="found interface 'I'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:2:9-4:10"]
 	diagnostic [label="found interface 'I'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:2:9-4:10"]
-	diagnostic_8 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:6:9-38"]
-	diagnostic_9 [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:10:9-24"]
+	diagnostic_14 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:6:9-38"]
+	diagnostic_15 [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:10:9-24"]
+	free_functions -> x [label="function"]
+	x -> returns [label="returns"]
+	x -> return [label="body"]
+	return -> builtins [label="expr"]
+	builtins -> internal_function [label="arg #0"]
 	contracts -> contract
 	contracts -> contract
 	contract -> X [label="function"]
 	contract -> X [label="function"]
 	X -> parameters [label="parameters"]
 	X -> parameters [label="parameters"]
-	contracts -> contract_5
+	contracts -> contract_11
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Warning"]
-	diagnostics -> diagnostic_9 [label="Debug"]
+	diagnostics -> diagnostic_14 [label="Warning"]
+	diagnostics -> diagnostic_15 [label="Debug"]
 }
 }

+ 4 - 4
tests/contract_testcases/solana/immutable_function.dot

@@ -1,10 +1,10 @@
 strict digraph "tests/contract_testcases/solana/immutable_function.sol" {
 strict digraph "tests/contract_testcases/solana/immutable_function.sol" {
 	contract [label="contract t\ntests/contract_testcases/solana/immutable_function.sol:1:26-4:2"]
 	contract [label="contract t\ntests/contract_testcases/solana/immutable_function.sol:1:26-4:2"]
 	diagnostic [label="function cannot be declared 'immutable'\nlevel Error\ntests/contract_testcases/solana/immutable_function.sol:1:14-23"]
 	diagnostic [label="function cannot be declared 'immutable'\nlevel Error\ntests/contract_testcases/solana/immutable_function.sol:1:14-23"]
-	diagnostic_6 [label="found contract 't'\nlevel Debug\ntests/contract_testcases/solana/immutable_function.sol:1:26-4:2"]
-	diagnostic_7 [label="function cannot be declared 'immutable'\nlevel Error\ntests/contract_testcases/solana/immutable_function.sol:3:18-27"]
+	diagnostic_5 [label="found contract 't'\nlevel Debug\ntests/contract_testcases/solana/immutable_function.sol:1:26-4:2"]
+	diagnostic_6 [label="function cannot be declared 'immutable'\nlevel Error\ntests/contract_testcases/solana/immutable_function.sol:3:18-27"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Error"]
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_6 [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Debug"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 36 - 14
tests/contract_testcases/solana/import_contracts_via_object.dot

@@ -1,28 +1,50 @@
 strict digraph "tests/contract_testcases/solana/import_contracts_via_object.sol" {
 strict digraph "tests/contract_testcases/solana/import_contracts_via_object.sol" {
 	S [label="name:S\ntests/contract_testcases/solana/simple.sol:3:8-9\nfield name:f1 ty:int64\nfield name:f2 ty:bool"]
 	S [label="name:S\ntests/contract_testcases/solana/simple.sol:3:8-9\nfield name:f1 ty:int64\nfield name:f2 ty:bool"]
+	inc [label="function inc\ntests/contract_testcases/solana/simple.sol:6:2-7:23\nsignature inc((int64,bool))\nvisibility internal\nmutability pure"]
+	parameters [label="parameters\nstruct S s"]
+	expr [label="expression\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	assign [label="assign\nvoid\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	structmember [label="struct member #0 int64\ntests/contract_testcases/solana/simple.sol:7:28-30"]
+	variable [label="variable: s\nstruct S\ntests/contract_testcases/solana/simple.sol:7:26-27"]
+	add [label="add\nint64\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	load [label="load int64\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	structmember_11 [label="struct member #0 int64\ntests/contract_testcases/solana/simple.sol:7:28-30"]
+	variable_12 [label="variable: s\nstruct S\ntests/contract_testcases/solana/simple.sol:7:26-27"]
+	number_literal [label="int64 literal: 1\ntests/contract_testcases/solana/simple.sol:7:34-35"]
 	contract [label="contract C\ntests/contract_testcases/solana/import_contracts_via_object.sol:2:1-11:2"]
 	contract [label="contract C\ntests/contract_testcases/solana/import_contracts_via_object.sol:2:1-11:2"]
 	base [label="base A\ntests/contract_testcases/solana/import_contracts_via_object.sol:3:15-20"]
 	base [label="base A\ntests/contract_testcases/solana/import_contracts_via_object.sol:3:15-20"]
 	using [label="library L"]
 	using [label="library L"]
-	node_6 [label="constructor \ncontract: C\ntests/contract_testcases/solana/import_contracts_via_object.sol:5:2-23\nsignature ()\nvisibility public\nmutability nonpayable"]
+	node_18 [label="constructor \ncontract: C\ntests/contract_testcases/solana/import_contracts_via_object.sol:5:2-23\nsignature ()\nvisibility public\nmutability nonpayable"]
 	foo [label="function foo\ncontract: C\ntests/contract_testcases/solana/import_contracts_via_object.sol:8:2-23\nsignature foo()\nvisibility public\nmutability nonpayable"]
 	foo [label="function foo\ncontract: C\ntests/contract_testcases/solana/import_contracts_via_object.sol:8:2-23\nsignature foo()\nvisibility public\nmutability nonpayable"]
-	contract_8 [label="contract A\ntests/contract_testcases/solana/simple.sol:1:1-14"]
-	contract_9 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
+	contract_20 [label="contract A\ntests/contract_testcases/solana/simple.sol:1:1-14"]
+	contract_21 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/import_contracts_via_object.sol:2:1-11:2"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/import_contracts_via_object.sol:2:1-11:2"]
-	diagnostic_12 [label="revert with custom error 'IMP.E' not supported yet\nlevel Error\ntests/contract_testcases/solana/import_contracts_via_object.sol:6:10-15"]
-	diagnostic_13 [label="revert with custom errors or named arguments not supported yet\nlevel Error\ntests/contract_testcases/solana/import_contracts_via_object.sol:9:3-25"]
-	diagnostic_14 [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-14"]
-	diagnostic_15 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
+	diagnostic_24 [label="revert with custom error 'IMP.E' not supported yet\nlevel Error\ntests/contract_testcases/solana/import_contracts_via_object.sol:6:10-15"]
+	diagnostic_25 [label="revert with custom errors or named arguments not supported yet\nlevel Error\ntests/contract_testcases/solana/import_contracts_via_object.sol:9:3-25"]
+	diagnostic_26 [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-14"]
+	diagnostic_27 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
 	structs -> S
 	structs -> S
+	free_functions -> inc [label="function"]
+	inc -> parameters [label="parameters"]
+	inc -> expr [label="body"]
+	expr -> assign [label="expr"]
+	assign -> structmember [label="left"]
+	structmember -> variable [label="var"]
+	assign -> add [label="right"]
+	add -> load [label="left"]
+	load -> structmember_11 [label="expr"]
+	structmember_11 -> variable_12 [label="var"]
+	add -> number_literal [label="right"]
 	contracts -> contract
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base [label="base"]
 	contract -> using [label="base"]
 	contract -> using [label="base"]
-	contract -> node_6 [label="constructor"]
+	contract -> node_18 [label="constructor"]
 	contract -> foo [label="function"]
 	contract -> foo [label="function"]
-	contracts -> contract_8
-	contracts -> contract_9
+	contracts -> contract_20
+	contracts -> contract_21
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Error"]
-	diagnostics -> diagnostic_13 [label="Error"]
-	diagnostics -> diagnostic_14 [label="Debug"]
-	diagnostics -> diagnostic_15 [label="Debug"]
+	diagnostics -> diagnostic_24 [label="Error"]
+	diagnostics -> diagnostic_25 [label="Error"]
+	diagnostics -> diagnostic_26 [label="Debug"]
+	diagnostics -> diagnostic_27 [label="Debug"]
 }
 }

+ 54 - 36
tests/contract_testcases/solana/keep_on_resolving.dot

@@ -4,59 +4,77 @@ strict digraph "tests/contract_testcases/solana/keep_on_resolving.sol" {
 	GlobalFoo [label="name:GlobalFoo\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:7:9-18\nfield name:f1 ty:int256"]
 	GlobalFoo [label="name:GlobalFoo\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:7:9-18\nfield name:f1 ty:int256"]
 	GlobalFoo_5 [label="name:GlobalFoo ty:address payable\ntests/contract_testcases/solana/type_decl_broken.sol:1:1-34"]
 	GlobalFoo_5 [label="name:GlobalFoo ty:address payable\ntests/contract_testcases/solana/type_decl_broken.sol:1:1-34"]
 	Value [label="name:Value ty:uint128\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:9:2-23"]
 	Value [label="name:Value ty:uint128\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:9:2-23"]
+	f [label="function f\ntests/contract_testcases/solana/keep_on_resolving.sol:6:1-7:30\nsignature f((unresolved))\nvisibility internal\nmutability nonpayable"]
+	parameters [label="parameters\nstruct S s"]
+	returns [label="returns\nint256 "]
+	return [label="return\ntests/contract_testcases/solana/keep_on_resolving.sol:8:2-13"]
+	load [label="load unresolved\ntests/contract_testcases/solana/keep_on_resolving.sol:8:2-13"]
+	structmember [label="struct member #0 unresolved\ntests/contract_testcases/solana/keep_on_resolving.sol:8:11-13"]
+	variable [label="variable: s\nstruct S\ntests/contract_testcases/solana/keep_on_resolving.sol:8:9-10"]
+	g [label="function g\ntests/contract_testcases/solana/keep_on_resolving.sol:10:1-11:17\nsignature g((unresolved))\nvisibility internal\nmutability nonpayable"]
+	parameters_16 [label="parameters\nstruct S s"]
 	contract [label="contract c\ntests/contract_testcases/solana/type_decl_broken.sol:2:1-19:2"]
 	contract [label="contract c\ntests/contract_testcases/solana/type_decl_broken.sol:2:1-19:2"]
 	inc_and_wrap [label="function inc_and_wrap\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:12:2-56\nsignature inc_and_wrap(int128)\nvisibility public\nmutability nonpayable"]
 	inc_and_wrap [label="function inc_and_wrap\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:12:2-56\nsignature inc_and_wrap(int128)\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\nint128 v"]
-	returns [label="returns\nusertype c.Value "]
+	parameters_20 [label="parameters\nint128 v"]
+	returns_21 [label="returns\nusertype c.Value "]
 	dec_and_unwrap [label="function dec_and_unwrap\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:16:2-59\nsignature dec_and_unwrap(uint128)\nvisibility public\nmutability nonpayable"]
 	dec_and_unwrap [label="function dec_and_unwrap\ncontract: c\ntests/contract_testcases/solana/type_decl_broken.sol:16:2-59\nsignature dec_and_unwrap(uint128)\nvisibility public\nmutability nonpayable"]
-	parameters_13 [label="parameters\nusertype c.Value v"]
-	returns_14 [label="returns\nuint128 "]
-	return [label="return\ntests/contract_testcases/solana/type_decl_broken.sol:17:3-29"]
+	parameters_23 [label="parameters\nusertype c.Value v"]
+	returns_24 [label="returns\nuint128 "]
+	return_25 [label="return\ntests/contract_testcases/solana/type_decl_broken.sol:17:3-29"]
 	subtract [label="subtract\nuint128\ntests/contract_testcases/solana/type_decl_broken.sol:17:10-29"]
 	subtract [label="subtract\nuint128\ntests/contract_testcases/solana/type_decl_broken.sol:17:10-29"]
 	builtins [label="builtin UserTypeUnwrap\ntests/contract_testcases/solana/type_decl_broken.sol:17:10-25"]
 	builtins [label="builtin UserTypeUnwrap\ntests/contract_testcases/solana/type_decl_broken.sol:17:10-25"]
-	variable [label="variable: v\nusertype c.Value\ntests/contract_testcases/solana/type_decl_broken.sol:17:23-24"]
+	variable_28 [label="variable: v\nusertype c.Value\ntests/contract_testcases/solana/type_decl_broken.sol:17:23-24"]
 	number_literal [label="uint128 literal: 1\ntests/contract_testcases/solana/type_decl_broken.sol:17:28-29"]
 	number_literal [label="uint128 literal: 1\ntests/contract_testcases/solana/type_decl_broken.sol:17:28-29"]
 	diagnostic [label="type 'in' not found\nlevel Error\ntests/contract_testcases/solana/keep_on_resolving.sol:4:2-4"]
 	diagnostic [label="type 'in' not found\nlevel Error\ntests/contract_testcases/solana/keep_on_resolving.sol:4:2-4"]
-	diagnostic_22 [label="expected 'struct S', found integer\nlevel Error\ntests/contract_testcases/solana/keep_on_resolving.sol:15:6-7"]
-	diagnostic_23 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/type_decl_broken.sol:2:1-19:2"]
-	diagnostic_24 [label="foo is already defined as a struct\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:5:7-10"]
+	diagnostic_32 [label="expected 'struct S', found integer\nlevel Error\ntests/contract_testcases/solana/keep_on_resolving.sol:15:6-7"]
+	diagnostic_33 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/type_decl_broken.sol:2:1-19:2"]
+	diagnostic_34 [label="foo is already defined as a struct\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:5:7-10"]
 	note [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:4:9-12"]
 	note [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:4:9-12"]
-	diagnostic_26 [label="'int256[2]' is not an elementary value type\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:5:14-20"]
-	diagnostic_27 [label="foo is already defined as a struct\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:6:7-10"]
-	note_28 [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:4:9-12"]
-	diagnostic_29 [label="GlobalFoo is already defined as an user type\nlevel Warning\ntests/contract_testcases/solana/type_decl_broken.sol:7:9-18"]
-	note_30 [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:1:6-15"]
-	diagnostic_31 [label="Value is already defined as an user type\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:10:9-14"]
-	note_32 [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:9:7-12"]
-	diagnostic_33 [label="implicit conversion would change sign from int136 to uint128\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:13:21-26"]
+	diagnostic_36 [label="'int256[2]' is not an elementary value type\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:5:14-20"]
+	diagnostic_37 [label="foo is already defined as a struct\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:6:7-10"]
+	note_38 [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:4:9-12"]
+	diagnostic_39 [label="GlobalFoo is already defined as an user type\nlevel Warning\ntests/contract_testcases/solana/type_decl_broken.sol:7:9-18"]
+	note_40 [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:1:6-15"]
+	diagnostic_41 [label="Value is already defined as an user type\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:10:9-14"]
+	note_42 [label="location of previous definition\ntests/contract_testcases/solana/type_decl_broken.sol:9:7-12"]
+	diagnostic_43 [label="implicit conversion would change sign from int136 to uint128\nlevel Error\ntests/contract_testcases/solana/type_decl_broken.sol:13:21-26"]
 	structs -> S
 	structs -> S
 	structs -> foo
 	structs -> foo
 	structs -> GlobalFoo
 	structs -> GlobalFoo
 	types -> GlobalFoo_5
 	types -> GlobalFoo_5
 	types -> Value
 	types -> Value
+	free_functions -> f [label="function"]
+	f -> parameters [label="parameters"]
+	f -> returns [label="returns"]
+	f -> return [label="body"]
+	return -> load [label="expr"]
+	load -> structmember [label="expr"]
+	structmember -> variable [label="var"]
+	free_functions -> g [label="function"]
+	g -> parameters_16 [label="parameters"]
 	contracts -> contract
 	contracts -> contract
 	contract -> inc_and_wrap [label="function"]
 	contract -> inc_and_wrap [label="function"]
-	inc_and_wrap -> parameters [label="parameters"]
-	inc_and_wrap -> returns [label="returns"]
+	inc_and_wrap -> parameters_20 [label="parameters"]
+	inc_and_wrap -> returns_21 [label="returns"]
 	contract -> dec_and_unwrap [label="function"]
 	contract -> dec_and_unwrap [label="function"]
-	dec_and_unwrap -> parameters_13 [label="parameters"]
-	dec_and_unwrap -> returns_14 [label="returns"]
-	dec_and_unwrap -> return [label="body"]
-	return -> subtract [label="expr"]
+	dec_and_unwrap -> parameters_23 [label="parameters"]
+	dec_and_unwrap -> returns_24 [label="returns"]
+	dec_and_unwrap -> return_25 [label="body"]
+	return_25 -> subtract [label="expr"]
 	subtract -> builtins [label="left"]
 	subtract -> builtins [label="left"]
-	builtins -> variable [label="arg #0"]
+	builtins -> variable_28 [label="arg #0"]
 	subtract -> number_literal [label="right"]
 	subtract -> number_literal [label="right"]
 	diagnostics -> diagnostic [label="Error"]
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_22 [label="Error"]
-	diagnostics -> diagnostic_23 [label="Debug"]
-	diagnostics -> diagnostic_24 [label="Error"]
-	diagnostic_24 -> note [label="note"]
-	diagnostics -> diagnostic_26 [label="Error"]
-	diagnostics -> diagnostic_27 [label="Error"]
-	diagnostic_27 -> note_28 [label="note"]
-	diagnostics -> diagnostic_29 [label="Warning"]
-	diagnostic_29 -> note_30 [label="note"]
-	diagnostics -> diagnostic_31 [label="Error"]
-	diagnostic_31 -> note_32 [label="note"]
-	diagnostics -> diagnostic_33 [label="Error"]
+	diagnostics -> diagnostic_32 [label="Error"]
+	diagnostics -> diagnostic_33 [label="Debug"]
+	diagnostics -> diagnostic_34 [label="Error"]
+	diagnostic_34 -> note [label="note"]
+	diagnostics -> diagnostic_36 [label="Error"]
+	diagnostics -> diagnostic_37 [label="Error"]
+	diagnostic_37 -> note_38 [label="note"]
+	diagnostics -> diagnostic_39 [label="Warning"]
+	diagnostic_39 -> note_40 [label="note"]
+	diagnostics -> diagnostic_41 [label="Error"]
+	diagnostic_41 -> note_42 [label="note"]
+	diagnostics -> diagnostic_43 [label="Error"]
 }
 }

+ 122 - 100
tests/contract_testcases/solana/override.dot

@@ -1,5 +1,16 @@
 strict digraph "tests/contract_testcases/solana/override.sol" {
 strict digraph "tests/contract_testcases/solana/override.sol" {
 	S [label="name:S\ntests/contract_testcases/solana/simple.sol:3:8-9\nfield name:f1 ty:int64\nfield name:f2 ty:bool"]
 	S [label="name:S\ntests/contract_testcases/solana/simple.sol:3:8-9\nfield name:f1 ty:int64\nfield name:f2 ty:bool"]
+	inc [label="function inc\ntests/contract_testcases/solana/simple.sol:6:2-7:23\nsignature inc((int64,bool))\nvisibility internal\nmutability pure"]
+	parameters [label="parameters\nstruct S s"]
+	expr [label="expression\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	assign [label="assign\nvoid\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	structmember [label="struct member #0 int64\ntests/contract_testcases/solana/simple.sol:7:28-30"]
+	variable [label="variable: s\nstruct S\ntests/contract_testcases/solana/simple.sol:7:26-27"]
+	add [label="add\nint64\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	load [label="load int64\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	structmember_11 [label="struct member #0 int64\ntests/contract_testcases/solana/simple.sol:7:28-30"]
+	variable_12 [label="variable: s\nstruct S\ntests/contract_testcases/solana/simple.sol:7:26-27"]
+	number_literal [label="int64 literal: 1\ntests/contract_testcases/solana/simple.sol:7:34-35"]
 	contract [label="contract C\ntests/contract_testcases/solana/override.sol:4:1-7:2"]
 	contract [label="contract C\ntests/contract_testcases/solana/override.sol:4:1-7:2"]
 	base [label="base A\ntests/contract_testcases/solana/override.sol:5:15-20"]
 	base [label="base A\ntests/contract_testcases/solana/override.sol:5:15-20"]
 	var [label="variable meh\nvisibility public\ntests/contract_testcases/solana/override.sol:6:2-32"]
 	var [label="variable meh\nvisibility public\ntests/contract_testcases/solana/override.sol:6:2-32"]
@@ -8,61 +19,72 @@ strict digraph "tests/contract_testcases/solana/override.sol" {
 	return [label="return\nimplicit"]
 	return [label="return\nimplicit"]
 	storage_load [label="storage load int256\nimplicit"]
 	storage_load [label="storage load int256\nimplicit"]
 	storage_var [label="storage variable\nC.meh\nint256 storage\nimplicit"]
 	storage_var [label="storage variable\nC.meh\nint256 storage\nimplicit"]
-	contract_11 [label="contract A\ntests/contract_testcases/solana/override.sol:8:1-11:2"]
+	contract_23 [label="contract A\ntests/contract_testcases/solana/override.sol:8:1-11:2"]
 	foo [label="function foo\ncontract: A\ntests/contract_testcases/solana/override.sol:10:5-43\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
 	foo [label="function foo\ncontract: A\ntests/contract_testcases/solana/override.sol:10:5-43\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
-	returns_13 [label="returns\nuint256 "]
-	contract_14 [label="contract B\ntests/contract_testcases/solana/override.sol:11:2-14:2"]
-	foo_15 [label="function foo\ncontract: B\ntests/contract_testcases/solana/override.sol:13:5-43\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
-	returns_16 [label="returns\nuint256 "]
-	contract_17 [label="contract X\ntests/contract_testcases/solana/override.sol:14:2-17:2"]
-	base_18 [label="base A\ntests/contract_testcases/solana/override.sol:15:15-16"]
-	base_19 [label="base B\ntests/contract_testcases/solana/override.sol:15:18-19"]
-	var_20 [label="variable foo\nvisibility public\ntests/contract_testcases/solana/override.sol:16:9-39"]
-	foo_21 [label="function foo\ncontract: X\ntests/contract_testcases/solana/override.sol:16:36-39\nsignature foo()\nvisibility public\nmutability view\noverride A\noverride B"]
-	returns_22 [label="returns\nuint256 "]
-	return_23 [label="return\nimplicit"]
-	storage_load_24 [label="storage load uint256\nimplicit"]
-	storage_var_25 [label="storage variable\nX.foo\nuint256 storage\nimplicit"]
-	contract_26 [label="contract Y\ntests/contract_testcases/solana/override.sol:17:2-19:2"]
-	base_27 [label="base X\ntests/contract_testcases/solana/override.sol:18:15-16"]
-	contract_28 [label="contract A2\ntests/contract_testcases/solana/override.sol:20:1-23:2"]
-	foo_29 [label="function foo\ncontract: A2\ntests/contract_testcases/solana/override.sol:22:5-51\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
-	returns_30 [label="returns\nuint256 "]
-	return_31 [label="return\ntests/contract_testcases/solana/override.sol:22:54-62"]
-	number_literal [label="uint256 literal: 1\ntests/contract_testcases/solana/override.sol:22:61-62"]
-	contract_33 [label="contract B2\ntests/contract_testcases/solana/override.sol:23:2-26:2"]
-	foo_34 [label="function foo\ncontract: B2\ntests/contract_testcases/solana/override.sol:25:5-51\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
-	returns_35 [label="returns\nuint256 "]
-	return_36 [label="return\ntests/contract_testcases/solana/override.sol:25:54-62"]
-	number_literal_37 [label="uint256 literal: 2\ntests/contract_testcases/solana/override.sol:25:61-62"]
-	contract_38 [label="contract X2\ntests/contract_testcases/solana/override.sol:26:2-29:2"]
-	base_39 [label="base A2\ntests/contract_testcases/solana/override.sol:27:16-18"]
-	base_40 [label="base B2\ntests/contract_testcases/solana/override.sol:27:20-22"]
-	var_41 [label="variable foo\nvisibility public\ntests/contract_testcases/solana/override.sol:28:9-37"]
-	foo_42 [label="function foo\ncontract: X2\ntests/contract_testcases/solana/override.sol:28:34-37\nsignature foo()\nvisibility public\nmutability view\noverride A2"]
-	returns_43 [label="returns\nuint256 "]
-	return_44 [label="return\nimplicit"]
-	storage_load_45 [label="storage load uint256\nimplicit"]
-	storage_var_46 [label="storage variable\nX2.foo\nuint256 storage\nimplicit"]
-	contract_47 [label="contract Y2\ntests/contract_testcases/solana/override.sol:29:2-31:2"]
-	base_48 [label="base X2\ntests/contract_testcases/solana/override.sol:30:16-18"]
-	contract_49 [label="contract A\ntests/contract_testcases/solana/simple.sol:1:1-14"]
-	contract_50 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
+	returns_25 [label="returns\nuint256 "]
+	contract_26 [label="contract B\ntests/contract_testcases/solana/override.sol:11:2-14:2"]
+	foo_27 [label="function foo\ncontract: B\ntests/contract_testcases/solana/override.sol:13:5-43\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
+	returns_28 [label="returns\nuint256 "]
+	contract_29 [label="contract X\ntests/contract_testcases/solana/override.sol:14:2-17:2"]
+	base_30 [label="base A\ntests/contract_testcases/solana/override.sol:15:15-16"]
+	base_31 [label="base B\ntests/contract_testcases/solana/override.sol:15:18-19"]
+	var_32 [label="variable foo\nvisibility public\ntests/contract_testcases/solana/override.sol:16:9-39"]
+	foo_33 [label="function foo\ncontract: X\ntests/contract_testcases/solana/override.sol:16:36-39\nsignature foo()\nvisibility public\nmutability view\noverride A\noverride B"]
+	returns_34 [label="returns\nuint256 "]
+	return_35 [label="return\nimplicit"]
+	storage_load_36 [label="storage load uint256\nimplicit"]
+	storage_var_37 [label="storage variable\nX.foo\nuint256 storage\nimplicit"]
+	contract_38 [label="contract Y\ntests/contract_testcases/solana/override.sol:17:2-19:2"]
+	base_39 [label="base X\ntests/contract_testcases/solana/override.sol:18:15-16"]
+	contract_40 [label="contract A2\ntests/contract_testcases/solana/override.sol:20:1-23:2"]
+	foo_41 [label="function foo\ncontract: A2\ntests/contract_testcases/solana/override.sol:22:5-51\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
+	returns_42 [label="returns\nuint256 "]
+	return_43 [label="return\ntests/contract_testcases/solana/override.sol:22:54-62"]
+	number_literal_44 [label="uint256 literal: 1\ntests/contract_testcases/solana/override.sol:22:61-62"]
+	contract_45 [label="contract B2\ntests/contract_testcases/solana/override.sol:23:2-26:2"]
+	foo_46 [label="function foo\ncontract: B2\ntests/contract_testcases/solana/override.sol:25:5-51\nsignature foo()\nvisibility external\nmutability nonpayable\nvirtual"]
+	returns_47 [label="returns\nuint256 "]
+	return_48 [label="return\ntests/contract_testcases/solana/override.sol:25:54-62"]
+	number_literal_49 [label="uint256 literal: 2\ntests/contract_testcases/solana/override.sol:25:61-62"]
+	contract_50 [label="contract X2\ntests/contract_testcases/solana/override.sol:26:2-29:2"]
+	base_51 [label="base A2\ntests/contract_testcases/solana/override.sol:27:16-18"]
+	base_52 [label="base B2\ntests/contract_testcases/solana/override.sol:27:20-22"]
+	var_53 [label="variable foo\nvisibility public\ntests/contract_testcases/solana/override.sol:28:9-37"]
+	foo_54 [label="function foo\ncontract: X2\ntests/contract_testcases/solana/override.sol:28:34-37\nsignature foo()\nvisibility public\nmutability view\noverride A2"]
+	returns_55 [label="returns\nuint256 "]
+	return_56 [label="return\nimplicit"]
+	storage_load_57 [label="storage load uint256\nimplicit"]
+	storage_var_58 [label="storage variable\nX2.foo\nuint256 storage\nimplicit"]
+	contract_59 [label="contract Y2\ntests/contract_testcases/solana/override.sol:29:2-31:2"]
+	base_60 [label="base X2\ntests/contract_testcases/solana/override.sol:30:16-18"]
+	contract_61 [label="contract A\ntests/contract_testcases/solana/simple.sol:1:1-14"]
+	contract_62 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
 	diagnostic [label="global variable has no bases contracts to override\nlevel Error\ntests/contract_testcases/solana/override.sol:3:14-22"]
 	diagnostic [label="global variable has no bases contracts to override\nlevel Error\ntests/contract_testcases/solana/override.sol:3:14-22"]
-	diagnostic_53 [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/override.sol:4:1-7:2"]
-	diagnostic_54 [label="'meh' does not override anything\nlevel Error\ntests/contract_testcases/solana/override.sol:6:29-32"]
-	diagnostic_55 [label="found interface 'A'\nlevel Debug\ntests/contract_testcases/solana/override.sol:8:1-11:2"]
-	diagnostic_56 [label="found interface 'B'\nlevel Debug\ntests/contract_testcases/solana/override.sol:11:2-14:2"]
-	diagnostic_57 [label="found contract 'X'\nlevel Debug\ntests/contract_testcases/solana/override.sol:14:2-17:2"]
-	diagnostic_58 [label="found contract 'Y'\nlevel Debug\ntests/contract_testcases/solana/override.sol:17:2-19:2"]
-	diagnostic_59 [label="found abstract contract 'A2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:20:1-23:2"]
-	diagnostic_60 [label="found abstract contract 'B2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:23:2-26:2"]
-	diagnostic_61 [label="found contract 'X2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:26:2-29:2"]
-	diagnostic_62 [label="function 'foo' missing overrides 'B2', specify 'override(B2,A2)'\nlevel Error\ntests/contract_testcases/solana/override.sol:28:21-33"]
-	diagnostic_63 [label="found contract 'Y2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:29:2-31:2"]
-	diagnostic_64 [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-14"]
-	diagnostic_65 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
+	diagnostic_65 [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/override.sol:4:1-7:2"]
+	diagnostic_66 [label="'meh' does not override anything\nlevel Error\ntests/contract_testcases/solana/override.sol:6:29-32"]
+	diagnostic_67 [label="found interface 'A'\nlevel Debug\ntests/contract_testcases/solana/override.sol:8:1-11:2"]
+	diagnostic_68 [label="found interface 'B'\nlevel Debug\ntests/contract_testcases/solana/override.sol:11:2-14:2"]
+	diagnostic_69 [label="found contract 'X'\nlevel Debug\ntests/contract_testcases/solana/override.sol:14:2-17:2"]
+	diagnostic_70 [label="found contract 'Y'\nlevel Debug\ntests/contract_testcases/solana/override.sol:17:2-19:2"]
+	diagnostic_71 [label="found abstract contract 'A2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:20:1-23:2"]
+	diagnostic_72 [label="found abstract contract 'B2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:23:2-26:2"]
+	diagnostic_73 [label="found contract 'X2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:26:2-29:2"]
+	diagnostic_74 [label="function 'foo' missing overrides 'B2', specify 'override(B2,A2)'\nlevel Error\ntests/contract_testcases/solana/override.sol:28:21-33"]
+	diagnostic_75 [label="found contract 'Y2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:29:2-31:2"]
+	diagnostic_76 [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-14"]
+	diagnostic_77 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
 	structs -> S
 	structs -> S
+	free_functions -> inc [label="function"]
+	inc -> parameters [label="parameters"]
+	inc -> expr [label="body"]
+	expr -> assign [label="expr"]
+	assign -> structmember [label="left"]
+	structmember -> variable [label="var"]
+	assign -> add [label="right"]
+	add -> load [label="left"]
+	load -> structmember_11 [label="expr"]
+	structmember_11 -> variable_12 [label="var"]
+	add -> number_literal [label="right"]
 	contracts -> contract
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base [label="base"]
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
@@ -71,58 +93,58 @@ strict digraph "tests/contract_testcases/solana/override.sol" {
 	meh -> return [label="body"]
 	meh -> return [label="body"]
 	return -> storage_load [label="expr"]
 	return -> storage_load [label="expr"]
 	storage_load -> storage_var [label="expr"]
 	storage_load -> storage_var [label="expr"]
-	contracts -> contract_11
-	contract_11 -> foo [label="function"]
-	foo -> returns_13 [label="returns"]
-	contracts -> contract_14
-	contract_14 -> foo_15 [label="function"]
-	foo_15 -> returns_16 [label="returns"]
-	contracts -> contract_17
-	contract_17 -> base_18 [label="base"]
-	contract_17 -> base_19 [label="base"]
-	contract_17 -> var_20 [label="variable"]
-	contract_17 -> foo_21 [label="function"]
-	foo_21 -> returns_22 [label="returns"]
-	foo_21 -> return_23 [label="body"]
-	return_23 -> storage_load_24 [label="expr"]
-	storage_load_24 -> storage_var_25 [label="expr"]
+	contracts -> contract_23
+	contract_23 -> foo [label="function"]
+	foo -> returns_25 [label="returns"]
 	contracts -> contract_26
 	contracts -> contract_26
-	contract_26 -> base_27 [label="base"]
-	contracts -> contract_28
-	contract_28 -> foo_29 [label="function"]
-	foo_29 -> returns_30 [label="returns"]
-	foo_29 -> return_31 [label="body"]
-	return_31 -> number_literal [label="expr"]
-	contracts -> contract_33
-	contract_33 -> foo_34 [label="function"]
-	foo_34 -> returns_35 [label="returns"]
-	foo_34 -> return_36 [label="body"]
-	return_36 -> number_literal_37 [label="expr"]
+	contract_26 -> foo_27 [label="function"]
+	foo_27 -> returns_28 [label="returns"]
+	contracts -> contract_29
+	contract_29 -> base_30 [label="base"]
+	contract_29 -> base_31 [label="base"]
+	contract_29 -> var_32 [label="variable"]
+	contract_29 -> foo_33 [label="function"]
+	foo_33 -> returns_34 [label="returns"]
+	foo_33 -> return_35 [label="body"]
+	return_35 -> storage_load_36 [label="expr"]
+	storage_load_36 -> storage_var_37 [label="expr"]
 	contracts -> contract_38
 	contracts -> contract_38
 	contract_38 -> base_39 [label="base"]
 	contract_38 -> base_39 [label="base"]
-	contract_38 -> base_40 [label="base"]
-	contract_38 -> var_41 [label="variable"]
-	contract_38 -> foo_42 [label="function"]
-	foo_42 -> returns_43 [label="returns"]
-	foo_42 -> return_44 [label="body"]
-	return_44 -> storage_load_45 [label="expr"]
-	storage_load_45 -> storage_var_46 [label="expr"]
-	contracts -> contract_47
-	contract_47 -> base_48 [label="base"]
-	contracts -> contract_49
+	contracts -> contract_40
+	contract_40 -> foo_41 [label="function"]
+	foo_41 -> returns_42 [label="returns"]
+	foo_41 -> return_43 [label="body"]
+	return_43 -> number_literal_44 [label="expr"]
+	contracts -> contract_45
+	contract_45 -> foo_46 [label="function"]
+	foo_46 -> returns_47 [label="returns"]
+	foo_46 -> return_48 [label="body"]
+	return_48 -> number_literal_49 [label="expr"]
 	contracts -> contract_50
 	contracts -> contract_50
+	contract_50 -> base_51 [label="base"]
+	contract_50 -> base_52 [label="base"]
+	contract_50 -> var_53 [label="variable"]
+	contract_50 -> foo_54 [label="function"]
+	foo_54 -> returns_55 [label="returns"]
+	foo_54 -> return_56 [label="body"]
+	return_56 -> storage_load_57 [label="expr"]
+	storage_load_57 -> storage_var_58 [label="expr"]
+	contracts -> contract_59
+	contract_59 -> base_60 [label="base"]
+	contracts -> contract_61
+	contracts -> contract_62
 	diagnostics -> diagnostic [label="Error"]
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_53 [label="Debug"]
-	diagnostics -> diagnostic_54 [label="Error"]
-	diagnostics -> diagnostic_55 [label="Debug"]
-	diagnostics -> diagnostic_56 [label="Debug"]
-	diagnostics -> diagnostic_57 [label="Debug"]
-	diagnostics -> diagnostic_58 [label="Debug"]
-	diagnostics -> diagnostic_59 [label="Debug"]
-	diagnostics -> diagnostic_60 [label="Debug"]
-	diagnostics -> diagnostic_61 [label="Debug"]
-	diagnostics -> diagnostic_62 [label="Error"]
-	diagnostics -> diagnostic_63 [label="Debug"]
-	diagnostics -> diagnostic_64 [label="Debug"]
 	diagnostics -> diagnostic_65 [label="Debug"]
 	diagnostics -> diagnostic_65 [label="Debug"]
+	diagnostics -> diagnostic_66 [label="Error"]
+	diagnostics -> diagnostic_67 [label="Debug"]
+	diagnostics -> diagnostic_68 [label="Debug"]
+	diagnostics -> diagnostic_69 [label="Debug"]
+	diagnostics -> diagnostic_70 [label="Debug"]
+	diagnostics -> diagnostic_71 [label="Debug"]
+	diagnostics -> diagnostic_72 [label="Debug"]
+	diagnostics -> diagnostic_73 [label="Debug"]
+	diagnostics -> diagnostic_74 [label="Error"]
+	diagnostics -> diagnostic_75 [label="Debug"]
+	diagnostics -> diagnostic_76 [label="Debug"]
+	diagnostics -> diagnostic_77 [label="Debug"]
 }
 }

+ 3 - 3
tests/contract_testcases/solana/structs/parse_structs_06.dot

@@ -2,11 +2,11 @@ strict digraph "tests/contract_testcases/solana/structs/parse_structs_06.sol" {
 	Foo [label="name:Foo\ncontract: test_struct_parsing\ntests/contract_testcases/solana/structs/parse_structs_06.sol:3:20-23\nfield name:x ty:bool\nfield name:y ty:struct test_struct_parsing.Foo"]
 	Foo [label="name:Foo\ncontract: test_struct_parsing\ntests/contract_testcases/solana/structs/parse_structs_06.sol:3:20-23\nfield name:x ty:bool\nfield name:y ty:struct test_struct_parsing.Foo"]
 	contract [label="contract test_struct_parsing\ntests/contract_testcases/solana/structs/parse_structs_06.sol:2:9-7:10"]
 	contract [label="contract test_struct_parsing\ntests/contract_testcases/solana/structs/parse_structs_06.sol:2:9-7:10"]
 	diagnostic [label="found contract 'test_struct_parsing'\nlevel Debug\ntests/contract_testcases/solana/structs/parse_structs_06.sol:2:9-7:10"]
 	diagnostic [label="found contract 'test_struct_parsing'\nlevel Debug\ntests/contract_testcases/solana/structs/parse_structs_06.sol:2:9-7:10"]
-	diagnostic_7 [label="struct 'Foo' has infinite size\nlevel Error\ntests/contract_testcases/solana/structs/parse_structs_06.sol:3:20-23"]
+	diagnostic_6 [label="struct 'Foo' has infinite size\nlevel Error\ntests/contract_testcases/solana/structs/parse_structs_06.sol:3:20-23"]
 	note [label="recursive field 'y'\ntests/contract_testcases/solana/structs/parse_structs_06.sol:5:17-22"]
 	note [label="recursive field 'y'\ntests/contract_testcases/solana/structs/parse_structs_06.sol:5:17-22"]
 	structs -> Foo
 	structs -> Foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostic_7 -> note [label="note"]
+	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostic_6 -> note [label="note"]
 }
 }

+ 29 - 15
tests/contract_testcases/solana/type_called_error.dot

@@ -1,38 +1,52 @@
 strict digraph "tests/contract_testcases/solana/type_called_error.sol" {
 strict digraph "tests/contract_testcases/solana/type_called_error.sol" {
 	error [label="name:error\ntests/contract_testcases/solana/type_called_error.sol:1:8-13\nfield name:f1 ty:int256"]
 	error [label="name:error\ntests/contract_testcases/solana/type_called_error.sol:1:8-13\nfield name:f1 ty:int256"]
+	member [label="function member\ntests/contract_testcases/solana/type_called_error.sol:2:1-3:44\nsignature member((int256))\nvisibility internal\nmutability pure"]
+	parameters [label="parameters\nstruct error e"]
+	returns [label="returns\nint256 "]
+	return [label="return\ntests/contract_testcases/solana/type_called_error.sol:4:2-13"]
+	load [label="load int256\ntests/contract_testcases/solana/type_called_error.sol:4:2-13"]
+	structmember [label="struct member #0 int256\ntests/contract_testcases/solana/type_called_error.sol:4:11-13"]
+	variable [label="variable: e\nstruct error\ntests/contract_testcases/solana/type_called_error.sol:4:9-10"]
 	contract [label="contract c\ntests/contract_testcases/solana/type_called_error.sol:8:1-16:2"]
 	contract [label="contract c\ntests/contract_testcases/solana/type_called_error.sol:8:1-16:2"]
 	var [label="variable v1\nvisibility public\ntests/contract_testcases/solana/type_called_error.sol:10:2-17"]
 	var [label="variable v1\nvisibility public\ntests/contract_testcases/solana/type_called_error.sol:10:2-17"]
 	v1 [label="function v1\ncontract: c\ntests/contract_testcases/solana/type_called_error.sol:10:15-17\nsignature v1()\nvisibility public\nmutability view"]
 	v1 [label="function v1\ncontract: c\ntests/contract_testcases/solana/type_called_error.sol:10:15-17\nsignature v1()\nvisibility public\nmutability view"]
-	returns [label="returns\nstruct error "]
-	return [label="return\nimplicit"]
+	returns_14 [label="returns\nstruct error "]
+	return_15 [label="return\nimplicit"]
 	storage_load [label="storage load struct error\nimplicit"]
 	storage_load [label="storage load struct error\nimplicit"]
 	storage_var [label="storage variable\nc.v1\nstruct error storage\nimplicit"]
 	storage_var [label="storage variable\nc.v1\nstruct error storage\nimplicit"]
 	test [label="function test\ncontract: c\ntests/contract_testcases/solana/type_called_error.sol:12:2-54\nsignature test((int256))\nvisibility internal\nmutability pure"]
 	test [label="function test\ncontract: c\ntests/contract_testcases/solana/type_called_error.sol:12:2-54\nsignature test((int256))\nvisibility internal\nmutability pure"]
-	parameters [label="parameters\nstruct error e"]
-	returns_12 [label="returns\nstruct error "]
+	parameters_19 [label="parameters\nstruct error e"]
+	returns_20 [label="returns\nstruct error "]
 	expr [label="expression\ntests/contract_testcases/solana/type_called_error.sol:13:3-13"]
 	expr [label="expression\ntests/contract_testcases/solana/type_called_error.sol:13:3-13"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/type_called_error.sol:13:3-13"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/type_called_error.sol:13:3-13"]
 	internal_function [label="function(struct error) internal pure returns (void)\nfree function member\ntests/contract_testcases/solana/type_called_error.sol:13:3-13"]
 	internal_function [label="function(struct error) internal pure returns (void)\nfree function member\ntests/contract_testcases/solana/type_called_error.sol:13:3-13"]
-	variable [label="variable: e\nstruct error\ntests/contract_testcases/solana/type_called_error.sol:13:3-4"]
-	return_17 [label="return\ntests/contract_testcases/solana/type_called_error.sol:14:3-11"]
-	variable_18 [label="variable: e\nstruct error\ntests/contract_testcases/solana/type_called_error.sol:14:10-11"]
+	variable_24 [label="variable: e\nstruct error\ntests/contract_testcases/solana/type_called_error.sol:13:3-4"]
+	return_25 [label="return\ntests/contract_testcases/solana/type_called_error.sol:14:3-11"]
+	variable_26 [label="variable: e\nstruct error\ntests/contract_testcases/solana/type_called_error.sol:14:10-11"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/type_called_error.sol:8:1-16:2"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/type_called_error.sol:8:1-16:2"]
 	structs -> error
 	structs -> error
+	free_functions -> member [label="function"]
+	member -> parameters [label="parameters"]
+	member -> returns [label="returns"]
+	member -> return [label="body"]
+	return -> load [label="expr"]
+	load -> structmember [label="expr"]
+	structmember -> variable [label="var"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	contract -> v1 [label="function"]
 	contract -> v1 [label="function"]
-	v1 -> returns [label="returns"]
-	v1 -> return [label="body"]
-	return -> storage_load [label="expr"]
+	v1 -> returns_14 [label="returns"]
+	v1 -> return_15 [label="body"]
+	return_15 -> storage_load [label="expr"]
 	storage_load -> storage_var [label="expr"]
 	storage_load -> storage_var [label="expr"]
 	contract -> test [label="function"]
 	contract -> test [label="function"]
-	test -> parameters [label="parameters"]
-	test -> returns_12 [label="returns"]
+	test -> parameters_19 [label="parameters"]
+	test -> returns_20 [label="returns"]
 	test -> expr [label="body"]
 	test -> expr [label="body"]
 	expr -> call_internal_function [label="expr"]
 	expr -> call_internal_function [label="expr"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
-	call_internal_function -> variable [label="arg #0"]
-	expr -> return_17 [label="next"]
-	return_17 -> variable_18 [label="expr"]
+	call_internal_function -> variable_24 [label="arg #0"]
+	expr -> return_25 [label="next"]
+	return_25 -> variable_26 [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
 }
 }

+ 12 - 8
tests/contract_testcases/solana/type_decl_broken_more.dot

@@ -1,22 +1,26 @@
 strict digraph "tests/contract_testcases/solana/type_decl_broken_more.sol" {
 strict digraph "tests/contract_testcases/solana/type_decl_broken_more.sol" {
 	Addr [label="name:Addr ty:address payable\ntests/contract_testcases/solana/type_decl.sol:1:1-2:29"]
 	Addr [label="name:Addr ty:address payable\ntests/contract_testcases/solana/type_decl.sol:1:1-2:29"]
 	Binary [label="name:Binary ty:bool\ncontract: x\ntests/contract_testcases/solana/type_decl.sol:5:2-21"]
 	Binary [label="name:Binary ty:bool\ncontract: x\ntests/contract_testcases/solana/type_decl.sol:5:2-21"]
+	bar [label="function bar\ntests/contract_testcases/solana/type_decl_broken_more.sol:4:1-5:24\nsignature bar(int256)\nvisibility internal\nmutability nonpayable"]
+	parameters [label="parameters\nint256 Addr"]
 	contract [label="contract x\ntests/contract_testcases/solana/type_decl.sol:3:1-8:2"]
 	contract [label="contract x\ntests/contract_testcases/solana/type_decl.sol:3:1-8:2"]
 	f [label="function f\ncontract: x\ntests/contract_testcases/solana/type_decl.sol:7:2-33\nsignature f(bytes32,bool)\nvisibility public\nmutability nonpayable"]
 	f [label="function f\ncontract: x\ntests/contract_testcases/solana/type_decl.sol:7:2-33\nsignature f(bytes32,bool)\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\nusertype Addr \nusertype x.Binary "]
+	parameters_10 [label="parameters\nusertype Addr \nusertype x.Binary "]
 	diagnostic [label="'Addr' is an user type\nlevel Error\ntests/contract_testcases/solana/type_decl_broken_more.sol:3:14-18"]
 	diagnostic [label="'Addr' is an user type\nlevel Error\ntests/contract_testcases/solana/type_decl_broken_more.sol:3:14-18"]
-	diagnostic_10 [label="declaration of 'Addr' shadows type\nlevel Warning\ntests/contract_testcases/solana/type_decl_broken_more.sol:5:18-22"]
+	diagnostic_13 [label="declaration of 'Addr' shadows type\nlevel Warning\ntests/contract_testcases/solana/type_decl_broken_more.sol:5:18-22"]
 	note [label="previous declaration of type\ntests/contract_testcases/solana/type_decl.sol:2:6-10"]
 	note [label="previous declaration of type\ntests/contract_testcases/solana/type_decl.sol:2:6-10"]
-	diagnostic_12 [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/type_decl.sol:3:1-8:2"]
-	diagnostic_13 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/type_decl.sol:7:2-33"]
+	diagnostic_15 [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/type_decl.sol:3:1-8:2"]
+	diagnostic_16 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/type_decl.sol:7:2-33"]
 	types -> Addr
 	types -> Addr
 	types -> Binary
 	types -> Binary
+	free_functions -> bar [label="function"]
+	bar -> parameters [label="parameters"]
 	contracts -> contract
 	contracts -> contract
 	contract -> f [label="function"]
 	contract -> f [label="function"]
-	f -> parameters [label="parameters"]
+	f -> parameters_10 [label="parameters"]
 	diagnostics -> diagnostic [label="Error"]
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_10 [label="Warning"]
-	diagnostic_10 -> note [label="note"]
-	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Warning"]
 	diagnostics -> diagnostic_13 [label="Warning"]
+	diagnostic_13 -> note [label="note"]
+	diagnostics -> diagnostic_15 [label="Debug"]
+	diagnostics -> diagnostic_16 [label="Warning"]
 }
 }

+ 69 - 25
tests/contract_testcases/solana/using_import.dot

@@ -1,38 +1,82 @@
 strict digraph "tests/contract_testcases/solana/using_import.sol" {
 strict digraph "tests/contract_testcases/solana/using_import.sol" {
 	S [label="name:S\ntests/contract_testcases/solana/simple.sol:3:8-9\nfield name:f1 ty:int64\nfield name:f2 ty:bool"]
 	S [label="name:S\ntests/contract_testcases/solana/simple.sol:3:8-9\nfield name:f1 ty:int64\nfield name:f2 ty:bool"]
+	inc [label="function inc\ntests/contract_testcases/solana/simple.sol:6:2-7:23\nsignature inc((int64,bool))\nvisibility internal\nmutability pure"]
+	parameters [label="parameters\nstruct S s"]
+	expr [label="expression\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	assign [label="assign\nvoid\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	structmember [label="struct member #0 int64\ntests/contract_testcases/solana/simple.sol:7:28-30"]
+	variable [label="variable: s\nstruct S\ntests/contract_testcases/solana/simple.sol:7:26-27"]
+	add [label="add\nint64\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	load [label="load int64\ntests/contract_testcases/solana/simple.sol:7:26-35"]
+	structmember_11 [label="struct member #0 int64\ntests/contract_testcases/solana/simple.sol:7:28-30"]
+	variable_12 [label="variable: s\nstruct S\ntests/contract_testcases/solana/simple.sol:7:26-27"]
+	number_literal [label="int64 literal: 1\ntests/contract_testcases/solana/simple.sol:7:34-35"]
+	dec [label="function dec\ntests/contract_testcases/solana/using_import.sol:2:1-3:31\nsignature dec((int64,bool))\nvisibility internal\nmutability pure"]
+	parameters_15 [label="parameters\nstruct S s"]
+	expr_16 [label="expression\ntests/contract_testcases/solana/using_import.sol:3:34-43"]
+	assign_17 [label="assign\nvoid\ntests/contract_testcases/solana/using_import.sol:3:34-43"]
+	structmember_18 [label="struct member #0 int64\ntests/contract_testcases/solana/using_import.sol:3:36-38"]
+	variable_19 [label="variable: s\nstruct S\ntests/contract_testcases/solana/using_import.sol:3:34-35"]
+	subtract [label="subtract\nint64\ntests/contract_testcases/solana/using_import.sol:3:34-43"]
+	load_21 [label="load int64\ntests/contract_testcases/solana/using_import.sol:3:34-43"]
+	structmember_22 [label="struct member #0 int64\ntests/contract_testcases/solana/using_import.sol:3:36-38"]
+	variable_23 [label="variable: s\nstruct S\ntests/contract_testcases/solana/using_import.sol:3:34-35"]
+	number_literal_24 [label="int64 literal: 1\ntests/contract_testcases/solana/using_import.sol:3:42-43"]
 	contract [label="contract c\ntests/contract_testcases/solana/using_import.sol:5:1-11:2"]
 	contract [label="contract c\ntests/contract_testcases/solana/using_import.sol:5:1-11:2"]
 	test [label="function test\ncontract: c\ntests/contract_testcases/solana/using_import.sol:7:2-35\nsignature test((int64,bool))\nvisibility public\nmutability nonpayable"]
 	test [label="function test\ncontract: c\ntests/contract_testcases/solana/using_import.sol:7:2-35\nsignature test((int64,bool))\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\nstruct S s"]
-	expr [label="expression\ntests/contract_testcases/solana/using_import.sol:8:3-10"]
+	parameters_28 [label="parameters\nstruct S s"]
+	expr_29 [label="expression\ntests/contract_testcases/solana/using_import.sol:8:3-10"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/using_import.sol:8:3-10"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/using_import.sol:8:3-10"]
 	internal_function [label="function(struct S) internal pure returns (void)\nfree function inc\ntests/contract_testcases/solana/using_import.sol:8:3-10"]
 	internal_function [label="function(struct S) internal pure returns (void)\nfree function inc\ntests/contract_testcases/solana/using_import.sol:8:3-10"]
-	variable [label="variable: s\nstruct S\ntests/contract_testcases/solana/using_import.sol:8:3-4"]
-	expr_10 [label="expression\ntests/contract_testcases/solana/using_import.sol:9:3-10"]
-	call_internal_function_11 [label="call internal function\ntests/contract_testcases/solana/using_import.sol:9:3-10"]
-	internal_function_12 [label="function(struct S) internal pure returns (void)\nfree function dec\ntests/contract_testcases/solana/using_import.sol:9:3-10"]
-	variable_13 [label="variable: s\nstruct S\ntests/contract_testcases/solana/using_import.sol:9:3-4"]
-	contract_14 [label="contract A\ntests/contract_testcases/solana/simple.sol:1:1-14"]
-	contract_15 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
+	variable_32 [label="variable: s\nstruct S\ntests/contract_testcases/solana/using_import.sol:8:3-4"]
+	expr_33 [label="expression\ntests/contract_testcases/solana/using_import.sol:9:3-10"]
+	call_internal_function_34 [label="call internal function\ntests/contract_testcases/solana/using_import.sol:9:3-10"]
+	internal_function_35 [label="function(struct S) internal pure returns (void)\nfree function dec\ntests/contract_testcases/solana/using_import.sol:9:3-10"]
+	variable_36 [label="variable: s\nstruct S\ntests/contract_testcases/solana/using_import.sol:9:3-4"]
+	contract_37 [label="contract A\ntests/contract_testcases/solana/simple.sol:1:1-14"]
+	contract_38 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/using_import.sol:5:1-11:2"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/using_import.sol:5:1-11:2"]
-	diagnostic_18 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/using_import.sol:7:2-35"]
-	diagnostic_19 [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-14"]
-	diagnostic_20 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
+	diagnostic_41 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/using_import.sol:7:2-35"]
+	diagnostic_42 [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-14"]
+	diagnostic_43 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:13"]
 	structs -> S
 	structs -> S
+	free_functions -> inc [label="function"]
+	inc -> parameters [label="parameters"]
+	inc -> expr [label="body"]
+	expr -> assign [label="expr"]
+	assign -> structmember [label="left"]
+	structmember -> variable [label="var"]
+	assign -> add [label="right"]
+	add -> load [label="left"]
+	load -> structmember_11 [label="expr"]
+	structmember_11 -> variable_12 [label="var"]
+	add -> number_literal [label="right"]
+	free_functions -> dec [label="function"]
+	dec -> parameters_15 [label="parameters"]
+	dec -> expr_16 [label="body"]
+	expr_16 -> assign_17 [label="expr"]
+	assign_17 -> structmember_18 [label="left"]
+	structmember_18 -> variable_19 [label="var"]
+	assign_17 -> subtract [label="right"]
+	subtract -> load_21 [label="left"]
+	load_21 -> structmember_22 [label="expr"]
+	structmember_22 -> variable_23 [label="var"]
+	subtract -> number_literal_24 [label="right"]
 	contracts -> contract
 	contracts -> contract
 	contract -> test [label="function"]
 	contract -> test [label="function"]
-	test -> parameters [label="parameters"]
-	test -> expr [label="body"]
-	expr -> call_internal_function [label="expr"]
+	test -> parameters_28 [label="parameters"]
+	test -> expr_29 [label="body"]
+	expr_29 -> call_internal_function [label="expr"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
-	call_internal_function -> variable [label="arg #0"]
-	expr -> expr_10 [label="next"]
-	expr_10 -> call_internal_function_11 [label="expr"]
-	call_internal_function_11 -> internal_function_12 [label="function"]
-	call_internal_function_11 -> variable_13 [label="arg #0"]
-	contracts -> contract_14
-	contracts -> contract_15
+	call_internal_function -> variable_32 [label="arg #0"]
+	expr_29 -> expr_33 [label="next"]
+	expr_33 -> call_internal_function_34 [label="expr"]
+	call_internal_function_34 -> internal_function_35 [label="function"]
+	call_internal_function_34 -> variable_36 [label="arg #0"]
+	contracts -> contract_37
+	contracts -> contract_38
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_18 [label="Warning"]
-	diagnostics -> diagnostic_19 [label="Debug"]
-	diagnostics -> diagnostic_20 [label="Debug"]
+	diagnostics -> diagnostic_41 [label="Warning"]
+	diagnostics -> diagnostic_42 [label="Debug"]
+	diagnostics -> diagnostic_43 [label="Debug"]
 }
 }

+ 41 - 21
tests/contract_testcases/solana/using_list.dot

@@ -1,36 +1,56 @@
 strict digraph "tests/contract_testcases/solana/using_list.sol" {
 strict digraph "tests/contract_testcases/solana/using_list.sol" {
+	id [label="function id\ntests/contract_testcases/solana/using_list.sol:1:1-40\nsignature id(uint256)\nvisibility internal\nmutability pure"]
+	parameters [label="parameters\nuint256 x"]
+	returns [label="returns\nuint256 "]
+	return [label="return\ntests/contract_testcases/solana/using_list.sol:2:5-13"]
+	variable [label="variable: x\nuint256\ntests/contract_testcases/solana/using_list.sol:2:12-13"]
+	zero [label="function zero\ntests/contract_testcases/solana/using_list.sol:4:1-5:40\nsignature zero(uint256)\nvisibility internal\nmutability pure"]
+	parameters_8 [label="parameters\nuint256 "]
+	returns_9 [label="returns\nuint256 "]
+	return_10 [label="return\ntests/contract_testcases/solana/using_list.sol:6:5-13"]
+	number_literal [label="uint256 literal: 0\ntests/contract_testcases/solana/using_list.sol:6:12-13"]
 	contract [label="contract C\ntests/contract_testcases/solana/using_list.sol:8:1-19:2"]
 	contract [label="contract C\ntests/contract_testcases/solana/using_list.sol:8:1-19:2"]
 	using [label="using for uint256\nfunction id tests/contract_testcases/solana/using_list.sol:1:1-40\nfunction zero tests/contract_testcases/solana/using_list.sol:4:1-5:40"]
 	using [label="using for uint256\nfunction id tests/contract_testcases/solana/using_list.sol:1:1-40\nfunction zero tests/contract_testcases/solana/using_list.sol:4:1-5:40"]
 	f [label="function f\ncontract: C\ntests/contract_testcases/solana/using_list.sol:10:5-51\nsignature f(uint256)\nvisibility external\nmutability pure"]
 	f [label="function f\ncontract: C\ntests/contract_testcases/solana/using_list.sol:10:5-51\nsignature f(uint256)\nvisibility external\nmutability pure"]
-	parameters [label="parameters\nuint256 z"]
-	returns [label="returns\nuint256 "]
-	return [label="return\ntests/contract_testcases/solana/using_list.sol:11:9-22"]
+	parameters_16 [label="parameters\nuint256 z"]
+	returns_17 [label="returns\nuint256 "]
+	return_18 [label="return\ntests/contract_testcases/solana/using_list.sol:11:9-22"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/using_list.sol:11:16-22"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/using_list.sol:11:16-22"]
 	internal_function [label="function(uint256) internal pure returns (uint256)\nfree function id\ntests/contract_testcases/solana/using_list.sol:11:16-22"]
 	internal_function [label="function(uint256) internal pure returns (uint256)\nfree function id\ntests/contract_testcases/solana/using_list.sol:11:16-22"]
-	variable [label="variable: z\nuint256\ntests/contract_testcases/solana/using_list.sol:11:16-17"]
+	variable_21 [label="variable: z\nuint256\ntests/contract_testcases/solana/using_list.sol:11:16-17"]
 	g [label="function g\ncontract: C\ntests/contract_testcases/solana/using_list.sol:14:5-52\nsignature g(uint256)\nvisibility external\nmutability pure"]
 	g [label="function g\ncontract: C\ntests/contract_testcases/solana/using_list.sol:14:5-52\nsignature g(uint256)\nvisibility external\nmutability pure"]
-	parameters_12 [label="parameters\nuint256 z"]
-	returns_13 [label="returns\nuint256 "]
-	return_14 [label="return\ntests/contract_testcases/solana/using_list.sol:15:9-24"]
-	call_internal_function_15 [label="call internal function\ntests/contract_testcases/solana/using_list.sol:15:16-24"]
-	internal_function_16 [label="function(uint256) internal pure returns (uint256)\nfree function zero\ntests/contract_testcases/solana/using_list.sol:15:16-24"]
-	variable_17 [label="variable: z\nuint256\ntests/contract_testcases/solana/using_list.sol:15:16-17"]
+	parameters_23 [label="parameters\nuint256 z"]
+	returns_24 [label="returns\nuint256 "]
+	return_25 [label="return\ntests/contract_testcases/solana/using_list.sol:15:9-24"]
+	call_internal_function_26 [label="call internal function\ntests/contract_testcases/solana/using_list.sol:15:16-24"]
+	internal_function_27 [label="function(uint256) internal pure returns (uint256)\nfree function zero\ntests/contract_testcases/solana/using_list.sol:15:16-24"]
+	variable_28 [label="variable: z\nuint256\ntests/contract_testcases/solana/using_list.sol:15:16-17"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/using_list.sol:8:1-19:2"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/using_list.sol:8:1-19:2"]
+	free_functions -> id [label="function"]
+	id -> parameters [label="parameters"]
+	id -> returns [label="returns"]
+	id -> return [label="body"]
+	return -> variable [label="expr"]
+	free_functions -> zero [label="function"]
+	zero -> parameters_8 [label="parameters"]
+	zero -> returns_9 [label="returns"]
+	zero -> return_10 [label="body"]
+	return_10 -> number_literal [label="expr"]
 	contracts -> contract
 	contracts -> contract
 	contract -> using [label="base"]
 	contract -> using [label="base"]
 	contract -> f [label="function"]
 	contract -> f [label="function"]
-	f -> parameters [label="parameters"]
-	f -> returns [label="returns"]
-	f -> return [label="body"]
-	return -> call_internal_function [label="expr"]
+	f -> parameters_16 [label="parameters"]
+	f -> returns_17 [label="returns"]
+	f -> return_18 [label="body"]
+	return_18 -> call_internal_function [label="expr"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
-	call_internal_function -> variable [label="arg #0"]
+	call_internal_function -> variable_21 [label="arg #0"]
 	contract -> g [label="function"]
 	contract -> g [label="function"]
-	g -> parameters_12 [label="parameters"]
-	g -> returns_13 [label="returns"]
-	g -> return_14 [label="body"]
-	return_14 -> call_internal_function_15 [label="expr"]
-	call_internal_function_15 -> internal_function_16 [label="function"]
-	call_internal_function_15 -> variable_17 [label="arg #0"]
+	g -> parameters_23 [label="parameters"]
+	g -> returns_24 [label="returns"]
+	g -> return_25 [label="body"]
+	return_25 -> call_internal_function_26 [label="expr"]
+	call_internal_function_26 -> internal_function_27 [label="function"]
+	call_internal_function_26 -> variable_28 [label="arg #0"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
 }
 }

+ 21 - 7
tests/contract_testcases/solana/using_literal.dot

@@ -1,18 +1,32 @@
 strict digraph "tests/contract_testcases/solana/using_literal.sol" {
 strict digraph "tests/contract_testcases/solana/using_literal.sol" {
+	double [label="function double\ntests/contract_testcases/solana/using_literal.sol:1:1-42\nsignature double(int256)\nvisibility internal\nmutability pure"]
+	parameters [label="parameters\nint256 x"]
+	returns [label="returns\nint256 "]
+	return [label="return\ntests/contract_testcases/solana/using_literal.sol:1:45-57"]
+	multiply [label="multiply\nint256\ntests/contract_testcases/solana/using_literal.sol:1:52-57"]
+	variable [label="variable: x\nint256\ntests/contract_testcases/solana/using_literal.sol:1:52-53"]
+	number_literal [label="int256 literal: 2\ntests/contract_testcases/solana/using_literal.sol:1:56-57"]
 	contract [label="contract C\ntests/contract_testcases/solana/using_literal.sol:4:1-9:2"]
 	contract [label="contract C\ntests/contract_testcases/solana/using_literal.sol:4:1-9:2"]
 	foo [label="function foo\ncontract: C\ntests/contract_testcases/solana/using_literal.sol:6:2-42\nsignature foo()\nvisibility public\nmutability pure"]
 	foo [label="function foo\ncontract: C\ntests/contract_testcases/solana/using_literal.sol:6:2-42\nsignature foo()\nvisibility public\nmutability pure"]
-	returns [label="returns\nint256 "]
-	return [label="return\ntests/contract_testcases/solana/using_literal.sol:7:3-21"]
+	returns_12 [label="returns\nint256 "]
+	return_13 [label="return\ntests/contract_testcases/solana/using_literal.sol:7:3-21"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/using_literal.sol:7:10-21"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/solana/using_literal.sol:7:10-21"]
 	internal_function [label="function(int256) internal pure returns (int256)\nfree function double\ntests/contract_testcases/solana/using_literal.sol:7:10-21"]
 	internal_function [label="function(int256) internal pure returns (int256)\nfree function double\ntests/contract_testcases/solana/using_literal.sol:7:10-21"]
-	number_literal [label="int256 literal: 42\ntests/contract_testcases/solana/using_literal.sol:7:10-12"]
+	number_literal_16 [label="int256 literal: 42\ntests/contract_testcases/solana/using_literal.sol:7:10-12"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/using_literal.sol:4:1-9:2"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/using_literal.sol:4:1-9:2"]
+	free_functions -> double [label="function"]
+	double -> parameters [label="parameters"]
+	double -> returns [label="returns"]
+	double -> return [label="body"]
+	return -> multiply [label="expr"]
+	multiply -> variable [label="left"]
+	multiply -> number_literal [label="right"]
 	contracts -> contract
 	contracts -> contract
 	contract -> foo [label="function"]
 	contract -> foo [label="function"]
-	foo -> returns [label="returns"]
-	foo -> return [label="body"]
-	return -> call_internal_function [label="expr"]
+	foo -> returns_12 [label="returns"]
+	foo -> return_13 [label="body"]
+	return_13 -> call_internal_function [label="expr"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
-	call_internal_function -> number_literal [label="arg #0"]
+	call_internal_function -> number_literal_16 [label="arg #0"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
 }
 }

+ 6 - 6
tests/contract_testcases/substrate/account_info.dot

@@ -1,16 +1,16 @@
 strict digraph "tests/contract_testcases/substrate/account_info.sol" {
 strict digraph "tests/contract_testcases/substrate/account_info.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/account_info.sol:1:1-6:2"]
 	contract [label="contract c\ntests/contract_testcases/substrate/account_info.sol:1:1-6:2"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/account_info.sol:1:1-6:2"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/account_info.sol:1:1-6:2"]
-	diagnostic_5 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:2:2-13"]
-	diagnostic_6 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:4:15-26"]
-	diagnostic_7 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:4:44-55"]
-	diagnostic_8 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:5:18-29"]
-	diagnostic_9 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:5:48-59"]
+	diagnostic_4 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:2:2-13"]
+	diagnostic_5 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:4:15-26"]
+	diagnostic_6 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:4:44-55"]
+	diagnostic_7 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:5:18-29"]
+	diagnostic_8 [label="type 'AccountInfo' not found\nlevel Error\ntests/contract_testcases/substrate/account_info.sol:5:48-59"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_4 [label="Error"]
 	diagnostics -> diagnostic_5 [label="Error"]
 	diagnostics -> diagnostic_5 [label="Error"]
 	diagnostics -> diagnostic_6 [label="Error"]
 	diagnostics -> diagnostic_6 [label="Error"]
 	diagnostics -> diagnostic_7 [label="Error"]
 	diagnostics -> diagnostic_7 [label="Error"]
 	diagnostics -> diagnostic_8 [label="Error"]
 	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/array_dimensions.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions.sol" {
 strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions.sol:2:9-4:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions.sol:2:9-4:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions.sol:2:9-4:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions.sol:2:9-4:10"]
-	diagnostic_5 [label="zero size array not permitted\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions.sol:3:18-25"]
+	diagnostic_4 [label="zero size array not permitted\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions.sol:3:18-25"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/array_dimensions_01.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions_01.sol" {
 strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions_01.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_01.sol:2:9-4:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_01.sol:2:9-4:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_01.sol:2:9-4:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_01.sol:2:9-4:10"]
-	diagnostic_5 [label="negative literal -10 not allowed for unsigned type 'uint256'\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_01.sol:3:18-21"]
+	diagnostic_4 [label="negative literal -10 not allowed for unsigned type 'uint256'\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_01.sol:3:18-21"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/array_dimensions_02.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions_02.sol" {
 strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions_02.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_02.sol:2:9-4:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_02.sol:2:9-4:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_02.sol:2:9-4:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_02.sol:2:9-4:10"]
-	diagnostic_5 [label="zero size array not permitted\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_02.sol:3:18-24"]
+	diagnostic_4 [label="zero size array not permitted\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_02.sol:3:18-24"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/array_dimensions_03.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions_03.so
 	e [label="name: e\ncontract: foo\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:3:13-34\nvalue: e1\nvalue: e2\nvalue: e3"]
 	e [label="name: e\ncontract: foo\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:3:13-34\nvalue: e1\nvalue: e2\nvalue: e3"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:2:9-5:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:2:9-5:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:2:9-5:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:2:9-5:10"]
-	diagnostic_7 [label="divide by zero\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:4:15-20"]
+	diagnostic_6 [label="divide by zero\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_03.sol:4:15-20"]
 	enums -> e
 	enums -> e
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/array_dimensions_04.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/array_dimensions_04.so
 	bar [label="name:bar\ncontract: foo\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:3:20-23\nfield name:x ty:int32"]
 	bar [label="name:bar\ncontract: foo\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:3:20-23\nfield name:x ty:int32"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:2:9-7:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:2:9-7:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:2:9-7:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:2:9-7:10"]
-	diagnostic_7 [label="divide by zero\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:6:17-22"]
+	diagnostic_6 [label="divide by zero\nlevel Error\ntests/contract_testcases/substrate/arrays/array_dimensions_04.sol:6:17-22"]
 	structs -> bar
 	structs -> bar
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/arrays/data_locations.sol" {
 strict digraph "tests/contract_testcases/substrate/arrays/data_locations.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations.sol:2:9-5:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations.sol:2:9-5:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations.sol:2:9-5:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations.sol:2:9-5:10"]
-	diagnostic_5 [label="data location 'storage' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations.sol:3:31-38"]
+	diagnostic_4 [label="data location 'storage' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations.sol:3:31-38"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_01.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/arrays/data_locations_01.sol" {
 strict digraph "tests/contract_testcases/substrate/arrays/data_locations_01.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_01.sol:2:9-5:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_01.sol:2:9-5:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_01.sol:2:9-5:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_01.sol:2:9-5:10"]
-	diagnostic_5 [label="data location 'calldata' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_01.sol:3:31-39"]
+	diagnostic_4 [label="data location 'calldata' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_01.sol:3:31-39"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_02.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/data_locations_02.sol"
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:2:9-6:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:2:9-6:10"]
-	diagnostic_7 [label="data location 'memory' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:4:31-37"]
+	diagnostic_6 [label="data location 'memory' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_02.sol:4:31-37"]
 	enums -> foo2
 	enums -> foo2
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_03.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/data_locations_03.sol"
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:2:9-6:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:2:9-6:10"]
-	diagnostic_7 [label="data location 'calldata' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:4:55-63"]
+	diagnostic_6 [label="data location 'calldata' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_03.sol:4:55-63"]
 	enums -> foo2
 	enums -> foo2
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_04.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/data_locations_04.sol"
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:2:9-6:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:2:9-6:10"]
-	diagnostic_7 [label="data location 'calldata' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:4:55-63"]
+	diagnostic_6 [label="data location 'calldata' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_04.sol:4:55-63"]
 	enums -> foo2
 	enums -> foo2
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_05.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/data_locations_05.sol"
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:2:9-6:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:2:9-6:10"]
-	diagnostic_7 [label="data location 'storage' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:4:54-61"]
+	diagnostic_6 [label="data location 'storage' can only be specified for array, struct or mapping\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_05.sol:4:54-61"]
 	enums -> foo2
 	enums -> foo2
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_06.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/data_locations_06.sol"
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:2:9-6:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:2:9-6:10"]
-	diagnostic_7 [label="parameter of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:4:34-41"]
+	diagnostic_6 [label="parameter of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_06.sol:4:34-41"]
 	enums -> foo2
 	enums -> foo2
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_07.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/data_locations_07.sol"
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:2:9-6:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:2:9-6:10"]
-	diagnostic_7 [label="return type of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:4:52-59"]
+	diagnostic_6 [label="return type of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_07.sol:4:52-59"]
 	enums -> foo2
 	enums -> foo2
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/arrays/data_locations_08.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/arrays/data_locations_08.sol"
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	foo2 [label="name: foo2\ncontract: foo\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:3:13-37\nvalue: bar1\nvalue: bar2"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:2:9-6:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:2:9-6:10"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:2:9-6:10"]
-	diagnostic_7 [label="return type of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:4:53-60"]
+	diagnostic_6 [label="return type of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/arrays/data_locations_08.sol:4:53-60"]
 	enums -> foo2
 	enums -> foo2
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/calls/payable_functions.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions.sol" {
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions.sol:2:9-6:10"]
-	diagnostic_5 [label="receive function must be declared external\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions.sol:3:13-29"]
+	diagnostic_4 [label="receive function must be declared external\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions.sol:3:13-29"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/calls/payable_functions_01.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions_01.sol" {
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions_01.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions_01.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions_01.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions_01.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions_01.sol:2:9-6:10"]
-	diagnostic_5 [label="receive function must be declared payable\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions_01.sol:3:13-31"]
+	diagnostic_4 [label="receive function must be declared payable\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions_01.sol:3:13-31"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/calls/payable_functions_02.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions_02.sol" {
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions_02.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions_02.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions_02.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions_02.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions_02.sol:2:9-6:10"]
-	diagnostic_5 [label="fallback function must not be declare payable, use 'receive() external payable' instead\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions_02.sol:3:13-40"]
+	diagnostic_4 [label="fallback function must not be declare payable, use 'receive() external payable' instead\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions_02.sol:3:13-40"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/calls/payable_functions_03.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions_03.sol" {
 strict digraph "tests/contract_testcases/substrate/calls/payable_functions_03.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions_03.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/calls/payable_functions_03.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions_03.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/payable_functions_03.sol:2:9-6:10"]
-	diagnostic_5 [label="fallback function must be declared external\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions_03.sol:3:13-30"]
+	diagnostic_4 [label="fallback function must be declared external\nlevel Error\ntests/contract_testcases/substrate/calls/payable_functions_03.sol:3:13-30"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/contracts/contract_name.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/contracts/contract_name.sol" {
 strict digraph "tests/contract_testcases/substrate/contracts/contract_name.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name.sol:1:1-3:10"]
-	diagnostic_5 [label="function cannot have same name as the contract\nlevel Error\ntests/contract_testcases/substrate/contracts/contract_name.sol:2:13-35"]
+	diagnostic_4 [label="function cannot have same name as the contract\nlevel Error\ntests/contract_testcases/substrate/contracts/contract_name.sol:2:13-35"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 3 - 3
tests/contract_testcases/substrate/contracts/contract_name_01.dot

@@ -2,11 +2,11 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_01.so
 	test [label="name: test\ncontract: test\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:2:13-27\nvalue: a"]
 	test [label="name: test\ncontract: test\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:2:13-27\nvalue: a"]
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-3:10"]
-	diagnostic_7 [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:2:18-22"]
+	diagnostic_6 [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:2:18-22"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-3:10"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-3:10"]
 	enums -> test
 	enums -> test
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Warning"]
-	diagnostic_7 -> note [label="note"]
+	diagnostics -> diagnostic_6 [label="Warning"]
+	diagnostic_6 -> note [label="note"]
 }
 }

+ 4 - 4
tests/contract_testcases/substrate/contracts/contract_name_02.dot

@@ -2,13 +2,13 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_02.so
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:1:1-3:10"]
 	var [label="variable test\nvisibility internal\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:2:13-22"]
 	var [label="variable test\nvisibility internal\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:2:13-22"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:1:1-3:10"]
-	diagnostic_6 [label="storage variable 'test' has never been used\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:2:13-22"]
-	diagnostic_7 [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:2:18-22"]
+	diagnostic_5 [label="storage variable 'test' has never been used\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:2:13-22"]
+	diagnostic_6 [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:2:18-22"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:1:1-3:10"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:1:1-3:10"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_5 [label="Warning"]
 	diagnostics -> diagnostic_6 [label="Warning"]
 	diagnostics -> diagnostic_6 [label="Warning"]
-	diagnostics -> diagnostic_7 [label="Warning"]
-	diagnostic_7 -> note [label="note"]
+	diagnostic_6 -> note [label="note"]
 }
 }

+ 3 - 3
tests/contract_testcases/substrate/contracts/contract_name_03.dot

@@ -2,11 +2,11 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_03.so
 	test [label="name:test\ncontract: test\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:2:20-24\nfield name:a ty:bool"]
 	test [label="name:test\ncontract: test\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:2:20-24\nfield name:a ty:bool"]
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-3:10"]
-	diagnostic_7 [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:2:20-24"]
+	diagnostic_6 [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:2:20-24"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-3:10"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-3:10"]
 	structs -> test
 	structs -> test
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Warning"]
-	diagnostic_7 -> note [label="note"]
+	diagnostics -> diagnostic_6 [label="Warning"]
+	diagnostic_6 -> note [label="note"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/events/event_decl.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl.sol:3:19-22"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl.sol:3:19-22"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl.sol:2:9-4:10"]
-	diagnostic_7 [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl.sol:3:19-22"]
+	diagnostic_6 [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl.sol:3:19-22"]
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostics -> diagnostic_6 [label="Warning"]
 }
 }

+ 5 - 5
tests/contract_testcases/substrate/events/event_decl_02.dot

@@ -3,14 +3,14 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_02.sol" {
 	e_3 [label="name:e\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
 	e_3 [label="name:e\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_02.sol:3:9-5:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_02.sol:3:9-5:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_02.sol:3:9-5:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_02.sol:3:9-5:10"]
-	diagnostic_9 [label="e is already defined as an enum\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
+	diagnostic_8 [label="e is already defined as an enum\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/events/event_decl_02.sol:2:14-15"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/events/event_decl_02.sol:2:14-15"]
-	diagnostic_11 [label="event 'e' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
+	diagnostic_10 [label="event 'e' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
 	enums -> e
 	enums -> e
 	events -> e_3
 	events -> e_3
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_9 [label="Warning"]
-	diagnostic_9 -> note [label="note"]
-	diagnostics -> diagnostic_11 [label="Warning"]
+	diagnostics -> diagnostic_8 [label="Warning"]
+	diagnostic_8 -> note [label="note"]
+	diagnostics -> diagnostic_10 [label="Warning"]
 }
 }

+ 3 - 3
tests/contract_testcases/substrate/events/event_decl_03.dot

@@ -2,11 +2,11 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_03.sol" {
 	e [label="name: e\ncontract: c\ntests/contract_testcases/substrate/events/event_decl_03.sol:3:13-26\nvalue: a1"]
 	e [label="name: e\ncontract: c\ntests/contract_testcases/substrate/events/event_decl_03.sol:3:13-26\nvalue: a1"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_03.sol:2:9-5:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_03.sol:2:9-5:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_03.sol:2:9-5:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_03.sol:2:9-5:10"]
-	diagnostic_7 [label="e is already defined as an enum\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_03.sol:4:19-20"]
+	diagnostic_6 [label="e is already defined as an enum\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_03.sol:4:19-20"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/events/event_decl_03.sol:3:18-19"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/events/event_decl_03.sol:3:18-19"]
 	enums -> e
 	enums -> e
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostic_7 -> note [label="note"]
+	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostic_6 -> note [label="note"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/events/event_decl_04.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_04.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_04.sol:3:19-22\nfield name:x ty:unresolved indexed:no"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_04.sol:3:19-22\nfield name:x ty:unresolved indexed:no"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_04.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_04.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_04.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_04.sol:2:9-4:10"]
-	diagnostic_7 [label="mapping type is not permitted as event field\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_04.sol:3:24-48"]
+	diagnostic_6 [label="mapping type is not permitted as event field\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_04.sol:3:24-48"]
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/events/event_decl_05.dot

@@ -3,10 +3,10 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_05.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_05.sol:7:19-22\nfield name:x ty:unresolved indexed:no"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_05.sol:7:19-22\nfield name:x ty:unresolved indexed:no"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_05.sol:6:9-8:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_05.sol:6:9-8:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_05.sol:6:9-8:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_05.sol:6:9-8:10"]
-	diagnostic_9 [label="mapping type is not permitted as event field\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_05.sol:7:24-27"]
+	diagnostic_8 [label="mapping type is not permitted as event field\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_05.sol:7:24-27"]
 	structs -> s
 	structs -> s
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_9 [label="Error"]
+	diagnostics -> diagnostic_8 [label="Error"]
 }
 }

+ 3 - 3
tests/contract_testcases/substrate/events/event_decl_06.dot

@@ -2,11 +2,11 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_06.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:19-22\nfield name:x ty:bool indexed:no\nfield name:y ty:uint32 indexed:no"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:19-22\nfield name:x ty:bool indexed:no\nfield name:y ty:uint32 indexed:no"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_06.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_06.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_06.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_06.sol:2:9-4:10"]
-	diagnostic_7 [label="event 'foo' has duplicate field name 'x'\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:50-51"]
+	diagnostic_6 [label="event 'foo' has duplicate field name 'x'\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:50-51"]
 	note [label="location of previous declaration of 'x'\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:24-30"]
 	note [label="location of previous declaration of 'x'\ntests/contract_testcases/substrate/events/event_decl_06.sol:3:24-30"]
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostic_7 -> note [label="note"]
+	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostic_6 -> note [label="note"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/events/event_decl_07.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_07.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_07.sol:3:19-22\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes\nfield name:f4 ty:bool indexed:yes"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_07.sol:3:19-22\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes\nfield name:f4 ty:bool indexed:yes"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_07.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_07.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_07.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_07.sol:2:9-4:10"]
-	diagnostic_7 [label="event definition for 'foo' has 4 indexed fields where 3 permitted\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_07.sol:3:19-22"]
+	diagnostic_6 [label="event definition for 'foo' has 4 indexed fields where 3 permitted\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_07.sol:3:19-22"]
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/events/event_decl_08.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_08.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_08.sol:3:19-22\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_08.sol:3:19-22\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_08.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_08.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_08.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_08.sol:2:9-4:10"]
-	diagnostic_7 [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_08.sol:3:19-22"]
+	diagnostic_6 [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_08.sol:3:19-22"]
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostics -> diagnostic_6 [label="Warning"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/events/event_decl_09.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_09.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_09.sol:3:19-22\nanonymous\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes\nfield name:f4 ty:bool indexed:yes\nfield name:f5 ty:bool indexed:yes"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_09.sol:3:19-22\nanonymous\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes\nfield name:f4 ty:bool indexed:yes\nfield name:f5 ty:bool indexed:yes"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_09.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_09.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_09.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_09.sol:2:9-4:10"]
-	diagnostic_7 [label="anonymous event definition for 'foo' has 5 indexed fields where 4 permitted\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_09.sol:3:19-22"]
+	diagnostic_6 [label="anonymous event definition for 'foo' has 5 indexed fields where 4 permitted\nlevel Error\ntests/contract_testcases/substrate/events/event_decl_09.sol:3:19-22"]
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/events/event_decl_10.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_10.sol" {
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_10.sol:3:19-22\nanonymous\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes\nfield name:f4 ty:bool indexed:yes"]
 	foo [label="name:foo\ncontract: 0\ntests/contract_testcases/substrate/events/event_decl_10.sol:3:19-22\nanonymous\nfield name:f1 ty:bool indexed:yes\nfield name:f2 ty:bool indexed:yes\nfield name:f3 ty:bool indexed:yes\nfield name:f4 ty:bool indexed:yes"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_10.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/events/event_decl_10.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_10.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_10.sol:2:9-4:10"]
-	diagnostic_7 [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_10.sol:3:19-22"]
+	diagnostic_6 [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_10.sol:3:19-22"]
 	events -> foo
 	events -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostics -> diagnostic_6 [label="Warning"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/function_types/decls_06.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/function_types/decls_06.sol" {
 strict digraph "tests/contract_testcases/substrate/function_types/decls_06.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/function_types/decls_06.sol:1:1-4:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/function_types/decls_06.sol:1:1-4:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_06.sol:1:1-4:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_06.sol:1:1-4:10"]
-	diagnostic_5 [label="parameter of type 'function internal' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_06.sol:2:26-72"]
+	diagnostic_4 [label="parameter of type 'function internal' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_06.sol:2:26-72"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/function_types/decls_07.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/function_types/decls_07.sol" {
 strict digraph "tests/contract_testcases/substrate/function_types/decls_07.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/function_types/decls_07.sol:1:1-4:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/function_types/decls_07.sol:1:1-4:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_07.sol:1:1-4:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_07.sol:1:1-4:10"]
-	diagnostic_5 [label="return type 'function internal' not allowed in public or external functions\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_07.sol:2:44-90"]
+	diagnostic_4 [label="return type 'function internal' not allowed in public or external functions\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_07.sol:2:44-90"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/function_types/decls_08.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/function_types/decls_08.sol" {
 strict digraph "tests/contract_testcases/substrate/function_types/decls_08.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/function_types/decls_08.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/function_types/decls_08.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_08.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/function_types/decls_08.sol:1:1-3:10"]
-	diagnostic_5 [label="variable of type internal function cannot be 'public'\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_08.sol:2:13-66"]
+	diagnostic_4 [label="variable of type internal function cannot be 'public'\nlevel Error\ntests/contract_testcases/substrate/function_types/decls_08.sol:2:13-66"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 4 - 4
tests/contract_testcases/substrate/functions/payable.dot

@@ -3,12 +3,12 @@ strict digraph "tests/contract_testcases/substrate/functions/payable.sol" {
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable.sol:5:13-24"]
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable.sol:5:13-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable.sol:5:23-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable.sol:5:23-24"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable.sol:2:9-26"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable.sol:2:9-26"]
-	diagnostic_7 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable.sol:4:9-10:10"]
-	diagnostic_8 [label="internal or private function cannot be payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable.sol:7:29-36"]
+	diagnostic_6 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable.sol:4:9-10:10"]
+	diagnostic_7 [label="internal or private function cannot be payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable.sol:7:29-36"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Debug"]
+	diagnostics -> diagnostic_7 [label="Error"]
 }
 }

+ 4 - 4
tests/contract_testcases/substrate/functions/payable_01.dot

@@ -3,12 +3,12 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_01.sol" {
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable_01.sol:5:13-24"]
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable_01.sol:5:13-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable_01.sol:5:23-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable_01.sol:5:23-24"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_01.sol:2:9-26"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_01.sol:2:9-26"]
-	diagnostic_7 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_01.sol:4:9-10:10"]
-	diagnostic_8 [label="internal or private function cannot be payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable_01.sol:7:29-36"]
+	diagnostic_6 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_01.sol:4:9-10:10"]
+	diagnostic_7 [label="internal or private function cannot be payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable_01.sol:7:29-36"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Debug"]
+	diagnostics -> diagnostic_7 [label="Error"]
 }
 }

+ 4 - 4
tests/contract_testcases/substrate/functions/payable_02.dot

@@ -3,12 +3,12 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_02.sol" {
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable_02.sol:5:13-24"]
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable_02.sol:5:13-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable_02.sol:5:23-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable_02.sol:5:23-24"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_02.sol:2:9-26"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_02.sol:2:9-26"]
-	diagnostic_7 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_02.sol:4:9-10:10"]
-	diagnostic_8 [label="receive function must be declared payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable_02.sol:7:13-31"]
+	diagnostic_6 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_02.sol:4:9-10:10"]
+	diagnostic_7 [label="receive function must be declared payable\nlevel Error\ntests/contract_testcases/substrate/functions/payable_02.sol:7:13-31"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Debug"]
+	diagnostics -> diagnostic_7 [label="Error"]
 }
 }

+ 4 - 4
tests/contract_testcases/substrate/functions/payable_03.dot

@@ -3,12 +3,12 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_03.sol" {
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable_03.sol:5:13-24"]
 	var [label="variable i\nvisibility internal\ntests/contract_testcases/substrate/functions/payable_03.sol:5:13-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable_03.sol:5:23-24"]
 	number_literal [label="int32 literal: 0\ntests/contract_testcases/substrate/functions/payable_03.sol:5:23-24"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_03.sol:2:9-26"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_03.sol:2:9-26"]
-	diagnostic_7 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_03.sol:4:9-10:10"]
-	diagnostic_8 [label="fallback function must not be declare payable, use 'receive() external payable' instead\nlevel Error\ntests/contract_testcases/substrate/functions/payable_03.sol:7:13-40"]
+	diagnostic_6 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_03.sol:4:9-10:10"]
+	diagnostic_7 [label="fallback function must not be declare payable, use 'receive() external payable' instead\nlevel Error\ntests/contract_testcases/substrate/functions/payable_03.sol:7:13-40"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Debug"]
+	diagnostics -> diagnostic_7 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/functions/return_not_returns.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/functions/return_not_returns.sol" {
 strict digraph "tests/contract_testcases/substrate/functions/return_not_returns.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/functions/return_not_returns.sol:1:1-5:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/functions/return_not_returns.sol:1:1-5:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/functions/return_not_returns.sol:1:1-5:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/functions/return_not_returns.sol:1:1-5:10"]
-	diagnostic_5 [label="'return' unexpected. Did you mean 'returns'?\nlevel Error\ntests/contract_testcases/substrate/functions/return_not_returns.sol:2:40-46"]
+	diagnostic_4 [label="'return' unexpected. Did you mean 'returns'?\nlevel Error\ntests/contract_testcases/substrate/functions/return_not_returns.sol:2:40-46"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/functions/stray_semicolon_01.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/functions/stray_semicolon_01.
 	a [label="name:a\ncontract: x\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:21-22\nfield name:f1 ty:uint32"]
 	a [label="name:a\ncontract: x\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:21-22\nfield name:f1 ty:uint32"]
 	contract [label="contract x\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:1-40"]
 	contract [label="contract x\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:1-40"]
 	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:1-40"]
 	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:1-40"]
-	diagnostic_7 [label="stray semicolon\nlevel Error\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:37-38"]
+	diagnostic_6 [label="stray semicolon\nlevel Error\ntests/contract_testcases/substrate/functions/stray_semicolon_01.sol:1:37-38"]
 	structs -> a
 	structs -> a
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 6 - 6
tests/contract_testcases/substrate/inheritance/inherit_types_03.dot

@@ -1,14 +1,14 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_03.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_03.sol" {
 	enum_x [label="name: enum_x\ncontract: b\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:9:13-35\nvalue: x1\nvalue: x2"]
 	enum_x [label="name: enum_x\ncontract: b\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:9:13-35\nvalue: x1\nvalue: x2"]
 	contract [label="contract a\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:2:9-6:10"]
 	contract [label="contract a\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:2:9-6:10"]
-	contract_5 [label="contract b\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:8:9-10:10"]
+	contract_4 [label="contract b\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:8:9-10:10"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:2:9-6:10"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:2:9-6:10"]
-	diagnostic_8 [label="type 'enum_x' not found\nlevel Error\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:3:45-51"]
-	diagnostic_9 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:8:9-10:10"]
+	diagnostic_7 [label="type 'enum_x' not found\nlevel Error\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:3:45-51"]
+	diagnostic_8 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_03.sol:8:9-10:10"]
 	enums -> enum_x
 	enums -> enum_x
 	contracts -> contract
 	contracts -> contract
-	contracts -> contract_5
+	contracts -> contract_4
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
-	diagnostics -> diagnostic_9 [label="Debug"]
+	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_8 [label="Debug"]
 }
 }

+ 4 - 4
tests/contract_testcases/substrate/inheritance/test_interface.dot

@@ -1,10 +1,10 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface.sol:2:9-5:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface.sol:2:9-5:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface.sol:2:9-5:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface.sol:2:9-5:10"]
-	diagnostic_5 [label="constructor not allowed in an interface\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface.sol:3:13-41"]
-	diagnostic_6 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/inheritance/test_interface.sol:3:35-41"]
+	diagnostic_4 [label="constructor not allowed in an interface\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface.sol:3:13-41"]
+	diagnostic_5 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/inheritance/test_interface.sol:3:35-41"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
-	diagnostics -> diagnostic_6 [label="Warning"]
+	diagnostics -> diagnostic_4 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Warning"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/inheritance/test_interface_01.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_01.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_01.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface_01.sol:2:9-4:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface_01.sol:2:9-4:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_01.sol:2:9-4:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_01.sol:2:9-4:10"]
-	diagnostic_5 [label="function in an interface cannot have a body\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_01.sol:3:13-36"]
+	diagnostic_4 [label="function in an interface cannot have a body\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_01.sol:3:13-36"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 3 - 3
tests/contract_testcases/substrate/inheritance/test_interface_02.dot

@@ -1,10 +1,10 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_02.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_02.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:2:9-4:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:2:9-4:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:2:9-4:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:2:9-4:10"]
-	diagnostic_5 [label="function marked 'virtual' cannot also be 'private'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:3:13-35"]
-	diagnostic_6 [label="functions must be declared 'external' in an interface\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:3:13-35"]
+	diagnostic_4 [label="function marked 'virtual' cannot also be 'private'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:3:13-35"]
+	diagnostic_5 [label="functions must be declared 'external' in an interface\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_02.sol:3:13-35"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_4 [label="Error"]
 	diagnostics -> diagnostic_5 [label="Error"]
 	diagnostics -> diagnostic_5 [label="Error"]
-	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/inheritance/test_interface_03.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_03.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_03.sol" {
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface_03.sol:2:9-4:10"]
 	contract [label="contract foo\ntests/contract_testcases/substrate/inheritance/test_interface_03.sol:2:9-4:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_03.sol:2:9-4:10"]
 	diagnostic [label="found interface 'foo'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_03.sol:2:9-4:10"]
-	diagnostic_5 [label="functions must be declared 'external' in an interface\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_03.sol:3:13-36"]
+	diagnostic_4 [label="functions must be declared 'external' in an interface\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_03.sol:3:13-36"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/inheritance/test_interface_07.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_07.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_07.sol" {
 	contract [label="contract bar\ntests/contract_testcases/substrate/inheritance/test_interface_07.sol:2:9-4:10"]
 	contract [label="contract bar\ntests/contract_testcases/substrate/inheritance/test_interface_07.sol:2:9-4:10"]
 	diagnostic [label="found interface 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_07.sol:2:9-4:10"]
 	diagnostic [label="found interface 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_07.sol:2:9-4:10"]
-	diagnostic_5 [label="interface 'bar' is not allowed to have contract variable 'x'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_07.sol:3:13-18"]
+	diagnostic_4 [label="interface 'bar' is not allowed to have contract variable 'x'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_07.sol:3:13-18"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/inheritance/test_interface_08.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_08.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_interface_08.sol" {
 	contract [label="contract bar\ntests/contract_testcases/substrate/inheritance/test_interface_08.sol:2:9-4:10"]
 	contract [label="contract bar\ntests/contract_testcases/substrate/inheritance/test_interface_08.sol:2:9-4:10"]
 	diagnostic [label="found interface 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_08.sol:2:9-4:10"]
 	diagnostic [label="found interface 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_interface_08.sol:2:9-4:10"]
-	diagnostic_5 [label="interface 'bar' is not allowed to have contract variable 'x'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_08.sol:3:13-31"]
+	diagnostic_4 [label="interface 'bar' is not allowed to have contract variable 'x'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_interface_08.sol:3:13-31"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 3 - 3
tests/contract_testcases/substrate/inheritance/test_override.dot

@@ -1,10 +1,10 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_override.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_override.sol" {
 	contract [label="contract base\ntests/contract_testcases/substrate/inheritance/test_override.sol:2:9-6:10"]
 	contract [label="contract base\ntests/contract_testcases/substrate/inheritance/test_override.sol:2:9-6:10"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_override.sol:2:9-6:10"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_override.sol:2:9-6:10"]
-	diagnostic_5 [label="function redeclared 'override'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_override.sol:3:45-53"]
+	diagnostic_4 [label="function redeclared 'override'\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_override.sol:3:45-53"]
 	note [label="location of previous declaration of 'override'\ntests/contract_testcases/substrate/inheritance/test_override.sol:3:36-44"]
 	note [label="location of previous declaration of 'override'\ntests/contract_testcases/substrate/inheritance/test_override.sol:3:36-44"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
-	diagnostic_5 -> note [label="note"]
+	diagnostics -> diagnostic_4 [label="Error"]
+	diagnostic_4 -> note [label="note"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/inheritance/test_super.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_super.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_super.sol" {
 	contract [label="contract super\ntests/contract_testcases/substrate/inheritance/test_super.sol:1:1-18"]
 	contract [label="contract super\ntests/contract_testcases/substrate/inheritance/test_super.sol:1:1-18"]
 	diagnostic [label="found contract 'super'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_super.sol:1:1-18"]
 	diagnostic [label="found contract 'super'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_super.sol:1:1-18"]
-	diagnostic_5 [label="'super' shadows name of a builtin\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_super.sol:1:10-15"]
+	diagnostic_4 [label="'super' shadows name of a builtin\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_super.sol:1:10-15"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/inheritance/test_virtual.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/inheritance/test_virtual.sol" {
 strict digraph "tests/contract_testcases/substrate/inheritance/test_virtual.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/inheritance/test_virtual.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/inheritance/test_virtual.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_virtual.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/test_virtual.sol:2:9-4:10"]
-	diagnostic_5 [label="function with no body missing 'virtual'. This was permitted in older versions of the Solidity language, please update.\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_virtual.sol:3:13-35"]
+	diagnostic_4 [label="function with no body missing 'virtual'. This was permitted in older versions of the Solidity language, please update.\nlevel Error\ntests/contract_testcases/substrate/inheritance/test_virtual.sol:3:13-35"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/libraries/restrictions.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions.sol:2:9-4:10"]
-	diagnostic_5 [label="constructor not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions.sol:3:13-27"]
+	diagnostic_4 [label="constructor not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions.sol:3:13-27"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/libraries/restrictions_01.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_01.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_01.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_01.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_01.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_01.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_01.sol:2:9-4:10"]
-	diagnostic_5 [label="receive not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_01.sol:3:13-31"]
+	diagnostic_4 [label="receive not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_01.sol:3:13-31"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/libraries/restrictions_02.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_02.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_02.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_02.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_02.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_02.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_02.sol:2:9-4:10"]
-	diagnostic_5 [label="fallback not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_02.sol:3:13-32"]
+	diagnostic_4 [label="fallback not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_02.sol:3:13-32"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/libraries/restrictions_03.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_03.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_03.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_03.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_03.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_03.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_03.sol:2:9-4:10"]
-	diagnostic_5 [label="function in a library cannot be payable\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_03.sol:3:13-40"]
+	diagnostic_4 [label="function in a library cannot be payable\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_03.sol:3:13-40"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/libraries/restrictions_05.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_05.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_05.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_05.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_05.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_05.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_05.sol:2:9-4:10"]
-	diagnostic_5 [label="function in a library cannot override\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_05.sol:3:28-36"]
+	diagnostic_4 [label="function in a library cannot override\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_05.sol:3:28-36"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 4 - 4
tests/contract_testcases/substrate/libraries/restrictions_06.dot

@@ -1,12 +1,12 @@
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_06.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_06.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:9-4:10"]
-	diagnostic_5 [label="library 'c' cannot have a base contract\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:22-23"]
-	diagnostic_6 [label="'x' not found\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:22-23"]
-	diagnostic_7 [label="fallback not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:3:13-32"]
+	diagnostic_4 [label="library 'c' cannot have a base contract\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:22-23"]
+	diagnostic_5 [label="'x' not found\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:2:22-23"]
+	diagnostic_6 [label="fallback not allowed in a library\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_06.sol:3:13-32"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_4 [label="Error"]
 	diagnostics -> diagnostic_5 [label="Error"]
 	diagnostics -> diagnostic_5 [label="Error"]
 	diagnostics -> diagnostic_6 [label="Error"]
 	diagnostics -> diagnostic_6 [label="Error"]
-	diagnostics -> diagnostic_7 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/libraries/restrictions_08.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_08.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/restrictions_08.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_08.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/restrictions_08.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_08.sol:2:9-4:10"]
 	diagnostic [label="found library 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/restrictions_08.sol:2:9-4:10"]
-	diagnostic_5 [label="library 'c' is not allowed to have contract variable 'x'\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_08.sol:3:13-18"]
+	diagnostic_4 [label="library 'c' is not allowed to have contract variable 'x'\nlevel Error\ntests/contract_testcases/substrate/libraries/restrictions_08.sol:3:13-18"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/libraries/using.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/libraries/using.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/using.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/using.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/using.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using.sol:2:9-4:10"]
-	diagnostic_5 [label="type 'x' not found\nlevel Error\ntests/contract_testcases/substrate/libraries/using.sol:3:25-26"]
+	diagnostic_4 [label="type 'x' not found\nlevel Error\ntests/contract_testcases/substrate/libraries/using.sol:3:25-26"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 76 - 34
tests/contract_testcases/substrate/libraries/using_07.dot

@@ -1,53 +1,95 @@
 strict digraph "tests/contract_testcases/substrate/libraries/using_07.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/using_07.sol" {
+	foo1 [label="function foo1\ntests/contract_testcases/substrate/libraries/using_07.sol:1:1-17\nsignature foo1()\nvisibility internal\nmutability nonpayable"]
+	foo2 [label="function foo2\ntests/contract_testcases/substrate/libraries/using_07.sol:1:19-2:20\nsignature foo2(int256)\nvisibility internal\nmutability nonpayable"]
+	parameters [label="parameters\nint256 "]
+	foo2_4 [label="function foo2\ntests/contract_testcases/substrate/libraries/using_07.sol:2:22-3:21\nsignature foo2(uint256)\nvisibility internal\nmutability nonpayable"]
+	parameters_5 [label="parameters\nuint256 "]
+	foo3 [label="function foo3\ntests/contract_testcases/substrate/libraries/using_07.sol:3:23-4:35\nsignature foo3(int256)\nvisibility internal\nmutability nonpayable"]
+	parameters_7 [label="parameters\nint256 v"]
+	returns [label="returns\nint256 "]
+	return [label="return\ntests/contract_testcases/substrate/libraries/using_07.sol:5:2-14"]
+	multiply [label="multiply\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:5:9-14"]
+	variable [label="variable: v\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:5:9-10"]
+	number_literal [label="int256 literal: 3\ntests/contract_testcases/substrate/libraries/using_07.sol:5:13-14"]
+	foo4 [label="function foo4\ntests/contract_testcases/substrate/libraries/using_07.sol:6:2-7:42\nsignature foo4(int256,int256)\nvisibility internal\nmutability nonpayable"]
+	parameters_14 [label="parameters\nint256 v\nint256 b"]
+	returns_15 [label="returns\nint256 "]
+	return_16 [label="return\ntests/contract_testcases/substrate/libraries/using_07.sol:8:2-18"]
+	add [label="add\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:8:9-18"]
+	multiply_18 [label="multiply\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:8:9-14"]
+	variable_19 [label="variable: v\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:8:9-10"]
+	number_literal_20 [label="int256 literal: 3\ntests/contract_testcases/substrate/libraries/using_07.sol:8:13-14"]
+	variable_21 [label="variable: b\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:8:17-18"]
 	contract [label="contract C\ntests/contract_testcases/substrate/libraries/using_07.sol:10:1-22:2"]
 	contract [label="contract C\ntests/contract_testcases/substrate/libraries/using_07.sol:10:1-22:2"]
 	using [label="using for int256"]
 	using [label="using for int256"]
-	using_4 [label="using for uint256"]
-	using_5 [label="using for int256\nfunction foo3 tests/contract_testcases/substrate/libraries/using_07.sol:3:23-4:35\nfunction foo4 tests/contract_testcases/substrate/libraries/using_07.sol:6:2-7:42"]
+	using_26 [label="using for uint256"]
+	using_27 [label="using for int256\nfunction foo3 tests/contract_testcases/substrate/libraries/using_07.sol:3:23-4:35\nfunction foo4 tests/contract_testcases/substrate/libraries/using_07.sol:6:2-7:42"]
 	test [label="function test\ncontract: C\ntests/contract_testcases/substrate/libraries/using_07.sol:17:2-29\nsignature test(int256)\nvisibility public\nmutability nonpayable"]
 	test [label="function test\ncontract: C\ntests/contract_testcases/substrate/libraries/using_07.sol:17:2-29\nsignature test(int256)\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\nint256 c"]
+	parameters_29 [label="parameters\nint256 c"]
 	var_decl [label="variable decl int256 a\ntests/contract_testcases/substrate/libraries/using_07.sol:18:3-19"]
 	var_decl [label="variable decl int256 a\ntests/contract_testcases/substrate/libraries/using_07.sol:18:3-19"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/substrate/libraries/using_07.sol:18:11-19"]
 	call_internal_function [label="call internal function\ntests/contract_testcases/substrate/libraries/using_07.sol:18:11-19"]
 	internal_function [label="function(int256) internal returns (int256)\nfree function foo3\ntests/contract_testcases/substrate/libraries/using_07.sol:18:11-19"]
 	internal_function [label="function(int256) internal returns (int256)\nfree function foo3\ntests/contract_testcases/substrate/libraries/using_07.sol:18:11-19"]
-	variable [label="variable: c\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:18:11-12"]
+	variable_33 [label="variable: c\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:18:11-12"]
 	expr [label="expression\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-12"]
 	expr [label="expression\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-12"]
-	call_internal_function_13 [label="call internal function\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-12"]
-	internal_function_14 [label="function(int256,int256) internal returns (void)\nfree function foo4\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-12"]
-	variable_15 [label="variable: a\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-4"]
-	number_literal [label="int256 literal: 1\ntests/contract_testcases/substrate/libraries/using_07.sol:20:10-11"]
+	call_internal_function_35 [label="call internal function\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-12"]
+	internal_function_36 [label="function(int256,int256) internal returns (void)\nfree function foo4\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-12"]
+	variable_37 [label="variable: a\nint256\ntests/contract_testcases/substrate/libraries/using_07.sol:20:3-4"]
+	number_literal_38 [label="int256 literal: 1\ntests/contract_testcases/substrate/libraries/using_07.sol:20:10-11"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_07.sol:10:1-22:2"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_07.sol:10:1-22:2"]
-	diagnostic_19 [label="'foo1' has no arguments, at least one argument required\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:12:9-13"]
+	diagnostic_41 [label="'foo1' has no arguments, at least one argument required\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:12:9-13"]
 	note [label="definition of 'foo1'\ntests/contract_testcases/substrate/libraries/using_07.sol:1:10-14"]
 	note [label="definition of 'foo1'\ntests/contract_testcases/substrate/libraries/using_07.sol:1:10-14"]
-	diagnostic_21 [label="'global' on using within contract not permitted\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:12:23-29"]
-	diagnostic_22 [label="'foo2' is an overloaded function\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:13:9-13"]
-	note_23 [label="definition of 'foo2'\ntests/contract_testcases/substrate/libraries/using_07.sol:2:10-14"]
-	note_24 [label="definition of 'foo2'\ntests/contract_testcases/substrate/libraries/using_07.sol:2:22-3:21"]
-	diagnostic_25 [label="'feh' not expected, did you mean 'global'?\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:13:21-24"]
-	diagnostic_26 [label="function cannot be used since first argument is 'int256' rather than the required 'uint256'\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:14:9-13"]
-	note_27 [label="definition of 'foo3'\ntests/contract_testcases/substrate/libraries/using_07.sol:4:10-14"]
+	diagnostic_43 [label="'global' on using within contract not permitted\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:12:23-29"]
+	diagnostic_44 [label="'foo2' is an overloaded function\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:13:9-13"]
+	note_45 [label="definition of 'foo2'\ntests/contract_testcases/substrate/libraries/using_07.sol:2:10-14"]
+	note_46 [label="definition of 'foo2'\ntests/contract_testcases/substrate/libraries/using_07.sol:2:22-3:21"]
+	diagnostic_47 [label="'feh' not expected, did you mean 'global'?\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:13:21-24"]
+	diagnostic_48 [label="function cannot be used since first argument is 'int256' rather than the required 'uint256'\nlevel Error\ntests/contract_testcases/substrate/libraries/using_07.sol:14:9-13"]
+	note_49 [label="definition of 'foo3'\ntests/contract_testcases/substrate/libraries/using_07.sol:4:10-14"]
+	free_functions -> foo1 [label="function"]
+	free_functions -> foo2 [label="function"]
+	foo2 -> parameters [label="parameters"]
+	free_functions -> foo2_4 [label="function"]
+	foo2_4 -> parameters_5 [label="parameters"]
+	free_functions -> foo3 [label="function"]
+	foo3 -> parameters_7 [label="parameters"]
+	foo3 -> returns [label="returns"]
+	foo3 -> return [label="body"]
+	return -> multiply [label="expr"]
+	multiply -> variable [label="left"]
+	multiply -> number_literal [label="right"]
+	free_functions -> foo4 [label="function"]
+	foo4 -> parameters_14 [label="parameters"]
+	foo4 -> returns_15 [label="returns"]
+	foo4 -> return_16 [label="body"]
+	return_16 -> add [label="expr"]
+	add -> multiply_18 [label="left"]
+	multiply_18 -> variable_19 [label="left"]
+	multiply_18 -> number_literal_20 [label="right"]
+	add -> variable_21 [label="right"]
 	contracts -> contract
 	contracts -> contract
 	contract -> using [label="base"]
 	contract -> using [label="base"]
-	contract -> using_3 [label="base"]
-	contract -> using_4 [label="base"]
-	contract -> using_5 [label="base"]
+	contract -> using_25 [label="base"]
+	contract -> using_26 [label="base"]
+	contract -> using_27 [label="base"]
 	contract -> test [label="function"]
 	contract -> test [label="function"]
-	test -> parameters [label="parameters"]
+	test -> parameters_29 [label="parameters"]
 	test -> var_decl [label="body"]
 	test -> var_decl [label="body"]
 	var_decl -> call_internal_function [label="init"]
 	var_decl -> call_internal_function [label="init"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
-	call_internal_function -> variable [label="arg #0"]
+	call_internal_function -> variable_33 [label="arg #0"]
 	var_decl -> expr [label="next"]
 	var_decl -> expr [label="next"]
-	expr -> call_internal_function_13 [label="expr"]
-	call_internal_function_13 -> internal_function_14 [label="function"]
-	call_internal_function_13 -> variable_15 [label="arg #0"]
-	call_internal_function_13 -> number_literal [label="arg #1"]
+	expr -> call_internal_function_35 [label="expr"]
+	call_internal_function_35 -> internal_function_36 [label="function"]
+	call_internal_function_35 -> variable_37 [label="arg #0"]
+	call_internal_function_35 -> number_literal_38 [label="arg #1"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_19 [label="Error"]
-	diagnostic_19 -> note [label="note"]
-	diagnostics -> diagnostic_21 [label="Error"]
-	diagnostics -> diagnostic_22 [label="Error"]
-	diagnostic_22 -> note_23 [label="note"]
-	diagnostic_22 -> note_24 [label="note"]
-	diagnostics -> diagnostic_25 [label="Error"]
-	diagnostics -> diagnostic_26 [label="Error"]
-	diagnostic_26 -> note_27 [label="note"]
+	diagnostics -> diagnostic_41 [label="Error"]
+	diagnostic_41 -> note [label="note"]
+	diagnostics -> diagnostic_43 [label="Error"]
+	diagnostics -> diagnostic_44 [label="Error"]
+	diagnostic_44 -> note_45 [label="note"]
+	diagnostic_44 -> note_46 [label="note"]
+	diagnostics -> diagnostic_47 [label="Error"]
+	diagnostics -> diagnostic_48 [label="Error"]
+	diagnostic_48 -> note_49 [label="note"]
 }
 }

+ 35 - 15
tests/contract_testcases/substrate/libraries/using_08.dot

@@ -1,26 +1,46 @@
 strict digraph "tests/contract_testcases/substrate/libraries/using_08.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/using_08.sol" {
 	S [label="name:S\ntests/contract_testcases/substrate/libraries/using_08.sol:2:8-9\nfield name:f1 ty:int256"]
 	S [label="name:S\ntests/contract_testcases/substrate/libraries/using_08.sol:2:8-9\nfield name:f1 ty:int256"]
+	foo [label="function foo\ntests/contract_testcases/substrate/libraries/using_08.sol:1:1-19\nsignature foo(int256)\nvisibility internal\nmutability nonpayable"]
+	parameters [label="parameters\nint256 "]
+	bar [label="function bar\ntests/contract_testcases/substrate/libraries/using_08.sol:2:21-3:24\nsignature bar((int256))\nvisibility internal\nmutability nonpayable"]
+	parameters_6 [label="parameters\nstruct S "]
+	test [label="function test\ntests/contract_testcases/substrate/libraries/using_08.sol:9:1-10:22\nsignature test(int256)\nvisibility internal\nmutability nonpayable"]
+	parameters_8 [label="parameters\nint256 a"]
+	expr [label="expression\ntests/contract_testcases/substrate/libraries/using_08.sol:11:2-9"]
+	call_internal_function [label="call internal function\ntests/contract_testcases/substrate/libraries/using_08.sol:11:2-9"]
+	internal_function [label="function(int256) internal returns (void)\nfree function foo\ntests/contract_testcases/substrate/libraries/using_08.sol:11:2-9"]
+	variable [label="variable: a\nint256\ntests/contract_testcases/substrate/libraries/using_08.sol:11:2-3"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/using_08.sol:13:1-18:2"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/using_08.sol:13:1-18:2"]
 	f [label="function f\ncontract: c\ntests/contract_testcases/substrate/libraries/using_08.sol:15:2-31\nsignature f((int256))\nvisibility public\nmutability nonpayable"]
 	f [label="function f\ncontract: c\ntests/contract_testcases/substrate/libraries/using_08.sol:15:2-31\nsignature f((int256))\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\nstruct S s"]
-	expr [label="expression\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-10"]
-	call_internal_function [label="call internal function\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-10"]
-	internal_function [label="function(struct S) internal returns (void)\nfree function bar\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-10"]
-	variable [label="variable: s\nstruct S\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-4"]
+	parameters_16 [label="parameters\nstruct S s"]
+	expr_17 [label="expression\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-10"]
+	call_internal_function_18 [label="call internal function\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-10"]
+	internal_function_19 [label="function(struct S) internal returns (void)\nfree function bar\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-10"]
+	variable_20 [label="variable: s\nstruct S\ntests/contract_testcases/substrate/libraries/using_08.sol:16:3-4"]
 	diagnostic [label="using must be bound to specific type, '*' cannot be used on file scope\nlevel Error\ntests/contract_testcases/substrate/libraries/using_08.sol:4:1-5:18"]
 	diagnostic [label="using must be bound to specific type, '*' cannot be used on file scope\nlevel Error\ntests/contract_testcases/substrate/libraries/using_08.sol:4:1-5:18"]
-	diagnostic_12 [label="'global' only permitted on user defined types\nlevel Error\ntests/contract_testcases/substrate/libraries/using_08.sol:6:21-27"]
-	diagnostic_13 [label="'meh' not expected, did you mean 'global'?\nlevel Error\ntests/contract_testcases/substrate/libraries/using_08.sol:8:19-22"]
-	diagnostic_14 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_08.sol:13:1-18:2"]
+	diagnostic_23 [label="'global' only permitted on user defined types\nlevel Error\ntests/contract_testcases/substrate/libraries/using_08.sol:6:21-27"]
+	diagnostic_24 [label="'meh' not expected, did you mean 'global'?\nlevel Error\ntests/contract_testcases/substrate/libraries/using_08.sol:8:19-22"]
+	diagnostic_25 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_08.sol:13:1-18:2"]
 	structs -> S
 	structs -> S
-	contracts -> contract
-	contract -> f [label="function"]
-	f -> parameters [label="parameters"]
-	f -> expr [label="body"]
+	free_functions -> foo [label="function"]
+	foo -> parameters [label="parameters"]
+	free_functions -> bar [label="function"]
+	bar -> parameters_6 [label="parameters"]
+	free_functions -> test [label="function"]
+	test -> parameters_8 [label="parameters"]
+	test -> expr [label="body"]
 	expr -> call_internal_function [label="expr"]
 	expr -> call_internal_function [label="expr"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> variable [label="arg #0"]
 	call_internal_function -> variable [label="arg #0"]
+	contracts -> contract
+	contract -> f [label="function"]
+	f -> parameters_16 [label="parameters"]
+	f -> expr_17 [label="body"]
+	expr_17 -> call_internal_function_18 [label="expr"]
+	call_internal_function_18 -> internal_function_19 [label="function"]
+	call_internal_function_18 -> variable_20 [label="arg #0"]
 	diagnostics -> diagnostic [label="Error"]
 	diagnostics -> diagnostic [label="Error"]
-	diagnostics -> diagnostic_12 [label="Error"]
-	diagnostics -> diagnostic_13 [label="Error"]
-	diagnostics -> diagnostic_14 [label="Debug"]
+	diagnostics -> diagnostic_23 [label="Error"]
+	diagnostics -> diagnostic_24 [label="Error"]
+	diagnostics -> diagnostic_25 [label="Debug"]
 }
 }

+ 33 - 13
tests/contract_testcases/substrate/libraries/using_09.dot

@@ -1,24 +1,44 @@
 strict digraph "tests/contract_testcases/substrate/libraries/using_09.sol" {
 strict digraph "tests/contract_testcases/substrate/libraries/using_09.sol" {
 	S [label="name:S\ntests/contract_testcases/substrate/libraries/using_09.sol:2:8-9\nfield name:f1 ty:int256"]
 	S [label="name:S\ntests/contract_testcases/substrate/libraries/using_09.sol:2:8-9\nfield name:f1 ty:int256"]
+	foo [label="function foo\ntests/contract_testcases/substrate/libraries/using_09.sol:1:1-19\nsignature foo(int256)\nvisibility internal\nmutability nonpayable"]
+	parameters [label="parameters\nint256 "]
+	bar [label="function bar\ntests/contract_testcases/substrate/libraries/using_09.sol:2:21-3:24\nsignature bar((int256))\nvisibility internal\nmutability nonpayable"]
+	parameters_6 [label="parameters\nstruct S "]
+	test [label="function test\ntests/contract_testcases/substrate/libraries/using_09.sol:7:1-8:22\nsignature test(int256)\nvisibility internal\nmutability nonpayable"]
+	parameters_8 [label="parameters\nint256 a"]
+	expr [label="expression\ntests/contract_testcases/substrate/libraries/using_09.sol:9:2-9"]
+	call_internal_function [label="call internal function\ntests/contract_testcases/substrate/libraries/using_09.sol:9:2-9"]
+	internal_function [label="function(int256) internal returns (void)\nfree function foo\ntests/contract_testcases/substrate/libraries/using_09.sol:9:2-9"]
+	variable [label="variable: a\nint256\ntests/contract_testcases/substrate/libraries/using_09.sol:9:2-3"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/using_09.sol:11:1-16:2"]
 	contract [label="contract c\ntests/contract_testcases/substrate/libraries/using_09.sol:11:1-16:2"]
 	f [label="function f\ncontract: c\ntests/contract_testcases/substrate/libraries/using_09.sol:13:2-31\nsignature f((int256))\nvisibility public\nmutability nonpayable"]
 	f [label="function f\ncontract: c\ntests/contract_testcases/substrate/libraries/using_09.sol:13:2-31\nsignature f((int256))\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\nstruct S s"]
-	expr [label="expression\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-10"]
-	call_internal_function [label="call internal function\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-10"]
-	internal_function [label="function(struct S) internal returns (void)\nfree function bar\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-10"]
-	variable [label="variable: s\nstruct S\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-4"]
+	parameters_16 [label="parameters\nstruct S s"]
+	expr_17 [label="expression\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-10"]
+	call_internal_function_18 [label="call internal function\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-10"]
+	internal_function_19 [label="function(struct S) internal returns (void)\nfree function bar\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-10"]
+	variable_20 [label="variable: s\nstruct S\ntests/contract_testcases/substrate/libraries/using_09.sol:14:3-4"]
 	diagnostic [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/libraries/using_09.sol:1:1-19"]
 	diagnostic [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/libraries/using_09.sol:1:1-19"]
-	diagnostic_12 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/libraries/using_09.sol:2:21-3:24"]
-	diagnostic_13 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_09.sol:11:1-16:2"]
+	diagnostic_23 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/libraries/using_09.sol:2:21-3:24"]
+	diagnostic_24 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/libraries/using_09.sol:11:1-16:2"]
 	structs -> S
 	structs -> S
-	contracts -> contract
-	contract -> f [label="function"]
-	f -> parameters [label="parameters"]
-	f -> expr [label="body"]
+	free_functions -> foo [label="function"]
+	foo -> parameters [label="parameters"]
+	free_functions -> bar [label="function"]
+	bar -> parameters_6 [label="parameters"]
+	free_functions -> test [label="function"]
+	test -> parameters_8 [label="parameters"]
+	test -> expr [label="body"]
 	expr -> call_internal_function [label="expr"]
 	expr -> call_internal_function [label="expr"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> internal_function [label="function"]
 	call_internal_function -> variable [label="arg #0"]
 	call_internal_function -> variable [label="arg #0"]
+	contracts -> contract
+	contract -> f [label="function"]
+	f -> parameters_16 [label="parameters"]
+	f -> expr_17 [label="body"]
+	expr_17 -> call_internal_function_18 [label="expr"]
+	call_internal_function_18 -> internal_function_19 [label="function"]
+	call_internal_function_18 -> variable_20 [label="arg #0"]
 	diagnostics -> diagnostic [label="Warning"]
 	diagnostics -> diagnostic [label="Warning"]
-	diagnostics -> diagnostic_12 [label="Warning"]
-	diagnostics -> diagnostic_13 [label="Debug"]
+	diagnostics -> diagnostic_23 [label="Warning"]
+	diagnostics -> diagnostic_24 [label="Debug"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_01.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol" {
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol:2:9-4:10"]
-	diagnostic_5 [label="key of mapping cannot be array type\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol:3:21-27"]
+	diagnostic_4 [label="key of mapping cannot be array type\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_01.sol:3:21-27"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_02.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares
 	foo [label="name:foo\ncontract: c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:3:20-23\nfield name:x ty:int256"]
 	foo [label="name:foo\ncontract: c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:3:20-23\nfield name:x ty:int256"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:2:9-7:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:2:9-7:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:2:9-7:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:2:9-7:10"]
-	diagnostic_7 [label="key of mapping cannot be struct type\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:6:21-24"]
+	diagnostic_6 [label="key of mapping cannot be struct type\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_02.sol:6:21-24"]
 	structs -> foo
 	structs -> foo
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_03.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:2:9-5:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:2:9-5:10"]
 	var [label="variable data\nvisibility internal\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:3:13-41"]
 	var [label="variable data\nvisibility internal\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:3:13-41"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:2:9-5:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:2:9-5:10"]
-	diagnostic_6 [label="'data' is a contract variable\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:4:21-25"]
+	diagnostic_5 [label="'data' is a contract variable\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_03.sol:4:21-25"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_04.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol" {
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol:2:9-6:10"]
-	diagnostic_5 [label="parameter with mapping type must be of type 'storage'\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol:3:27-50"]
+	diagnostic_4 [label="parameter with mapping type must be of type 'storage'\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_04.sol:3:27-50"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_05.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol" {
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol:2:9-6:10"]
-	diagnostic_5 [label="parameter of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol:3:51-58"]
+	diagnostic_4 [label="parameter of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_05.sol:3:51-58"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_06.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol" {
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol:2:9-6:10"]
-	diagnostic_5 [label="return type containing mapping must be of type 'storage'\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol:3:45-68"]
+	diagnostic_4 [label="return type containing mapping must be of type 'storage'\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_06.sol:3:45-68"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/mappings/bad_mapping_declares_07.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol" {
 strict digraph "tests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol:2:9-6:10"]
-	diagnostic_5 [label="return type of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol:3:69-76"]
+	diagnostic_4 [label="return type of type 'storage' not allowed public or external functions\nlevel Error\ntests/contract_testcases/substrate/mappings/bad_mapping_declares_07.sol:3:69-76"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/modifier/declare_02.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/modifier/declare_02.sol" {
 strict digraph "tests/contract_testcases/substrate/modifier/declare_02.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/modifier/declare_02.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/modifier/declare_02.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/modifier/declare_02.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/modifier/declare_02.sol:2:9-4:10"]
-	diagnostic_5 [label="modifier cannot have mutability specifier\nlevel Error\ntests/contract_testcases/substrate/modifier/declare_02.sol:3:28-35"]
+	diagnostic_4 [label="modifier cannot have mutability specifier\nlevel Error\ntests/contract_testcases/substrate/modifier/declare_02.sol:3:28-35"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/modifier/declare_03.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/modifier/declare_03.sol" {
 strict digraph "tests/contract_testcases/substrate/modifier/declare_03.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/modifier/declare_03.sol:2:9-4:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/modifier/declare_03.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/modifier/declare_03.sol:2:9-4:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/modifier/declare_03.sol:2:9-4:10"]
-	diagnostic_5 [label="modifier cannot have mutability specifier\nlevel Error\ntests/contract_testcases/substrate/modifier/declare_03.sol:3:28-32"]
+	diagnostic_4 [label="modifier cannot have mutability specifier\nlevel Error\ntests/contract_testcases/substrate/modifier/declare_03.sol:3:28-32"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/address.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address.sol:2:13-51"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address.sol:2:13-51"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address.sol:1:1-3:10"]
-	diagnostic_6 [label="expected 'address', found integer\nlevel Error\ntests/contract_testcases/substrate/primitives/address.sol:2:28-51"]
+	diagnostic_5 [label="expected 'address', found integer\nlevel Error\ntests/contract_testcases/substrate/primitives/address.sol:2:28-51"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address_01.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_01.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_01.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_01.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_01.sol:2:13-93"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_01.sol:2:13-93"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_01.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_01.sol:1:1-3:10"]
-	diagnostic_6 [label="expected 'address', found integer\nlevel Error\ntests/contract_testcases/substrate/primitives/address_01.sol:2:27-93"]
+	diagnostic_5 [label="expected 'address', found integer\nlevel Error\ntests/contract_testcases/substrate/primitives/address_01.sol:2:27-93"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address_02.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_02.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_02.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_02.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_02.sol:2:13-83"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_02.sol:2:13-83"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_02.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_02.sol:1:1-3:10"]
-	diagnostic_6 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sje incorrect length of 34\nlevel Error\ntests/contract_testcases/substrate/primitives/address_02.sol:2:27-83"]
+	diagnostic_5 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sje incorrect length of 34\nlevel Error\ntests/contract_testcases/substrate/primitives/address_02.sol:2:27-83"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address_03.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_03.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_03.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_03.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_03.sol:2:13-84"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_03.sol:2:13-84"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_03.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_03.sol:1:1-3:10"]
-	diagnostic_6 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sj%Z invalid character '%'\nlevel Error\ntests/contract_testcases/substrate/primitives/address_03.sol:2:73"]
+	diagnostic_5 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sj%Z invalid character '%'\nlevel Error\ntests/contract_testcases/substrate/primitives/address_03.sol:2:73"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address_04.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_04.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_04.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_04.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_04.sol:2:13-84"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_04.sol:2:13-84"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_04.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_04.sol:1:1-3:10"]
-	diagnostic_6 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjZZ hash incorrect checksum\nlevel Error\ntests/contract_testcases/substrate/primitives/address_04.sol:2:27-84"]
+	diagnostic_5 [label="address literal 5GBWmgdFAMqm8ZgAHGobqDqX6tjLxJhv53ygjNtaaAn3sjZZ hash incorrect checksum\nlevel Error\ntests/contract_testcases/substrate/primitives/address_04.sol:2:27-84"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address_05.dot

@@ -3,10 +3,10 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_05.sol" {
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_05.sol:2:13-84"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_05.sol:2:13-84"]
 	number_literal [label="address literal: 82381599652983064627748031644048006099156261489258002493031233701766405061660\ntests/contract_testcases/substrate/primitives/address_05.sol:2:27-84"]
 	number_literal [label="address literal: 82381599652983064627748031644048006099156261489258002493031233701766405061660\ntests/contract_testcases/substrate/primitives/address_05.sol:2:27-84"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_05.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_05.sol:1:1-3:10"]
-	diagnostic_7 [label="storage variable 'foo' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address_05.sol:2:13-84"]
+	diagnostic_6 [label="storage variable 'foo' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/primitives/address_05.sol:2:13-84"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	var -> number_literal [label="initializer"]
 	var -> number_literal [label="initializer"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostics -> diagnostic_6 [label="Warning"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address_09.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/address_09.sol" {
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_09.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/address_09.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_09.sol:2:13-69"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/address_09.sol:2:13-69"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_09.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_09.sol:1:1-3:10"]
-	diagnostic_6 [label="ethereum address literal '0x5b0Ddf2835f0A76c96D6113D47F6482e51a55487' not supported on target substrate\nlevel Error\ntests/contract_testcases/substrate/primitives/address_09.sol:2:27-69"]
+	diagnostic_5 [label="ethereum address literal '0x5b0Ddf2835f0A76c96D6113D47F6482e51a55487' not supported on target substrate\nlevel Error\ntests/contract_testcases/substrate/primitives/address_09.sol:2:27-69"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/address_payable_type_06.dot

@@ -1,8 +1,8 @@
 strict digraph "tests/contract_testcases/substrate/primitives/address_payable_type_06.sol" {
 strict digraph "tests/contract_testcases/substrate/primitives/address_payable_type_06.sol" {
 	contract [label="contract c\ntests/contract_testcases/substrate/primitives/address_payable_type_06.sol:2:9-6:10"]
 	contract [label="contract c\ntests/contract_testcases/substrate/primitives/address_payable_type_06.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_payable_type_06.sol:2:9-6:10"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/primitives/address_payable_type_06.sol:2:9-6:10"]
-	diagnostic_5 [label="'payable' cannot be used for type declarations, only casting. use 'address payable'\nlevel Error\ntests/contract_testcases/substrate/primitives/address_payable_type_06.sol:3:27-34"]
+	diagnostic_4 [label="'payable' cannot be used for type declarations, only casting. use 'address payable'\nlevel Error\ntests/contract_testcases/substrate/primitives/address_payable_type_06.sol:3:27-34"]
 	contracts -> contract
 	contracts -> contract
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_4 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:2:13-28"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:2:13-28"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:1:1-3:10"]
-	diagnostic_6 [label="literal 300 is too large to fit into type 'uint8'\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:2:25-28"]
+	diagnostic_5 [label="literal 300 is too large to fit into type 'uint8'\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow.sol:2:25-28"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_01.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:2:13-33"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:2:13-33"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:1:1-3:10"]
-	diagnostic_6 [label="literal 65536 is too large to fit into type 'uint16'\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:2:26-33"]
+	diagnostic_5 [label="literal 65536 is too large to fit into type 'uint16'\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_01.sol:2:26-33"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

+ 2 - 2
tests/contract_testcases/substrate/primitives/test_literal_overflow_02.dot

@@ -2,9 +2,9 @@ strict digraph "tests/contract_testcases/substrate/primitives/test_literal_overf
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:1:1-3:10"]
 	contract [label="contract test\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:1:1-3:10"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:2:13-29"]
 	var [label="variable foo\nvisibility internal\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:2:13-29"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:1:1-3:10"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:1:1-3:10"]
-	diagnostic_6 [label="literal 128 is too large to fit into type 'int8'\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:2:24-29"]
+	diagnostic_5 [label="literal 128 is too large to fit into type 'int8'\nlevel Error\ntests/contract_testcases/substrate/primitives/test_literal_overflow_02.sol:2:24-29"]
 	contracts -> contract
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
 }
 }

Some files were not shown because too many files changed in this diff