Przeglądaj źródła

Merge pull request #840 from seanyoung/var_override_list

Parse override(list) syntax on variable definition
Sean Young 3 lat temu
rodzic
commit
99bebb0177
100 zmienionych plików z 713 dodań i 505 usunięć
  1. 26 26
      solang-parser/src/diagnostics.rs
  2. 2 2
      solang-parser/src/pt.rs
  3. 7 2
      solang-parser/src/solidity.lalrpop
  4. 4 4
      src/bin/languageserver/mod.rs
  5. 2 2
      src/codegen/undefined_variable.rs
  6. 3 1
      src/lib.rs
  7. 4 4
      src/sema/contracts.rs
  8. 10 3
      src/sema/diagnostics.rs
  9. 2 2
      src/sema/dotgraphviz.rs
  10. 19 22
      src/sema/functions.rs
  11. 4 4
      src/sema/namespace.rs
  12. 2 2
      src/sema/symtable.rs
  13. 1 1
      src/sema/using.rs
  14. 44 7
      src/sema/variables.rs
  15. 6 6
      src/sema/yul/expression.rs
  16. 4 4
      src/sema/yul/functions.rs
  17. 2 2
      src/sema/yul/statements.rs
  18. 3 3
      tests/contract_testcases/ewasm/call/call_02.dot
  19. 17 17
      tests/contract_testcases/ewasm/comment_tests.dot
  20. 8 8
      tests/contract_testcases/solana/assign_array_in_array.dot
  21. 5 5
      tests/contract_testcases/solana/call/abi_encode_call.dot
  22. 6 6
      tests/contract_testcases/solana/call/call_args_three_ways.dot
  23. 4 4
      tests/contract_testcases/solana/create_contract/syntax.dot
  24. 4 4
      tests/contract_testcases/solana/create_contract/syntax_01.dot
  25. 2 2
      tests/contract_testcases/solana/destructure_assign_struct_member_2.dot
  26. 4 4
      tests/contract_testcases/solana/doccomments_everywhere.dot
  27. 2 2
      tests/contract_testcases/solana/error.dot
  28. 8 8
      tests/contract_testcases/solana/expressions/contract_compare.dot
  29. 4 4
      tests/contract_testcases/solana/expressions/selector_in_free_function.dot
  30. 6 6
      tests/contract_testcases/solana/expressions/selector_in_free_function_02.dot
  31. 9 9
      tests/contract_testcases/solana/import_contracts_via_object.dot
  32. 128 0
      tests/contract_testcases/solana/override.dot
  33. 32 0
      tests/contract_testcases/solana/override.sol
  34. 8 8
      tests/contract_testcases/solana/type_decl_broken_more.dot
  35. 5 5
      tests/contract_testcases/solana/type_decl_import.dot
  36. 6 6
      tests/contract_testcases/solana/using_import.dot
  37. 5 5
      tests/contract_testcases/solana/yul/function_cal_cond.dot
  38. 4 4
      tests/contract_testcases/solana/yul/parse.dot
  39. 4 4
      tests/contract_testcases/substrate/builtins/call_02.dot
  40. 4 4
      tests/contract_testcases/substrate/builtins/call_03.dot
  41. 4 4
      tests/contract_testcases/substrate/calls/try_catch_constructor.dot
  42. 4 4
      tests/contract_testcases/substrate/calls/try_catch_constructor_01.dot
  43. 4 4
      tests/contract_testcases/substrate/calls/try_catch_constructor_02.dot
  44. 4 4
      tests/contract_testcases/substrate/calls/try_catch_constructor_04.dot
  45. 4 4
      tests/contract_testcases/substrate/calls/try_catch_constructor_05.dot
  46. 4 4
      tests/contract_testcases/substrate/calls/try_catch_constructor_06.dot
  47. 4 4
      tests/contract_testcases/substrate/calls/try_catch_external_calls.dot
  48. 4 4
      tests/contract_testcases/substrate/calls/try_catch_external_calls_01.dot
  49. 4 4
      tests/contract_testcases/substrate/calls/try_catch_external_calls_02.dot
  50. 7 7
      tests/contract_testcases/substrate/calls/try_catch_external_calls_03.dot
  51. 4 4
      tests/contract_testcases/substrate/calls/try_catch_external_calls_04.dot
  52. 6 6
      tests/contract_testcases/substrate/calls/try_catch_external_calls_05.dot
  53. 5 5
      tests/contract_testcases/substrate/contracts/contract_name_01.dot
  54. 4 4
      tests/contract_testcases/substrate/contracts/contract_name_02.dot
  55. 5 5
      tests/contract_testcases/substrate/contracts/contract_name_03.dot
  56. 5 5
      tests/contract_testcases/substrate/contracts/contract_name_04.dot
  57. 5 5
      tests/contract_testcases/substrate/contracts/contract_name_05.dot
  58. 4 4
      tests/contract_testcases/substrate/contracts/contract_name_06.dot
  59. 4 4
      tests/contract_testcases/substrate/contracts/contract_name_07.dot
  60. 6 6
      tests/contract_testcases/substrate/contracts/contract_name_08.dot
  61. 2 2
      tests/contract_testcases/substrate/contracts/contract_type_01.dot
  62. 4 4
      tests/contract_testcases/substrate/contracts/creation_code.dot
  63. 4 4
      tests/contract_testcases/substrate/contracts/external_call.dot
  64. 4 4
      tests/contract_testcases/substrate/contracts/external_call_01.dot
  65. 6 6
      tests/contract_testcases/substrate/contracts/external_call_02.dot
  66. 7 7
      tests/contract_testcases/substrate/contracts/external_call_03.dot
  67. 5 5
      tests/contract_testcases/substrate/events/event_decl_02.dot
  68. 4 4
      tests/contract_testcases/substrate/events/signatures.dot
  69. 4 4
      tests/contract_testcases/substrate/events/signatures_01.dot
  70. 2 2
      tests/contract_testcases/substrate/expressions/test_cast_errors_02.dot
  71. 4 4
      tests/contract_testcases/substrate/expressions/test_cast_errors_04.dot
  72. 2 2
      tests/contract_testcases/substrate/format/parse_08.dot
  73. 3 3
      tests/contract_testcases/substrate/function_types/variable_or_func_type.dot
  74. 5 5
      tests/contract_testcases/substrate/functions/global_functions_09.dot
  75. 2 2
      tests/contract_testcases/substrate/functions/mutability_01.dot
  76. 5 5
      tests/contract_testcases/substrate/functions/payable_04.dot
  77. 5 5
      tests/contract_testcases/substrate/functions/payable_05.dot
  78. 5 5
      tests/contract_testcases/substrate/functions/shadowing.dot
  79. 6 6
      tests/contract_testcases/substrate/inheritance/base_contract.dot
  80. 2 2
      tests/contract_testcases/substrate/inheritance/base_contract_01.dot
  81. 4 4
      tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.dot
  82. 4 4
      tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.dot
  83. 4 4
      tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.dot
  84. 5 5
      tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.dot
  85. 9 9
      tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.dot
  86. 12 12
      tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.dot
  87. 5 5
      tests/contract_testcases/substrate/inheritance/call_inherited_function_02.dot
  88. 5 5
      tests/contract_testcases/substrate/inheritance/cast_contract.dot
  89. 4 4
      tests/contract_testcases/substrate/inheritance/inherit_types.dot
  90. 8 8
      tests/contract_testcases/substrate/inheritance/inherit_types_01.dot
  91. 8 8
      tests/contract_testcases/substrate/inheritance/inherit_types_02.dot
  92. 7 7
      tests/contract_testcases/substrate/inheritance/inherit_types_05.dot
  93. 6 6
      tests/contract_testcases/substrate/inheritance/inherit_variables_03.dot
  94. 5 5
      tests/contract_testcases/substrate/inheritance/multiple_override.dot
  95. 5 5
      tests/contract_testcases/substrate/inheritance/multiple_override_01.dot
  96. 6 6
      tests/contract_testcases/substrate/inheritance/multiple_override_02.dot
  97. 7 7
      tests/contract_testcases/substrate/inheritance/multiple_override_03.dot
  98. 5 5
      tests/contract_testcases/substrate/inheritance/multiple_override_04.dot
  99. 5 5
      tests/contract_testcases/substrate/inheritance/multiple_override_05.dot
  100. 7 7
      tests/contract_testcases/substrate/inheritance/multiple_override_06.dot

+ 26 - 26
solang-parser/src/diagnostics.rs

@@ -32,131 +32,131 @@ pub enum ErrorType {
 
 #[derive(Debug, Eq, Hash, PartialOrd, Ord, PartialEq)]
 pub struct Note {
-    pub pos: pt::Loc,
+    pub loc: pt::Loc,
     pub message: String,
 }
 
 #[derive(Debug, Eq, Hash, PartialOrd, Ord, PartialEq)]
 pub struct Diagnostic {
+    pub loc: pt::Loc,
     pub level: Level,
     pub ty: ErrorType,
-    pub pos: pt::Loc,
     pub message: String,
     pub notes: Vec<Note>,
 }
 
 impl Diagnostic {
-    pub fn debug(pos: Loc, message: String) -> Self {
+    pub fn debug(loc: Loc, message: String) -> Self {
         Diagnostic {
             level: Level::Debug,
             ty: ErrorType::None,
-            pos,
+            loc,
             message,
             notes: Vec::new(),
         }
     }
 
-    pub fn info(pos: Loc, message: String) -> Self {
+    pub fn info(loc: Loc, message: String) -> Self {
         Diagnostic {
             level: Level::Info,
             ty: ErrorType::None,
-            pos,
+            loc,
             message,
             notes: Vec::new(),
         }
     }
 
-    pub fn parser_error(pos: Loc, message: String) -> Self {
+    pub fn parser_error(loc: Loc, message: String) -> Self {
         Diagnostic {
             level: Level::Error,
             ty: ErrorType::ParserError,
-            pos,
+            loc,
             message,
             notes: Vec::new(),
         }
     }
 
-    pub fn error(pos: Loc, message: String) -> Self {
+    pub fn error(loc: Loc, message: String) -> Self {
         Diagnostic {
             level: Level::Error,
             ty: ErrorType::SyntaxError,
-            pos,
+            loc,
             message,
             notes: Vec::new(),
         }
     }
 
-    pub fn decl_error(pos: Loc, message: String) -> Self {
+    pub fn decl_error(loc: Loc, message: String) -> Self {
         Diagnostic {
             level: Level::Error,
             ty: ErrorType::DeclarationError,
-            pos,
+            loc,
             message,
             notes: Vec::new(),
         }
     }
 
-    pub fn type_error(pos: Loc, message: String) -> Self {
+    pub fn type_error(loc: Loc, message: String) -> Self {
         Diagnostic {
             level: Level::Error,
             ty: ErrorType::TypeError,
-            pos,
+            loc,
             message,
             notes: Vec::new(),
         }
     }
 
-    pub fn warning(pos: Loc, message: String) -> Self {
+    pub fn warning(loc: Loc, message: String) -> Self {
         Diagnostic {
             level: Level::Warning,
             ty: ErrorType::Warning,
-            pos,
+            loc,
             message,
             notes: Vec::new(),
         }
     }
 
-    pub fn warning_with_note(pos: Loc, message: String, note_pos: Loc, note: String) -> Self {
+    pub fn warning_with_note(loc: Loc, message: String, note_loc: Loc, note: String) -> Self {
         Diagnostic {
             level: Level::Warning,
             ty: ErrorType::Warning,
-            pos,
+            loc,
             message,
             notes: vec![Note {
-                pos: note_pos,
+                loc: note_loc,
                 message: note,
             }],
         }
     }
 
-    pub fn warning_with_notes(pos: Loc, message: String, notes: Vec<Note>) -> Self {
+    pub fn warning_with_notes(loc: Loc, message: String, notes: Vec<Note>) -> Self {
         Diagnostic {
             level: Level::Warning,
             ty: ErrorType::Warning,
-            pos,
+            loc,
             message,
             notes,
         }
     }
 
-    pub fn error_with_note(pos: Loc, message: String, note_pos: Loc, note: String) -> Self {
+    pub fn error_with_note(loc: Loc, message: String, note_loc: Loc, note: String) -> Self {
         Diagnostic {
             level: Level::Error,
             ty: ErrorType::None,
-            pos,
+            loc,
             message,
             notes: vec![Note {
-                pos: note_pos,
+                loc: note_loc,
                 message: note,
             }],
         }
     }
 
-    pub fn error_with_notes(pos: Loc, message: String, notes: Vec<Note>) -> Self {
+    pub fn error_with_notes(loc: Loc, message: String, notes: Vec<Note>) -> Self {
         Diagnostic {
             level: Level::Error,
             ty: ErrorType::None,
-            pos,
+            loc,
             message,
             notes,
         }

+ 2 - 2
solang-parser/src/pt.rs

@@ -326,7 +326,7 @@ pub enum VariableAttribute {
     Visibility(Visibility),
     Constant(Loc),
     Immutable(Loc),
-    Override(Loc),
+    Override(Loc, Vec<IdentifierPath>),
 }
 
 #[derive(Debug, PartialEq, Clone)]
@@ -595,7 +595,7 @@ pub enum FunctionAttribute {
     Visibility(Visibility),
     Virtual(Loc),
     Immutable(Loc),
-    Override(Loc, Vec<Identifier>),
+    Override(Loc, Vec<IdentifierPath>),
     BaseOrModifier(Loc, Base),
 }
 

+ 7 - 2
solang-parser/src/solidity.lalrpop

@@ -265,7 +265,10 @@ VariableAttribute: VariableAttribute = {
     Visibility => VariableAttribute::Visibility(<>),
     <l:@L> "constant" <r:@R> => VariableAttribute::Constant(Loc::File(file_no, l, r)),
     <l:@L> "immutable" <r:@R> => VariableAttribute::Immutable(Loc::File(file_no, l, r)),
-    <l:@L> "override" <r:@R> => VariableAttribute::Override(Loc::File(file_no, l, r))
+    <l:@L> "override" <r:@R> => VariableAttribute::Override(Loc::File(file_no, l, r), Vec::new()),
+    <l:@L> "override" "(" <list:CommaOne<SolIdentifierPath>> ")" <r:@R> => {
+        VariableAttribute::Override(Loc::File(file_no, l, r), list)
+    }
 }
 
 Expression: Expression = {
@@ -514,7 +517,9 @@ FunctionAttribute: FunctionAttribute = {
     <l:@L> "immutable" <r:@R> => FunctionAttribute::Immutable(Loc::File(file_no, l, r)),
     <l:@L> "virtual" <r:@R> => FunctionAttribute::Virtual(Loc::File(file_no, <>)),
     <l:@L> "override" <r:@R> => FunctionAttribute::Override(Loc::File(file_no, <>), Vec::new()),
-    <l:@L> "override" "(" <list:CommaOne<SolIdentifier>> ")" <r:@R> => FunctionAttribute::Override(Loc::File(file_no, l, r), list),
+    <l:@L> "override" "(" <list:CommaOne<SolIdentifierPath>> ")" <r:@R> => {
+        FunctionAttribute::Override(Loc::File(file_no, l, r), list)
+    },
     <l:@L> <base:Base> <r:@R> => FunctionAttribute::BaseOrModifier(Loc::File(file_no, l, r), base),
 }
 

+ 4 - 4
src/bin/languageserver/mod.rs

@@ -99,7 +99,7 @@ impl SolangServer {
             codegen(&mut ns, &Default::default());
 
             diags.extend(ns.diagnostics.iter().filter_map(|diag| {
-                if diag.pos.file_no() != ns.top_file_no() {
+                if diag.loc.file_no() != ns.top_file_no() {
                     // The first file is the one we wanted to parse; others are imported
                     return None;
                 }
@@ -122,10 +122,10 @@ impl SolangServer {
                             .map(|note| DiagnosticRelatedInformation {
                                 message: note.message.to_string(),
                                 location: Location {
-                                    uri: Url::from_file_path(&ns.files[note.pos.file_no()].path)
+                                    uri: Url::from_file_path(&ns.files[note.loc.file_no()].path)
                                         .unwrap(),
                                     range: SolangServer::loc_to_range(
-                                        &note.pos,
+                                        &note.loc,
                                         &ns.files[ns.top_file_no()],
                                     ),
                                 },
@@ -134,7 +134,7 @@ impl SolangServer {
                     )
                 };
 
-                let range = SolangServer::loc_to_range(&diag.pos, &ns.files[ns.top_file_no()]);
+                let range = SolangServer::loc_to_range(&diag.loc, &ns.files[ns.top_file_no()]);
 
                 Some(Diagnostic {
                     range,

+ 2 - 2
src/codegen/undefined_variable.rs

@@ -124,7 +124,7 @@ fn add_diagnostic(
             Diagnostic {
                 level: Level::Error,
                 ty: ErrorType::TypeError,
-                pos: var.id.loc,
+                loc: var.id.loc,
                 message: format!("Variable '{}' is undefined", var.id.name),
                 notes: vec![],
             },
@@ -133,7 +133,7 @@ fn add_diagnostic(
 
     let diag = diagnostics.get_mut(var_no).unwrap();
     diag.notes.push(Note {
-        pos: *expr_loc,
+        loc: *expr_loc,
         message: "Variable read before being defined".to_string(),
     });
 }

+ 3 - 1
src/lib.rs

@@ -179,7 +179,7 @@ pub fn parse_and_resolve(
                 ty: ast::ErrorType::ParserError,
                 level: ast::Level::Error,
                 message,
-                pos: pt::Loc::CommandLine,
+                loc: pt::Loc::CommandLine,
                 notes: Vec::new(),
             });
         }
@@ -188,5 +188,7 @@ pub fn parse_and_resolve(
         }
     }
 
+    ns.diagnostics.sort_and_dedup();
+
     ns
 }

+ 4 - 4
src/sema/contracts.rs

@@ -347,7 +347,7 @@ fn check_inheritance(contract_no: usize, ns: &mut ast::Namespace) {
                             None
                         } else {
                             Some(ast::Note {
-                                pos: func.loc,
+                                loc: func.loc,
                                 message: format!(
                                     "function '{}' is not specified 'virtual'",
                                     func.name
@@ -513,7 +513,7 @@ fn check_inheritance(contract_no: usize, ns: &mut ast::Namespace) {
                 if previous_defs.is_empty() && cur.is_override.is_some() {
                     ns.diagnostics.push(ast::Diagnostic::error(
                         cur.loc,
-                        format!("function '{}' does not override anything", cur.name),
+                        format!("'{}' does not override anything", cur.name),
                     ));
                     continue;
                 }
@@ -715,7 +715,7 @@ fn check_inheritance(contract_no: usize, ns: &mut ast::Namespace) {
                 let func = &ns.functions[*function_no];
 
                 ast::Note {
-                    pos: func.loc,
+                    loc: func.loc,
                     message: format!("previous definition of function '{}'", func.name),
                 }
             })
@@ -803,7 +803,7 @@ fn resolve_declarations<'a>(
             let notes = function_no_bodies
                 .into_iter()
                 .map(|function_no| ast::Note {
-                    pos: ns.functions[function_no].loc,
+                    loc: ns.functions[function_no].loc,
                     message: format!(
                         "location of function '{}' with no body",
                         ns.functions[function_no].name

+ 10 - 3
src/sema/diagnostics.rs

@@ -116,6 +116,13 @@ impl Diagnostics {
 
         false
     }
+
+    // We may have duplicate entries. Also ensure diagnostics are give in order
+    // of location
+    pub fn sort_and_dedup(&mut self) {
+        self.contents.sort();
+        self.contents.dedup();
+    }
 }
 
 fn convert_diagnostic(
@@ -132,12 +139,12 @@ fn convert_diagnostic(
 
     let mut labels = Vec::new();
 
-    if let Loc::File(file_no, start, end) = msg.pos {
+    if let Loc::File(file_no, start, end) = msg.loc {
         labels.push(diagnostic::Label::primary(file_id[&file_no], start..end));
     }
 
     for note in &msg.notes {
-        if let Loc::File(file_no, start, end) = note.pos {
+        if let Loc::File(file_no, start, end) = note.loc {
             labels.push(
                 diagnostic::Label::secondary(file_id[&file_no], start..end)
                     .with_message(note.message.to_owned()),
@@ -214,7 +221,7 @@ impl Namespace {
 
             term::emit(&mut buffer, &config, &files, &diagnostic).unwrap();
 
-            let location = if let Loc::File(file_no, start, end) = msg.pos {
+            let location = if let Loc::File(file_no, start, end) = msg.loc {
                 Some(LocJson {
                     file: format!("{}", self.files[file_no]),
                     start: start + 1,

+ 2 - 2
src/sema/dotgraphviz.rs

@@ -2269,7 +2269,7 @@ impl Namespace {
             for diag in self.diagnostics.iter() {
                 let mut labels = vec![diag.message.to_string(), format!("level {:?}", diag.level)];
 
-                labels.push(self.loc_to_string(&diag.pos));
+                labels.push(self.loc_to_string(&diag.loc));
 
                 let node = dot.add_node(
                     Node::new("diagnostic", labels),
@@ -2281,7 +2281,7 @@ impl Namespace {
                     dot.add_node(
                         Node::new(
                             "note",
-                            vec![note.message.to_string(), self.loc_to_string(&note.pos)],
+                            vec![note.message.to_string(), self.loc_to_string(&note.loc)],
                         ),
                         Some(node),
                         Some(String::from("note")),

+ 19 - 22
src/sema/functions.rs

@@ -177,36 +177,33 @@ pub fn contract_function(
                 }
 
                 let mut list = Vec::new();
+                let mut diagnostics = Vec::new();
 
                 for name in bases {
-                    match ns.resolve_contract(file_no, name) {
-                        Some(no) => {
-                            if list.contains(&no) {
-                                ns.diagnostics.push(Diagnostic::error(
-                                    name.loc,
-                                    format!("function duplicate override '{}'", name.name),
-                                ));
-                            } else if !is_base(no, contract_no, ns) {
-                                ns.diagnostics.push(Diagnostic::error(
-                                    name.loc,
-                                    format!(
-                                        "override '{}' is not a base contract of '{}'",
-                                        name.name, ns.contracts[contract_no].name
-                                    ),
-                                ));
-                            } else {
-                                list.push(no);
-                            }
-                        }
-                        None => {
-                            ns.diagnostics.push(Diagnostic::error(
+                    if let Ok(no) =
+                        ns.resolve_contract_with_namespace(file_no, name, &mut diagnostics)
+                    {
+                        if list.contains(&no) {
+                            diagnostics.push(Diagnostic::error(
                                 name.loc,
-                                format!("contract '{}' in override list not found", name.name),
+                                format!("function duplicate override '{}'", name),
                             ));
+                        } else if !is_base(no, contract_no, ns) {
+                            diagnostics.push(Diagnostic::error(
+                                name.loc,
+                                format!(
+                                    "override '{}' is not a base contract of '{}'",
+                                    name, ns.contracts[contract_no].name
+                                ),
+                            ));
+                        } else {
+                            list.push(no);
                         }
                     }
                 }
 
+                ns.diagnostics.extend(diagnostics);
+
                 is_override = Some((*loc, list));
             }
             pt::FunctionAttribute::BaseOrModifier(loc, _) => {

+ 4 - 4
src/sema/namespace.rs

@@ -83,7 +83,7 @@ impl Namespace {
             let notes = v
                 .iter()
                 .map(|(pos, _)| Note {
-                    pos: *pos,
+                    loc: *pos,
                     message: "location of previous definition".to_owned(),
                 })
                 .collect();
@@ -173,7 +173,7 @@ impl Namespace {
                 let notes = v
                     .iter()
                     .map(|(pos, _)| Note {
-                        pos: *pos,
+                        loc: *pos,
                         message: "location of previous definition".to_owned(),
                     })
                     .collect();
@@ -678,7 +678,7 @@ impl Namespace {
                 let notes = events
                     .iter()
                     .map(|(pos, _)| Note {
-                        pos: *pos,
+                        loc: *pos,
                         message: "previous definition of event".to_owned(),
                     })
                     .collect();
@@ -693,7 +693,7 @@ impl Namespace {
                 let notes = v
                     .iter()
                     .map(|(pos, _)| Note {
-                        pos: *pos,
+                        loc: *pos,
                         message: "previous declaration of function".to_owned(),
                     })
                     .collect();

+ 2 - 2
src/sema/symtable.rs

@@ -159,10 +159,10 @@ impl Symtable {
             ns.diagnostics.push(Diagnostic {
                 level: Level::Error,
                 ty: ErrorType::DeclarationError,
-                pos: id.loc,
+                loc: id.loc,
                 message: format!("variable name '{}' already used in this scope", id.name),
                 notes: vec![Note {
-                    pos: var.id.loc,
+                    loc: var.id.loc,
                     message: "found previous declaration here".to_string(),
                 }],
             });

+ 1 - 1
src/sema/using.rs

@@ -78,7 +78,7 @@ pub(crate) fn using_decl(
                         let notes = list
                             .iter()
                             .map(|(loc, _)| Note {
-                                pos: *loc,
+                                loc: *loc,
                                 message: format!("definition of '{}'", function_name),
                             })
                             .collect();

+ 44 - 7
src/sema/variables.rs

@@ -3,6 +3,7 @@ use super::{
         BuiltinStruct, Diagnostic, Expression, Function, Namespace, Parameter, Statement, Symbol,
         Type, Variable,
     },
+    contracts::is_base,
     expression::{expression, ExprContext, ResolveTo},
     symtable::Symtable,
     symtable::{VariableInitializer, VariableUsage},
@@ -125,7 +126,7 @@ pub fn variable_decl<'a>(
     let mut constant = false;
     let mut visibility: Option<pt::Visibility> = None;
     let mut has_immutable: Option<pt::Loc> = None;
-    let mut has_override: Option<pt::Loc> = None;
+    let mut is_override: Option<(pt::Loc, Vec<usize>)> = None;
 
     for attr in attrs {
         match &attr {
@@ -149,8 +150,8 @@ pub fn variable_decl<'a>(
                 }
                 has_immutable = Some(*loc);
             }
-            pt::VariableAttribute::Override(loc) => {
-                if let Some(prev) = &has_override {
+            pt::VariableAttribute::Override(loc, bases) => {
+                if let Some((prev, _)) = &is_override {
                     ns.diagnostics.push(Diagnostic::error_with_note(
                         *loc,
                         "duplicate 'override' attribute".to_string(),
@@ -158,7 +159,43 @@ pub fn variable_decl<'a>(
                         "previous 'override' attribute".to_string(),
                     ));
                 }
-                has_override = Some(*loc);
+
+                let mut list = Vec::new();
+                let mut diagnostics = Vec::new();
+
+                if let Some(contract_no) = contract_no {
+                    for name in bases {
+                        if let Ok(no) =
+                            ns.resolve_contract_with_namespace(file_no, name, &mut diagnostics)
+                        {
+                            if list.contains(&no) {
+                                diagnostics.push(Diagnostic::error(
+                                    name.loc,
+                                    format!("duplicate override '{}'", name),
+                                ));
+                            } else if !is_base(no, contract_no, ns) {
+                                diagnostics.push(Diagnostic::error(
+                                    name.loc,
+                                    format!(
+                                        "override '{}' is not a base contract of '{}'",
+                                        name, ns.contracts[contract_no].name
+                                    ),
+                                ));
+                            } else {
+                                list.push(no);
+                            }
+                        }
+                    }
+
+                    is_override = Some((*loc, list));
+                } else {
+                    diagnostics.push(Diagnostic::error(
+                        *loc,
+                        "global variable has no bases contracts to override".to_string(),
+                    ));
+                }
+
+                ns.diagnostics.extend(diagnostics);
             }
             pt::VariableAttribute::Visibility(v) if contract_no.is_none() => {
                 ns.diagnostics.push(Diagnostic::error(
@@ -207,12 +244,12 @@ pub fn variable_decl<'a>(
 
     if let pt::Visibility::Public(_) = &visibility {
         // override allowed
-    } else if let Some(loc) = &has_override {
+    } else if let Some((loc, _)) = &is_override {
         ns.diagnostics.push(Diagnostic::error(
             *loc,
             "only public variable can be declared 'override'".to_string(),
         ));
-        has_override = None;
+        is_override = None;
     }
 
     if let Some(contract) = contract {
@@ -452,7 +489,7 @@ pub fn variable_decl<'a>(
             )];
             func.is_accessor = true;
             func.has_body = true;
-            func.is_override = has_override.map(|loc| (loc, Vec::new()));
+            func.is_override = is_override;
             func.symtable = symtable;
 
             // add the function to the namespace and then to our contract

+ 6 - 6
src/sema/yul/expression.rs

@@ -49,7 +49,7 @@ pub(crate) fn resolve_yul_expression(
         pt::YulExpression::HexStringLiteral(value, ty) => {
             if (value.hex.len() % 2) != 0 {
                 ns.diagnostics.push(Diagnostic {
-                    pos: value.loc,
+                    loc: value.loc,
                     ty: ErrorType::DeclarationError,
                     level: Level::Error,
                     message: format!("hex string \"{}\" has odd number of characters", value.hex),
@@ -164,7 +164,7 @@ fn resolve_number_literal(
         if let Some(asm_type) = get_type_from_string(&type_id.name) {
             if matches!(asm_type, Type::Uint(_)) && matches!(value.sign(), Sign::Minus) {
                 ns.diagnostics.push(Diagnostic {
-                    pos: *loc,
+                    loc: *loc,
                     level: Level::Error,
                     ty: ErrorType::TypeError,
                     message: "signed integer cannot fit in unsigned integer".to_string(),
@@ -195,7 +195,7 @@ fn resolve_number_literal(
         ns.diagnostics.push(Diagnostic {
             level: Level::Error,
             ty: ErrorType::TypeError,
-            pos: *loc,
+            loc: *loc,
             message: format!(
                 "the provided literal requires {} bits, but the type only supports {}",
                 bits_needed, type_size
@@ -222,7 +222,7 @@ fn resolve_hex_literal(
         ns.diagnostics.push(Diagnostic {
             level: Level::Error,
             ty: ErrorType::TypeError,
-            pos: *loc,
+            loc: *loc,
             message: format!(
                 "the provided literal requires {} bits, but the type only supports {}",
                 val.bits(),
@@ -248,7 +248,7 @@ fn resolve_string_literal(
         ns.diagnostics.push(Diagnostic {
             level: Level::Error,
             ty: ErrorType::DeclarationError,
-            pos: *loc,
+            loc: *loc,
             message: format!(
                 "the provided literal requires {} bits, but the type only supports {}",
                 byte_array.len() * 8,
@@ -390,7 +390,7 @@ pub(crate) fn resolve_function_call(
             ns.diagnostics.push(Diagnostic {
                 level: Level::Error,
                 ty: ErrorType::TypeError,
-                pos: func_call.loc,
+                loc: func_call.loc,
                 message: format!(
                     "builtin function '{}' requires {} arguments, but {} were provided",
                     prototype.name,

+ 4 - 4
src/sema/yul/functions.rs

@@ -95,10 +95,10 @@ impl FunctionsTable {
             return Some(Diagnostic {
                 level: Level::Error,
                 ty: ErrorType::DeclarationError,
-                pos: id.loc,
+                loc: id.loc,
                 message: format!("function name '{}' is already taken", id.name),
                 notes: vec![Note {
-                    pos: func.id.loc,
+                    loc: func.id.loc,
                     message: "previous declaration found here".to_string(),
                 }],
             });
@@ -169,10 +169,10 @@ pub(crate) fn process_function_header(
         ns.diagnostics.push(Diagnostic {
             level: Level::Error,
             ty: ErrorType::DeclarationError,
-            pos: func_def.id.loc,
+            loc: func_def.id.loc,
             message: format!("function '{}' is already defined", func_def.id.name),
             notes: vec![Note {
-                pos: defined_func.id.loc,
+                loc: defined_func.id.loc,
                 message: "found definition here".to_string(),
             }],
         });

+ 2 - 2
src/sema/yul/statements.rs

@@ -228,10 +228,10 @@ fn resolve_variable_declaration(
             ns.diagnostics.push(Diagnostic {
                 level: Level::Error,
                 ty: ErrorType::DeclarationError,
-                pos: item.loc,
+                loc: item.loc,
                 message: format!("name '{}' has been defined as a function", item.id.name),
                 notes: vec![Note {
-                    pos: func.id.loc,
+                    loc: func.id.loc,
                     message: "function defined here".to_string(),
                 }],
             });

+ 3 - 3
tests/contract_testcases/ewasm/call/call_02.dot

@@ -11,9 +11,9 @@ strict digraph "tests/contract_testcases/ewasm/call/call_02.sol" {
 	number_literal [label="uint32 literal: 0\ntests/contract_testcases/ewasm/call/call_02.sol:4:62-64"]
 	number_literal_11 [label="uint128 literal: 2\ntests/contract_testcases/ewasm/call/call_02.sol:4:59-60"]
 	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/ewasm/call/call_02.sol:2:9-20"]
-	diagnostic_14 [label="destructure variable 's' has never been used\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:4:23-24"]
-	diagnostic_15 [label="destructure variable 'bs' has never been used\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:4:39-41"]
-	diagnostic_16 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:3:13-49"]
+	diagnostic_14 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:3:13-49"]
+	diagnostic_15 [label="destructure variable 's' has never been used\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:4:23-24"]
+	diagnostic_16 [label="destructure variable 'bs' has never been used\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:4:39-41"]
 	contracts -> contract
 	contract -> f [label="function"]
 	f -> parameters [label="parameters"]

+ 17 - 17
tests/contract_testcases/ewasm/comment_tests.dot

@@ -818,18 +818,18 @@ strict digraph "tests/contract_testcases/ewasm/comment_tests.sol" {
 	diagnostic_819 [label="found library 'SafeMath'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:71:1-72:18"]
 	diagnostic_820 [label="found abstract contract 'Context'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:152:1-153:27"]
 	diagnostic_821 [label="found library 'Address'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:168:1-169:17"]
-	diagnostic_822 [label="found contract 'Ownable'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:302:1-303:28"]
-	diagnostic_823 [label="'internal': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:321:9-17"]
-	diagnostic_824 [label="found contract 'TigerBNB'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:374:1-375:46"]
-	diagnostic_825 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:417:5-11"]
-	diagnostic_826 [label="conversion truncates uint256 to uint128, as value is type uint128 on target ewasm\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:195:50-56"]
-	diagnostic_827 [label="conversion truncates uint256 to uint128, as value is type uint128 on target ewasm\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:276:70-78"]
-	diagnostic_828 [label="function parameter 'weiValue' has never been read\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:268:17-25"]
-	diagnostic_829 [label="function parameter 'errorMessage' has never been read\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:269:23-35"]
-	diagnostic_830 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:179:9-183:10"]
-	diagnostic_831 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:188:5-75"]
-	diagnostic_832 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:287:17-290:18"]
-	diagnostic_833 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:264:5-270:37"]
+	diagnostic_822 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:179:9-183:10"]
+	diagnostic_823 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:188:5-75"]
+	diagnostic_824 [label="conversion truncates uint256 to uint128, as value is type uint128 on target ewasm\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:195:50-56"]
+	diagnostic_825 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:264:5-270:37"]
+	diagnostic_826 [label="function parameter 'weiValue' has never been read\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:268:17-25"]
+	diagnostic_827 [label="function parameter 'errorMessage' has never been read\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:269:23-35"]
+	diagnostic_828 [label="conversion truncates uint256 to uint128, as value is type uint128 on target ewasm\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:276:70-78"]
+	diagnostic_829 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:287:17-290:18"]
+	diagnostic_830 [label="found contract 'Ownable'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:302:1-303:28"]
+	diagnostic_831 [label="'internal': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:321:9-17"]
+	diagnostic_832 [label="found contract 'TigerBNB'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:374:1-375:46"]
+	diagnostic_833 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:417:5-11"]
 	events -> Transfer
 	events -> Approval
 	events -> OwnershipTransferred
@@ -1649,16 +1649,16 @@ strict digraph "tests/contract_testcases/ewasm/comment_tests.sol" {
 	diagnostics -> diagnostic_819 [label="Debug"]
 	diagnostics -> diagnostic_820 [label="Debug"]
 	diagnostics -> diagnostic_821 [label="Debug"]
-	diagnostics -> diagnostic_822 [label="Debug"]
+	diagnostics -> diagnostic_822 [label="Error"]
 	diagnostics -> diagnostic_823 [label="Warning"]
-	diagnostics -> diagnostic_824 [label="Debug"]
+	diagnostics -> diagnostic_824 [label="Warning"]
 	diagnostics -> diagnostic_825 [label="Warning"]
 	diagnostics -> diagnostic_826 [label="Warning"]
 	diagnostics -> diagnostic_827 [label="Warning"]
 	diagnostics -> diagnostic_828 [label="Warning"]
-	diagnostics -> diagnostic_829 [label="Warning"]
-	diagnostics -> diagnostic_830 [label="Error"]
+	diagnostics -> diagnostic_829 [label="Error"]
+	diagnostics -> diagnostic_830 [label="Debug"]
 	diagnostics -> diagnostic_831 [label="Warning"]
-	diagnostics -> diagnostic_832 [label="Error"]
+	diagnostics -> diagnostic_832 [label="Debug"]
 	diagnostics -> diagnostic_833 [label="Warning"]
 }

+ 8 - 8
tests/contract_testcases/solana/assign_array_in_array.dot

@@ -41,14 +41,14 @@ strict digraph "tests/contract_testcases/solana/assign_array_in_array.sol" {
 	alloc_array_41 [label="alloc array uint256[]\ntests/contract_testcases/solana/assign_array_in_array.sol:23:12-28"]
 	number_literal_42 [label="uint32 literal: 4\ntests/contract_testcases/solana/assign_array_in_array.sol:23:26-27"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/assign_array_in_array.sol:1:60-2:12"]
-	diagnostic_45 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:4:24-27"]
-	diagnostic_46 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:9:23-26"]
-	diagnostic_47 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:17:10-13"]
-	diagnostic_48 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:22:12-15"]
-	diagnostic_49 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:3:2-25"]
-	diagnostic_50 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:8:2-27"]
-	diagnostic_51 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:16:2-32"]
-	diagnostic_52 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:21:2-34"]
+	diagnostic_45 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:3:2-25"]
+	diagnostic_46 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:4:24-27"]
+	diagnostic_47 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:8:2-27"]
+	diagnostic_48 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:9:23-26"]
+	diagnostic_49 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:16:2-32"]
+	diagnostic_50 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:17:10-13"]
+	diagnostic_51 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:21:2-34"]
+	diagnostic_52 [label="local variable 'iPj' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/assign_array_in_array.sol:22:12-15"]
 	structs -> Sfixed
 	structs -> Sdynamic
 	contracts -> contract

+ 5 - 5
tests/contract_testcases/solana/call/abi_encode_call.dot

@@ -6,9 +6,9 @@ strict digraph "tests/contract_testcases/solana/call/abi_encode_call.sol" {
 	foo [label="function foo\ncontract: other\ntests/contract_testcases/solana/call/abi_encode_call.sol:12:5-42\nsignature foo(int256,int256)\nvisibility public\nmutability nonpayable"]
 	parameters [label="parameters\nint256 foo\nint256 bar"]
 	diagnostic [label="found contract 'abi_encode_call'\nlevel Debug\ntests/contract_testcases/solana/call/abi_encode_call.sol:1:1-26"]
-	diagnostic_10 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/solana/call/abi_encode_call.sol:10:1-11:16"]
-	diagnostic_11 [label="function takes 2 arguments, 1 provided\nlevel Error\ntests/contract_testcases/solana/call/abi_encode_call.sol:3:20-48"]
-	diagnostic_12 [label="conversion from bool to int256 not possible\nlevel Error\ntests/contract_testcases/solana/call/abi_encode_call.sol:7:49-53"]
+	diagnostic_10 [label="function takes 2 arguments, 1 provided\nlevel Error\ntests/contract_testcases/solana/call/abi_encode_call.sol:3:20-48"]
+	diagnostic_11 [label="conversion from bool to int256 not possible\nlevel Error\ntests/contract_testcases/solana/call/abi_encode_call.sol:7:49-53"]
+	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/solana/call/abi_encode_call.sol:10:1-11:16"]
 	diagnostic_13 [label="declaration of 'foo' shadows function\nlevel Warning\ntests/contract_testcases/solana/call/abi_encode_call.sol:12:22-25"]
 	note [label="previous declaration of function\ntests/contract_testcases/solana/call/abi_encode_call.sol:12:14-17"]
 	contracts -> contract
@@ -18,9 +18,9 @@ strict digraph "tests/contract_testcases/solana/call/abi_encode_call.sol" {
 	contract_5 -> foo [label="function"]
 	foo -> parameters [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_10 [label="Debug"]
+	diagnostics -> diagnostic_10 [label="Error"]
 	diagnostics -> diagnostic_11 [label="Error"]
-	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Debug"]
 	diagnostics -> diagnostic_13 [label="Warning"]
 	diagnostic_13 -> note [label="note"]
 }

+ 6 - 6
tests/contract_testcases/solana/call/call_args_three_ways.dot

@@ -31,10 +31,10 @@ strict digraph "tests/contract_testcases/solana/call/call_args_three_ways.sol" {
 	node_31 [label="constructor \ncontract: D\ntests/contract_testcases/solana/call/call_args_three_ways.sol:17:2-23\nsignature ()\nvisibility public\nmutability payable"]
 	func [label="function func\ncontract: D\ntests/contract_testcases/solana/call/call_args_three_ways.sol:18:2-32\nsignature func()\nvisibility public\nmutability payable"]
 	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/call/call_args_three_ways.sol:1:1-12"]
-	diagnostic_35 [label="found contract 'D'\nlevel Debug\ntests/contract_testcases/solana/call/call_args_three_ways.sol:15:1-16:12"]
-	diagnostic_36 [label="local variable 'd' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/call/call_args_three_ways.sol:4:5-6"]
-	diagnostic_37 [label="local variable 'dd' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/call/call_args_three_ways.sol:5:5-7"]
-	diagnostic_38 [label="local variable 'ddd' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/call/call_args_three_ways.sol:6:5-8"]
+	diagnostic_35 [label="local variable 'd' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/call/call_args_three_ways.sol:4:5-6"]
+	diagnostic_36 [label="local variable 'dd' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/call/call_args_three_ways.sol:5:5-7"]
+	diagnostic_37 [label="local variable 'ddd' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/call/call_args_three_ways.sol:6:5-8"]
+	diagnostic_38 [label="found contract 'D'\nlevel Debug\ntests/contract_testcases/solana/call/call_args_three_ways.sol:15:1-16:12"]
 	contracts -> contract
 	contract -> f [label="function"]
 	f -> var_decl [label="body"]
@@ -67,8 +67,8 @@ strict digraph "tests/contract_testcases/solana/call/call_args_three_ways.sol" {
 	contract_30 -> node_31 [label="constructor"]
 	contract_30 -> func [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_35 [label="Debug"]
+	diagnostics -> diagnostic_35 [label="Warning"]
 	diagnostics -> diagnostic_36 [label="Warning"]
 	diagnostics -> diagnostic_37 [label="Warning"]
-	diagnostics -> diagnostic_38 [label="Warning"]
+	diagnostics -> diagnostic_38 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/solana/create_contract/syntax.dot

@@ -3,12 +3,12 @@ strict digraph "tests/contract_testcases/solana/create_contract/syntax.sol" {
 	f [label="function f\ncontract: y\ntests/contract_testcases/solana/create_contract/syntax.sol:3:13-32\nsignature f()\nvisibility public\nmutability nonpayable"]
 	contract_4 [label="contract x\ntests/contract_testcases/solana/create_contract/syntax.sol:7:9-20"]
 	diagnostic [label="found contract 'y'\nlevel Debug\ntests/contract_testcases/solana/create_contract/syntax.sol:2:9-20"]
-	diagnostic_7 [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/create_contract/syntax.sol:7:9-20"]
-	diagnostic_8 [label="'gas' not permitted for external calls or constructors on solana\nlevel Error\ntests/contract_testcases/solana/create_contract/syntax.sol:4:29-37"]
+	diagnostic_7 [label="'gas' not permitted for external calls or constructors on solana\nlevel Error\ntests/contract_testcases/solana/create_contract/syntax.sol:4:29-37"]
+	diagnostic_8 [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/create_contract/syntax.sol:7:9-20"]
 	contracts -> contract
 	contract -> f [label="function"]
 	contracts -> contract_4
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_8 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/solana/create_contract/syntax_01.dot

@@ -3,12 +3,12 @@ strict digraph "tests/contract_testcases/solana/create_contract/syntax_01.sol" {
 	f [label="function f\ncontract: y\ntests/contract_testcases/solana/create_contract/syntax_01.sol:3:13-32\nsignature f()\nvisibility public\nmutability nonpayable"]
 	contract_4 [label="contract x\ntests/contract_testcases/solana/create_contract/syntax_01.sol:7:9-20"]
 	diagnostic [label="found contract 'y'\nlevel Debug\ntests/contract_testcases/solana/create_contract/syntax_01.sol:2:9-20"]
-	diagnostic_7 [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/create_contract/syntax_01.sol:7:9-20"]
-	diagnostic_8 [label="'salt' not permitted for external calls or constructors on solana\nlevel Error\ntests/contract_testcases/solana/create_contract/syntax_01.sol:4:29-38"]
+	diagnostic_7 [label="'salt' not permitted for external calls or constructors on solana\nlevel Error\ntests/contract_testcases/solana/create_contract/syntax_01.sol:4:29-38"]
+	diagnostic_8 [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/create_contract/syntax_01.sol:7:9-20"]
 	contracts -> contract
 	contract -> f [label="function"]
 	contracts -> contract_4
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_8 [label="Debug"]
 }

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

@@ -32,8 +32,8 @@ strict digraph "tests/contract_testcases/solana/destructure_assign_struct_member
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/solana/destructure_assign_struct_member_2.sol:1:57-2:23"]
 	diagnostic_34 [label="found interface 'IUniswapV2Pair'\nlevel Debug\ntests/contract_testcases/solana/destructure_assign_struct_member_2.sol:3:1-4:26"]
 	diagnostic_35 [label="found contract 'Contract'\nlevel Debug\ntests/contract_testcases/solana/destructure_assign_struct_member_2.sol:8:1-9:19"]
-	diagnostic_36 [label="conversion truncates uint256 to uint32, as memory size is type uint32 on target solana\nlevel Warning\ntests/contract_testcases/solana/destructure_assign_struct_member_2.sol:20:37-56"]
-	diagnostic_37 [label="local variable 'struct_1' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/destructure_assign_struct_member_2.sol:20:26-34"]
+	diagnostic_36 [label="local variable 'struct_1' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/solana/destructure_assign_struct_member_2.sol:20:26-34"]
+	diagnostic_37 [label="conversion truncates uint256 to uint32, as memory size is type uint32 on target solana\nlevel Warning\ntests/contract_testcases/solana/destructure_assign_struct_member_2.sol:20:37-56"]
 	structs -> Struct1
 	contracts -> contract
 	contract -> getReserves [label="function"]

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

@@ -126,8 +126,8 @@ strict digraph "tests/contract_testcases/solana/doccomments_everywhere.sol" {
 	sellShares [label="function sellShares\ncontract: Property\ntests/contract_testcases/solana/doccomments_everywhere.sol:77:3-59\nsignature sellShares(uint256,uint256)\nvisibility public\nmutability nonpayable"]
 	parameters_128 [label="parameters\nuint256 shares_\nuint256 _id"]
 	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/solana/doccomments_everywhere.sol:1:1-24"]
-	diagnostic_131 [label="'Counters' not found\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:6:22-30"]
-	diagnostic_132 [label="found contract 'Property'\nlevel Debug\ntests/contract_testcases/solana/doccomments_everywhere.sol:4:107-5:19"]
+	diagnostic_131 [label="found contract 'Property'\nlevel Debug\ntests/contract_testcases/solana/doccomments_everywhere.sol:4:107-5:19"]
+	diagnostic_132 [label="'Counters' not found\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:6:22-30"]
 	diagnostic_133 [label="'Counters' not found\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:7:3-11"]
 	diagnostic_134 [label="'ERC1155' not found\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:17:17-24"]
 	diagnostic_135 [label="'_tokenIds' not found\nlevel Error\ntests/contract_testcases/solana/doccomments_everywhere.sol:28:29-38"]
@@ -260,8 +260,8 @@ strict digraph "tests/contract_testcases/solana/doccomments_everywhere.sol" {
 	contract -> sellShares [label="function"]
 	sellShares -> parameters_128 [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_131 [label="Error"]
-	diagnostics -> diagnostic_132 [label="Debug"]
+	diagnostics -> diagnostic_131 [label="Debug"]
+	diagnostics -> diagnostic_132 [label="Error"]
 	diagnostics -> diagnostic_133 [label="Error"]
 	diagnostics -> diagnostic_134 [label="Error"]
 	diagnostics -> diagnostic_135 [label="Error"]

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

@@ -3,8 +3,8 @@ strict digraph "tests/contract_testcases/solana/error.sol" {
 	foo [label="function foo\ncontract: error\ntests/contract_testcases/solana/error.sol:5:2-30\nsignature foo(bytes32)\nvisibility public\nmutability nonpayable"]
 	parameters [label="parameters\ncontract error x"]
 	diagnostic [label="found contract 'error'\nlevel Debug\ntests/contract_testcases/solana/error.sol:1:1-2:16"]
-	diagnostic_7 [label="function parameter 'x' has never been read\nlevel Warning\ntests/contract_testcases/solana/error.sol:5:21-22"]
-	diagnostic_8 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/error.sol:5:2-30"]
+	diagnostic_7 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/error.sol:5:2-30"]
+	diagnostic_8 [label="function parameter 'x' has never been read\nlevel Warning\ntests/contract_testcases/solana/error.sol:5:21-22"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> parameters [label="parameters"]

+ 8 - 8
tests/contract_testcases/solana/expressions/contract_compare.dot

@@ -13,11 +13,11 @@ strict digraph "tests/contract_testcases/solana/expressions/contract_compare.sol
 	contract_13 [label="contract d\ntests/contract_testcases/solana/expressions/contract_compare.sol:12:1-13:12"]
 	contract_14 [label="contract e\ntests/contract_testcases/solana/expressions/contract_compare.sol:13:14-14:12"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/expressions/contract_compare.sol:1:1-2:12"]
-	diagnostic_17 [label="found contract 'd'\nlevel Debug\ntests/contract_testcases/solana/expressions/contract_compare.sol:12:1-13:12"]
-	diagnostic_18 [label="found contract 'e'\nlevel Debug\ntests/contract_testcases/solana/expressions/contract_compare.sol:13:14-14:12"]
-	diagnostic_19 [label="function 'cmp' overrides function in same contract\nlevel Error\ntests/contract_testcases/solana/expressions/contract_compare.sol:7:2-53"]
+	diagnostic_17 [label="function 'cmp' overrides function in same contract\nlevel Error\ntests/contract_testcases/solana/expressions/contract_compare.sol:7:2-53"]
 	note [label="previous definition of 'cmp'\ntests/contract_testcases/solana/expressions/contract_compare.sol:3:2-53"]
-	diagnostic_21 [label="expression of type contract d not allowed\nlevel Error\ntests/contract_testcases/solana/expressions/contract_compare.sol:8:10-14"]
+	diagnostic_19 [label="expression of type contract d not allowed\nlevel Error\ntests/contract_testcases/solana/expressions/contract_compare.sol:8:10-14"]
+	diagnostic_20 [label="found contract 'd'\nlevel Debug\ntests/contract_testcases/solana/expressions/contract_compare.sol:12:1-13:12"]
+	diagnostic_21 [label="found contract 'e'\nlevel Debug\ntests/contract_testcases/solana/expressions/contract_compare.sol:13:14-14:12"]
 	contracts -> contract
 	contract -> cmp [label="function"]
 	cmp -> parameters [label="parameters"]
@@ -32,9 +32,9 @@ strict digraph "tests/contract_testcases/solana/expressions/contract_compare.sol
 	contracts -> contract_13
 	contracts -> contract_14
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_17 [label="Debug"]
-	diagnostics -> diagnostic_18 [label="Debug"]
+	diagnostics -> diagnostic_17 [label="Error"]
+	diagnostic_17 -> note [label="note"]
 	diagnostics -> diagnostic_19 [label="Error"]
-	diagnostic_19 -> note [label="note"]
-	diagnostics -> diagnostic_21 [label="Error"]
+	diagnostics -> diagnostic_20 [label="Debug"]
+	diagnostics -> diagnostic_21 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/solana/expressions/selector_in_free_function.dot

@@ -4,13 +4,13 @@ strict digraph "tests/contract_testcases/solana/expressions/selector_in_free_fun
 	parameters [label="parameters\nbytes "]
 	contract_5 [label="contract foo\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:10:9-22"]
 	diagnostic [label="found interface 'I'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:2:9-21"]
-	diagnostic_8 [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:10:9-22"]
-	diagnostic_9 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function.sol:6:9-38"]
+	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-22"]
 	contracts -> contract
 	contract -> X [label="function"]
 	X -> parameters [label="parameters"]
 	contracts -> contract_5
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Debug"]
-	diagnostics -> diagnostic_9 [label="Warning"]
+	diagnostics -> diagnostic_8 [label="Warning"]
+	diagnostics -> diagnostic_9 [label="Debug"]
 }

+ 6 - 6
tests/contract_testcases/solana/expressions/selector_in_free_function_02.dot

@@ -10,10 +10,10 @@ strict digraph "tests/contract_testcases/solana/expressions/selector_in_free_fun
 	external_function [label="function() external\nI.X\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:8:26-27"]
 	variable [label="variable: t\ncontract I\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:8:24-25"]
 	diagnostic [label="found contract 'I'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:2:9-20"]
-	diagnostic_14 [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:6:9-22"]
-	diagnostic_15 [label="function parameter 't' has never been read\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:7:26-27"]
-	diagnostic_16 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:3:13-34"]
-	diagnostic_17 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:7:13-52"]
+	diagnostic_14 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:3:13-34"]
+	diagnostic_15 [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:6:9-22"]
+	diagnostic_16 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:7:13-52"]
+	diagnostic_17 [label="function parameter 't' has never been read\nlevel Warning\ntests/contract_testcases/solana/expressions/selector_in_free_function_02.sol:7:26-27"]
 	contracts -> contract
 	contract -> X [label="function"]
 	contracts -> contract_4
@@ -25,8 +25,8 @@ strict digraph "tests/contract_testcases/solana/expressions/selector_in_free_fun
 	builtins -> external_function [label="arg #0"]
 	external_function -> variable [label="address"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_14 [label="Debug"]
-	diagnostics -> diagnostic_15 [label="Warning"]
+	diagnostics -> diagnostic_14 [label="Warning"]
+	diagnostics -> diagnostic_15 [label="Debug"]
 	diagnostics -> diagnostic_16 [label="Warning"]
 	diagnostics -> diagnostic_17 [label="Warning"]
 }

+ 9 - 9
tests/contract_testcases/solana/import_contracts_via_object.dot

@@ -7,11 +7,11 @@ strict digraph "tests/contract_testcases/solana/import_contracts_via_object.sol"
 	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-12"]
 	contract_9 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
-	diagnostic [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-12"]
-	diagnostic_12 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
-	diagnostic_13 [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/import_contracts_via_object.sol:2:1-3:20"]
-	diagnostic_14 [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_15 [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 [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/solana/import_contracts_via_object.sol:2:1-3:20"]
+	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-12"]
+	diagnostic_15 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
 	structs -> S
 	contracts -> contract
 	contract -> base [label="base"]
@@ -21,8 +21,8 @@ strict digraph "tests/contract_testcases/solana/import_contracts_via_object.sol"
 	contracts -> contract_8
 	contracts -> contract_9
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Debug"]
-	diagnostics -> diagnostic_14 [label="Error"]
-	diagnostics -> diagnostic_15 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_14 [label="Debug"]
+	diagnostics -> diagnostic_15 [label="Debug"]
 }

+ 128 - 0
tests/contract_testcases/solana/override.dot

@@ -0,0 +1,128 @@
+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"]
+	contract [label="contract C\ntests/contract_testcases/solana/override.sol:4:1-5: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"]
+	meh [label="function meh\ncontract: C\ntests/contract_testcases/solana/override.sol:6:29-32\nsignature meh()\nvisibility public\nmutability view\noverride A"]
+	returns [label="returns\nint256 "]
+	return [label="return\nimplicit"]
+	storage_load [label="storage load int256\nimplicit"]
+	storage_var [label="storage variable\nC.meh\nint256 storage\nimplicit"]
+	contract_11 [label="contract A\ntests/contract_testcases/solana/override.sol:8:1-9:13"]
+	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-12:13"]
+	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-15:19"]
+	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-18:16"]
+	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-21:22"]
+	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-24:22"]
+	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-27:22"]
+	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-30:18"]
+	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-12"]
+	contract_50 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
+	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-5:20"]
+	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-9:13"]
+	diagnostic_56 [label="found interface 'B'\nlevel Debug\ntests/contract_testcases/solana/override.sol:11:2-12:13"]
+	diagnostic_57 [label="found contract 'X'\nlevel Debug\ntests/contract_testcases/solana/override.sol:14:2-15:19"]
+	diagnostic_58 [label="found contract 'Y'\nlevel Debug\ntests/contract_testcases/solana/override.sol:17:2-18:16"]
+	diagnostic_59 [label="found abstract contract 'A2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:20:1-21:22"]
+	diagnostic_60 [label="found abstract contract 'B2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:23:2-24:22"]
+	diagnostic_61 [label="found contract 'X2'\nlevel Debug\ntests/contract_testcases/solana/override.sol:26:2-27:22"]
+	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-30:18"]
+	diagnostic_64 [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-12"]
+	diagnostic_65 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
+	structs -> S
+	contracts -> contract
+	contract -> base [label="base"]
+	contract -> var [label="variable"]
+	contract -> meh [label="function"]
+	meh -> returns [label="returns"]
+	meh -> return [label="body"]
+	return -> storage_load [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_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"]
+	contracts -> contract_38
+	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_50
+	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"]
+}

+ 32 - 0
tests/contract_testcases/solana/override.sol

@@ -0,0 +1,32 @@
+import "simple.sol" as IMP;
+
+int constant override no = 1;
+
+contract C is IMP.A {
+	int public override(IMP.A) meh;
+}
+
+interface A {
+    function foo() external returns (uint);
+}
+interface B {
+    function foo() external returns (uint);
+}
+contract X is A, B {
+        uint public override(A, B) foo;
+}
+contract Y is X {
+}
+
+abstract contract A2 {
+    function foo() virtual external returns (uint) { return 1; }
+}
+abstract contract B2 {
+    function foo() virtual external returns (uint) { return 2; }
+}
+contract X2 is A2, B2 {
+        uint public override(A2) foo;
+}
+contract Y2 is X2 {
+}
+

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

@@ -4,19 +4,19 @@ strict digraph "tests/contract_testcases/solana/type_decl_broken_more.sol" {
 	contract [label="contract x\ntests/contract_testcases/solana/type_decl.sol:3:1-4:12"]
 	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 "]
-	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/type_decl.sol:3:1-4:12"]
-	diagnostic_10 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/type_decl.sol:7:2-33"]
-	diagnostic_11 [label="'Addr' is an user type\nlevel Error\ntests/contract_testcases/solana/type_decl_broken_more.sol:3:14-18"]
-	diagnostic_12 [label="declaration of 'Addr' shadows type\nlevel Warning\ntests/contract_testcases/solana/type_decl_broken_more.sol:5:18-22"]
+	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"]
 	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-4:12"]
+	diagnostic_13 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/type_decl.sol:7:2-33"]
 	types -> Addr
 	types -> Binary
 	contracts -> contract
 	contract -> f [label="function"]
 	f -> parameters [label="parameters"]
-	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic [label="Error"]
 	diagnostics -> diagnostic_10 [label="Warning"]
-	diagnostics -> diagnostic_11 [label="Error"]
-	diagnostics -> diagnostic_12 [label="Warning"]
-	diagnostic_12 -> note [label="note"]
+	diagnostic_10 -> note [label="note"]
+	diagnostics -> diagnostic_12 [label="Debug"]
+	diagnostics -> diagnostic_13 [label="Warning"]
 }

+ 5 - 5
tests/contract_testcases/solana/type_decl_import.dot

@@ -19,9 +19,9 @@ strict digraph "tests/contract_testcases/solana/type_decl_import.sol" {
 	contract_20 [label="contract x\ntests/contract_testcases/solana/type_decl.sol:3:1-4:12"]
 	f_21 [label="function f\ncontract: x\ntests/contract_testcases/solana/type_decl.sol:7:2-33\nsignature f(bytes32,bool)\nvisibility public\nmutability nonpayable"]
 	parameters_22 [label="parameters\nusertype Addr \nusertype x.Binary "]
-	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/type_decl.sol:3:1-4:12"]
-	diagnostic_25 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/type_decl.sol:7:2-33"]
-	diagnostic_26 [label="found contract 'd'\nlevel Debug\ntests/contract_testcases/solana/type_decl_import.sol:2:1-3:12"]
+	diagnostic [label="found contract 'd'\nlevel Debug\ntests/contract_testcases/solana/type_decl_import.sol:2:1-3:12"]
+	diagnostic_25 [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/solana/type_decl.sol:3:1-4:12"]
+	diagnostic_26 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/type_decl.sol:7:2-33"]
 	types -> Addr
 	types -> Binary
 	contracts -> contract
@@ -43,6 +43,6 @@ strict digraph "tests/contract_testcases/solana/type_decl_import.sol" {
 	contract_20 -> f_21 [label="function"]
 	f_21 -> parameters_22 [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_25 [label="Warning"]
-	diagnostics -> diagnostic_26 [label="Debug"]
+	diagnostics -> diagnostic_25 [label="Debug"]
+	diagnostics -> diagnostic_26 [label="Warning"]
 }

+ 6 - 6
tests/contract_testcases/solana/using_import.dot

@@ -13,10 +13,10 @@ strict digraph "tests/contract_testcases/solana/using_import.sol" {
 	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-12"]
 	contract_15 [label="contract L\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
-	diagnostic [label="found contract 'A'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:1-12"]
-	diagnostic_18 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
-	diagnostic_19 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/using_import.sol:5:1-6:12"]
-	diagnostic_20 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/using_import.sol:7:2-35"]
+	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/solana/using_import.sol:5:1-6:12"]
+	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-12"]
+	diagnostic_20 [label="found library 'L'\nlevel Debug\ntests/contract_testcases/solana/simple.sol:1:14-2:11"]
 	structs -> S
 	contracts -> contract
 	contract -> test [label="function"]
@@ -32,7 +32,7 @@ strict digraph "tests/contract_testcases/solana/using_import.sol" {
 	contracts -> contract_14
 	contracts -> contract_15
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_18 [label="Debug"]
+	diagnostics -> diagnostic_18 [label="Warning"]
 	diagnostics -> diagnostic_19 [label="Debug"]
-	diagnostics -> diagnostic_20 [label="Warning"]
+	diagnostics -> diagnostic_20 [label="Debug"]
 }

+ 5 - 5
tests/contract_testcases/solana/yul/function_cal_cond.dot

@@ -71,9 +71,9 @@ strict digraph "tests/contract_testcases/solana/yul/function_cal_cond.sol" {
 	var_decl_item [label="yul variable declaration uint256 x\ntests/contract_testcases/solana/yul/function_cal_cond.sol:31:21-22"]
 	yul_number_literal_72 [label="uint256 literal: 5\ntests/contract_testcases/solana/yul/function_cal_cond.sol:31:26-27"]
 	diagnostic [label="found contract 'testTypes'\nlevel Debug\ntests/contract_testcases/solana/yul/function_cal_cond.sol:1:1-20"]
-	diagnostic_75 [label="unreachable yul statement\nlevel Warning\ntests/contract_testcases/solana/yul/function_cal_cond.sol:31:17-27"]
-	diagnostic_76 [label="yul variable 'x' has never been read\nlevel Warning\ntests/contract_testcases/solana/yul/function_cal_cond.sol:31:21-22"]
-	diagnostic_77 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/solana/yul/function_cal_cond.sol:3:9-33:10"]
+	diagnostic_75 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/solana/yul/function_cal_cond.sol:3:9-33:10"]
+	diagnostic_76 [label="unreachable yul statement\nlevel Warning\ntests/contract_testcases/solana/yul/function_cal_cond.sol:31:17-27"]
+	diagnostic_77 [label="yul variable 'x' has never been read\nlevel Warning\ntests/contract_testcases/solana/yul/function_cal_cond.sol:31:21-22"]
 	contracts -> contract
 	contract -> testAsm [label="function"]
 	testAsm -> inline_assembly [label="body"]
@@ -146,7 +146,7 @@ strict digraph "tests/contract_testcases/solana/yul/function_cal_cond.sol" {
 	yul_var_decl -> var_decl_item [label="decl item #0"]
 	yul_var_decl -> yul_number_literal_72 [label="init"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_75 [label="Warning"]
+	diagnostics -> diagnostic_75 [label="Error"]
 	diagnostics -> diagnostic_76 [label="Warning"]
-	diagnostics -> diagnostic_77 [label="Error"]
+	diagnostics -> diagnostic_77 [label="Warning"]
 }

+ 4 - 4
tests/contract_testcases/solana/yul/parse.dot

@@ -13,8 +13,8 @@ strict digraph "tests/contract_testcases/solana/yul/parse.sol" {
 	yul_number_literal_13 [label="uint256 literal: 64\ntests/contract_testcases/solana/yul/parse.sol:6:36-40"]
 	yul_variable [label="yul variable: returndata_size\nuint256\ntests/contract_testcases/solana/yul/parse.sol:6:43-58"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/solana/yul/parse.sol:2:9-22"]
-	diagnostic_17 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/solana/yul/parse.sol:4:17-7:18"]
-	diagnostic_18 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/yul/parse.sol:3:13-51"]
+	diagnostic_17 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/solana/yul/parse.sol:3:13-51"]
+	diagnostic_18 [label="inline assembly is not yet supported\nlevel Error\ntests/contract_testcases/solana/yul/parse.sol:4:17-7:18"]
 	contracts -> contract
 	contract -> get [label="function"]
 	get -> returns [label="returns"]
@@ -29,6 +29,6 @@ strict digraph "tests/contract_testcases/solana/yul/parse.sol" {
 	yul_builtin_call_11 -> yul_number_literal_13 [label="arg #1"]
 	yul_builtin_call_10 -> yul_variable [label="arg #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_17 [label="Error"]
-	diagnostics -> diagnostic_18 [label="Warning"]
+	diagnostics -> diagnostic_17 [label="Warning"]
+	diagnostics -> diagnostic_18 [label="Error"]
 }

+ 4 - 4
tests/contract_testcases/substrate/builtins/call_02.dot

@@ -8,8 +8,8 @@ strict digraph "tests/contract_testcases/substrate/builtins/call_02.sol" {
 	alloc_array [label="alloc array string\ninitializer: 42616121\ntests/contract_testcases/substrate/builtins/call_02.sol:12:23-29"]
 	number_literal [label="uint32 literal: 4\ntests/contract_testcases/substrate/builtins/call_02.sol:12:23-29"]
 	diagnostic [label="found contract 'superior'\nlevel Debug\ntests/contract_testcases/substrate/builtins/call_02.sol:2:9-27"]
-	diagnostic_11 [label="found contract 'inferior'\nlevel Debug\ntests/contract_testcases/substrate/builtins/call_02.sol:10:9-27"]
-	diagnostic_12 [label="destucturing statement needed for function that returns multiple values\nlevel Error\ntests/contract_testcases/substrate/builtins/call_02.sol:6:27-53"]
+	diagnostic_11 [label="destucturing statement needed for function that returns multiple values\nlevel Error\ntests/contract_testcases/substrate/builtins/call_02.sol:6:27-53"]
+	diagnostic_12 [label="found contract 'inferior'\nlevel Debug\ntests/contract_testcases/substrate/builtins/call_02.sol:10:9-27"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -19,6 +19,6 @@ strict digraph "tests/contract_testcases/substrate/builtins/call_02.sol" {
 	builtins -> alloc_array [label="arg #0"]
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_11 [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_11 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/builtins/call_03.dot

@@ -8,8 +8,8 @@ strict digraph "tests/contract_testcases/substrate/builtins/call_03.sol" {
 	alloc_array [label="alloc array string\ninitializer: 42616121\ntests/contract_testcases/substrate/builtins/call_03.sol:12:23-29"]
 	number_literal [label="uint32 literal: 4\ntests/contract_testcases/substrate/builtins/call_03.sol:12:23-29"]
 	diagnostic [label="found contract 'superior'\nlevel Debug\ntests/contract_testcases/substrate/builtins/call_03.sol:2:9-27"]
-	diagnostic_11 [label="found contract 'inferior'\nlevel Debug\ntests/contract_testcases/substrate/builtins/call_03.sol:10:9-27"]
-	diagnostic_12 [label="conversion from bool to bytes not possible\nlevel Error\ntests/contract_testcases/substrate/builtins/call_03.sol:6:14-21"]
+	diagnostic_11 [label="conversion from bool to bytes not possible\nlevel Error\ntests/contract_testcases/substrate/builtins/call_03.sol:6:14-21"]
+	diagnostic_12 [label="found contract 'inferior'\nlevel Debug\ntests/contract_testcases/substrate/builtins/call_03.sol:10:9-27"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -19,6 +19,6 @@ strict digraph "tests/contract_testcases/substrate/builtins/call_03.sol" {
 	builtins -> alloc_array [label="arg #0"]
 	alloc_array -> number_literal [label="length"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_11 [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_11 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_constructor.dot

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor.s
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_constructor.sol:15:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_constructor.sol:15:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor.sol:13:9-24"]
-	diagnostic_13 [label="type 'int32' does not match return value of function 'contract other'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor.sol:4:42-47"]
+	diagnostic_12 [label="type 'int32' does not match return value of function 'contract other'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor.sol:4:42-47"]
+	diagnostic_13 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor.sol:13:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -21,6 +21,6 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor.s
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_constructor_01.dot

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor_0
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_constructor_01.sol:15:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_constructor_01.sol:15:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_01.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_01.sol:13:9-24"]
-	diagnostic_13 [label="constructor returns single contract, not 2 values\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_01.sol:4:21-32"]
+	diagnostic_12 [label="constructor returns single contract, not 2 values\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_01.sol:4:21-32"]
+	diagnostic_13 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_01.sol:13:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -21,6 +21,6 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor_0
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_constructor_02.dot

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor_0
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_constructor_02.sol:15:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_constructor_02.sol:15:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_02.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_02.sol:13:9-24"]
-	diagnostic_13 [label="try only supports external calls or constructor calls\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_02.sol:4:21-35"]
+	diagnostic_12 [label="try only supports external calls or constructor calls\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_02.sol:4:21-35"]
+	diagnostic_13 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_02.sol:13:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -21,6 +21,6 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor_0
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_constructor_04.dot

@@ -4,13 +4,13 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor_0
 	contract_3 [label="contract other\ntests/contract_testcases/substrate/calls/try_catch_constructor_04.sol:12:9-24"]
 	test_4 [label="function test\ncontract: other\ntests/contract_testcases/substrate/calls/try_catch_constructor_04.sol:13:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_04.sol:2:9-20"]
-	diagnostic_7 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_04.sol:12:9-24"]
-	diagnostic_8 [label="code block missing for no catch\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_04.sol:4:21"]
+	diagnostic_7 [label="code block missing for no catch\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_04.sol:4:21"]
+	diagnostic_8 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_04.sol:12:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
 	contract_3 -> test_4 [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_8 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_constructor_05.dot

@@ -4,13 +4,13 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor_0
 	contract_3 [label="contract other\ntests/contract_testcases/substrate/calls/try_catch_constructor_05.sol:16:9-24"]
 	test_4 [label="function test\ncontract: other\ntests/contract_testcases/substrate/calls/try_catch_constructor_05.sol:17:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_05.sol:2:9-20"]
-	diagnostic_7 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_05.sol:16:9-24"]
-	diagnostic_8 [label="unexpected code block\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_05.sol:4:33-6:18"]
+	diagnostic_7 [label="unexpected code block\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_05.sol:4:33-6:18"]
+	diagnostic_8 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_05.sol:16:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
 	contract_3 -> test_4 [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_7 [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_7 [label="Error"]
+	diagnostics -> diagnostic_8 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_constructor_06.dot

@@ -5,14 +5,14 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_constructor_0
 	contract_4 [label="contract other\ntests/contract_testcases/substrate/calls/try_catch_constructor_06.sol:16:9-24"]
 	test_5 [label="function test\ncontract: other\ntests/contract_testcases/substrate/calls/try_catch_constructor_06.sol:17:13-35\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_06.sol:2:9-20"]
-	diagnostic_8 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_06.sol:16:9-24"]
-	diagnostic_9 [label="unexpected code block\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_06.sol:4:30-6:18"]
+	diagnostic_8 [label="unexpected code block\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_constructor_06.sol:4:30-6:18"]
+	diagnostic_9 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_constructor_06.sol:16:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> parameters [label="parameters"]
 	contracts -> contract_4
 	contract_4 -> test_5 [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_8 [label="Debug"]
-	diagnostics -> diagnostic_9 [label="Error"]
+	diagnostics -> diagnostic_8 [label="Error"]
+	diagnostics -> diagnostic_9 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_external_calls.dot

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_external_calls.sol:17:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_external_calls.sol:17:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls.sol:15:9-24"]
-	diagnostic_13 [label="try returns list has 1 entries while function returns 2 values\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls.sol:6:21-29"]
+	diagnostic_12 [label="try returns list has 1 entries while function returns 2 values\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls.sol:6:21-29"]
+	diagnostic_13 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls.sol:15:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -21,6 +21,6 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_external_calls_01.dot

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_external_calls_01.sol:17:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_external_calls_01.sol:17:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_01.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_01.sol:15:9-24"]
-	diagnostic_13 [label="type 'int256[2] storage' does not match return value of function 'bool'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_01.sol:6:46-52"]
+	diagnostic_12 [label="type 'int256[2] storage' does not match return value of function 'bool'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_01.sol:6:46-52"]
+	diagnostic_13 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_01.sol:15:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -21,6 +21,6 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_external_calls_02.dot

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_external_calls_02.sol:17:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_external_calls_02.sol:17:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_02.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_02.sol:15:9-24"]
-	diagnostic_13 [label="catch can only take ‘bytes memory’, not 'string'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_02.sol:8:26-32"]
+	diagnostic_12 [label="catch can only take ‘bytes memory’, not 'string'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_02.sol:8:26-32"]
+	diagnostic_13 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_02.sol:15:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -21,6 +21,6 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 7 - 7
tests/contract_testcases/substrate/calls/try_catch_external_calls_03.dot

@@ -9,10 +9,10 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:17:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:17:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:15:9-24"]
-	diagnostic_13 [label="x is already declared\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:6:45-46"]
+	diagnostic_12 [label="x is already declared\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:6:45-46"]
 	note [label="location of previous declaration\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:5:23-24"]
-	diagnostic_15 [label="catch can only take ‘bytes memory’, not 'string'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:8:26-32"]
+	diagnostic_14 [label="catch can only take ‘bytes memory’, not 'string'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:8:26-32"]
+	diagnostic_15 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_03.sol:15:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -23,8 +23,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
-	diagnostic_13 -> note [label="note"]
-	diagnostics -> diagnostic_15 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostic_12 -> note [label="note"]
+	diagnostics -> diagnostic_14 [label="Error"]
+	diagnostics -> diagnostic_15 [label="Debug"]
 }

+ 4 - 4
tests/contract_testcases/substrate/calls/try_catch_external_calls_04.dot

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_external_calls_04.sol:19:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_external_calls_04.sol:19:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_04.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_04.sol:17:9-24"]
-	diagnostic_13 [label="only catch 'Error' or 'Panic' is supported, not 'Foo'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_04.sol:8:25-28"]
+	diagnostic_12 [label="only catch 'Error' or 'Panic' is supported, not 'Foo'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_04.sol:8:25-28"]
+	diagnostic_13 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_04.sol:17:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -21,6 +21,6 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_12 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 6 - 6
tests/contract_testcases/substrate/calls/try_catch_external_calls_05.dot

@@ -9,10 +9,10 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	number_literal [label="int32 literal: 102\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:21:25-28"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:21:30-34"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:2:9-20"]
-	diagnostic_12 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:19:9-24"]
-	diagnostic_13 [label="catch Error(...) can only take ‘string memory’, not 'bytes'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:8:31-36"]
-	diagnostic_14 [label="catch Panic(...) can only take 'uint256', not 'uint128'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:10:31-38"]
-	diagnostic_15 [label="catch can only take ‘bytes memory’, not 'string'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:12:26-32"]
+	diagnostic_12 [label="catch Error(...) can only take ‘string memory’, not 'bytes'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:8:31-36"]
+	diagnostic_13 [label="catch Panic(...) can only take 'uint256', not 'uint128'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:10:31-38"]
+	diagnostic_14 [label="catch can only take ‘bytes memory’, not 'string'\nlevel Error\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:12:26-32"]
+	diagnostic_15 [label="found contract 'other'\nlevel Debug\ntests/contract_testcases/substrate/calls/try_catch_external_calls_05.sol:19:9-24"]
 	contracts -> contract
 	contract -> test [label="function"]
 	contracts -> contract_3
@@ -23,8 +23,8 @@ strict digraph "tests/contract_testcases/substrate/calls/try_catch_external_call
 	list -> number_literal [label="entry #0"]
 	list -> bool_literal [label="entry #1"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
+	diagnostics -> diagnostic_12 [label="Error"]
 	diagnostics -> diagnostic_13 [label="Error"]
 	diagnostics -> diagnostic_14 [label="Error"]
-	diagnostics -> diagnostic_15 [label="Error"]
+	diagnostics -> diagnostic_15 [label="Debug"]
 }

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

@@ -1,12 +1,12 @@
 strict digraph "tests/contract_testcases/substrate/contracts/contract_name_01.sol" {
 	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-15"]
-	diagnostic [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:2:18-22"]
+	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-15"]
+	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"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-15"]
-	diagnostic_8 [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_01.sol:1:1-15"]
 	enums -> test
 	contracts -> contract
-	diagnostics -> diagnostic [label="Warning"]
-	diagnostic -> note [label="note"]
-	diagnostics -> diagnostic_8 [label="Debug"]
+	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostic_7 -> 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-15"]
 	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-15"]
-	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"]
+	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"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:1:1-15"]
-	diagnostic_8 [label="storage variable 'test' has never been used\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_02.sol:2:13-22"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Warning"]
-	diagnostic_6 -> note [label="note"]
-	diagnostics -> diagnostic_8 [label="Warning"]
+	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostic_7 -> note [label="note"]
 }

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

@@ -1,12 +1,12 @@
 strict digraph "tests/contract_testcases/substrate/contracts/contract_name_03.sol" {
 	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-15"]
-	diagnostic [label="test is already defined as a contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:2:20-24"]
+	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-15"]
+	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"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-15"]
-	diagnostic_8 [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_03.sol:1:1-15"]
 	structs -> test
 	contracts -> contract
-	diagnostics -> diagnostic [label="Warning"]
-	diagnostic -> note [label="note"]
-	diagnostics -> diagnostic_8 [label="Debug"]
+	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostic_7 -> note [label="note"]
 }

+ 5 - 5
tests/contract_testcases/substrate/contracts/contract_name_04.dot

@@ -3,16 +3,16 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_04.so
 	f [label="function f\ncontract: test\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:2:13-32\nsignature f()\nvisibility public\nmutability nonpayable"]
 	var_decl [label="variable decl int256 test\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:3:17-25"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:1:1-15"]
-	diagnostic_6 [label="declaration of 'test' shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:3:21-25"]
+	diagnostic_6 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:2:13-32"]
+	diagnostic_7 [label="declaration of 'test' shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:3:21-25"]
 	note [label="previous declaration of contract name\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:1:1-15"]
-	diagnostic_8 [label="local variable 'test' has never been read nor assigned\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:3:21-25"]
-	diagnostic_9 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:2:13-32"]
+	diagnostic_9 [label="local variable 'test' has never been read nor assigned\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_04.sol:3:21-25"]
 	contracts -> contract
 	contract -> f [label="function"]
 	f -> var_decl [label="body"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Warning"]
-	diagnostic_6 -> note [label="note"]
-	diagnostics -> diagnostic_8 [label="Warning"]
+	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostic_7 -> note [label="note"]
 	diagnostics -> diagnostic_9 [label="Warning"]
 }

+ 5 - 5
tests/contract_testcases/substrate/contracts/contract_name_05.dot

@@ -3,16 +3,16 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_05.so
 	f [label="function f\ncontract: test\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:2:13-40\nsignature f(int256)\nvisibility public\nmutability nonpayable"]
 	parameters [label="parameters\nint256 test"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:1:1-15"]
-	diagnostic_6 [label="declaration of 'test' shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:2:28-32"]
+	diagnostic_6 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:2:13-40"]
+	diagnostic_7 [label="declaration of 'test' shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:2:28-32"]
 	note [label="previous declaration of contract name\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:1:1-15"]
-	diagnostic_8 [label="function parameter 'test' has never been read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:2:28-32"]
-	diagnostic_9 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:2:13-40"]
+	diagnostic_9 [label="function parameter 'test' has never been read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_05.sol:2:28-32"]
 	contracts -> contract
 	contract -> f [label="function"]
 	f -> parameters [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_6 [label="Warning"]
-	diagnostic_6 -> note [label="note"]
-	diagnostics -> diagnostic_8 [label="Warning"]
+	diagnostics -> diagnostic_7 [label="Warning"]
+	diagnostic_7 -> note [label="note"]
 	diagnostics -> diagnostic_9 [label="Warning"]
 }

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

@@ -5,9 +5,9 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_06.so
 	return [label="return\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:3:17-25"]
 	number_literal [label="int256 literal: 0\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:3:24-25"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:1:1-15"]
-	diagnostic_8 [label="declaration of 'test' shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:2:46-50"]
+	diagnostic_8 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:2:13-51"]
+	diagnostic_9 [label="declaration of 'test' shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:2:46-50"]
 	note [label="previous declaration of contract name\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:1:1-15"]
-	diagnostic_10 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_06.sol:2:13-51"]
 	contracts -> contract
 	contract -> f [label="function"]
 	f -> returns [label="returns"]
@@ -15,6 +15,6 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_06.so
 	return -> number_literal [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_8 [label="Warning"]
-	diagnostic_8 -> note [label="note"]
-	diagnostics -> diagnostic_10 [label="Warning"]
+	diagnostics -> diagnostic_9 [label="Warning"]
+	diagnostic_9 -> note [label="note"]
 }

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

@@ -6,8 +6,8 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_07.so
 	contract_5 [label="contract b\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:8:9-20"]
 	x_6 [label="function x\ncontract: b\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:9:13-32\nsignature x()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:2:9-20"]
-	diagnostic_9 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:8:9-20"]
-	diagnostic_10 [label="local variable 'y' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:4:19-20"]
+	diagnostic_9 [label="local variable 'y' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:4:19-20"]
+	diagnostic_10 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:8:9-20"]
 	diagnostic_11 [label="circular reference creating contract 'a'\nlevel Error\ntests/contract_testcases/substrate/contracts/contract_name_07.sol:10:23-30"]
 	contracts -> contract
 	contract -> x [label="function"]
@@ -16,7 +16,7 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_07.so
 	contracts -> contract_5
 	contract_5 -> x_6 [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_9 [label="Debug"]
-	diagnostics -> diagnostic_10 [label="Warning"]
+	diagnostics -> diagnostic_9 [label="Warning"]
+	diagnostics -> diagnostic_10 [label="Debug"]
 	diagnostics -> diagnostic_11 [label="Error"]
 }

+ 6 - 6
tests/contract_testcases/substrate/contracts/contract_name_08.dot

@@ -10,10 +10,10 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_08.so
 	contract_9 [label="contract c\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:14:9-20"]
 	x_10 [label="function x\ncontract: c\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:15:13-32\nsignature x()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:2:9-20"]
-	diagnostic_13 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:8:9-20"]
-	diagnostic_14 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:14:9-20"]
-	diagnostic_15 [label="local variable 'y' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:4:19-20"]
-	diagnostic_16 [label="local variable 'y' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:10:19-20"]
+	diagnostic_13 [label="local variable 'y' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:4:19-20"]
+	diagnostic_14 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:8:9-20"]
+	diagnostic_15 [label="local variable 'y' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:10:19-20"]
+	diagnostic_16 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:14:9-20"]
 	diagnostic_17 [label="circular reference creating contract 'a'\nlevel Error\ntests/contract_testcases/substrate/contracts/contract_name_08.sol:16:23-30"]
 	contracts -> contract
 	contract -> x [label="function"]
@@ -26,9 +26,9 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_name_08.so
 	contracts -> contract_9
 	contract_9 -> x_10 [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Debug"]
+	diagnostics -> diagnostic_13 [label="Warning"]
 	diagnostics -> diagnostic_14 [label="Debug"]
 	diagnostics -> diagnostic_15 [label="Warning"]
-	diagnostics -> diagnostic_16 [label="Warning"]
+	diagnostics -> diagnostic_16 [label="Debug"]
 	diagnostics -> diagnostic_17 [label="Error"]
 }

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

@@ -5,8 +5,8 @@ strict digraph "tests/contract_testcases/substrate/contracts/contract_type_01.so
 	cast [label="cast contract printer\ntests/contract_testcases/substrate/contracts/contract_type_01.sol:4:29-50"]
 	number_literal [label="address literal: 102\ntests/contract_testcases/substrate/contracts/contract_type_01.sol:4:37-49"]
 	diagnostic [label="found contract 'printer'\nlevel Debug\ntests/contract_testcases/substrate/contracts/contract_type_01.sol:2:9-26"]
-	diagnostic_8 [label="local variable 'x' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_type_01.sol:4:25-26"]
-	diagnostic_9 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_type_01.sol:3:13-35"]
+	diagnostic_8 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_type_01.sol:3:13-35"]
+	diagnostic_9 [label="local variable 'x' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/contract_type_01.sol:4:25-26"]
 	contracts -> contract
 	contract -> test [label="function"]
 	test -> var_decl [label="body"]

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

@@ -7,8 +7,8 @@ strict digraph "tests/contract_testcases/substrate/contracts/creation_code.sol"
 	var [label="variable x\nvisibility internal\ntests/contract_testcases/substrate/contracts/creation_code.sol:9:17-22"]
 	test_7 [label="function test\ncontract: b\ntests/contract_testcases/substrate/contracts/creation_code.sol:11:17-39\nsignature test()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/contracts/creation_code.sol:2:9-20"]
-	diagnostic_10 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/creation_code.sol:8:9-20"]
-	diagnostic_11 [label="local variable 'code' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/creation_code.sol:4:27-31"]
+	diagnostic_10 [label="local variable 'code' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/contracts/creation_code.sol:4:27-31"]
+	diagnostic_11 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/creation_code.sol:8:9-20"]
 	diagnostic_12 [label="circular reference creating contract 'a'\nlevel Error\ntests/contract_testcases/substrate/contracts/creation_code.sol:12:31-38"]
 	contracts -> contract
 	contract -> test [label="function"]
@@ -18,7 +18,7 @@ strict digraph "tests/contract_testcases/substrate/contracts/creation_code.sol"
 	contract_5 -> var [label="variable"]
 	contract_5 -> test_7 [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_10 [label="Debug"]
-	diagnostics -> diagnostic_11 [label="Warning"]
+	diagnostics -> diagnostic_10 [label="Warning"]
+	diagnostics -> diagnostic_11 [label="Debug"]
 	diagnostics -> diagnostic_12 [label="Error"]
 }

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

@@ -10,8 +10,8 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call.sol"
 	return [label="return\ntests/contract_testcases/substrate/contracts/external_call.sol:11:17-25"]
 	number_literal [label="int32 literal: 1\ntests/contract_testcases/substrate/contracts/external_call.sol:11:24-25"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call.sol:2:9-20"]
-	diagnostic_13 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call.sol:9:9-20"]
-	diagnostic_14 [label="function expects 1 arguments, 0 provided\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call.sol:5:24-33"]
+	diagnostic_13 [label="function expects 1 arguments, 0 provided\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call.sol:5:24-33"]
+	diagnostic_14 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call.sol:9:9-20"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> test [label="function"]
@@ -23,6 +23,6 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call.sol"
 	get_x -> return [label="body"]
 	return -> number_literal [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Debug"]
-	diagnostics -> diagnostic_14 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_14 [label="Debug"]
 }

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

@@ -10,8 +10,8 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_01.so
 	return [label="return\ntests/contract_testcases/substrate/contracts/external_call_01.sol:11:17-25"]
 	number_literal [label="int32 literal: 1\ntests/contract_testcases/substrate/contracts/external_call_01.sol:11:24-25"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_01.sol:2:9-20"]
-	diagnostic_13 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_01.sol:9:9-20"]
-	diagnostic_14 [label="function expects 2 arguments, 1 provided\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_01.sol:5:24-43"]
+	diagnostic_13 [label="function expects 2 arguments, 1 provided\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_01.sol:5:24-43"]
+	diagnostic_14 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_01.sol:9:9-20"]
 	diagnostic_15 [label="declaration of 'b' shadows contract name\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_01.sol:10:42-43"]
 	note [label="previous declaration of contract name\ntests/contract_testcases/substrate/contracts/external_call_01.sol:9:9-20"]
 	contracts -> contract
@@ -25,8 +25,8 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_01.so
 	get_x -> return [label="body"]
 	return -> number_literal [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Debug"]
-	diagnostics -> diagnostic_14 [label="Error"]
+	diagnostics -> diagnostic_13 [label="Error"]
+	diagnostics -> diagnostic_14 [label="Debug"]
 	diagnostics -> diagnostic_15 [label="Warning"]
 	diagnostic_15 -> note [label="note"]
 }

+ 6 - 6
tests/contract_testcases/substrate/contracts/external_call_02.dot

@@ -27,9 +27,9 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_02.so
 	variable_26 [label="variable: t\nint32\ntests/contract_testcases/substrate/contracts/external_call_02.sol:18:28-29"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_02.sol:2:9-20"]
 	diagnostic_29 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_02.sol:4:27-33"]
-	diagnostic_30 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_02.sol:12:9-20"]
-	diagnostic_31 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_02.sol:14:34-40"]
-	diagnostic_32 [label="duplicate argument with name 't'\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_02.sol:8:41-42"]
+	diagnostic_30 [label="duplicate argument with name 't'\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_02.sol:8:41-42"]
+	diagnostic_31 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_02.sol:12:9-20"]
+	diagnostic_32 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_02.sol:14:34-40"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> node_3 [label="constructor"]
@@ -58,7 +58,7 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_02.so
 	multiply -> variable_26 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_29 [label="Warning"]
-	diagnostics -> diagnostic_30 [label="Debug"]
-	diagnostics -> diagnostic_31 [label="Warning"]
-	diagnostics -> diagnostic_32 [label="Error"]
+	diagnostics -> diagnostic_30 [label="Error"]
+	diagnostics -> diagnostic_31 [label="Debug"]
+	diagnostics -> diagnostic_32 [label="Warning"]
 }

+ 7 - 7
tests/contract_testcases/substrate/contracts/external_call_03.dot

@@ -28,10 +28,10 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_03.so
 	variable_27 [label="variable: t\nint32\ntests/contract_testcases/substrate/contracts/external_call_03.sol:18:28-29"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_03.sol:2:9-20"]
 	diagnostic_30 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_03.sol:4:27-33"]
-	diagnostic_31 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_03.sol:12:9-20"]
-	diagnostic_32 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_03.sol:14:34-40"]
-	diagnostic_33 [label="duplicate argument name 'a'\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_03.sol:5:21-42"]
+	diagnostic_31 [label="duplicate argument name 'a'\nlevel Error\ntests/contract_testcases/substrate/contracts/external_call_03.sol:5:21-42"]
 	note [label="location of previous argument\ntests/contract_testcases/substrate/contracts/external_call_03.sol:5:32-33"]
+	diagnostic_33 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/contracts/external_call_03.sol:12:9-20"]
+	diagnostic_34 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/contracts/external_call_03.sol:14:34-40"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> node_3 [label="constructor"]
@@ -61,8 +61,8 @@ strict digraph "tests/contract_testcases/substrate/contracts/external_call_03.so
 	multiply -> variable_27 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_30 [label="Warning"]
-	diagnostics -> diagnostic_31 [label="Debug"]
-	diagnostics -> diagnostic_32 [label="Warning"]
-	diagnostics -> diagnostic_33 [label="Error"]
-	diagnostic_33 -> note [label="note"]
+	diagnostics -> diagnostic_31 [label="Error"]
+	diagnostic_31 -> note [label="note"]
+	diagnostics -> diagnostic_33 [label="Debug"]
+	diagnostics -> diagnostic_34 [label="Warning"]
 }

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

@@ -2,15 +2,15 @@ strict digraph "tests/contract_testcases/substrate/events/event_decl_02.sol" {
 	e [label="name: e\ntests/contract_testcases/substrate/events/event_decl_02.sol:2:9-22\nvalue: a1"]
 	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-20"]
-	diagnostic [label="e is already defined as an enum\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
+	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_02.sol:3:9-20"]
+	diagnostic_9 [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"]
-	diagnostic_10 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/event_decl_02.sol:3:9-20"]
 	diagnostic_11 [label="event 'e' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/event_decl_02.sol:4:19-20"]
 	enums -> e
 	events -> e_3
 	contracts -> contract
-	diagnostics -> diagnostic [label="Warning"]
-	diagnostic -> note [label="note"]
-	diagnostics -> diagnostic_10 [label="Debug"]
+	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_9 [label="Warning"]
+	diagnostic_9 -> note [label="note"]
 	diagnostics -> diagnostic_11 [label="Warning"]
 }

+ 4 - 4
tests/contract_testcases/substrate/events/signatures.dot

@@ -8,8 +8,8 @@ strict digraph "tests/contract_testcases/substrate/events/signatures.sol" {
 	emit [label="emit\nevent foo\ntests/contract_testcases/substrate/events/signatures.sol:10:17-34"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/events/signatures.sol:10:26-30"]
 	number_literal [label="int256 literal: 1\ntests/contract_testcases/substrate/events/signatures.sol:10:32-33"]
-	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/signatures.sol:5:9-20"]
-	diagnostic_13 [label="event 'bar' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/signatures.sol:3:15-18"]
+	diagnostic [label="event 'bar' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/signatures.sol:3:15-18"]
+	diagnostic_13 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/signatures.sol:5:9-20"]
 	diagnostic_14 [label="event 'bar' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/signatures.sol:7:19-22"]
 	events -> foo
 	events -> bar
@@ -20,7 +20,7 @@ strict digraph "tests/contract_testcases/substrate/events/signatures.sol" {
 	f -> emit [label="body"]
 	emit -> bool_literal [label="arg #0"]
 	emit -> number_literal [label="arg #1"]
-	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Warning"]
+	diagnostics -> diagnostic [label="Warning"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 	diagnostics -> diagnostic_14 [label="Warning"]
 }

+ 4 - 4
tests/contract_testcases/substrate/events/signatures_01.dot

@@ -7,8 +7,8 @@ strict digraph "tests/contract_testcases/substrate/events/signatures_01.sol" {
 	emit [label="emit\nevent foo\ntests/contract_testcases/substrate/events/signatures_01.sol:9:17-34"]
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/events/signatures_01.sol:9:26-30"]
 	number_literal [label="int256 literal: 1\ntests/contract_testcases/substrate/events/signatures_01.sol:9:32-33"]
-	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/signatures_01.sol:5:9-20"]
-	diagnostic_12 [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/signatures_01.sol:3:15-18"]
+	diagnostic [label="event 'foo' has never been emitted\nlevel Warning\ntests/contract_testcases/substrate/events/signatures_01.sol:3:15-18"]
+	diagnostic_12 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/events/signatures_01.sol:5:9-20"]
 	events -> foo
 	events -> foo_2
 	events -> foo_3
@@ -17,6 +17,6 @@ strict digraph "tests/contract_testcases/substrate/events/signatures_01.sol" {
 	f -> emit [label="body"]
 	emit -> bool_literal [label="arg #0"]
 	emit -> number_literal [label="arg #1"]
-	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Warning"]
+	diagnostics -> diagnostic [label="Warning"]
+	diagnostics -> diagnostic_12 [label="Debug"]
 }

+ 2 - 2
tests/contract_testcases/substrate/expressions/test_cast_errors_02.dot

@@ -11,8 +11,8 @@ strict digraph "tests/contract_testcases/substrate/expressions/test_cast_errors_
 	return [label="return\ntests/contract_testcases/substrate/expressions/test_cast_errors_02.sol:4:17-29"]
 	bool_literal [label="bool literal: false\ntests/contract_testcases/substrate/expressions/test_cast_errors_02.sol:4:24-29"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/expressions/test_cast_errors_02.sol:1:1-15"]
-	diagnostic_14 [label="function parameter 'foo' has never been read\nlevel Warning\ntests/contract_testcases/substrate/expressions/test_cast_errors_02.sol:2:35-38"]
-	diagnostic_15 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/expressions/test_cast_errors_02.sol:2:13-73"]
+	diagnostic_14 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/expressions/test_cast_errors_02.sol:2:13-73"]
+	diagnostic_15 [label="function parameter 'foo' has never been read\nlevel Warning\ntests/contract_testcases/substrate/expressions/test_cast_errors_02.sol:2:35-38"]
 	contracts -> contract
 	contract -> foobar [label="function"]
 	foobar -> parameters [label="parameters"]

+ 4 - 4
tests/contract_testcases/substrate/expressions/test_cast_errors_04.dot

@@ -38,8 +38,8 @@ strict digraph "tests/contract_testcases/substrate/expressions/test_cast_errors_
 	zero_ext_38 [label="zero extend uint32\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:26:23-32"]
 	variable_39 [label="variable: b\nenum foo2.X\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:26:30-31"]
 	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:1:1-14"]
-	diagnostic_42 [label="found contract 'foo2'\nlevel Debug\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:13:9-23"]
-	diagnostic_43 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:8:13-55"]
+	diagnostic_42 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:8:13-55"]
+	diagnostic_43 [label="found contract 'foo2'\nlevel Debug\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:13:9-23"]
 	diagnostic_44 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/expressions/test_cast_errors_04.sol:21:13-53"]
 	enums -> X
 	contracts -> contract
@@ -80,7 +80,7 @@ strict digraph "tests/contract_testcases/substrate/expressions/test_cast_errors_
 	call_internal_function -> zero_ext_38 [label="arg #0"]
 	zero_ext_38 -> variable_39 [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_42 [label="Debug"]
-	diagnostics -> diagnostic_43 [label="Warning"]
+	diagnostics -> diagnostic_42 [label="Warning"]
+	diagnostics -> diagnostic_43 [label="Debug"]
 	diagnostics -> diagnostic_44 [label="Warning"]
 }

+ 2 - 2
tests/contract_testcases/substrate/format/parse_08.dot

@@ -7,8 +7,8 @@ strict digraph "tests/contract_testcases/substrate/format/parse_08.sol" {
 	number_literal_6 [label="uint16 literal: 51966\ntests/contract_testcases/substrate/format/parse_08.sol:4:51-57"]
 	bytes_literal [label="string literal: 73\ntests/contract_testcases/substrate/format/parse_08.sol:4:28-58"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/format/parse_08.sol:2:9-20"]
-	diagnostic_10 [label="local variable 's' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/format/parse_08.sol:4:24-25"]
-	diagnostic_11 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/format/parse_08.sol:3:13-34"]
+	diagnostic_10 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/format/parse_08.sol:3:13-34"]
+	diagnostic_11 [label="local variable 's' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/format/parse_08.sol:4:24-25"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> var_decl [label="body"]

+ 3 - 3
tests/contract_testcases/substrate/function_types/variable_or_func_type.dot

@@ -22,9 +22,9 @@ strict digraph "tests/contract_testcases/substrate/function_types/variable_or_fu
 	diagnostic [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:1:1-14"]
 	diagnostic_23 [label="found interface 'I'\nlevel Debug\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:5:9-21"]
 	diagnostic_24 [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:9:9-31"]
-	diagnostic_25 [label="local variable 'variable' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:12:21-29"]
-	diagnostic_26 [label="local variable 'func_type' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:14:51-60"]
-	diagnostic_27 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:10:13-33"]
+	diagnostic_25 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:10:13-33"]
+	diagnostic_26 [label="local variable 'variable' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:12:21-29"]
+	diagnostic_27 [label="local variable 'func_type' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/function_types/variable_or_func_type.sol:14:51-60"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> total [label="function"]

+ 5 - 5
tests/contract_testcases/substrate/functions/global_functions_09.dot

@@ -3,16 +3,16 @@ strict digraph "tests/contract_testcases/substrate/functions/global_functions_09
 	parameters [label="parameters\nint64 "]
 	x_3 [label="function x\ntests/contract_testcases/substrate/functions/global_functions_09.sol:3:9-32\nsignature x(int128)\nvisibility internal\nmutability pure"]
 	parameters_4 [label="parameters\nint128 "]
-	diagnostic [label="overloaded function with this signature already exist\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_09.sol:4:9-32"]
+	diagnostic [label="function has no return values\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_09.sol:2:34-44"]
+	diagnostic_8 [label="function has no return values\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_09.sol:3:35-45"]
+	diagnostic_9 [label="overloaded function with this signature already exist\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_09.sol:4:9-32"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/functions/global_functions_09.sol:3:9-32"]
-	diagnostic_9 [label="function has no return values\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_09.sol:2:34-44"]
-	diagnostic_10 [label="function has no return values\nlevel Error\ntests/contract_testcases/substrate/functions/global_functions_09.sol:3:35-45"]
 	free_functions -> x [label="function"]
 	x -> parameters [label="parameters"]
 	free_functions -> x_3 [label="function"]
 	x_3 -> parameters_4 [label="parameters"]
 	diagnostics -> diagnostic [label="Error"]
-	diagnostic -> note [label="note"]
+	diagnostics -> diagnostic_8 [label="Error"]
 	diagnostics -> diagnostic_9 [label="Error"]
-	diagnostics -> diagnostic_10 [label="Error"]
+	diagnostic_9 -> note [label="note"]
 }

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

@@ -5,8 +5,8 @@ strict digraph "tests/contract_testcases/substrate/functions/mutability_01.sol"
 	return [label="return\ntests/contract_testcases/substrate/functions/mutability_01.sol:3:17-27"]
 	number_literal [label="int64 literal: 102\ntests/contract_testcases/substrate/functions/mutability_01.sol:3:24-27"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/functions/mutability_01.sol:1:1-15"]
-	diagnostic_8 [label="'constant' is deprecated. Use 'view' instead\nlevel Warning\ntests/contract_testcases/substrate/functions/mutability_01.sol:2:35-43"]
-	diagnostic_9 [label="function declared 'view' can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/functions/mutability_01.sol:2:13-59"]
+	diagnostic_8 [label="function declared 'view' can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/functions/mutability_01.sol:2:13-59"]
+	diagnostic_9 [label="'constant' is deprecated. Use 'view' instead\nlevel Warning\ntests/contract_testcases/substrate/functions/mutability_01.sol:2:35-43"]
 	contracts -> contract
 	contract -> bar [label="function"]
 	bar -> returns [label="returns"]

+ 5 - 5
tests/contract_testcases/substrate/functions/payable_04.dot

@@ -3,14 +3,14 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_04.sol" {
 	node_2 [label="constructor \ncontract: c\ntests/contract_testcases/substrate/functions/payable_04.sol:3:13-41\nsignature ()\nvisibility public\nmutability payable"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_04.sol:2:9-20"]
 	diagnostic_5 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_04.sol:3:27-33"]
-	diagnostic_6 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_04.sol:5:34-40"]
-	diagnostic_7 [label="all constructors should be defined 'payable' or not\nlevel Error\ntests/contract_testcases/substrate/functions/payable_04.sol:5:13-40"]
+	diagnostic_6 [label="all constructors should be defined 'payable' or not\nlevel Error\ntests/contract_testcases/substrate/functions/payable_04.sol:5:13-40"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/functions/payable_04.sol:3:13-41"]
+	diagnostic_8 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_04.sol:5:34-40"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_5 [label="Warning"]
-	diagnostics -> diagnostic_6 [label="Warning"]
-	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostic_7 -> note [label="note"]
+	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostic_6 -> note [label="note"]
+	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 5 - 5
tests/contract_testcases/substrate/functions/payable_05.dot

@@ -3,14 +3,14 @@ strict digraph "tests/contract_testcases/substrate/functions/payable_05.sol" {
 	node_2 [label="constructor \ncontract: c\ntests/contract_testcases/substrate/functions/payable_05.sol:3:13-33\nsignature ()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/functions/payable_05.sol:2:9-20"]
 	diagnostic_5 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_05.sol:3:27-33"]
-	diagnostic_6 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_05.sol:5:34-40"]
-	diagnostic_7 [label="all constructors should be defined 'payable' or not\nlevel Error\ntests/contract_testcases/substrate/functions/payable_05.sol:5:13-48"]
+	diagnostic_6 [label="all constructors should be defined 'payable' or not\nlevel Error\ntests/contract_testcases/substrate/functions/payable_05.sol:5:13-48"]
 	note [label="location of previous definition\ntests/contract_testcases/substrate/functions/payable_05.sol:3:13-33"]
+	diagnostic_8 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/functions/payable_05.sol:5:34-40"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_5 [label="Warning"]
-	diagnostics -> diagnostic_6 [label="Warning"]
-	diagnostics -> diagnostic_7 [label="Error"]
-	diagnostic_7 -> note [label="note"]
+	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostic_6 -> note [label="note"]
+	diagnostics -> diagnostic_8 [label="Warning"]
 }

+ 5 - 5
tests/contract_testcases/substrate/functions/shadowing.dot

@@ -17,10 +17,10 @@ strict digraph "tests/contract_testcases/substrate/functions/shadowing.sol" {
 	storage_load [label="storage load uint64\ntests/contract_testcases/substrate/functions/shadowing.sol:14:13-26"]
 	storage_var_17 [label="storage variable\ntest.result\nuint64 storage\ntests/contract_testcases/substrate/functions/shadowing.sol:14:20-26"]
 	diagnostic [label="found contract 'test'\nlevel Debug\ntests/contract_testcases/substrate/functions/shadowing.sol:2:5-19"]
-	diagnostic_20 [label="declaration of 'result' shadows state variable\nlevel Warning\ntests/contract_testcases/substrate/functions/shadowing.sol:10:20-26"]
+	diagnostic_20 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/functions/shadowing.sol:9:9-43"]
+	diagnostic_21 [label="declaration of 'result' shadows state variable\nlevel Warning\ntests/contract_testcases/substrate/functions/shadowing.sol:10:20-26"]
 	note [label="previous declaration of state variable\ntests/contract_testcases/substrate/functions/shadowing.sol:3:9-22"]
-	diagnostic_22 [label="local variable 'result' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/functions/shadowing.sol:10:20-26"]
-	diagnostic_23 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/functions/shadowing.sol:9:9-43"]
+	diagnostic_23 [label="local variable 'result' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/substrate/functions/shadowing.sol:10:20-26"]
 	diagnostic_24 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/functions/shadowing.sol:13:9-47"]
 	contracts -> contract
 	contract -> var [label="variable"]
@@ -41,8 +41,8 @@ strict digraph "tests/contract_testcases/substrate/functions/shadowing.sol" {
 	storage_load -> storage_var_17 [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_20 [label="Warning"]
-	diagnostic_20 -> note [label="note"]
-	diagnostics -> diagnostic_22 [label="Warning"]
+	diagnostics -> diagnostic_21 [label="Warning"]
+	diagnostic_21 -> note [label="note"]
 	diagnostics -> diagnostic_23 [label="Warning"]
 	diagnostics -> diagnostic_24 [label="Warning"]
 }

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

@@ -13,10 +13,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract.sol
 	variable [label="variable: a\nuint64\ntests/contract_testcases/substrate/inheritance/base_contract.sol:9:24-25"]
 	number_literal [label="uint64 literal: 102\ntests/contract_testcases/substrate/inheritance/base_contract.sol:9:28-31"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract.sol:2:9-23"]
-	diagnostic_16 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract.sol:6:9-30"]
-	diagnostic_17 [label="function parameter 'a' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract.sol:3:32-33"]
-	diagnostic_18 [label="missing arguments to contract 'base' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract.sol:7:13-27"]
-	diagnostic_19 [label="missing arguments to base contract 'base' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract.sol:6:9-30"]
+	diagnostic_16 [label="function parameter 'a' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract.sol:3:32-33"]
+	diagnostic_17 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract.sol:6:9-30"]
+	diagnostic_18 [label="missing arguments to base contract 'base' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract.sol:6:9-30"]
+	diagnostic_19 [label="missing arguments to contract 'base' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract.sol:7:13-27"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
 	node_2 -> parameters [label="parameters"]
@@ -31,8 +31,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract.sol
 	add -> variable [label="left"]
 	add -> number_literal [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_16 [label="Debug"]
-	diagnostics -> diagnostic_17 [label="Warning"]
+	diagnostics -> diagnostic_16 [label="Warning"]
+	diagnostics -> diagnostic_17 [label="Debug"]
 	diagnostics -> diagnostic_18 [label="Error"]
 	diagnostics -> diagnostic_19 [label="Error"]
 }

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

@@ -14,8 +14,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_01.
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:2:9-23"]
 	diagnostic_15 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:3:35-41"]
 	diagnostic_16 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:9-36"]
-	diagnostic_17 [label="conversion from bool to uint64 not possible\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:31-35"]
-	diagnostic_18 [label="missing arguments to base contract 'base' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:9-36"]
+	diagnostic_17 [label="missing arguments to base contract 'base' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:9-36"]
+	diagnostic_18 [label="conversion from bool to uint64 not possible\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_01.sol:6:31-35"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
 	node_2 -> parameters [label="parameters"]

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

@@ -2,11 +2,11 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	contract [label="contract apex\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.sol:2:9-23"]
 	node_2 [label="constructor \ncontract: apex\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.sol:3:13-39\nsignature ()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.sol:2:9-23"]
-	diagnostic_5 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.sol:3:33-39"]
-	diagnostic_6 [label="'oosda' not found\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.sol:3:27-32"]
+	diagnostic_5 [label="'oosda' not found\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.sol:3:27-32"]
+	diagnostic_6 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_03.sol:3:33-39"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_5 [label="Warning"]
-	diagnostics -> diagnostic_6 [label="Error"]
+	diagnostics -> diagnostic_5 [label="Error"]
+	diagnostics -> diagnostic_6 [label="Warning"]
 }

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

@@ -6,8 +6,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	base [label="base base\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:6:26-30"]
 	foo [label="function foo\ncontract: apex\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:7:17-43\nsignature foo()\nvisibility public\nmutability pure"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:2:9-23"]
-	diagnostic_9 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:6:9-30"]
-	diagnostic_10 [label="function parameter 'x' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:3:30-31"]
+	diagnostic_9 [label="function parameter 'x' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:3:30-31"]
+	diagnostic_10 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:6:9-30"]
 	diagnostic_11 [label="missing arguments to base contract 'base' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_04.sol:6:9-30"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
@@ -16,7 +16,7 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	contract_4 -> base [label="base"]
 	contract_4 -> foo [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_9 [label="Debug"]
-	diagnostics -> diagnostic_10 [label="Warning"]
+	diagnostics -> diagnostic_9 [label="Warning"]
+	diagnostics -> diagnostic_10 [label="Debug"]
 	diagnostics -> diagnostic_11 [label="Error"]
 }

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

@@ -9,8 +9,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	bool_literal [label="bool literal: true\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:7:32-36"]
 	foo [label="function foo\ncontract: apex\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:8:13-39\nsignature foo()\nvisibility public\nmutability pure"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:2:9-23"]
-	diagnostic_12 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:6:9-30"]
-	diagnostic_13 [label="function parameter 'x' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:3:30-31"]
+	diagnostic_12 [label="function parameter 'x' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:3:30-31"]
+	diagnostic_13 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:6:9-30"]
 	diagnostic_14 [label="duplicate base contract 'base'\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:7:38-49"]
 	note [label="previous base contract 'base'\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_05.sol:7:27-37"]
 	contracts -> contract
@@ -23,8 +23,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	base_7 -> bool_literal [label="arg #0"]
 	contract_4 -> foo [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Warning"]
+	diagnostics -> diagnostic_12 [label="Warning"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 	diagnostics -> diagnostic_14 [label="Error"]
 	diagnostic_14 -> note [label="note"]
 }

+ 5 - 5
tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.dot

@@ -25,10 +25,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	storage_var_24 [label="storage variable\na.foo\nint64 storage\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:13:36-39"]
 	variable_25 [label="variable: z\nint64\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:13:42-43"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:2:9-24"]
-	diagnostic_28 [label="found abstract contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:6:9-33"]
-	diagnostic_29 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:10:9-20"]
+	diagnostic_28 [label="missing arguments to base contract 'a' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:2:9-24"]
+	diagnostic_29 [label="found abstract contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:6:9-33"]
 	diagnostic_30 [label="function parameter 'y' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:7:31-32"]
-	diagnostic_31 [label="missing arguments to base contract 'a' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:2:9-24"]
+	diagnostic_31 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_06.sol:10:9-20"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> node_3 [label="constructor"]
@@ -55,8 +55,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	assign -> storage_var_24 [label="left"]
 	assign -> variable_25 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_28 [label="Debug"]
+	diagnostics -> diagnostic_28 [label="Error"]
 	diagnostics -> diagnostic_29 [label="Debug"]
 	diagnostics -> diagnostic_30 [label="Warning"]
-	diagnostics -> diagnostic_31 [label="Error"]
+	diagnostics -> diagnostic_31 [label="Debug"]
 }

+ 9 - 9
tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.dot

@@ -25,11 +25,11 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	storage_var_24 [label="storage variable\na.foo\nint64 storage\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:13:36-39"]
 	variable_25 [label="variable: z\nint64\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:13:42-43"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:2:9-24"]
-	diagnostic_28 [label="found abstract contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:6:9-33"]
-	diagnostic_29 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:10:9-20"]
-	diagnostic_30 [label="duplicate base contract 'b'\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:3:41-45"]
+	diagnostic_28 [label="missing arguments to base contract 'a' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:2:9-24"]
+	diagnostic_29 [label="duplicate base contract 'b'\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:3:41-45"]
 	note [label="previous base contract 'b'\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:3:34-40"]
-	diagnostic_32 [label="missing arguments to base contract 'a' constructor\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:2:9-24"]
+	diagnostic_31 [label="found abstract contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:6:9-33"]
+	diagnostic_32 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_07.sol:10:9-20"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> node_3 [label="constructor"]
@@ -56,9 +56,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	assign -> storage_var_24 [label="left"]
 	assign -> variable_25 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_28 [label="Debug"]
-	diagnostics -> diagnostic_29 [label="Debug"]
-	diagnostics -> diagnostic_30 [label="Error"]
-	diagnostic_30 -> note [label="note"]
-	diagnostics -> diagnostic_32 [label="Error"]
+	diagnostics -> diagnostic_28 [label="Error"]
+	diagnostics -> diagnostic_29 [label="Error"]
+	diagnostic_29 -> note [label="note"]
+	diagnostics -> diagnostic_31 [label="Debug"]
+	diagnostics -> diagnostic_32 [label="Debug"]
 }

+ 12 - 12
tests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.dot

@@ -28,13 +28,13 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	storage_var_27 [label="storage variable\na.foo\nint64 storage\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:13:36-39"]
 	variable_28 [label="variable: z\nint64\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:13:42-43"]
 	diagnostic [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:2:9-24"]
-	diagnostic_31 [label="found abstract contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:6:9-36"]
-	diagnostic_32 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:10:9-20"]
-	diagnostic_33 [label="function parameter 'y' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:7:31-32"]
-	diagnostic_34 [label="duplicate argument for base contract 'a'\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:3:41-45"]
+	diagnostic_31 [label="duplicate argument for base contract 'a'\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:3:41-45"]
 	note [label="previous argument for base contract 'a'\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:6:32-36"]
-	diagnostic_36 [label="duplicate argument for base contract 'a'\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:6:32-36"]
-	note_37 [label="previous argument for base contract 'a'\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:6:32-36"]
+	diagnostic_33 [label="found abstract contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:6:9-36"]
+	diagnostic_34 [label="duplicate argument for base contract 'a'\nlevel Error\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:6:32-36"]
+	note_35 [label="previous argument for base contract 'a'\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:6:32-36"]
+	diagnostic_36 [label="function parameter 'y' has never been read\nlevel Warning\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:7:31-32"]
+	diagnostic_37 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/base_contract_on_constructor_08.sol:10:9-20"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> node_3 [label="constructor"]
@@ -64,11 +64,11 @@ strict digraph "tests/contract_testcases/substrate/inheritance/base_contract_on_
 	assign -> storage_var_27 [label="left"]
 	assign -> variable_28 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_31 [label="Debug"]
-	diagnostics -> diagnostic_32 [label="Debug"]
-	diagnostics -> diagnostic_33 [label="Warning"]
+	diagnostics -> diagnostic_31 [label="Error"]
+	diagnostic_31 -> note [label="note"]
+	diagnostics -> diagnostic_33 [label="Debug"]
 	diagnostics -> diagnostic_34 [label="Error"]
-	diagnostic_34 -> note [label="note"]
-	diagnostics -> diagnostic_36 [label="Error"]
-	diagnostic_36 -> note_37 [label="note"]
+	diagnostic_34 -> note_35 [label="note"]
+	diagnostics -> diagnostic_36 [label="Warning"]
+	diagnostics -> diagnostic_37 [label="Debug"]
 }

+ 5 - 5
tests/contract_testcases/substrate/inheritance/call_inherited_function_02.dot

@@ -25,9 +25,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/call_inherited_fu
 	number_literal_24 [label="uint64 literal: 3\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:14:32-33"]
 	number_literal_25 [label="uint64 literal: 3\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:14:38-39"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:2:9-23"]
-	diagnostic_28 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:8:9-30"]
-	diagnostic_29 [label="function 'foo' with this signature already defined\nlevel Error\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:3:13-59"]
+	diagnostic_28 [label="function 'foo' with this signature already defined\nlevel Error\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:3:13-59"]
 	note [label="previous definition of function 'foo'\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:9:13-59"]
+	diagnostic_30 [label="found contract 'apex'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/call_inherited_function_02.sol:8:9-30"]
 	contracts -> contract
 	contract -> foo [label="function"]
 	foo -> parameters [label="parameters"]
@@ -54,7 +54,7 @@ strict digraph "tests/contract_testcases/substrate/inheritance/call_inherited_fu
 	call_internal_function -> number_literal_24 [label="arg #0"]
 	add_21 -> number_literal_25 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_28 [label="Debug"]
-	diagnostics -> diagnostic_29 [label="Error"]
-	diagnostic_29 -> note [label="note"]
+	diagnostics -> diagnostic_28 [label="Error"]
+	diagnostic_28 -> note [label="note"]
+	diagnostics -> diagnostic_30 [label="Debug"]
 }

+ 5 - 5
tests/contract_testcases/substrate/inheritance/cast_contract.dot

@@ -67,9 +67,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/cast_contract.sol
 	diagnostic [label="found interface 'operator'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:2:9-28"]
 	diagnostic_68 [label="found contract 'ferqu'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:7:9-24"]
 	diagnostic_69 [label="found contract 'm1'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:23:9-32"]
-	diagnostic_70 [label="found contract 'm2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:33:9-32"]
-	diagnostic_71 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:24:13-75"]
-	diagnostic_72 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:28:13-75"]
+	diagnostic_70 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:24:13-75"]
+	diagnostic_71 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:28:13-75"]
+	diagnostic_72 [label="found contract 'm2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:33:9-32"]
 	diagnostic_73 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:34:13-75"]
 	diagnostic_74 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/cast_contract.sol:38:13-75"]
 	contracts -> contract
@@ -140,9 +140,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/cast_contract.sol
 	diagnostics -> diagnostic [label="Debug"]
 	diagnostics -> diagnostic_68 [label="Debug"]
 	diagnostics -> diagnostic_69 [label="Debug"]
-	diagnostics -> diagnostic_70 [label="Debug"]
+	diagnostics -> diagnostic_70 [label="Warning"]
 	diagnostics -> diagnostic_71 [label="Warning"]
-	diagnostics -> diagnostic_72 [label="Warning"]
+	diagnostics -> diagnostic_72 [label="Debug"]
 	diagnostics -> diagnostic_73 [label="Warning"]
 	diagnostics -> diagnostic_74 [label="Warning"]
 }

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

@@ -8,8 +8,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types.sol
 	number_literal [label="enum b.enum_x literal: 1\ntests/contract_testcases/substrate/inheritance/inherit_types.sol:4:24-33"]
 	contract_9 [label="contract b\ntests/contract_testcases/substrate/inheritance/inherit_types.sol:8:9-20"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types.sol:2:9-24"]
-	diagnostic_12 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types.sol:8:9-20"]
-	diagnostic_13 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types.sol:3:13-52"]
+	diagnostic_12 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types.sol:3:13-52"]
+	diagnostic_13 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types.sol:8:9-20"]
 	enums -> enum_x
 	contracts -> contract
 	contract -> base [label="base"]
@@ -19,6 +19,6 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types.sol
 	return -> number_literal [label="expr"]
 	contracts -> contract_9
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_12 [label="Debug"]
-	diagnostics -> diagnostic_13 [label="Warning"]
+	diagnostics -> diagnostic_12 [label="Warning"]
+	diagnostics -> diagnostic_13 [label="Debug"]
 }

+ 8 - 8
tests/contract_testcases/substrate/inheritance/inherit_types_01.dot

@@ -15,10 +15,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_01.
 	base_15 [label="base c\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:12:23-24"]
 	contract_16 [label="contract c\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:16:9-20"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:2:9-24"]
-	diagnostic_19 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:12:9-24"]
-	diagnostic_20 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:16:9-20"]
-	diagnostic_21 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:3:13-52"]
-	diagnostic_22 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:7:13-53"]
+	diagnostic_19 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:3:13-52"]
+	diagnostic_20 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:7:13-53"]
+	diagnostic_21 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:12:9-24"]
+	diagnostic_22 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_01.sol:16:9-20"]
 	enums -> enum_y
 	enums -> enum_x
 	contracts -> contract
@@ -35,8 +35,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_01.
 	contract_14 -> base_15 [label="base"]
 	contracts -> contract_16
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_19 [label="Debug"]
-	diagnostics -> diagnostic_20 [label="Debug"]
-	diagnostics -> diagnostic_21 [label="Warning"]
-	diagnostics -> diagnostic_22 [label="Warning"]
+	diagnostics -> diagnostic_19 [label="Warning"]
+	diagnostics -> diagnostic_20 [label="Warning"]
+	diagnostics -> diagnostic_21 [label="Debug"]
+	diagnostics -> diagnostic_22 [label="Debug"]
 }

+ 8 - 8
tests/contract_testcases/substrate/inheritance/inherit_types_02.dot

@@ -16,10 +16,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_02.
 	base_16 [label="base c\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:12:23-24"]
 	contract_17 [label="contract c\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:16:9-20"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:2:9-27"]
-	diagnostic_20 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:12:9-24"]
-	diagnostic_21 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:16:9-20"]
-	diagnostic_22 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:3:13-52"]
-	diagnostic_23 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:7:13-53"]
+	diagnostic_20 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:3:13-52"]
+	diagnostic_21 [label="function can be declared 'pure'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:7:13-53"]
+	diagnostic_22 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:12:9-24"]
+	diagnostic_23 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_02.sol:16:9-20"]
 	enums -> enum_y
 	enums -> enum_x
 	contracts -> contract
@@ -37,8 +37,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_02.
 	contract_15 -> base_16 [label="base"]
 	contracts -> contract_17
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_20 [label="Debug"]
-	diagnostics -> diagnostic_21 [label="Debug"]
-	diagnostics -> diagnostic_22 [label="Warning"]
-	diagnostics -> diagnostic_23 [label="Warning"]
+	diagnostics -> diagnostic_20 [label="Warning"]
+	diagnostics -> diagnostic_21 [label="Warning"]
+	diagnostics -> diagnostic_22 [label="Debug"]
+	diagnostics -> diagnostic_23 [label="Debug"]
 }

+ 7 - 7
tests/contract_testcases/substrate/inheritance/inherit_types_05.dot

@@ -9,10 +9,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_05.
 	test [label="function test\ncontract: a\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:14:13-40\nsignature test((uint32,uint32))\nvisibility public\nmutability nonpayable"]
 	parameters [label="parameters\nstruct b.foo x"]
 	diagnostic [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:2:9-20"]
-	diagnostic_14 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:9:9-20"]
-	diagnostic_15 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:13:9-27"]
-	diagnostic_16 [label="already defined 'foo'\nlevel Error\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:3:20-23"]
+	diagnostic_14 [label="already defined 'foo'\nlevel Error\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:3:20-23"]
 	note [label="previous definition of 'foo'\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:10:18-21"]
+	diagnostic_16 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:9:9-20"]
+	diagnostic_17 [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_types_05.sol:13:9-27"]
 	enums -> foo
 	structs -> foo_3
 	contracts -> contract
@@ -23,8 +23,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_types_05.
 	contract_7 -> test [label="function"]
 	test -> parameters [label="parameters"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_14 [label="Debug"]
-	diagnostics -> diagnostic_15 [label="Debug"]
-	diagnostics -> diagnostic_16 [label="Error"]
-	diagnostic_16 -> note [label="note"]
+	diagnostics -> diagnostic_14 [label="Error"]
+	diagnostic_14 -> note [label="note"]
+	diagnostics -> diagnostic_16 [label="Debug"]
+	diagnostics -> diagnostic_17 [label="Debug"]
 }

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

@@ -17,10 +17,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_variables
 	storage_load_16 [label="storage load int256\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:12:17-27"]
 	storage_var_17 [label="storage variable\nb.foo\nint256 storage\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:12:24-27"]
 	diagnostic [label="found contract 'a'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:2:9-20"]
-	diagnostic_20 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:6:9-24"]
-	diagnostic_21 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:10:9-24"]
-	diagnostic_22 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:11:13-51"]
-	diagnostic_23 [label="storage variable 'foo' has never been used\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:3:13-28"]
+	diagnostic_20 [label="storage variable 'foo' has never been used\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:3:13-28"]
+	diagnostic_21 [label="found contract 'b'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:6:9-24"]
+	diagnostic_22 [label="found contract 'c'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:10:9-24"]
+	diagnostic_23 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/substrate/inheritance/inherit_variables_03.sol:11:13-51"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contracts -> contract_3
@@ -39,8 +39,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/inherit_variables
 	return_15 -> storage_load_16 [label="expr"]
 	storage_load_16 -> storage_var_17 [label="expr"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_20 [label="Debug"]
+	diagnostics -> diagnostic_20 [label="Warning"]
 	diagnostics -> diagnostic_21 [label="Debug"]
-	diagnostics -> diagnostic_22 [label="Warning"]
+	diagnostics -> diagnostic_22 [label="Debug"]
 	diagnostics -> diagnostic_23 [label="Warning"]
 }

+ 5 - 5
tests/contract_testcases/substrate/inheritance/multiple_override.dot

@@ -26,9 +26,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	variable_25 [label="variable: a\nuint64\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:16:24-25"]
 	number_literal_26 [label="uint64 literal: 103\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:16:28-31"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:2:9-35"]
-	diagnostic_29 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:8:9-22"]
-	diagnostic_30 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:14:9-23"]
-	diagnostic_31 [label="function 'foo' should specify override list 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:3:36-44"]
+	diagnostic_29 [label="function 'foo' should specify override list 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:3:36-44"]
+	diagnostic_30 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:8:9-22"]
+	diagnostic_31 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override.sol:14:9-23"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base_3 [label="base"]
@@ -56,7 +56,7 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	add_24 -> variable_25 [label="left"]
 	add_24 -> number_literal_26 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_29 [label="Debug"]
+	diagnostics -> diagnostic_29 [label="Error"]
 	diagnostics -> diagnostic_30 [label="Debug"]
-	diagnostics -> diagnostic_31 [label="Error"]
+	diagnostics -> diagnostic_31 [label="Debug"]
 }

+ 5 - 5
tests/contract_testcases/substrate/inheritance/multiple_override_01.dot

@@ -26,9 +26,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	variable_25 [label="variable: a\nuint64\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:16:24-25"]
 	number_literal_26 [label="uint64 literal: 103\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:16:28-31"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:2:9-35"]
-	diagnostic_29 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:8:9-22"]
-	diagnostic_30 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:14:9-23"]
-	diagnostic_31 [label="function 'foo' missing overrides 'bar2', specify 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:3:36-49"]
+	diagnostic_29 [label="function 'foo' missing overrides 'bar2', specify 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:3:36-49"]
+	diagnostic_30 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:8:9-22"]
+	diagnostic_31 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_01.sol:14:9-23"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base_3 [label="base"]
@@ -56,7 +56,7 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	add_24 -> variable_25 [label="left"]
 	add_24 -> number_literal_26 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_29 [label="Debug"]
+	diagnostics -> diagnostic_29 [label="Error"]
 	diagnostics -> diagnostic_30 [label="Debug"]
-	diagnostics -> diagnostic_31 [label="Error"]
+	diagnostics -> diagnostic_31 [label="Debug"]
 }

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

@@ -29,10 +29,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	contract_28 [label="contract bar3\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:20:9-23"]
 	f [label="function f\ncontract: bar3\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:21:13-32\nsignature f()\nvisibility public\nmutability nonpayable"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:2:9-41"]
-	diagnostic_32 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:8:9-22"]
-	diagnostic_33 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:14:9-23"]
-	diagnostic_34 [label="found contract 'bar3'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:20:9-23"]
-	diagnostic_35 [label="function 'foo' includes extraneous overrides 'bar3', specify 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:3:36-59"]
+	diagnostic_32 [label="function 'foo' includes extraneous overrides 'bar3', specify 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:3:36-59"]
+	diagnostic_33 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:8:9-22"]
+	diagnostic_34 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:14:9-23"]
+	diagnostic_35 [label="found contract 'bar3'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_02.sol:20:9-23"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base_3 [label="base"]
@@ -63,8 +63,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	contracts -> contract_28
 	contract_28 -> f [label="function"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_32 [label="Debug"]
+	diagnostics -> diagnostic_32 [label="Error"]
 	diagnostics -> diagnostic_33 [label="Debug"]
 	diagnostics -> diagnostic_34 [label="Debug"]
-	diagnostics -> diagnostic_35 [label="Error"]
+	diagnostics -> diagnostic_35 [label="Debug"]
 }

+ 7 - 7
tests/contract_testcases/substrate/inheritance/multiple_override_03.dot

@@ -26,10 +26,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	variable_25 [label="variable: a\nuint64\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:16:24-25"]
 	number_literal_26 [label="uint64 literal: 103\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:16:28-31"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:2:9-35"]
-	diagnostic_29 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:8:9-22"]
-	diagnostic_30 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:14:9-23"]
-	diagnostic_31 [label="function 'foo' overrides functions which are not 'virtual'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:3:13-80"]
+	diagnostic_29 [label="function 'foo' overrides functions which are not 'virtual'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:3:13-80"]
 	note [label="function 'foo' is not specified 'virtual'\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:9:13-61"]
+	diagnostic_31 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:8:9-22"]
+	diagnostic_32 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_03.sol:14:9-23"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base_3 [label="base"]
@@ -57,8 +57,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	add_24 -> variable_25 [label="left"]
 	add_24 -> number_literal_26 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_29 [label="Debug"]
-	diagnostics -> diagnostic_30 [label="Debug"]
-	diagnostics -> diagnostic_31 [label="Error"]
-	diagnostic_31 -> note [label="note"]
+	diagnostics -> diagnostic_29 [label="Error"]
+	diagnostic_29 -> note [label="note"]
+	diagnostics -> diagnostic_31 [label="Debug"]
+	diagnostics -> diagnostic_32 [label="Debug"]
 }

+ 5 - 5
tests/contract_testcases/substrate/inheritance/multiple_override_04.dot

@@ -26,9 +26,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	variable_25 [label="variable: a\nuint64\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:16:24-25"]
 	number_literal_26 [label="uint64 literal: 103\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:16:28-31"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:2:9-35"]
-	diagnostic_29 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:8:9-22"]
-	diagnostic_30 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:14:9-23"]
-	diagnostic_31 [label="function 'foo' should specify override list 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:3:13-61"]
+	diagnostic_29 [label="function 'foo' should specify override list 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:3:13-61"]
+	diagnostic_30 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:8:9-22"]
+	diagnostic_31 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:14:9-23"]
 	diagnostic_32 [label="function 'foo' with this signature already defined\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:15:13-69"]
 	note [label="previous definition of function 'foo'\ntests/contract_testcases/substrate/inheritance/multiple_override_04.sol:9:13-69"]
 	contracts -> contract
@@ -58,9 +58,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	add_24 -> variable_25 [label="left"]
 	add_24 -> number_literal_26 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_29 [label="Debug"]
+	diagnostics -> diagnostic_29 [label="Error"]
 	diagnostics -> diagnostic_30 [label="Debug"]
-	diagnostics -> diagnostic_31 [label="Error"]
+	diagnostics -> diagnostic_31 [label="Debug"]
 	diagnostics -> diagnostic_32 [label="Error"]
 	diagnostic_32 -> note [label="note"]
 }

+ 5 - 5
tests/contract_testcases/substrate/inheritance/multiple_override_05.dot

@@ -33,9 +33,9 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	variable_32 [label="variable: a\nuint64\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:20:24-25"]
 	number_literal_33 [label="uint64 literal: 103\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:20:28-31"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:2:9-35"]
-	diagnostic_36 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:12:9-22"]
-	diagnostic_37 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:18:9-23"]
-	diagnostic_38 [label="function 'foo' should specify override list 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:3:13-69"]
+	diagnostic_36 [label="function 'foo' should specify override list 'override(bar2,bar)'\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:3:13-69"]
+	diagnostic_37 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:12:9-22"]
+	diagnostic_38 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_05.sol:18:9-23"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base_3 [label="base"]
@@ -70,7 +70,7 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	add_31 -> variable_32 [label="left"]
 	add_31 -> number_literal_33 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_36 [label="Debug"]
+	diagnostics -> diagnostic_36 [label="Error"]
 	diagnostics -> diagnostic_37 [label="Debug"]
-	diagnostics -> diagnostic_38 [label="Error"]
+	diagnostics -> diagnostic_38 [label="Debug"]
 }

+ 7 - 7
tests/contract_testcases/substrate/inheritance/multiple_override_06.dot

@@ -33,10 +33,10 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	variable_32 [label="variable: a\nuint64\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:20:24-25"]
 	number_literal_33 [label="uint64 literal: 103\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:20:28-31"]
 	diagnostic [label="found contract 'base'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:2:9-35"]
-	diagnostic_36 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:12:9-22"]
-	diagnostic_37 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:18:9-23"]
-	diagnostic_38 [label="function 'foo' overrides function in same contract\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:7:13-80"]
+	diagnostic_36 [label="function 'foo' overrides function in same contract\nlevel Error\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:7:13-80"]
 	note [label="previous definition of 'foo'\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:3:13-80"]
+	diagnostic_38 [label="found contract 'bar'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:12:9-22"]
+	diagnostic_39 [label="found contract 'bar2'\nlevel Debug\ntests/contract_testcases/substrate/inheritance/multiple_override_06.sol:18:9-23"]
 	contracts -> contract
 	contract -> base [label="base"]
 	contract -> base_3 [label="base"]
@@ -71,8 +71,8 @@ strict digraph "tests/contract_testcases/substrate/inheritance/multiple_override
 	add_31 -> variable_32 [label="left"]
 	add_31 -> number_literal_33 [label="right"]
 	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_36 [label="Debug"]
-	diagnostics -> diagnostic_37 [label="Debug"]
-	diagnostics -> diagnostic_38 [label="Error"]
-	diagnostic_38 -> note [label="note"]
+	diagnostics -> diagnostic_36 [label="Error"]
+	diagnostic_36 -> note [label="note"]
+	diagnostics -> diagnostic_38 [label="Debug"]
+	diagnostics -> diagnostic_39 [label="Debug"]
 }

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików