From 371a531381497f949af8a485f3fcfd588a2aafe9 Mon Sep 17 00:00:00 2001
From: wechman <damian.wechman@codepoets.it>
Date: Wed, 23 Feb 2022 07:42:05 +0100
Subject: [PATCH] Add "fail after parsing" scenario to ASTJSON tests

---
 .../ASTJSON/fail_after_parsing.json           | 310 ++++++++++++++++++
 .../ASTJSON/fail_after_parsing.sol            |  16 +
 .../ASTJSON/fail_after_parsing_parseOnly.json | 283 ++++++++++++++++
 3 files changed, 609 insertions(+)
 create mode 100644 test/libsolidity/ASTJSON/fail_after_parsing.json
 create mode 100644 test/libsolidity/ASTJSON/fail_after_parsing.sol
 create mode 100644 test/libsolidity/ASTJSON/fail_after_parsing_parseOnly.json

diff --git a/test/libsolidity/ASTJSON/fail_after_parsing.json b/test/libsolidity/ASTJSON/fail_after_parsing.json
new file mode 100644
index 000000000..11cb47f35
--- /dev/null
+++ b/test/libsolidity/ASTJSON/fail_after_parsing.json
@@ -0,0 +1,310 @@
+{
+  "absolutePath": "a",
+  "exportedSymbols":
+  {
+    "I":
+    [
+      29
+    ],
+    "g":
+    [
+      3
+    ]
+  },
+  "id": 30,
+  "nodeType": "SourceUnit",
+  "nodes":
+  [
+    {
+      "id": 3,
+      "implemented": false,
+      "kind": "freeFunction",
+      "modifiers": [],
+      "name": "g",
+      "nameLocation": "9:1:1",
+      "nodeType": "FunctionDefinition",
+      "parameters":
+      {
+        "id": 1,
+        "nodeType": "ParameterList",
+        "parameters": [],
+        "src": "10:2:1"
+      },
+      "returnParameters":
+      {
+        "id": 2,
+        "nodeType": "ParameterList",
+        "parameters": [],
+        "src": "19:0:1"
+      },
+      "scope": 30,
+      "src": "0:20:1",
+      "stateMutability": "nonpayable",
+      "virtual": false,
+      "visibility": "public"
+    },
+    {
+      "abstract": false,
+      "baseContracts": [],
+      "canonicalName": "I",
+      "contractDependencies": [],
+      "contractKind": "interface",
+      "id": 29,
+      "linearizedBaseContracts":
+      [
+        29
+      ],
+      "name": "I",
+      "nameLocation": "31:1:1",
+      "nodeType": "ContractDefinition",
+      "nodes":
+      [
+        {
+          "canonicalName": "I.S",
+          "id": 7,
+          "members":
+          [
+            {
+              "constant": false,
+              "id": 6,
+              "mutability": "mutable",
+              "name": "s",
+              "nameLocation": "52:1:1",
+              "nodeType": "VariableDeclaration",
+              "scope": 7,
+              "src": "50:3:1",
+              "stateVariable": false,
+              "storageLocation": "default",
+              "typeDescriptions": {},
+              "typeName":
+              {
+                "id": 5,
+                "nodeType": "UserDefinedTypeName",
+                "pathNode":
+                {
+                  "id": 4,
+                  "name": "S",
+                  "nodeType": "IdentifierPath",
+                  "referencedDeclaration": 7,
+                  "src": "50:1:1"
+                },
+                "referencedDeclaration": 7,
+                "src": "50:1:1",
+                "typeDescriptions": {}
+              },
+              "visibility": "internal"
+            }
+          ],
+          "name": "S",
+          "nameLocation": "46:1:1",
+          "nodeType": "StructDefinition",
+          "scope": 29,
+          "src": "39:17:1",
+          "visibility": "public"
+        },
+        {
+          "body":
+          {
+            "id": 27,
+            "nodeType": "Block",
+            "src": "85:74:1",
+            "statements":
+            [
+              {
+                "assignments":
+                [
+                  15
+                ],
+                "declarations":
+                [
+                  {
+                    "constant": false,
+                    "id": 15,
+                    "mutability": "mutable",
+                    "name": "E",
+                    "nameLocation": "101:1:1",
+                    "nodeType": "VariableDeclaration",
+                    "scope": 27,
+                    "src": "95:7:1",
+                    "stateVariable": false,
+                    "storageLocation": "default",
+                    "typeDescriptions": {},
+                    "typeName":
+                    {
+                      "id": 14,
+                      "nodeType": "UserDefinedTypeName",
+                      "pathNode":
+                      {
+                        "id": 13,
+                        "name": "error",
+                        "nodeType": "IdentifierPath",
+                        "src": "95:5:1"
+                      },
+                      "src": "95:5:1",
+                      "typeDescriptions": {}
+                    },
+                    "visibility": "internal"
+                  }
+                ],
+                "id": 16,
+                "nodeType": "VariableDeclarationStatement",
+                "src": "95:7:1"
+              },
+              {
+                "eventCall":
+                {
+                  "arguments": [],
+                  "expression":
+                  {
+                    "id": 17,
+                    "name": "E",
+                    "nodeType": "Identifier",
+                    "overloadedDeclarations": [],
+                    "src": "110:1:1",
+                    "typeDescriptions": {}
+                  },
+                  "id": 18,
+                  "names": [],
+                  "nodeType": "FunctionCall",
+                  "src": "110:3:1",
+                  "tryCall": false,
+                  "typeDescriptions": {}
+                },
+                "id": 19,
+                "nodeType": "EmitStatement",
+                "src": "105:8:1"
+              },
+              {
+                "expression":
+                {
+                  "id": 21,
+                  "nodeType": "UnaryOperation",
+                  "operator": "++",
+                  "prefix": true,
+                  "src": "123:3:1",
+                  "subExpression":
+                  {
+                    "id": 20,
+                    "name": "c",
+                    "nodeType": "Identifier",
+                    "overloadedDeclarations": [],
+                    "src": "125:1:1",
+                    "typeDescriptions": {}
+                  },
+                  "typeDescriptions": {}
+                },
+                "id": 22,
+                "nodeType": "ExpressionStatement",
+                "src": "123:3:1"
+              },
+              {
+                "assignments":
+                [
+                  24
+                ],
+                "declarations":
+                [
+                  {
+                    "constant": false,
+                    "id": 24,
+                    "mutability": "mutable",
+                    "name": "c",
+                    "nameLocation": "143:1:1",
+                    "nodeType": "VariableDeclaration",
+                    "scope": 27,
+                    "src": "129:15:1",
+                    "stateVariable": false,
+                    "storageLocation": "calldata",
+                    "typeDescriptions": {},
+                    "typeName":
+                    {
+                      "id": 23,
+                      "name": "uint",
+                      "nodeType": "ElementaryTypeName",
+                      "src": "129:4:1",
+                      "typeDescriptions": {}
+                    },
+                    "visibility": "internal"
+                  }
+                ],
+                "id": 26,
+                "initialValue":
+                {
+                  "hexValue": "3132332e34",
+                  "id": 25,
+                  "kind": "number",
+                  "nodeType": "Literal",
+                  "src": "147:5:1",
+                  "typeDescriptions": {},
+                  "value": "123.4"
+                },
+                "nodeType": "VariableDeclarationStatement",
+                "src": "129:23:1"
+              }
+            ]
+          },
+          "id": 28,
+          "implemented": true,
+          "kind": "function",
+          "modifiers": [],
+          "name": "f",
+          "nameLocation": "70:1:1",
+          "nodeType": "FunctionDefinition",
+          "parameters":
+          {
+            "id": 11,
+            "nodeType": "ParameterList",
+            "parameters":
+            [
+              {
+                "constant": false,
+                "id": 10,
+                "mutability": "mutable",
+                "name": "e",
+                "nameLocation": "82:1:1",
+                "nodeType": "VariableDeclaration",
+                "scope": 28,
+                "src": "72:11:1",
+                "stateVariable": false,
+                "storageLocation": "storage",
+                "typeDescriptions": {},
+                "typeName":
+                {
+                  "id": 9,
+                  "nodeType": "UserDefinedTypeName",
+                  "pathNode":
+                  {
+                    "id": 8,
+                    "name": "E",
+                    "nodeType": "IdentifierPath",
+                    "src": "72:1:1"
+                  },
+                  "src": "72:1:1",
+                  "typeDescriptions": {}
+                },
+                "visibility": "internal"
+              }
+            ],
+            "src": "71:13:1"
+          },
+          "returnParameters":
+          {
+            "id": 12,
+            "nodeType": "ParameterList",
+            "parameters": [],
+            "src": "85:0:1"
+          },
+          "scope": 29,
+          "src": "61:98:1",
+          "stateMutability": "nonpayable",
+          "virtual": false,
+          "visibility": "public"
+        }
+      ],
+      "scope": 30,
+      "src": "21:140:1",
+      "usedErrors": []
+    }
+  ],
+  "src": "0:162:1"
+}
diff --git a/test/libsolidity/ASTJSON/fail_after_parsing.sol b/test/libsolidity/ASTJSON/fail_after_parsing.sol
new file mode 100644
index 000000000..b3b53a7c1
--- /dev/null
+++ b/test/libsolidity/ASTJSON/fail_after_parsing.sol
@@ -0,0 +1,16 @@
+function g() public;
+
+interface I {
+    struct S { S s; }
+
+    function f(E storage e) {
+        error E;
+        emit E();
+
+        ++c;
+        uint calldata c = 123.4;
+    }
+}
+
+// ----
+// failAfter: Parsed
diff --git a/test/libsolidity/ASTJSON/fail_after_parsing_parseOnly.json b/test/libsolidity/ASTJSON/fail_after_parsing_parseOnly.json
new file mode 100644
index 000000000..a5c7669ef
--- /dev/null
+++ b/test/libsolidity/ASTJSON/fail_after_parsing_parseOnly.json
@@ -0,0 +1,283 @@
+{
+  "absolutePath": "a",
+  "id": 30,
+  "nodeType": "SourceUnit",
+  "nodes":
+  [
+    {
+      "id": 3,
+      "implemented": false,
+      "kind": "freeFunction",
+      "modifiers": [],
+      "name": "g",
+      "nameLocation": "9:1:1",
+      "nodeType": "FunctionDefinition",
+      "parameters":
+      {
+        "id": 1,
+        "nodeType": "ParameterList",
+        "parameters": [],
+        "src": "10:2:1"
+      },
+      "returnParameters":
+      {
+        "id": 2,
+        "nodeType": "ParameterList",
+        "parameters": [],
+        "src": "19:0:1"
+      },
+      "src": "0:20:1",
+      "stateMutability": "nonpayable",
+      "virtual": false,
+      "visibility": "public"
+    },
+    {
+      "abstract": false,
+      "baseContracts": [],
+      "contractDependencies": [],
+      "contractKind": "interface",
+      "id": 29,
+      "name": "I",
+      "nameLocation": "31:1:1",
+      "nodeType": "ContractDefinition",
+      "nodes":
+      [
+        {
+          "id": 7,
+          "members":
+          [
+            {
+              "constant": false,
+              "id": 6,
+              "mutability": "mutable",
+              "name": "s",
+              "nameLocation": "52:1:1",
+              "nodeType": "VariableDeclaration",
+              "src": "50:3:1",
+              "stateVariable": false,
+              "storageLocation": "default",
+              "typeDescriptions": {},
+              "typeName":
+              {
+                "id": 5,
+                "nodeType": "UserDefinedTypeName",
+                "pathNode":
+                {
+                  "id": 4,
+                  "name": "S",
+                  "nodeType": "IdentifierPath",
+                  "src": "50:1:1"
+                },
+                "src": "50:1:1",
+                "typeDescriptions": {}
+              },
+              "visibility": "internal"
+            }
+          ],
+          "name": "S",
+          "nameLocation": "46:1:1",
+          "nodeType": "StructDefinition",
+          "src": "39:17:1",
+          "visibility": "public"
+        },
+        {
+          "body":
+          {
+            "id": 27,
+            "nodeType": "Block",
+            "src": "85:88:1",
+            "statements":
+            [
+              {
+                "assignments":
+                [
+                  15
+                ],
+                "declarations":
+                [
+                  {
+                    "constant": false,
+                    "id": 15,
+                    "mutability": "mutable",
+                    "name": "E",
+                    "nameLocation": "101:1:1",
+                    "nodeType": "VariableDeclaration",
+                    "src": "95:7:1",
+                    "stateVariable": false,
+                    "storageLocation": "default",
+                    "typeDescriptions": {},
+                    "typeName":
+                    {
+                      "id": 14,
+                      "nodeType": "UserDefinedTypeName",
+                      "pathNode":
+                      {
+                        "id": 13,
+                        "name": "error",
+                        "nodeType": "IdentifierPath",
+                        "src": "95:5:1"
+                      },
+                      "src": "95:5:1",
+                      "typeDescriptions": {}
+                    },
+                    "visibility": "internal"
+                  }
+                ],
+                "id": 16,
+                "nodeType": "VariableDeclarationStatement",
+                "src": "95:7:1"
+              },
+              {
+                "eventCall":
+                {
+                  "arguments": [],
+                  "expression":
+                  {
+                    "id": 17,
+                    "name": "E",
+                    "nodeType": "Identifier",
+                    "overloadedDeclarations": [],
+                    "src": "117:1:1",
+                    "typeDescriptions": {}
+                  },
+                  "id": 18,
+                  "names": [],
+                  "nodeType": "FunctionCall",
+                  "src": "117:3:1",
+                  "tryCall": false,
+                  "typeDescriptions": {}
+                },
+                "id": 19,
+                "nodeType": "EmitStatement",
+                "src": "112:8:1"
+              },
+              {
+                "expression":
+                {
+                  "id": 21,
+                  "nodeType": "UnaryOperation",
+                  "operator": "++",
+                  "prefix": true,
+                  "src": "130:3:1",
+                  "subExpression":
+                  {
+                    "id": 20,
+                    "name": "c",
+                    "nodeType": "Identifier",
+                    "overloadedDeclarations": [],
+                    "src": "132:1:1",
+                    "typeDescriptions": {}
+                  },
+                  "typeDescriptions": {}
+                },
+                "id": 22,
+                "nodeType": "ExpressionStatement",
+                "src": "130:3:1"
+              },
+              {
+                "assignments":
+                [
+                  24
+                ],
+                "declarations":
+                [
+                  {
+                    "constant": false,
+                    "id": 24,
+                    "mutability": "mutable",
+                    "name": "c",
+                    "nameLocation": "157:1:1",
+                    "nodeType": "VariableDeclaration",
+                    "src": "143:15:1",
+                    "stateVariable": false,
+                    "storageLocation": "calldata",
+                    "typeDescriptions": {},
+                    "typeName":
+                    {
+                      "id": 23,
+                      "name": "uint",
+                      "nodeType": "ElementaryTypeName",
+                      "src": "143:4:1",
+                      "typeDescriptions": {}
+                    },
+                    "visibility": "internal"
+                  }
+                ],
+                "id": 26,
+                "initialValue":
+                {
+                  "hexValue": "3132332e34",
+                  "id": 25,
+                  "kind": "number",
+                  "nodeType": "Literal",
+                  "src": "161:5:1",
+                  "typeDescriptions": {},
+                  "value": "123.4"
+                },
+                "nodeType": "VariableDeclarationStatement",
+                "src": "143:23:1"
+              }
+            ]
+          },
+          "id": 28,
+          "implemented": true,
+          "kind": "function",
+          "modifiers": [],
+          "name": "f",
+          "nameLocation": "70:1:1",
+          "nodeType": "FunctionDefinition",
+          "parameters":
+          {
+            "id": 11,
+            "nodeType": "ParameterList",
+            "parameters":
+            [
+              {
+                "constant": false,
+                "id": 10,
+                "mutability": "mutable",
+                "name": "e",
+                "nameLocation": "82:1:1",
+                "nodeType": "VariableDeclaration",
+                "src": "72:11:1",
+                "stateVariable": false,
+                "storageLocation": "storage",
+                "typeDescriptions": {},
+                "typeName":
+                {
+                  "id": 9,
+                  "nodeType": "UserDefinedTypeName",
+                  "pathNode":
+                  {
+                    "id": 8,
+                    "name": "E",
+                    "nodeType": "IdentifierPath",
+                    "src": "72:1:1"
+                  },
+                  "src": "72:1:1",
+                  "typeDescriptions": {}
+                },
+                "visibility": "internal"
+              }
+            ],
+            "src": "71:13:1"
+          },
+          "returnParameters":
+          {
+            "id": 12,
+            "nodeType": "ParameterList",
+            "parameters": [],
+            "src": "85:0:1"
+          },
+          "src": "61:112:1",
+          "stateMutability": "nonpayable",
+          "virtual": false,
+          "visibility": "public"
+        }
+      ],
+      "src": "21:154:1",
+      "usedErrors": []
+    }
+  ],
+  "src": "0:176:1"
+}