From df1062902f26a6be40bed4ddff967b94d105bb6b Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Tue, 30 Nov 2021 11:57:15 +0100 Subject: [PATCH] Add support for CustomError (#947) * Add support for CustomError - Create a new CustomError/CustomErrorTopLevel/CustomErrorContract core objects, and associated parsing classes - Create a specific solidity function to handle the revert CustomError call - Fix #919, Fix #893 --- slither/core/compilation_unit.py | 6 ++ slither/core/declarations/contract.py | 34 ++++++ slither/core/declarations/custom_error.py | 71 ++++++++++++ .../declarations/custom_error_contract.py | 12 +++ .../declarations/custom_error_top_level.py | 6 ++ .../core/declarations/solidity_variables.py | 19 ++++ slither/printers/inheritance/inheritance.py | 3 - slither/slithir/convert.py | 8 ++ slither/slithir/tmp_operations/tmp_call.py | 2 + slither/solc_parsing/declarations/contract.py | 30 +++++- .../solc_parsing/declarations/custom_error.py | 101 ++++++++++++++++++ slither/solc_parsing/declarations/function.py | 14 ++- .../solc_parsing/expressions/find_variable.py | 21 +++- .../slither_compilation_unit_solc.py | 22 +++- .../solidity_types/type_parsing.py | 22 ++-- .../compile/custom_error-0.4.0-legacy.zip | Bin 0 -> 501 bytes .../compile/custom_error-0.4.1-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.10-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.11-legacy.zip | Bin 0 -> 510 bytes .../compile/custom_error-0.4.12-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.12-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.13-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.13-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.14-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.14-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.15-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.15-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.16-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.16-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.17-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.17-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.18-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.18-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.19-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.19-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.2-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.20-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.20-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.21-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.21-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.22-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.22-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.23-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.23-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.24-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.24-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.25-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.25-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.26-compact.zip | Bin 0 -> 546 bytes .../compile/custom_error-0.4.26-legacy.zip | Bin 0 -> 558 bytes .../compile/custom_error-0.4.3-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.4-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.5-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.6-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.7-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.8-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.4.9-legacy.zip | Bin 0 -> 502 bytes .../compile/custom_error-0.5.0-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.0-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.1-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.1-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.10-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.10-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.11-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.11-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.12-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.12-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.13-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.13-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.14-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.14-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.15-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.15-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.16-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.16-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.17-compact.zip | Bin 0 -> 548 bytes .../compile/custom_error-0.5.17-legacy.zip | Bin 0 -> 560 bytes .../compile/custom_error-0.5.2-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.2-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.3-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.3-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.4-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.4-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.5-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.5-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.6-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.6-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.7-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.7-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.8-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.8-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.5.9-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.5.9-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.0-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.0-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.1-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.1-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.10-compact.zip | Bin 0 -> 556 bytes .../compile/custom_error-0.6.10-legacy.zip | Bin 0 -> 567 bytes .../compile/custom_error-0.6.11-compact.zip | Bin 0 -> 556 bytes .../compile/custom_error-0.6.11-legacy.zip | Bin 0 -> 567 bytes .../compile/custom_error-0.6.12-compact.zip | Bin 0 -> 556 bytes .../compile/custom_error-0.6.12-legacy.zip | Bin 0 -> 567 bytes .../compile/custom_error-0.6.2-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.2-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.3-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.3-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.4-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.4-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.5-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.5-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.6-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.6-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.7-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.6.7-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.6.8-compact.zip | Bin 0 -> 556 bytes .../compile/custom_error-0.6.8-legacy.zip | Bin 0 -> 567 bytes .../compile/custom_error-0.6.9-compact.zip | Bin 0 -> 556 bytes .../compile/custom_error-0.6.9-legacy.zip | Bin 0 -> 567 bytes .../compile/custom_error-0.7.0-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.7.0-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.7.1-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.7.1-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.7.2-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.7.2-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.7.3-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.7.3-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.7.4-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.7.4-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.7.5-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.7.5-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.7.6-compact.zip | Bin 0 -> 547 bytes .../compile/custom_error-0.7.6-legacy.zip | Bin 0 -> 559 bytes .../compile/custom_error-0.8.0-compact.zip | Bin 0 -> 549 bytes .../compile/custom_error-0.8.1-compact.zip | Bin 0 -> 549 bytes .../compile/custom_error-0.8.10-compact.zip | Bin 0 -> 4470 bytes .../compile/custom_error-0.8.2-compact.zip | Bin 0 -> 549 bytes .../compile/custom_error-0.8.3-compact.zip | Bin 0 -> 549 bytes .../compile/custom_error-0.8.4-compact.zip | Bin 0 -> 4408 bytes .../compile/custom_error-0.8.5-compact.zip | Bin 0 -> 4414 bytes .../compile/custom_error-0.8.6-compact.zip | Bin 0 -> 4413 bytes .../compile/custom_error-0.8.7-compact.zip | Bin 0 -> 4383 bytes .../compile/custom_error-0.8.8-compact.zip | Bin 0 -> 4457 bytes .../compile/custom_error-0.8.9-compact.zip | Bin 0 -> 4464 bytes tests/ast-parsing/custom_error-0.4.0.sol | 1 + tests/ast-parsing/custom_error-0.8.4.sol | 41 +++++++ 146 files changed, 395 insertions(+), 18 deletions(-) create mode 100644 slither/core/declarations/custom_error.py create mode 100644 slither/core/declarations/custom_error_contract.py create mode 100644 slither/core/declarations/custom_error_top_level.py create mode 100644 slither/solc_parsing/declarations/custom_error.py create mode 100644 tests/ast-parsing/compile/custom_error-0.4.0-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.1-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.10-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.11-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.12-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.12-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.13-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.13-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.14-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.14-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.15-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.15-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.16-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.16-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.17-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.17-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.18-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.18-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.19-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.19-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.2-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.20-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.20-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.21-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.21-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.22-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.22-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.23-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.23-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.24-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.24-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.25-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.25-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.26-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.26-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.3-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.4-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.5-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.6-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.7-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.8-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.9-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.0-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.0-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.1-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.1-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.10-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.10-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.11-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.11-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.12-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.12-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.13-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.13-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.14-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.14-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.15-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.15-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.16-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.16-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.17-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.17-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.2-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.2-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.3-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.3-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.4-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.4-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.5-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.5-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.6-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.6-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.7-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.7-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.8-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.8-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.9-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.5.9-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.0-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.0-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.1-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.1-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.10-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.10-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.11-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.11-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.12-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.12-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.2-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.2-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.3-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.3-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.4-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.4-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.5-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.5-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.6-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.6-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.7-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.7-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.8-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.8-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.9-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.6.9-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.0-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.0-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.1-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.1-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.2-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.2-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.3-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.3-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.4-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.4-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.5-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.5-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.6-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.7.6-legacy.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.0-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.1-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.2-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.3-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.4-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.5-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.6-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.7-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.9-compact.zip create mode 100644 tests/ast-parsing/custom_error-0.4.0.sol create mode 100644 tests/ast-parsing/custom_error-0.8.4.sol diff --git a/slither/core/compilation_unit.py b/slither/core/compilation_unit.py index 293474778..693eff821 100644 --- a/slither/core/compilation_unit.py +++ b/slither/core/compilation_unit.py @@ -13,6 +13,7 @@ from slither.core.declarations import ( Function, Modifier, ) +from slither.core.declarations.custom_error import CustomError from slither.core.declarations.enum_top_level import EnumTopLevel from slither.core.declarations.function_top_level import FunctionTopLevel from slither.core.declarations.structure_top_level import StructureTopLevel @@ -40,6 +41,7 @@ class SlitherCompilationUnit(Context): self._functions_top_level: List[FunctionTopLevel] = [] self._pragma_directives: List[Pragma] = [] self._import_directives: List[Import] = [] + self._custom_errors: List[CustomError] = [] self._all_functions: Set[Function] = set() self._all_modifiers: Set[Modifier] = set() @@ -210,6 +212,10 @@ class SlitherCompilationUnit(Context): def functions_top_level(self) -> List[FunctionTopLevel]: return self._functions_top_level + @property + def custom_errors(self) -> List[CustomError]: + return self._custom_errors + # endregion ################################################################################### ################################################################################### diff --git a/slither/core/declarations/contract.py b/slither/core/declarations/contract.py index 08279246a..4fc274dea 100644 --- a/slither/core/declarations/contract.py +++ b/slither/core/declarations/contract.py @@ -38,6 +38,7 @@ if TYPE_CHECKING: from slither.core.variables.variable import Variable from slither.core.variables.state_variable import StateVariable from slither.core.compilation_unit import SlitherCompilationUnit + from slither.core.declarations.custom_error_contract import CustomErrorContract LOGGER = logging.getLogger("Contract") @@ -68,6 +69,7 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods self._modifiers: Dict[str, "Modifier"] = {} self._functions: Dict[str, "FunctionContract"] = {} self._linearizedBaseContracts: List[int] = [] + self._custom_errors: Dict[str:"CustomErrorContract"] = {} # The only str is "*" self._using_for: Dict[Union[str, Type], List[str]] = {} @@ -242,6 +244,38 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods def using_for(self) -> Dict[Union[str, Type], List[str]]: return self._using_for + # endregion + ################################################################################### + ################################################################################### + # region Custom Errors + ################################################################################### + ################################################################################### + + @property + def custom_errors(self) -> List["CustomErrorContract"]: + """ + list(CustomErrorContract): List of the contract's custom errors + """ + return list(self._custom_errors.values()) + + @property + def custom_errors_inherited(self) -> List["CustomErrorContract"]: + """ + list(CustomErrorContract): List of the inherited custom errors + """ + return [s for s in self.custom_errors if s.contract != self] + + @property + def custom_errors_declared(self) -> List["CustomErrorContract"]: + """ + list(CustomErrorContract): List of the custom errors declared within the contract (not inherited) + """ + return [s for s in self.custom_errors if s.contract == self] + + @property + def custom_errors_as_dict(self) -> Dict[str, "CustomErrorContract"]: + return self._custom_errors + # endregion ################################################################################### ################################################################################### diff --git a/slither/core/declarations/custom_error.py b/slither/core/declarations/custom_error.py new file mode 100644 index 000000000..fc2066982 --- /dev/null +++ b/slither/core/declarations/custom_error.py @@ -0,0 +1,71 @@ +from typing import List, TYPE_CHECKING, Optional, Type, Union + +from slither.core.solidity_types import UserDefinedType +from slither.core.source_mapping.source_mapping import SourceMapping +from slither.core.variables.local_variable import LocalVariable + +if TYPE_CHECKING: + from slither.core.compilation_unit import SlitherCompilationUnit + + +class CustomError(SourceMapping): + def __init__(self, compilation_unit: "SlitherCompilationUnit"): + super().__init__() + self._name: str = "" + self._parameters: List[LocalVariable] = [] + self._compilation_unit = compilation_unit + + self._solidity_signature: Optional[str] = None + + @property + def name(self) -> str: + return self._name + + @name.setter + def name(self, new_name: str) -> None: + self._name = new_name + + @property + def parameters(self) -> List[LocalVariable]: + return self._parameters + + def add_parameters(self, p: "LocalVariable"): + self._parameters.append(p) + + @property + def compilation_unit(self) -> "SlitherCompilationUnit": + return self._compilation_unit + + # region Signature + ################################################################################### + ################################################################################### + + @staticmethod + def _convert_type_for_solidity_signature(t: Optional[Union[Type, List[Type]]]): + # pylint: disable=import-outside-toplevel + from slither.core.declarations import Contract + + if isinstance(t, UserDefinedType) and isinstance(t.type, Contract): + return "address" + return str(t) + + @property + def solidity_signature(self) -> str: + """ + Return a signature following the Solidity Standard + Contract and converted into address + :return: the solidity signature + """ + if self._solidity_signature is None: + parameters = [ + self._convert_type_for_solidity_signature(x.type) for x in self.parameters + ] + self._solidity_signature = self.name + "(" + ",".join(parameters) + ")" + return self._solidity_signature + + # endregion + ################################################################################### + ################################################################################### + + def __str__(self): + return "revert " + self.solidity_signature diff --git a/slither/core/declarations/custom_error_contract.py b/slither/core/declarations/custom_error_contract.py new file mode 100644 index 000000000..a96f12057 --- /dev/null +++ b/slither/core/declarations/custom_error_contract.py @@ -0,0 +1,12 @@ +from slither.core.children.child_contract import ChildContract +from slither.core.declarations.custom_error import CustomError + + +class CustomErrorContract(CustomError, ChildContract): + def is_declared_by(self, contract): + """ + Check if the element is declared by the contract + :param contract: + :return: + """ + return self.contract == contract diff --git a/slither/core/declarations/custom_error_top_level.py b/slither/core/declarations/custom_error_top_level.py new file mode 100644 index 000000000..f6463a528 --- /dev/null +++ b/slither/core/declarations/custom_error_top_level.py @@ -0,0 +1,6 @@ +from slither.core.declarations.custom_error import CustomError +from slither.core.declarations.top_level import TopLevel + + +class CustomErrorTopLevel(CustomError, TopLevel): + pass diff --git a/slither/core/declarations/solidity_variables.py b/slither/core/declarations/solidity_variables.py index 5a2218d18..4ae49c014 100644 --- a/slither/core/declarations/solidity_variables.py +++ b/slither/core/declarations/solidity_variables.py @@ -2,6 +2,7 @@ from typing import List, Dict, Union, TYPE_CHECKING from slither.core.context.context import Context +from slither.core.declarations.custom_error import CustomError from slither.core.solidity_types import ElementaryType, TypeInformation from slither.exceptions import SlitherException @@ -42,6 +43,7 @@ SOLIDITY_FUNCTIONS: Dict[str, List[str]] = { "require(bool,string)": [], "revert()": [], "revert(string)": [], + "revert ": [], "addmod(uint256,uint256,uint256)": ["uint256"], "mulmod(uint256,uint256,uint256)": ["uint256"], "keccak256()": ["bytes32"], @@ -184,3 +186,20 @@ class SolidityFunction: def __hash__(self): return hash(self.name) + + +class SolidityCustomRevert(SolidityFunction): + def __init__(self, custom_error: CustomError): # pylint: disable=super-init-not-called + self._name = "revert " + custom_error.solidity_signature + self._custom_error = custom_error + self._return_type: List[Union[TypeInformation, ElementaryType]] = [] + + def __eq__(self, other): + return ( + self.__class__ == other.__class__ + and self.name == other.name + and self._custom_error == other._custom_error + ) + + def __hash__(self): + return hash(hash(self.name) + hash(self._custom_error)) diff --git a/slither/printers/inheritance/inheritance.py b/slither/printers/inheritance/inheritance.py index f487be73d..08c05f95f 100644 --- a/slither/printers/inheritance/inheritance.py +++ b/slither/printers/inheritance/inheritance.py @@ -30,9 +30,6 @@ class PrinterInheritance(AbstractPrinter): """ info = "Inheritance\n" - if not self.contracts: - return [] - info += blue("Child_Contract -> ") + green("Immediate_Base_Contracts") info += green(" [Not_Immediate_Base_Contracts]") diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index b9bc85c70..a3b948626 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -13,8 +13,10 @@ from slither.core.declarations import ( SolidityVariableComposed, Structure, ) +from slither.core.declarations.custom_error import CustomError from slither.core.declarations.function_contract import FunctionContract from slither.core.declarations.solidity_import_placeholder import SolidityImportPlaceHolder +from slither.core.declarations.solidity_variables import SolidityCustomRevert from slither.core.expressions import Identifier, Literal from slither.core.solidity_types import ( ArrayType, @@ -941,6 +943,12 @@ def extract_tmp_call(ins: TmpCall, contract: Optional[Contract]): # pylint: dis s.set_expression(ins.expression) return s + if isinstance(ins.called, CustomError): + sol_function = SolidityCustomRevert(ins.called) + s = SolidityCall(sol_function, ins.nbr_arguments, ins.lvalue, ins.type_call) + s.set_expression(ins.expression) + return s + if isinstance(ins.ori, TmpNewElementaryType): n = NewElementaryType(ins.ori.type, ins.lvalue) n.set_expression(ins.expression) diff --git a/slither/slithir/tmp_operations/tmp_call.py b/slither/slithir/tmp_operations/tmp_call.py index 2157d0323..adb461e50 100644 --- a/slither/slithir/tmp_operations/tmp_call.py +++ b/slither/slithir/tmp_operations/tmp_call.py @@ -5,6 +5,7 @@ from slither.core.declarations import ( SolidityFunction, Structure, ) +from slither.core.declarations.custom_error import CustomError from slither.core.variables.variable import Variable from slither.slithir.operations.lvalue import OperationWithLValue @@ -20,6 +21,7 @@ class TmpCall(OperationWithLValue): # pylint: disable=too-many-instance-attribu SolidityFunction, Structure, Event, + CustomError, ), ) super().__init__() diff --git a/slither/solc_parsing/declarations/contract.py b/slither/solc_parsing/declarations/contract.py index dde0053c4..dba0bf771 100644 --- a/slither/solc_parsing/declarations/contract.py +++ b/slither/solc_parsing/declarations/contract.py @@ -3,8 +3,10 @@ from typing import List, Dict, Callable, TYPE_CHECKING, Union, Set from slither.core.declarations import Modifier, Event, EnumContract, StructureContract, Function from slither.core.declarations.contract import Contract +from slither.core.declarations.custom_error_contract import CustomErrorContract from slither.core.declarations.function_contract import FunctionContract from slither.core.variables.state_variable import StateVariable +from slither.solc_parsing.declarations.custom_error import CustomErrorSolc from slither.solc_parsing.declarations.event import EventSolc from slither.solc_parsing.declarations.function import FunctionSolc from slither.solc_parsing.declarations.modifier import ModifierSolc @@ -35,15 +37,17 @@ class ContractSolc: self._modifiersNotParsed: List[Dict] = [] self._functions_no_params: List[FunctionSolc] = [] self._modifiers_no_params: List[ModifierSolc] = [] - self._eventsNotParsed: List[EventSolc] = [] + self._eventsNotParsed: List[Dict] = [] self._variablesNotParsed: List[Dict] = [] self._enumsNotParsed: List[Dict] = [] self._structuresNotParsed: List[Dict] = [] self._usingForNotParsed: List[Dict] = [] + self._customErrorParsed: List[Dict] = [] self._functions_parser: List[FunctionSolc] = [] self._modifiers_parser: List[ModifierSolc] = [] self._structures_parser: List[StructureContractSolc] = [] + self._custom_errors_parser: List[CustomErrorSolc] = [] self._is_analyzed: bool = False @@ -246,6 +250,8 @@ class ContractSolc: self._structuresNotParsed.append(item) elif item[self.get_key()] == "UsingForDirective": self._usingForNotParsed.append(item) + elif item[self.get_key()] == "ErrorDefinition": + self._customErrorParsed.append(item) else: raise ParsingError("Unknown contract item: " + item[self.get_key()]) return @@ -268,6 +274,23 @@ class ContractSolc: self._parse_struct(struct) self._structuresNotParsed = None + def _parse_custom_error(self, custom_error: Dict): + ce = CustomErrorContract(self.compilation_unit) + ce.set_contract(self._contract) + ce.set_offset(custom_error["src"], self.compilation_unit) + + ce_parser = CustomErrorSolc(ce, custom_error, self._slither_parser) + self._contract.custom_errors_as_dict[ce.name] = ce + self._custom_errors_parser.append(ce_parser) + + def parse_custom_errors(self): + for father in self._contract.inheritance_reverse: + self._contract.custom_errors_as_dict.update(father.custom_errors_as_dict) + + for custom_error in self._customErrorParsed: + self._parse_custom_error(custom_error) + self._customErrorParsed = None + def parse_state_variables(self): for father in self._contract.inheritance_reverse: self._contract.variables_as_dict.update(father.variables_as_dict) @@ -600,6 +623,10 @@ class ContractSolc: except (VariableNotFound, KeyError) as e: self.log_incorrect_parsing(f"Missing struct {e}") + def analyze_custom_errors(self): + for custom_error in self._custom_errors_parser: + custom_error.analyze_params() + def analyze_events(self): try: for father in self._contract.inheritance_reverse: @@ -640,6 +667,7 @@ class ContractSolc: self._enumsNotParsed = [] self._structuresNotParsed = [] self._usingForNotParsed = [] + self._customErrorParsed = [] # endregion ################################################################################### diff --git a/slither/solc_parsing/declarations/custom_error.py b/slither/solc_parsing/declarations/custom_error.py new file mode 100644 index 000000000..417e5bc52 --- /dev/null +++ b/slither/solc_parsing/declarations/custom_error.py @@ -0,0 +1,101 @@ +from typing import TYPE_CHECKING, Dict + +from slither.core.declarations.custom_error import CustomError +from slither.core.variables.local_variable import LocalVariable +from slither.solc_parsing.variables.local_variable import LocalVariableSolc + +if TYPE_CHECKING: + from slither.solc_parsing.slither_compilation_unit_solc import SlitherCompilationUnitSolc + + +# Part of the code was copied from the function parsing +# In the long term we should refactor these two classes to merge the duplicated code + + +class CustomErrorSolc: + def __init__( + self, + custom_error: CustomError, + custom_error_data: dict, + slither_parser: "SlitherCompilationUnitSolc", + ): + self._slither_parser: "SlitherCompilationUnitSolc" = slither_parser + self._custom_error = custom_error + custom_error.name = custom_error_data["name"] + self._params_was_analyzed = False + + if not self._slither_parser.is_compact_ast: + custom_error_data = custom_error_data["attributes"] + self._custom_error_data = custom_error_data + + def analyze_params(self): + # Can be re-analyzed due to inheritance + if self._params_was_analyzed: + return + + self._params_was_analyzed = True + + if self._slither_parser.is_compact_ast: + params = self._custom_error_data["parameters"] + else: + children = self._custom_error_data[self.get_children("children")] + # It uses to be + # params = children[0] + # returns = children[1] + # But from Solidity 0.6.3 to 0.6.10 (included) + # Comment above a function might be added in the children + child_iter = iter( + [child for child in children if child[self.get_key()] == "ParameterList"] + ) + params = next(child_iter) + + if params: + self._parse_params(params) + + @property + def is_compact_ast(self) -> bool: + return self._slither_parser.is_compact_ast + + def get_key(self) -> str: + return self._slither_parser.get_key() + + def get_children(self, key: str) -> str: + if self._slither_parser.is_compact_ast: + return key + return "children" + + def _parse_params(self, params: Dict): + assert params[self.get_key()] == "ParameterList" + + if self._slither_parser.is_compact_ast: + params = params["parameters"] + else: + params = params[self.get_children("children")] + + for param in params: + assert param[self.get_key()] == "VariableDeclaration" + local_var = self._add_param(param) + self._custom_error.add_parameters(local_var.underlying_variable) + + def _add_param(self, param: Dict) -> LocalVariableSolc: + + local_var = LocalVariable() + local_var.set_offset(param["src"], self._slither_parser.compilation_unit) + + local_var_parser = LocalVariableSolc(local_var, param) + + local_var_parser.analyze(self) + + # see https://solidity.readthedocs.io/en/v0.4.24/types.html?highlight=storage%20location#data-location + if local_var.location == "default": + local_var.set_location("memory") + + return local_var_parser + + @property + def underlying_custom_error(self) -> CustomError: + return self._custom_error + + @property + def slither_parser(self) -> "SlitherCompilationUnitSolc": + return self._slither_parser diff --git a/slither/solc_parsing/declarations/function.py b/slither/solc_parsing/declarations/function.py index c3f7d8fd9..4bc10f1ff 100644 --- a/slither/solc_parsing/declarations/function.py +++ b/slither/solc_parsing/declarations/function.py @@ -10,12 +10,11 @@ from slither.core.declarations.function import ( FunctionType, ) from slither.core.declarations.function_contract import FunctionContract - from slither.core.expressions import AssignmentOperation from slither.core.variables.local_variable import LocalVariable from slither.core.variables.local_variable_init_from_tuple import LocalVariableInitFromTuple - from slither.solc_parsing.cfg.node import NodeSolc +from slither.solc_parsing.exceptions import ParsingError from slither.solc_parsing.expressions.expression_parsing import parse_expression from slither.solc_parsing.variables.local_variable import LocalVariableSolc from slither.solc_parsing.variables.local_variable_init_from_tuple import ( @@ -26,13 +25,11 @@ from slither.solc_parsing.yul.parse_yul import YulBlock from slither.utils.expression_manipulations import SplitTernaryExpression from slither.visitors.expression.export_values import ExportValues from slither.visitors.expression.has_conditional import HasConditional -from slither.solc_parsing.exceptions import ParsingError if TYPE_CHECKING: from slither.core.expressions.expression import Expression from slither.solc_parsing.declarations.contract import ContractSolc from slither.solc_parsing.slither_compilation_unit_solc import SlitherCompilationUnitSolc - from slither.core.slither_core import SlitherCore from slither.core.compilation_unit import SlitherCompilationUnit @@ -1012,6 +1009,15 @@ class FunctionSolc: node = self._parse_try_catch(statement, node) # elif name == 'TryCatchClause': # self._parse_catch(statement, node) + elif name == "RevertStatement": + if self.is_compact_ast: + expression = statement[self.get_children("errorCall")] + else: + expression = statement[self.get_children("errorCall")][0] + new_node = self._new_node(NodeType.EXPRESSION, statement["src"], scope) + new_node.add_unparsed_expression(expression) + link_underlying_nodes(node, new_node) + node = new_node else: raise ParsingError("Statement not parsed %s" % name) diff --git a/slither/solc_parsing/expressions/find_variable.py b/slither/solc_parsing/expressions/find_variable.py index 3edb29d98..a981db252 100644 --- a/slither/solc_parsing/expressions/find_variable.py +++ b/slither/solc_parsing/expressions/find_variable.py @@ -2,6 +2,7 @@ from typing import TYPE_CHECKING, Optional, Union, List, Tuple from slither.core.declarations import Event, Enum, Structure from slither.core.declarations.contract import Contract +from slither.core.declarations.custom_error import CustomError from slither.core.declarations.function import Function from slither.core.declarations.function_contract import FunctionContract from slither.core.declarations.function_top_level import FunctionTopLevel @@ -100,7 +101,7 @@ def _find_variable_in_function_parser( def _find_top_level( var_name: str, sl: "SlitherCompilationUnit" -) -> Tuple[Optional[Union[Enum, Structure, SolidityImportPlaceHolder]], bool]: +) -> Tuple[Optional[Union[Enum, Structure, SolidityImportPlaceHolder, CustomError]], bool]: """ Return the top level variable use, and a boolean indicating if the variable returning was cretead If the variable was created, it has no source_mapping @@ -127,6 +128,11 @@ def _find_top_level( new_val = SolidityImportPlaceHolder(import_directive) return new_val, True + # Note for now solidity prevent two custom error from having the same name + for custom_error in sl.custom_errors: + if custom_error.solidity_signature == var_name: + return custom_error, False + return None, False @@ -135,7 +141,7 @@ def _find_in_contract( contract: Optional[Contract], contract_declarer: Optional[Contract], is_super: bool, -) -> Optional[Union[Variable, Function, Contract, Event, Enum, Structure,]]: +) -> Optional[Union[Variable, Function, Contract, Event, Enum, Structure, CustomError]]: if contract is None or contract_declarer is None: return None @@ -191,6 +197,14 @@ def _find_in_contract( if var_name in enums: return enums[var_name] + # Note: contract.custom_errors_as_dict uses the name (not the sol sig) as key + # This is because when the dic is populated the underlying object is not yet parsed + # As a result, we need to iterate over all the custom errors here instead of using the dict + custom_errors = contract.custom_errors + for custom_error in custom_errors: + if var_name == custom_error.solidity_signature: + return custom_error + # If the enum is refered as its name rather than its canonicalName enums = {e.name: e for e in contract.enums} if var_name in enums: @@ -260,6 +274,7 @@ def find_variable( Event, Enum, Structure, + CustomError, ], bool, ]: @@ -384,4 +399,4 @@ def find_variable( if ret: return ret, False - raise VariableNotFound("Variable not found: {} (context {})".format(var_name, caller_context)) + raise VariableNotFound("Variable not found: {} (context {})".format(var_name, contract)) diff --git a/slither/solc_parsing/slither_compilation_unit_solc.py b/slither/solc_parsing/slither_compilation_unit_solc.py index 35c94e493..356b55db9 100644 --- a/slither/solc_parsing/slither_compilation_unit_solc.py +++ b/slither/solc_parsing/slither_compilation_unit_solc.py @@ -8,6 +8,7 @@ from typing import List, Dict from slither.analyses.data_dependency.data_dependency import compute_dependency from slither.core.compilation_unit import SlitherCompilationUnit from slither.core.declarations import Contract +from slither.core.declarations.custom_error_top_level import CustomErrorTopLevel from slither.core.declarations.enum_top_level import EnumTopLevel from slither.core.declarations.function_top_level import FunctionTopLevel from slither.core.declarations.import_directive import Import @@ -16,6 +17,7 @@ from slither.core.declarations.structure_top_level import StructureTopLevel from slither.core.variables.top_level_variable import TopLevelVariable from slither.exceptions import SlitherException from slither.solc_parsing.declarations.contract import ContractSolc +from slither.solc_parsing.declarations.custom_error import CustomErrorSolc from slither.solc_parsing.declarations.function import FunctionSolc from slither.solc_parsing.declarations.structure_top_level import StructureTopLevelSolc from slither.solc_parsing.exceptions import VariableNotFound @@ -37,6 +39,7 @@ class SlitherCompilationUnitSolc: self._underlying_contract_to_parser: Dict[Contract, ContractSolc] = dict() self._structures_top_level_parser: List[StructureTopLevelSolc] = [] + self._custom_error_parser: List[CustomErrorSolc] = [] self._variables_top_level_parser: List[TopLevelVariableSolc] = [] self._functions_top_level_parser: List[FunctionSolc] = [] @@ -146,7 +149,7 @@ class SlitherCompilationUnitSolc: def parse_top_level_from_loaded_json( self, data_loaded: Dict, filename: str - ): # pylint: disable=too-many-branches,too-many-statements + ): # pylint: disable=too-many-branches,too-many-statements,too-many-locals if "nodeType" in data_loaded: self._is_compact_ast = True @@ -164,6 +167,8 @@ class SlitherCompilationUnitSolc: logger.error("solc version is not supported") return + if self.get_children() not in data_loaded: + return for top_level_data in data_loaded[self.get_children()]: if top_level_data[self.get_key()] == "ContractDefinition": contract = Contract(self._compilation_unit) @@ -235,6 +240,14 @@ class SlitherCompilationUnitSolc: self._functions_top_level_parser.append(func_parser) self.add_function_or_modifier_parser(func_parser) + elif top_level_data[self.get_key()] == "ErrorDefinition": + custom_error = CustomErrorTopLevel(self._compilation_unit) + custom_error.set_offset(top_level_data["src"], self._compilation_unit) + + custom_error_parser = CustomErrorSolc(custom_error, top_level_data, self) + self._compilation_unit.custom_errors.append(custom_error) + self._custom_error_parser.append(custom_error_parser) + else: raise SlitherException(f"Top level {top_level_data[self.get_key()]} not supported") @@ -522,6 +535,7 @@ Please rename it, this name is reserved for Slither's internals""" contract.parse_state_variables() contract.parse_modifiers() contract.parse_functions() + contract.parse_custom_errors() contract.set_is_analyzed(True) def _analyze_struct_events(self, contract: ContractSolc): @@ -534,6 +548,7 @@ Please rename it, this name is reserved for Slither's internals""" contract.analyze_events() contract.analyze_using_for() + contract.analyze_custom_errors() contract.set_is_analyzed(True) @@ -556,6 +571,10 @@ Please rename it, this name is reserved for Slither's internals""" func_parser.analyze_params() self._compilation_unit.add_function(func_parser.underlying_function) + def _analyze_params_custom_error(self): + for custom_error_parser in self._custom_error_parser: + custom_error_parser.analyze_params() + def _analyze_content_top_level_function(self): try: for func_parser in self._functions_top_level_parser: @@ -569,6 +588,7 @@ Please rename it, this name is reserved for Slither's internals""" contract.analyze_params_modifiers() contract.analyze_params_functions() self._analyze_params_top_level_function() + self._analyze_params_custom_error() contract.analyze_state_variables() diff --git a/slither/solc_parsing/solidity_types/type_parsing.py b/slither/solc_parsing/solidity_types/type_parsing.py index d1c4e83cd..21b819e75 100644 --- a/slither/solc_parsing/solidity_types/type_parsing.py +++ b/slither/solc_parsing/solidity_types/type_parsing.py @@ -190,7 +190,12 @@ def _find_from_type_name( # pylint: disable=too-many-locals,too-many-branches,t return UserDefinedType(var_type) -def parse_type(t: Union[Dict, UnknownType], caller_context): +def parse_type( + t: Union[Dict, UnknownType], + caller_context: Union[ + "SlitherCompilationUnitSolc", "FunctionSolc", "ContractSolc", "CustomSolc" + ], +): # local import to avoid circular dependency # pylint: disable=too-many-locals,too-many-branches,too-many-statements # pylint: disable=import-outside-toplevel @@ -198,17 +203,22 @@ def parse_type(t: Union[Dict, UnknownType], caller_context): from slither.solc_parsing.variables.function_type_variable import FunctionTypeVariableSolc from slither.solc_parsing.declarations.contract import ContractSolc from slither.solc_parsing.declarations.function import FunctionSolc + from slither.solc_parsing.declarations.custom_error import CustomErrorSolc from slither.solc_parsing.slither_compilation_unit_solc import SlitherCompilationUnitSolc sl: "SlitherCompilationUnit" # Note: for convenicence top level functions use the same parser than function in contract # but contract_parser is set to None - if isinstance(caller_context, SlitherCompilationUnitSolc) or ( + if isinstance(caller_context, (SlitherCompilationUnitSolc, CustomErrorSolc)) or ( isinstance(caller_context, FunctionSolc) and caller_context.contract_parser is None ): + structures_direct_access: List["Structure"] if isinstance(caller_context, SlitherCompilationUnitSolc): sl = caller_context.compilation_unit next_context = caller_context + elif isinstance(caller_context, CustomErrorSolc): + sl = caller_context.underlying_custom_error.compilation_unit + next_context = caller_context.slither_parser else: assert isinstance(caller_context, FunctionSolc) sl = caller_context.underlying_function.compilation_unit @@ -235,13 +245,13 @@ def parse_type(t: Union[Dict, UnknownType], caller_context): contract = caller_context.underlying_contract next_context = caller_context - structures_direct_access = ( - contract.structures + contract.compilation_unit.structures_top_level - ) + structures_direct_access = contract.structures + structures_direct_access += contract.compilation_unit.structures_top_level all_structuress = [c.structures for c in contract.compilation_unit.contracts] all_structures = [item for sublist in all_structuress for item in sublist] all_structures += contract.compilation_unit.structures_top_level - enums_direct_access = contract.enums + contract.compilation_unit.enums_top_level + enums_direct_access: List["Enum"] = contract.enums + enums_direct_access += contract.compilation_unit.enums_top_level all_enumss = [c.enums for c in contract.compilation_unit.contracts] all_enums = [item for sublist in all_enumss for item in sublist] all_enums += contract.compilation_unit.enums_top_level diff --git a/tests/ast-parsing/compile/custom_error-0.4.0-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.0-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..45aa93540ee7fdcc7230571fdf9e5c334e1dee03 GIT binary patch literal 501 zcmWIWW@fQxU}E57SR8E@eA<&S%bt;e!IqhUL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuRAYx1%H7_>Xbn!b|72S@X_0nwP1% zU#_(`NXkxqJ@;*6E1TO|0dCl`RRu5w{q-gPx;-L^sf8h{#Fh)@kO6@b~T!y{qc2`DbTbm?PtEba_o*yq)Izq(=u=CgvBH zG(B1oAf;FB`k?vmUFJSt!J|$ScYn>Bw7zqu-;^iY4s%F+d6#qUYW|-uJ2(Qo8JX;v faYqC&F2JAx7&)XwOMo{k8%PHu5Jmv$cCdZ`mR8ER literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.1-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.1-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..4da0d8d938d9f2a2df7e70ba349ed8b80791e4d0 GIT binary patch literal 502 zcmWIWW@fQxU}E57SR8E@Y<`j}*@2OP!IqhUL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuRAYx1%H7_>Xbn!b|72S@X_0nwP1% zU#_(`NXkxqJ@;ckp`Xc*JA0!RY>mEexHfHJQJHeegdg9Q)_?9cwP-n@ z$jRy#v2s$)l}Z_giko}pg}hnw^-|vdYFF2f=hyy!cX%gz*$$o~Z|3Q#Pxfj0&2H}& z*eRrbLWcQf$Gi$vri|n~}+$ g8Fx$oBLfT?fU!eLyaaf&vVn9k0$~J@?f~lt0Dq6hoB#j- literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.10-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.10-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..db3215cb279407cb9ca3f0fc8654a3a15c67b021 GIT binary patch literal 502 zcmWIWW@fQxU}E57SQ2d(96Oh#-hq*U!H$`ML5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH?Q}NpXsu-b zYSWc6W+KrYPF?fb_`;Sg%SoIe(xbz)?iIKAdmgoI+m?AYESU1weOpLD=d-0^fw#OS z>9}oDR?|EX`|2pKeZ&7I$L4_Duh}CnJUY+&V#QzE`x18|I`?u}xTn8)-F8QR*WRl; z&uwP5cV8rFy8Wlb7wM%F_PGVCRY|Ox8*HK3YpbMxyJPw$IlrKPkH5d4{o``Qp3>-p zmJ{~Z1XkU)esIiTPo(noIP;*M<@;_fuHtNWnl#t|Nw?8Wwb^FTaJac)Od`I%}oIC4gW~Nv+%-w0? z!#``*htlO{i(c;blM>!_fM-V1gsIHw^Z5R|-A-6CRqC?B{4D}`morTE`^Ihgb|&V< zHT_+=Z#JCRbJ1hMyqt}HUTx0koLTY5)bMWx|Lw{EE!As>3f4WD96FQvM1t@YuN>~` zi`JXI9E=Xh=-%xsd;Zt!&U;fcDqI&7>ZKkn-1^@4di;?G3l2ALITzM#5MHsdy~HcA q@?V9MLV!0TlRY!;7y(8K7&HK5iIn&W@MdKL>0kuH2p~NHtRDb9-_9uj literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.12-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..2921a05880c326344a2c5c943c046b8eedd4e857 GIT binary patch literal 546 zcmWIWW@fQxU}E57SQ2d(T>oNbM-C$c!%`Lo1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR+Wk6)+f z{K{soIGP`EV3p&^y{$?c?sYW@tW~`JYMoH2@LO%xbQvd=%~u=ll}3H6yZv`}%EHy! za~(vioITct&sOEW`t)2$THrgCw?Zx@sSmSj6V@sk23$GlYO1Fj)V1mN{3t^UzN5_3 z)lKTu6TT!{o5iS_ovB=N{Da$TzMWRdfsOkNds_F{wOD!`;>a(yxhj2-mw%1do=t~y z%F0?=%L?1IlVz7?UH^D7@@?$x2Y>iNj^}OhyS{G9u48eBr|v!S?D3tb?|Dx`Z*JtY zE@vs;JpH_$eTkUko{cK6^HUQ|7hCSE;w$-5de_%QIZ&Bh{70kuH2q3)$tRDbj2HXY! literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.12-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.12-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..95efd03df20cbcf7b8ab234bd930f9efa962e491 GIT binary patch literal 558 zcmWIWW@fQxU}E57SQ2d(JpEe#s|rR2hOI0N3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1h$AHPn| z`IXIFaWp^Tz$(X+ds~$@-0Nx**b%Fz@kM?1k^S{bW=q}E0v=dBzZtAM>1WD|WjCW2 z-w8YPZuj-?IhS}APx4AUS1tU4Omk9N`L+g4c02V&Vl%TK&$jS4Q`i2x{@}ww z2>9J)2^XAUC+!%`Lo1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR*r_SD-s zzp|Mtj^;-kSmk(fZ>!RVdtFTeYZb4*S|?O0{8pPaUB*de^VNoXrBNU2ZvWk#vT(Kb zTn7;=XZMYI)6<)3(m&ngNmgr=jkxLDC*Gm%ank0fZ{>r!@7j6-5@#LWYkgQ&lX0!^ z!Hq||771K4eeT@qT|VW{jqM7{YP$P9B2%pX@xI{QrBHTy$BjmZMNGG=7Ax-0P5&S+ z+gTpPB`$XNSmJT^D&f475+}s_x8zr-6+PbcwKDzedWkg0r->m6o60^XoNjxfp)f~a z^9g|;(=AtgWXz2^y6{NT$F7U#CKmd%cX)D|%$a_e=XT4w`F{@c9S-njWU^<*9c#dd b1A_)&Op+3Z0p6@^ARUZA7y+cWfb|0aWxw9o literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.13-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.13-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..61849e80e79fa84b08afa699bbe72a6761427733 GIT binary patch literal 558 zcmWIWW@fQxU}E57SQ2d(EYq=~qk@rvVJiy*gBAk=Lvm?xNq%m8YEe;sk*;DOcio58x1ex|%wb~AeM zov=gic3=OVbBSm1B(KDC)xv))ayuT0-S_f%%{DPK^ij(TmZ!eoTbz;_1fMV5C}H|2 zT_c%w%EW@|6uGZE^gkYAdiG$oWMrY_N%;`X(_7BFZd1ST_+GrpikDqWc%;61&u3Yd z(!I~%*^dWj}BJVR2}ob{<2zBc?_*t$!;Yw7F1 o?`mfScr!BDGvkgyU?hS;129%eiO&FURyL3hMj(s;(g(o$0bG0M9smFU literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.14-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..0b910af629847e2d7bc154824661b64148e68ecc GIT binary patch literal 546 zcmWIWW@fQxU}E57SQ>2>d`Q8&Jcp5iVJQm(gBAk=Lvm?xNq%m8YEe;sk*o1Y7lv1Ocn}H?J9g z6qz{j!Qz5V?rOpF=IvYAxn%t@xBl!K6Ga3g{gqmGPk;37^qoyC0Ufd18Ru`hkbBHk ze?v5ef4T2~ZH)de}Tr8@JwHY=F&ZJKkE z{j|Z<%Vj6N2;Kgrvt!3od99GJ{^>a>XBB_@3o|+N-hF#vg2|s<6AlG2>{6<{2wt|s?VJiy*gBAk=Lvm?xNq%m8YEe;sk*AfuR-z&N_Wg>P8r?I_DZ2cR5+xb@w%lyoB|DIZ< z&oAX_Ur{D)qR@R^uRy$0b?+_xcN?X+M7muTHr&_LS{2UpMxttV!IbSM`jeVPqR*6Y zR&yMx*mgQYurjGJCBv{QeC9cAk&5V#x<)d!?N@}tO5PaXu*<1oOZq0|r{yEQ>ez~G zc_Wtc&5sVf-ne(-PM4U*_~%D-?Nb-oc6EFc`B~X{+Wu3q<(1xBb8oI&kbiOYX@jJ< zWls-jBym+4Gk*WjKlj`w*J0kuH2q1j`tRDb{Z{8XJ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.15-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c3662208bf63fbc61494cfbf2a671820d70d3671 GIT binary patch literal 546 zcmWIWW@fQxU}E57SQ>2>{GzsnEr*eTVJQm(gBAk=Lvm?xNq%m8YEe;sk*9u=rC0timwxl^QzHclg~~l& zlydpWjG2~V+9B7@u1twf+gXshL~P2tHV3Dv>TV0aF-}srp!NS_o9)B1ylOf-ocBz~ zw0te*vG~nK`Pk)2a$GMLu9`b*Df2ro7d3Bxt>u@hL?l;v6*+6M76@;AP*gv`c=j%h zi`tA&n!8wx)GcSfe$>|bd*a8Vk8}F{MAJGwl~unxqzd~j;^L3K<@&krULfnk5Iwiq z2AiHl$FhDC+N=_o+_Zn5^4iC5XB=L;WP8Si8(*v*x`rxGKlE36()0jtMkae^+_46X bI521c#w00m7~svy2GYR@gb_e`3s^q@z^U5` literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.15-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.15-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..6966f41543729c31b11c0fad01024998380ceb31 GIT binary patch literal 558 zcmWIWW@fQxU}E57SQ>2>obJgbU%|-0u$6^@L5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH?Q}NZh_1JrMDrHSo$)X-&*Q3OSGV`#qFMImc6MvR zWfc^EAR*9w!`fByw{OobQ+=nre}7Awn9y(TKems%f^4$V5^F?b^WvYz%@q{>sJqm+ z$Iry_qUYk+AM>~SJ@gY#-mGupIP1{Cl^hmAb0-Cs%>#`+f!;QuyT(AsN+VE^2>JZ;w1DLIS`3`hy{0cY zapf=H?u(mNhinv!pR{Gcwv8tBKIh8}W_)+JlD13zfA+DuKcS`9;t!X3T)4XR?h%(= zFWL(C3QxH?`^n!(@7f8Qsvc%khl$9Z-foorqVd)=+w6n)nUVI3oTl2+jJO`A&hsh?og`uf;$&r`R#8fTuotQIVHOZSPmtEVo!PbsDE z<7&?SW}~>`HK!w`Jii9|Z$GkvVVcy@fQ_?Q`8}Isw?AB-6#6yb*>uCG%eN|$+qs$5 zMcQWMO}d}4bXnJReof{8-(NAe?p?C-srQjtV=y`F!GS*Ui`Rbsb^Vwg;LXTn&x||P dfDs1<4ZxTrB@P3;S=m537=bVXNN)k_2LQgN2>{A*S6&I(2bhOI0N3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1jMUelMH zxbl~8_r*=CLpF-VPuj9z+eVXmpIh6%*_lbd+PsIGTjp)*Z94^tx_#V7EB zE*3Y`+JB^dQJ!qlS2e#c`_5Wu>FMs=Si!bpU$fua*B5@&zU05Q_o&!a`?Vb>--Q{y zx?^~!F359hLEzleeUYI~wyL{wYme4VQrTX5FHX$f1(`w8nrf+E*=ymgf5FS?f^5L+C!qwSaO-A!>a#n#$IbF?05 zE!O*Ww=Fed%anN?^PUCsm8mlNPT2iUIbDwB*TK#AkpvD;r1$BM?Ra=>uT>07O6JEC2ui literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.17-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.17-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..db9833f07c1bfdabe26daea21d03ae28aae041d9 GIT binary patch literal 546 zcmWIWW@fQxU}E57SQ>2>yyv*o(;P+yhNUbF3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1jM2|`Ow zT=~nl`{Jh6AsfZwCv91L*yWzCL!`^VDsw#+fHCs|Cy5(tRTC>ZuFwQ%dRk zxSF%S*(k1f&FM%f&#!_0+mEbZm?m{JVB;)Se$VFE?GKkHg?V0I^7)%a(aG+28;2>T=>Q1b_F8?!&Vjs1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR-B1feA- zuKeZOeR0$3kd0#TleR3_w$Y^C=hpUbc4pGAHt*r)mU)|c+fG5EZXb8z6ng{tLk#Pj zi^UDK_8)0qlqZ|?Rn70qzOxoudb&F|RVGG$)Jyl26DWvYz66L!B-PM2f(^|573&;sGV%cm-?_$s)OhwGUPvzGWj o$5gWbZ$>72X529dj6^VK0LCgQ@fqOF$_CQG2!s(p`T$rz01)KkMF0Q* literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.18-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.18-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..efc780ef62b1fe882b90d98a604e9a1d1e005f40 GIT binary patch literal 546 zcmWIWW@fQxU}E57SQ>2>{B!&K;2cHX z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1jMrP`_+ zTbC3~neuvuOxc2WPMiw*rvy99-_3IWA!Aq^5xS{D_h$BUk)NJ#_+OofQlFewB5^|B zKy`&*l#TK=yZp|--@p6_n8w(9JG7HG_@6va=Y>`^{|NAc8i`)@s zABN73d3(kG(Y@6fYm}GmyY(}vQg|D;rE#9+&Ls!r43y&T?9068y1Y+#*Tfbp)|uJ` zO@A~GOW)bKb@P0)tDhJrKle>$%ihefWAUsxZ)zWPd72X56s` cj5si80LCOKaTwsu$_CQG2!s(pdJ9-T0N3*56#xJL literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.18-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.18-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..bc6af6a43cd6c63fd803d152b5bac4a7d9197134 GIT binary patch literal 558 zcmWIWW@fQxU}E57SQ>2>96edGvx1R)<$hIc=rnoid3{2CfHh z9c9uo{PkzD`$y>&XO;=@-&cCOvuisC-ya?Jfb8nlw3E^Cn*}yoT5ZehJ5uMQ_srr7 zPjrau50j(+^9)R9tG}w)f9%*CCqDJBQ+|2ukQ1u4c>nvlThPg4MW_7K-X5C&?q&Yp oSD7^d-i%E4%(!C^7>Que0E|^q;xoXTl?|kW5eOrI^Z~Gb0I`|ou>b%7 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.19-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.19-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1174950a778920ec871ed19fe2d594e336847a9e GIT binary patch literal 546 zcmWIWW@fQxU}E57SQc#-eEC&?QVt^n!%`Lo1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR-B&Tpa@ zT9*_}neuvuOxc2WPMiw*rvy99-_3IWA!Aq^5xS{D_h$BUk)NJ#_+OofQlFewB5^|B zKy`&*l#TK=yZp|--@p6_n8w(9JG7HG_@6va=^xKJF$mNy#F4ma$ z5s$WQb33lh_&Z4EnYGoXxk0O^a8D_UyK{H?y{?^dto9Ew`i_6JxId+*V}`;~$Sgw42a-rPoIa|EB_?a-i%E4%(!C> c7;#|G0E|ge;xNFQl?|kW5eOrI^cJvw0J7KN1poj5 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.19-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.19-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..e75033abec657eef73602060862cab9fc9542dd5 GIT binary patch literal 558 zcmWIWW@fQxU}E57SQ>2>eBrF!>k38&hOI0N3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1jMo!>++ zv@R){GUfFQnX(1%oH!NqPYHII|E%x-7-t=u-D9=ys*_k)yFcILcVB1xcU@BLc;+x(la}&> z*v-w8pQdVDa&l36{& zfA))cV)5gilRwXK-S*2fG;g|eOC(j)V$O=YkDX@Cx?teTH`hueg)iqGz0c z*S|3=;mf~?d;je5_BdH>vwqEmt0G#726DGmD!1LN*gvUHVQK8Mr7ha&LB5j@tghex pPwk{#fHxzPJu~hY1V$nlGyr3jl=uwrW@Q8EUiz%# literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.2-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.2-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..2541a7b928ab29f9a9142b4c65f831c6aea1c262 GIT binary patch literal 502 zcmWIWW@fQxU}E57SR8E@Z0sRc;lRkiV9U(FpvAzzkX%|^lAjx&T2z!@q-&sOqGzC2 zoSze)T2YW+R1%+9l$?=Sma3OkoS(zWoclU@Jh z+4;NNOIzpiZw@$R-5DaT(l>ckp`Xc*JA0!RY>mEexHfHJQJHeegdg9Q)_?9cwP-n@ z$jRy#v2s$)l}Z_giko}pg}hnw^-|vdYFF2f=hyy!cX%gz*$$o~Z|3Q#Pxfj0&2H}& z*eRrbLWcQf$Gi$vri|n~}+$ g8Fx$oBLfT?fU!eLyaaf&vVn9k0$~J@?f~lt0Nf<{9 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.20-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.20-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..09b4aae6ede9d0191ef3196d1206b092e85bf76b GIT binary patch literal 546 zcmWIWW@fQxU}E57SQc#-{5@XdP7Wgj!%`Lo1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR-5hqaRZ zt4&wRn2AJpICafy;|p81EHg0e?!LR>5hgh$8!TDG|7G>$u_zgyV7+#2vg$hSjl1(z z=6@(ioov~DOZVVDiKREQcTAVi`yBQ~FQZ@N)l%)P(el#qiyT$c+wZQQvX0foYE^gt ze{ZkOAZw=eIrn%d!A1wgv`?HhL5t%AfJibJd5L+uh{7yyx3j zF>#cEdkz)O!myUV+|N_ aV9)@JNmAl4z?+o~q=OL%BY^Z4uzmn)mDlwE literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.20-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.20-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..b3e04f680a61d9637b9e7f0840e8b586513e4516 GIT binary patch literal 558 zcmWIWW@fQxU}E57SQc#-Jp1j<1r>}83|mJAJ$6t zuQpvNV_ZKlbOJ&x~v9SDw}8UO7KV@A|T- zauwTmXwDPnfBQ5z{%O}9(@P0&T*dQZ&O8d7<`^Q#?EPwndC2WAb6<1)WvVE-*1f6P z!)VdrviUsG&e2DkHcUS-HTp3p+lTs_soHN|t1+^2Y@cHB^4rVjGjH}U|9{fPp5=L{ z*R+jxdLJVGc=XnuE%(p;t|8c|$#R0tSbIw4g}S|S{_otXV{;>*s%@3;wPWW`)!0O= z4_kX`dcs+Y_cK!uE6v=hq4|kn=e>8a>fDQJUkFt871u7fZ`HH(XTwT|Bn!>%H!chR pYF*qB;LXTn&x|_;fsqIX4Zv6>B|ZbZS=m537=bVXNFM;}2LP9~=uZFu literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.21-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.21-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..84f3633d35f050372aade3408b92e027f75014e1 GIT binary patch literal 546 zcmWIWW@fQxU}E57SQc#-e3$9@+8jm(hNUbF3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1jAKP(UK z-!7nU@lZ`f*s;dL()s(dtbL_N9UQl{xqdKEkCl~CKeu1z&?Zj384qOU=dH9=<`utn z=DFs*Db51AG2xb$+2zlE+W38~PcwbC+vME(IiFdSzhvJ2ZcrR|(UE=k9gCLF43mx< zP7GMJu=0q>w}dGDstwp1kO; z!m)9QiMn=J#1B<2Ba0Pk9J@pKUr$};zeCLWc*MPz(t9F2G;X}8Yn)Wj>)WvPx^Kul z39r?QC9Rg3o|(R^^yIc9dWv7Su!S#}q;vmq$1mB4s_WI9=l=dam)sKI&B$cWj62qV c5eEhhz?dW@4gX z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1jAKP(UK z-!7nU@lZ`f*s;dL()s(dtbL_Ny{|WiUUJY7Wetvbcv!u0VT)>K%i9j#-yui&`1i!G z@hi3vFxb!Yg2nX9ye*IReLQf%?P+D{8zqmGPqnw1rB9zbA>hv~AFGd9H-wiy*D5$y zeem@+Q_DR6?sxuY8BIB5{!c#f|M#y2vx}B^3466(^nChnTAQWDuc9L%>3wDewacwU zq)Z$Rd2VT$Q4+vrxh%7G_pR_t8B_arm7Q*No4qtbT%dCI{?oowyr7mbk zj3S1CTh144O}`MA5t{X3_X@+On;$PYJB{@)x9H54mGikxYo6{up6)NkEAVvHDeK37 p1OG1$@MdJPXT}|az(@px24Jj`5}yIytZX11j6fIxqz{1g0|1yt=%xSw literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.22-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.22-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7cf966851155f7bb98121f1704d423c8735ae627 GIT binary patch literal 546 zcmWIWW@fQxU}E57SQc#-y!h!h`y56FhNUbF3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1gve4*|4 zw+rZ7JX8}AcC7KRbpHMD8=f6(XQLr|7cxT@AgWtn9bp2n`yt<}iuJbfqZ9dU!6{;EU zmAIxI(qou<-FV>>G52$GSAGa}koo_xw&672?#pX_%5mA(Jm39r%WE}@iMuW&8e86o zoVGP^vu0=C&O$-0igXt1uX#oLPM>|x@ch=B?pMCOKmPDN$vJWK_Iee`d!ihPx(BCw zX|286IfZSO&7~i6<^N2rcj@_b;CsVi!$}UEJ%vT*73Eu}M4$b`+?N^P&B$cWj62qV c5eEhhz?dW@4gr*5H_jht(Swwy1WtyzSuq9deY9e^2}x zzhVmkgZ(@&SWLgn+wy4N#{(DKo>rE=QJnsNtwvE9|JEN*Zf?o^xm@S*&Gr2Gclx^H z-mx|$FZj2px4qeNr|A3B`O6CLCR%10=gEfbxVF;j<@1jQvK!6g--b%+&2PPy%utIGAvWQR-aGm9MfL zHsMxjBC}K%ssDIrkTC7Q{Z(&m{d_q2b0hx$XK6Q$I%*J?@ZCqB{@w4wC>tEUSpdII%?XGiBXZ{^*dE;^G>xY;G~jkMIql8Z;RZkxQ_ zzb*Wgyi~&Bq&3Pv$`1T%=zaVA^``BrS%F$&GOO?2&YI4ey+QOt#%8G=@sAbko2}!w z2A8MR>=&#me=>hnfw;QGFJDtn-|90G;y1r>6fs8qzFfcJ&+6qh0p5&E_RP3r4H$7? Z&;X1{QsOYco0ScugAoWLfbZ9TgMr3)sir$v4s0ox*9FT5|8}?C;uB+~QbtTqo8F&*B!( z&)kxBT$1s9M}Fc=we{WQvG>oo2y9;yw&kCg)bWIk+l!RimnF|M$XKptW;64RLe2V9 z+V8m*KB{e!sD9+OsaV~UNnD>LMP$9FdGn3xhE??kBd07ha171${I)ScOzlw1+`spZ m7zTJVGTAfZjzM4~fo1Y7lv1Ocn}H?J9g z6qz{j!QyvM=ftgk(K-EO-3?9G22Pv*nF(u-&R_i8cL_Jcvpa>)SSG}kC9i&Gq}x6# zOyixI#`Z*$PxkU7PhEF|+WMF!O$p2IRlHaz^U5SMDcbzw?wVtg6PIjo zb^h~`(>vp$n&Y8YyYKM-wwXAu^)vgjbDT2US3c*~JI%ND+T2;;6Yh!mrF?i=x_V{B zzXf~zkFMQmyvTA!n995UC!9hr_e{+771%L5FF-wI@|vn=uY$k-X^*oD@MdJPXT}|C dz=#8b24GB*5{CiatZX11j6fIxq_=?e0{|*K;idop literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.24-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.24-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..b61f364ff54fee2384d480b8b417da3ffe42733a GIT binary patch literal 558 zcmWIWW@fQxU}E57SQc#-{B5G?=L$v!hOI0N3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%oYp1gvRvgbY zC#L?JRrZ+up3%Lw0Eaj3WlwVLrT4PLf3N7$l!@3WoW}MpvGs5KZRcM#Eb}wh{d;Pa zKEIT!eMOnHi9+{vy#n!0)xEd$-))rQ64}*x>!Gn|bC7(?l0{k1e=mEbwB+^~)!SB2 z7cP#n^;R>_z7aoh1Mh}=&yJcUH#|95Y3cXjFT28%C8mPgC4Tdy8Q;=W{INmtwYmKr zS6R+kS$_7%?I&NKyd!KGS5EuHs9*P`x4qj?y~QG}=^E2#`&Vo38T#Gh*javJPP5y} zIeSn3HghY#s6B7n#{BiNmvS!Kk{89U3_1E-JgWQe o@imJBycwD7nQ_M;FcQI_0T`>K#AkpvD;r1$BM?Ra=>uT>03{~p5&!@I literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.25-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.25-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5a44e6a4a6f251bc61970bc73af3f3fdf2c60c5e GIT binary patch literal 546 zcmWIWW@fQxU}E57SRQQ_Y*Mg#V-6z&!%`Lo1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR*-fD7+V z-%JS#ORxN4F8$`+r!Mn(-|SmjeLm>6vm~@nNr}1kL1fpwJFG32I0at4*D=-93zd7m zDCP2#88g=}3^@6H+Wy%q3R}y_P5B9z0ilvzbe% z=;HOPh;q$>q72;QzwXCr+*3R_Ql?+{iXNIjif>JKaM8-i%E4%(!C> c7;#|G0E|ge;xNFQl?|kW5eOrI^cJvw03w*;6aWAK literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.25-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.25-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..e05ce96317f8101c8c0a7e47ce624701ea74942c GIT binary patch literal 558 zcmWIWW@fQxU}E57SQc#-Tzg(28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR*-fD7+V z-%JS#ORxN4F8$`+r!Mn(-|SmjBf8#h63tsQcgDlWJddlAUESV`i)PuM+u6lYa42cM zl~qvufrLQ!4Qp4)-@ZM&O!b}e{{1a!V#4Yn9xga+Czx{{OuB?r#s@NG* z78?}rI?lISqSyb)hKY7r$J(1zItw>#S|1kIC@`brl>CD41*bO5@MU4h`tQhIUR|-5 zRcb=!l>X<9Z84h@Vvpw^zr!A$?0)p`70Csktpn1RhRU0=7Dcvh?$ROg(pZ>I@djI3} nVhZqPWU^<*9fQC~1cL@(tdbI+0p6@^ARUZA7y+aYfb|0aOzGlk literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.26-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.26-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7585ea209b8964e98db0c8880d3dfd8bd41c5cc4 GIT binary patch literal 546 zcmWIWW@fQxU}E57SRQQ_>^1$Dat28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)wbR*-wCPJu zT=~nl`{Jh6AsfZwCv91=})Fon5-nBV6O;vYW_>FOr!Ue7WAD8mN|VJiy*gBAk=Lvm?xNq%m8YEe;sk*nJlCI~YWwYXW_p@>gvBM64cnMBBY5)4zU~b= zGh6fJq~w@|^@rP^T(wCFU|JYh#1;8AE#Q9Y*F_>eCSnm@j6pAI+5TKgdr_J3_mJJ& zzl8?dx_AQGx0x(_WD|U)`{1tsesMnXS$C^HhpXGJXFI67^>*far@n8FGj`lm%S`{L orlc0&&B$cWj5`K_kq8D2z*r?EJ_Ed2*+4oNfiMC{9{}qI0It^KC;$Ke literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.3-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.3-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..1b53b6cde0cf7dd7048e9ea1335acd6804fd3e16 GIT binary patch literal 502 zcmWIWW@fQxU}E57SQ2d(eEx)Np#viWgDo=ygBAk=Lvm?xNq%m8YEe;sk*FnzNO?Lg0 zXXo#7FKwO6zd7KPb!UjUO5fyFg?=VK?(B_Pur>O=;o7u?MP_9rHFcxxEbf+wgV6tLcBVlp@?dKK*-W0Y{*AMw85u^IhdamBKgq-*6P$ zcgW1u;JJCu<VakPa;Kag;sx9%Ci5jCim0;Z$>72 gX529Wj0`Yn0LBg}@e<(8$_CQG2!s(px&y2q0HXcKcmMzZ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.4-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.4-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..d3a039d696d12f186d2f054717dd94473c695c14 GIT binary patch literal 502 zcmWIWW@fQxU}E57SQ2d(Z0)7*=fKFoV9U(FpvAzzkX%|^lAjx&T2z!@q-&sOqGzC2 zoSze)T2YW+R1%+9l$?=Sma3OkoS(zWfm!p{;9#lp$;Rj=OPeXVibFWe_- zWm=+3-_DQjdX|4vW&`gxDc;RlBudM*DY`n)Vzx^QOe+wwnWZfXa3GcwsT fFoW}ubFne zdAsy(s(V(FTeZyOM;8r_zbWF4(bE*X^Ji7fu~+*W_P)wGw~6gph_%;YlS5XK2mWq< zm%I1>o}FLo{zlmr97vy2r+8fEj;_+zLwh!_d!JV_(Rshw%Y2U2VJCU^?WzCPyy$qt z*)3=q{K^rH!B-R2O|(h0O<~}egIko&aD6d literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.6-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.6-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..079a8b892e65d18665c0404514104bfcf8f11eaf GIT binary patch literal 502 zcmWIWW@fQxU}E57SQ2d(eAwF}#(|N6!IqhUL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuRAYx1%H7_>Xbn!b|72S@X_0nwP1% zU#_(`NXkxqJ@;i3Q@V{0AaeU2EJGENx%c|MAhi2y1Vq z<|7~3rf)x0H|gtZb;X;_PhZ^m_4e<~ zjPNX@W>NB)0JU;>_EDO=f|YLoe7UTH;PPr zWxK$6XJz7SfdY<$M^5(zt6llm{4L0i_u$%1iOmcPS*s5&5lR;O`%3?B=-uQ1Z$>72 gX529Wj0`Yn0LBg}@e<(8$_CQG2!s(px&y2q0H$=zaR2}S literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.7-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.7-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..a8d8e619e0f573dfae6862f08a40114aa88a29ec GIT binary patch literal 502 zcmWIWW@fQxU}E57SQ2d(Y=7D~)Pa$K!IqhUL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuRAYx1%H7_>Xbn!b|72S@X_0nwP1% zU#_(`NXkxqJ@;i3Q@V{0AaeU2EJGENx%c|MAhi2y1Vq z<|7~3rf)x0H|gtZb;X;_PhZ^m_4e<~ zjPNX@W>NB)0JU;>_EDO=f|YLoe7UTH;PPr zWxK$6XJz7SfdY<$M^5(zt6llm{4L0i_u$%1iOmcPS*s5&5lR;O`%3?B=-uQ1Z$>72 gX529Wj0`Yn0LBg}@e<(8$_CQG2!s(px&y2q0QDiu-2eap literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.8-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.8-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..0758d829c46bc43c6f755e845b19a5378a731d6a GIT binary patch literal 502 zcmWIWW@fQxU}E57SQ2d(tnC-8zWn&#IbZul6_WeU)`?6Wg;8Yp=s5hpZwG{N4U8 zckll_JHOWbjj}B`kUpnQ@wm(#U8S#w_H17FKCfh=^M13J`5ddmPV(&AQ~#}b(eZ|} zTh5-TT((Z)UWW4i_s2Mu)BfD4>GDvClybduO!JqJS)z5T<5|<=3U2GCGEKDj;FIqD zWD_%cfRSy>=YDSvL)-t4K7DcgGk^1I?q?VKt{=H@X}64G^ftD86{k-Bd2GElz?+fD ho*8#c03!no8i27wO1uPkv$BD7Falu&knRBM2LM~@%!B{{ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.9-legacy.zip b/tests/ast-parsing/compile/custom_error-0.4.9-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..34705054438e277d5fa5240ddf1caf3cf64476a3 GIT binary patch literal 502 zcmWIWW@fQxU}E57SQ2d(eEnRQwgV#rgDo=ygBAk=Lvm?xNq%m8YEe;sk*73KN-rk?h zv(nZ%xo0K0Rm)6%bkX4WnNCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8U4o_fo6n zO$-JKOOA6moE3A?T4^m7pZ_Oh+n4G6TBUi9?j&`~)yH&tI|xZ^*9^KoE95Klhl&$Y zYCDrGY# zi&2e>?O3GEm$YK*eVn!$ug?nZPdwQoP?i6bAfY5_QeOKudnhzFrcF_pl_Py1 z?$E+(?^;wuH<-O=Tr+8sw6%uk8b_}kwm+G93|)?DtK|Jtt^XUov?9Qpk;$GJceDXx b4h$NAQAtW926(fwfpjneVFZxg3f2z*Z}-!R literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.0-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.0-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..cd03e29f248387cd0ce2d39e74a9c428c8b0f64d GIT binary patch literal 559 zcmWIWW@fQxU}E57SRQQ_d~xB~Q#&sL21>S3qPmdvgmr@yH{_Q(>Iw>a}~pU280lT-zs&x`rktIM-T q`_I{EkpOQ-CVOVwQ3#AhFlYcqD=85g;LXYg(!mIX5kUGNSU&(nu;_^Z literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.1-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.1-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c703c3bc9825f4d3d236e188e8f18cbdc4a5b847 GIT binary patch literal 547 zcmWIWW@fQxU}E57SRQQ_tXTWTAeWJWVF?QZgBAk=Lvm?xNq%m8YEe;sk*uyt!V7h~Q+ND2R`$QDq;1aR+T^=GofjB3mn3nY{3vrmGOdP{)1gsjz1z1? zOO^mH(L2m$50-`3p4!yq>145bl`iv37w3anHQBDoKgN0B=?{kPb#5i~!PG!TJH&QP@2I literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.1-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.1-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..dd7b72c6f16f194ea98f273d64a084344d57b6a9 GIT binary patch literal 559 zcmWIWW@fQxU}E57SRQQ_9QFUzib_TXhAk`%3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIoNg^H^c z#hdc=`PkjxoZM!`d-~hThF|Rcm5pmsSwold6m-6twT0{N#hTFl%iFyb^LM^0{e7tI zmPV57hdVvzc-b?W%{g=}E&sIyPBG`%Aa}G%*Q;>;^;fm!7kXG(B>lgrD7GFI=G*XL zrRYJK6Xx0;`_-Io+)i9|qq2G%pUpJ>L;EN6{@~QTf2aJ2#;@0vX%f}V3e()_bw z=lz1KPOC&O_+Q=mrRL9JXPMi#(<1IzZ5GR%^ljE|PuHjnd8X!F zc;ZQ-?fJStHYLg;Yo9;#|M|@0(!YE28YZPmin5pfl6Kq0`D-8NV~KkXH`J1N-R1xP pYCZ8Oz?+fDo*8!(0%H*j8i3JCN`wY@v$BD7Falu&kUj|34*>o^=X3x7 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.10-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.10-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..89e01aa2b84e8574c57c2f76cc48108bf2e07571 GIT binary patch literal 548 zcmWIWW@fQxU}E57SQ%{=9Fi*>mB+}yu#|;?L5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8PhZkoSAS zKG$oLn%D5otLVM<;mk))k$D%5&a7$jJQq7>|HfB$yqkB+KW3>(J`?x4>4eAPe`l`l zSNE!mU6s7p#L|dgA}(lEo%fueR6lmUPomF0%I&TatXOe-xs|WSWAz+TbWsQgtIl+@YJVu_7SgZn7I<;yn6Vi^7gzA;?3u0_+eDCK{JEK)9VvznT z!ctQ&)OO!dzir3A?Qwqcah?j7|J&`e5B$|w9rYT*t|Dcka+CHZ?FJ!gFz7J10{*xjc#OG;|_(m1!L^zoMKNlwdNtf(t-ckLnz zkv}Rg4xd#?t6REo&&26h#jmJNOAI>W_TW``#vRU|VGUnqd7V!#{9yc->sRoTf;G{% r|9)rIV+-(RWU^<*9f!bZ1cL@(ypj^50p6@^ARUZA7y+aYf%O9bcsS+( literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.11-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7d1b47d0a0661c575ce2eca7d71e770eefde0e05 GIT binary patch literal 548 zcmWIWW@fQxU}E57SQ%{=TxW1cJCBipVJQm(gBAk=Lvm?xNq%m8YEe;sk*d$< z_ifkZj1TNn7QHP^&2en|Dm{NDTdtT!c#L2X zPpNuu%_Lqa_4<9jr_VfUf3cwQ-kUgnpJnpTb~YLsyMD8t&$}_s@Y*}mM_o7ml~gbK zm1lNhrL4jeM!)^Bb{n56W>=bTdsoq}CjRN*ORXnwJ+q$hhX4P3YEx~1HzSihGwyf; cMjaS50OOLBSPbxHWdrG81i}a)y$!4%0Q!X7*#H0l literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.11-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.11-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..9ba30100f6f056ac804d47558050bc5dd8506371 GIT binary patch literal 560 zcmWIWW@fQxU}E57SQ%{=yn|(nLKPze!&Vjs1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^h0wT=m!JS}CdB&ahz`N{7N*H5nKt4khh-izQnonGm%awMv8y*8}mcumN#qD-@2}vFn7n5?z?OzRf}HsFMKY)=fbq$f6`M0eZQ%-m7R1+ zYPwo*a!vNjnQ6gaR(O_~yqm{=>A<5jRwoAI7E|7w{^!pPjg05+({azN>-;Xf{fYJe pZ~xtc1H2iT?3r=LAut-jpaB@Kq{L`|H!B-R2O|(h0O>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^e4Jbvz>N}gKj8niV)8H?3cxLDx>Dbl{yiYKZi;y@2;x2x*%vV zuO9n{cN4AGaWTF4DW%K*-SlN7`_Y*{A{#1t(mv=02%B48Jlf>_qWHlLt#{XrRD&$G z{U}=_;8{}ensLdih5tVu6td7sa0ofV`|(mmB5(1ld6QPQ1_w=ipt0=|Z{#5lndzyG zS7Khqr@3?VEPq_{H~8V_*h{PPPO3K@d9qg5zV24)S8whZ$w#b9=EP5toa^-TuEA^1 z(+6s{a7@`zcR(sF|Eyhv-BCH=?PV!$(gtFJ>vU_Te6;1+a$?oLuXz%20p5&E_RP5B d4H$J`&;X1}QerW{o0ScugAoWLfb=%7egJbC-pBv| literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.12-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.12-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..df8446d3f0b2b7cd360221c94c2dc73b2b95f5ee GIT binary patch literal 560 zcmWIWW@fQxU}E57SQ%{=tor28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^e4Jbvz>N}gKiid`)Bm_SwI$l=&`FT7rITST&c;~{i@E3t))=k z^KJds9~s-3JVS)6zsk^?EH=I zl3yyUzwmHxbJx8M_ovU*pZFne>p6kHqH*^#Qf3Y)0 zkEIgs?>_OhNmX&ft4p)&%y!x>4!WVRDMC2&vtJh1sf?NzSL#Gq{v0Z;yt}I6>Vlxf zyn5^(-c7V#(-WIJY5APy9}BOQO^VwSv~NetQh)K{c~5+bT~uU~Ht9@Rv%oj>f@PIK zqvGe;H(55eY;Z}-$~m`sqE^+_H(S}8&NttTj}+B={Bx;zvj5hZ$HYIT{fZpY+mz4XQZE%s^|y~X zlY3$he!aE*S?9iohd-|Fw?C1*y5iop&SMjg{}enkJLA92%GYkrE{l_nzq;UCEh;cQ z_C`tBZY5u3jstH$$1f3gYl_div}7x{#N-I~jS)7i@$Vm~-8k7l?L@@lpIvjz^s?t2 z6yP>%om&!KW@eJKIcK`aE|FDlLzW%hsJ!6Dk@ss4 sPyhcZt+F=2n~}+$8Fw54qY(@mfbmL7j0SkKvVn9k0$~J@J_Obe032uSfdBvi literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.14-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e0d3a2308604d1c2fc809a5e29f668d61ef52a69 GIT binary patch literal 548 zcmWIWW@fQxU}E57SQ%{=yjMQnEsv3bVJQm(gBAk=Lvm?xNq%m8YEe;sk*Wzs zsb?NBDja#5(zEfe{>s*aI{q)tm&Nd|e0uM>L#NKB+L~Koh3yWPOZNRwnto+z6I%CuYt$l% z#-DSh-<qe6nWK|8KdT^8&mXne3Ty e#~U!}z@Pybm!!mEfHx}}NCzVjMgZw;VEq6W(&M-Q literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.14-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.14-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..740a6909751f661cce7b55a0306cfe61c0a3e999 GIT binary patch literal 560 zcmWIWW@fQxU}E57SQ%{=9H&+NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8PhZknc?R z)H9D56^=Yj>Dl;Ke`V`I9sd{S%VL!H3@)XrU4L4Av_b!VetuuO+@`K`lV+_c`Som% z=f=oa%j2s4But*twCsooi>2~G^Rf-C7AwM|_M3h8;9sk)y#KSR$c%|xiV4r{<}hh3 zPS?8jiD9|r<06;R_hH=ARy9j!!%?RrhcnN!to_jKbav*Zr@Wqb zBd3TPsvm3P$z)Vvjl9vdUa4VcW8)PayJesFnV&nWT7~NFef)OQ?{CLU543FwFRWws z?S3k`|Gn6$l9LA?1iJmpvj5JoKxD-SgFcrlk=$z=eqFL--?Ddk_QG9;Dm(vPvk-ax q@5d(-^#E^1CVOVwaR`h?FlYeAD=9G=;LXYg(!mIX5kUG7SU&&{1LTna literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.15-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a9f64dc8a0450097500892e703fedd07ca7b5977 GIT binary patch literal 548 zcmWIWW@fQxU}E57SQ%{=Jl$!6c^)GJ!%`Lo1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^MnDScJ(dlR?(_JgiV0be&gD1L8a`aLppUs9IPtsC4& z>iL)>T0Q>L)=J&UEN2=$ zYxq^fY+e0&uBU|Od)Q@1o_q2rIpuWCH<#b@*K#an@S5pj`~3dSL#|Bf4}I4vbj&kS ztzq4NNa~xnp#9mi-4kBc&6m|Q5Yw$bxbS0kuH2q1k3tRDc>splpD literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.16-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.16-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1b98ff8883743b5d4fc8b86a289b67b3cd80bfd0 GIT binary patch literal 548 zcmWIWW@fQxU}E57SQTv+{Br5RrFo1D3`UWiQSnMr$EEZ;_{^-v85S<6UZ_3VDuiTPw zR3}pYMsHk9>hx{fa{d-Sv&<}fCYkf==Mk3LuI#MM?)GBM>34SbZ=5xKgV;%*X@nN$Y84{`!&Vjs1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^;g%5YGjUfTB5afSGh z88(cY#Gby0fBo}v)#jLEr@60&n~7Y%7yZCWY=_nR2?ERBr#-WZ5YTg7e_D?X6M~`{ydRcFW0zQ>?aR<>w_DR;Wf*$~}B>;oNSUjRp#` zw$m28-?3Kc-`k%LJetxR|81RMCFcN@Lm{hdnQ(tEb#GEdH%~yy3sQNjg{F pFOOdW0p5&E_RP5B5EzYM&;X2AQerf~o0ScugAoWLfb=1-egKH*-F^T7 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.17-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.17-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a862d55952e8970da8aa523f582ee28c83c58a51 GIT binary patch literal 548 zcmWIWW@fQxU}E57SQTv+eE0|7l{`iUhNUbF3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIoNh5T8o z3?o7&bA{{9ENJ9AK21-=i*0J2nwEOhtUMJh$IuH4Cb2z#er3C3^ToFc3O}vQx&@4u zxv70G>UrT&(X`a$?)m*&zD7>sIqFrCl;L!keM>TTr2nTPK&^}EVDEcO;W77H^|e{|=4h|UAwH)ZFnS8ho- zsuL-Hqc<)lb^5k#Ie&|vS!NbKlg#<`^9W0AS9aEBcYCqs^gFxzH_n>ALF}Z@G%k^r z374+_n*aEUMaQ~6-LoDkVc)&3FewRVe{YK4=W^w7N}b->9=m@(Y(+}~ycwD7nQ_M( cFzUdd0T`F0#A1LqD;r1$BM?Ra>1|;B0F+1FPXGV_ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.17-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.17-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..08cfcf969ae8fb1273e5704ee4ec44bef2f67427 GIT binary patch literal 560 zcmWIWW@fQxU}E57SQTv+eE6u?_9{jOhOI0N3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIoNh5T8o z3?o7&bA{{9ENJ9AK21-=i*0J2nwDjHw1|$E_x`Ugy&O|6sLU|2|97cw!ukdKmp!>} zAemh9!KC3Q>ue<Dv9XBaupyrXkx<{FXp!rz2kbRS6XwKLr~mEoX5y|nGA;|lR1 zGi(?)i9LN0|N7_Us?9OSPIF%kHxs#jFZzL%*bb}r69ksMPkUw+A)x0z-|?(pdUXG( z1rsmIZA+Zz&$>!i(n0qP+gqg~_Rm#r?Us`br&w*t%FjzQtWb@rlzaH%!nxfx8x0g> zZKo}GzhkY?zqdahcr>Ls{@XgiO4PsUnr7u>mBzF^4trimS5LWXSo~Y}c*B2plXR}U pUmm{%0=yZS?3r=LAut-jpaB@Kq{L`|H!B-R2O|(h0O>h9xWv3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIoNh3-wO zdwg&06aFe{{L4z=z!lR|A5G6y*`)1qx)HjQZ`WFfcTQ!mZ^t*>72CEUFn@kUUTW9J zspof>%nD3(^IWdk%|D@WL&&%F)e@yOt9le(*PLJa=m3X} z-_`69(ykM;~R4U-Ru}5c#L}bEnUa+3Gtr16S}z zFRy4WUlX#b?{Kqi*4!BruG+UcN6o5Q#B3n<$m{IY)a;J<<8l9g*!#x>cr!BDGvkgn cV9bF*128H{iNpYJRyL3hMj(s;(p$m$0U(j!NdN!< literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.2-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.2-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..6e66366a360a5a8a34321b62c2f5fbee52a9146c GIT binary patch literal 559 zcmWIWW@fQxU}E57SRQQ_d|alPuac30VG9cbgBAk=Lvm?xNq%m8YEe;sk*&D+J^O6T z+E-3K+@N?#!}qD>EsF!^8m>;cV!P#!?2#Gg_GPv%u7Bs6&zkq)q^JCJ2$zOiZ+~#Xm(CO%w>5d1P4X(?}ZeTd_C~nEeFA-z9_bu^>KumgB>8z52I%=;(x%TsJtdO5y@?wM9CdrRBA6Nr_%#Ql^ p>+RO^0B=SnduH5G2#iHAXaGhlDG?gr&B_MS!3cyAK>8q9KLD4X;$Z*) literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.3-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.3-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..11c17edd0a9bfdfb2f5ebe3f376675bb62e34852 GIT binary patch literal 547 zcmWIWW@fQxU}E57SRQQ_Tzb6daxNnS!x9z-1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^72CEUFn@kUUTW9J zspof>%nD4||Gdg>?S+<-A3jsP|18wdIVWCX@o#nbX`$L#DlrqP|NM1*`M;VkD}Q%g z+U)g`Z;3E5$ps1%yBBkqR zPP2Vwwya)h62B+Tjy+b^5wdemN1p7G_TH%>SCZyexmHeV$ycye-8gIYg*7&kTmEcM zO_P$i)a&jk5qw#C*W8WO4?1cuZA_Rs%}M`YnnuXA%eo#fX0!eODSy=`z?+fDo*8$v d0b>pf8h}wrN+bq&v$BD7Falu&klqT`4*<@H<^TWy literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.3-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.3-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..cc09e5a23855fc3efc29e42216c80a02ba84ab05 GIT binary patch literal 559 zcmWIWW@fQxU}E57SRQQ_?Blc~r;?F@VG9cbgBAk=Lvm?xNq%m8YEe;sk* zJ-)a034awe{$-_b;EL&~kEZ9UY>L>_4>GR2(j0Zo>}5de%VSb70}@!7Ym)FK^>o(9*+V*20&RqW|zt=@;vVHOuVgcuYI6xZy#8q9KLB-S-}(Rm literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.4-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.4-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e1d30fd683632c775a6e3cbffc3c2affdd037e6c GIT binary patch literal 547 zcmWIWW@fQxU}E57SP^X&{3s|tHkXlsVF?QZgBAk=Lvm?xNq%m8YEe;sk*welZBWk;DY>Ys5gzwTBhGCU5b#?D@di?LQ^w@dM zczQI*x+c!6^4wg@#nYC@lz-4W71i;{NAtQ_&AA!J1$!-CaesKSso_OON=>A`y^Gv0 z&R+_5wVXfi_Yo4cS^e<&$=8w>X2k~l%-VcmuKir4MAwUs3GXA-Toy@Gmuprm-)CDs zSMA^IgOVk=Qzy-3Qq-JyblOeBMk$lPP_IYsvjjc=vR6c(`~Tx$T26pBBa=Nd?q~zX b92hhJqmqX z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIoNh0_iO z{uI2Odh7eS`&UX=SmjMC=S!KknI!QMyq-xT#fH*Pt9@z7p|i(9sQIXtQ4&u+n! zo2}KhE|$vum=UXa;`SxUh~8QIUK-xn?0ogyv<>%n-H6?hzF`fQ?~X$Tt&Y`=QGq9g zeB_pCh|Rd_R`KQebgS=Omt?-~iC43jCvbE2&)1c;vm?z5_r>qZ`oVg@&9TZiU)tqE z<+Ge%r<-Nde*W&+RB5bfP;~8{*_DvVlYE2=W?G&SQ8lfR;bA}8s2DaSLd@eK_uczj z7M90`J=w5x3+u|nsbybvnbV5)JhTprayj|s!5OWY+qF~+!lnr=vGa=WNX(M9R1A;( q_uJL;SAaJolRY!;C0kuH2q1kBtRDas8|sh% literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.5-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.5-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3bc6ab3f25520db589af0bf7e78e249977cbff3c GIT binary patch literal 547 zcmWIWW@fQxU}E57SP^X&e1d<0PA($@!x9z-1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^0AXRHFmJVG9Ch zoa%ADU#}6>6#8u5*V}r|?3|Cz-F`eR_rG7g=B{}!Im_(Q^|T{Oh0kT$g{n9ExSG9s zkh-odWR>ZMh0mCtDgWKMcfm>zp68jZod?ggILB?-m69a3U>eWi7u(F1Oqdy@G+mrK ze|CB}Q}eHPg_4r*Qhe zGmuC!l}nn%DBgDb%DT)~S07xTT)LvOP``8Al}GAp-!k~_O>v&%VW4(xMWU6KZ~ChR z{F8g?Z9EeWq+NMFCE(v|M+Hg!q*r-$5B8@_6m>mc;&7sc;1@g&G$LVRyL3hMj(s;(g(r%0nN1LqyPW_ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.6-compact.zip b/tests/ast-parsing/compile/custom_error-0.5.6-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..71f9355304aa3eea65eea240bb4d2c3cc4477821 GIT binary patch literal 547 zcmWIWW@fQxU}E57SP^X&yzRxueYuPb3`aD!2T^6S8im#SfJGMi%)i&JKw^Ud?(az zf2vpJ=1e@oYkDvv;ZKQ-;xng!I@c#N87E%9GxdypT&KKx^eP)Z4c`QVGSPXC8=w7R z%H4Y2;px+CCd&(_iceMOxRhNhdA6=HKR#)eLW1>dCE@z--rw$gbyNsSofwf3(f{d! z*#2F)OFGi>Ue9z~>d|{-IoBd3EvIe%p^ay~-}y{ADfyxxVablr|9k&(EK!y0(+NuV zT6eZH)K^$U-0q=^%ACn8w}f6SjNDaw>_=(u6Y+QNZ!Oy$aPj{yC4)x+-i%E4%($Zs c7;|9I0E|jfA~C?5l?|kW5eOrI^j5Hb0LOdaMgRZ+ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.6-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.6-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..dcc7293f494a35d2f3d60fc386c70e2a9cd48107 GIT binary patch literal 559 zcmWIWW@fQxU}E57SP^X&yec6-wvv&7VG9cbgBAk=Lvm?xNq%m8YEe;sk*M@K(jrzb`kg8#doHW)!Nv5I zOYfK~Y%PDYy3b1gJ;$Bfp&vOTx4n7X_`6`{%XnoiYq{^WrxyuT$gQ|ml2xa0;DV2S zs<(btit(4&qPEh9&Ij(-PqV##t2Apbx2o)9POhmIJl}RNjE{<)?ek8PYtjbwLk*uD z=Eh#X|Mrw3pKFvsry`$OdYy5wE%Py-dy2|xc6??5&z~opD=gfm^zE1UH0Nyr{;hws nKhy+xGcwsTX z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIoNMS}5t z>P`9jeC+OTPHwZ}J^gKE!!P#!$}-liso$Om?B9}c&cq|UrUx?;{*=flK647FbA2+CapLtmQ_tAPb;_$pud?CO@J%o%6P@R{@!2n? z+^y#wo<7ZHvb=Dr_*8|COWC!OXX`5S?4QouG8D zb!R(6eT7BD?H;z^Ei85(B(h*+4oNfiMC{Zw2cI0Lcm6CjbBd literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.7-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.7-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..8e2fdbafc148bc8309016aea42b3ae74fdafb267 GIT binary patch literal 559 zcmWIWW@fQxU}E57SP^X&tZ3(9U&+Y8u!V(zL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8PhZNHD%n zy(wRxkKO&v$!%7=r@yUi_{H8|*|;W^HFPOYLFcPkTe$vStO?z}yxm(df9Jc>--p_6 zX(Y*hxYKivmp!A|oI}^r@?T5f6my;pa!0J)esFJ7KF%^HEn@Ye->Gu4=d$V^TufiN z^p3g0*77&2`>gcebKJQd`jIno+ndLYzYAu*j91pOmiu0NdXZ3t+=^=@S#=5rF8JuD zdh2JU7=MW^YAb!{eBgflG~4U9O0)KItIAI1LxE$7dGs{CUE;!oqDz-+qZtbKVx<-}*=U nLrs7;Ba=Nd?kEJtA{aCPqm`5h4e(}V1LX z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIoNMW!28 z|2@U{Qp8kIYhs4bJWpZQWdVg<52v1gU;X0j^#W%n{SQUmhO4aZO7$+>pFIDmnu~^Y_xU_k4t%Ef~hTDu~>vxrWn6ZfYm_YdSuye=U>v|rAi_KyQHoFHN;YT2o|C_tj08pUqaiaVt5XW#Zet92VB=eAbus2;Md?W;n7XG_-Ecq9bHXPB+s+qvO_8wGSg=3nX@057a<;S$N|`NJ^}BSMgd_g{G;^62;LXTn&x||T dfH4OK4Zx@*B@zR?S=m537=bVXNN)w}2LK&Y-%tPm literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.5.8-legacy.zip b/tests/ast-parsing/compile/custom_error-0.5.8-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..c25d9e0e5727017caa75b370ebd978b79bdbcda5 GIT binary patch literal 559 zcmWIWW@fQxU}E57SP^X&%pED3Tgk}4u!V(zL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8PhZ$aKT% zzo!^qikK>DP0SFQ=PB&EETFLK;ez5)b{*qfkGUojXG`2k6y#a3itXF`?X^$SJeE$Z zO1kyDDt+;y;sr~)SnU^o(QmeAnl4lDn9sq}pI2$M=UxugrvZ;LnPsQFN;vm&owCFu zcZYj3K4nU6b8`JI(-5QNIjiXFUiB-}#V?sQ#d8OjoSMKE`Edv563xX*ja@4$UYNbT zd`eyan^kbnucQ~B3SaJwjtx9=O11Xel1tlfr~Eq3yxH%WP?JuMXc)t^x!f`C_SuIl z^7NRBclX+T-RKwIl;zF#IkBA2yG7oh!+!hwU$3RI<_bJCZ;@#{!s)Jle@>pE+=<^4 n!e$0|GcwsT28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^Tiz+?0;-0oNCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8PhZDB|1o zzo!^qikK>DP0SFQ=PB&EETFLK;ez5)b{*qfkGUojXG`2k6y#a3itXF`?X^$SJeE$Z zO1kyDDt+;y;sr~)SnU^o(QmeAnl4lDn9sq}pI2$M=UxugrvZ;LnPsQFN;vm&owAtI z^5_#1oCjPTAD8U7diQL}pIVRkryp(UI4`{O@{`0s&WXY^R~?nPzI}nlif?`l2Y3%& zSUp+z?xe}mQdi$gYHL?$*E&V@nLF~Q$gK=#@wu9<*V#S&+u?gD0o~Po3vVsDZNlKY z?WF&oO&`6M9V~T}(T}eRz5IhAO=24J+35}^U!tZX11j6fIxqz{7i0|3yc+!g=; literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.0-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.0-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3b203a0231a986feb539d091cd00ddf9b5a61b7e GIT binary patch literal 547 zcmWIWW@fQxU}E57SQTv+{Bz>RbGeKR3`@cMLrC{R@1oafaDF zf7j=dEe-sq^k05Ab3Dds77%u-K|mk>uMfUti64E%`dx;O7CMm zn7LS#wC*pNbwJJ}xbNt1_h<>_H}|I9UN_TQN$W`q=j_RWeTw#f>kBjjycwD7nQ=!O cFy_FZ0T`8}L}Gw9D;r1$BM?Ra>8)V>0DHXQJpcdz literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.0-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.0-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..7e30e85e7f914cba5c82bc13500c714bf32c8ae1 GIT binary patch literal 559 zcmWIWW@fQxU}E57SQTv+tm~j?UdhP7u!V(zL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8R$>%y$2$ zToqf+m^o^+?d4Q))_=ktzu-@j(bLYaCz#kx|I{D*Y}#}5#;lGRk-o)W)_ds)h(}zC z;%0uV?YZ>%y3<$ng(ttd_T#a_r{E{`EuI$+&C1}|&~eN#^T_h>a$em8$4$&rj{fhf z_&#YVZ|V2Al8Pg%7I$1*uu&uJ*6kGre-F*OsX5!UqFaxhCqmE5OQ>;4Thf`QP9{74 zUppKvq9D0Tjk$W=4?(ecq2A@}?eXW91)Ah;T@k2Jyk)iU*-M2l3?IuLxpI6BuTFKy z=DwMRhFhKIoYH9J_2A?a?pVRhsdxX9t=akr56RsTe824J+35}^U!tZX11j6fIxqz{7i0|1OB-b?@h literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.1-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.1-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..59465f3f38c6184fea58657d958bc64521475c65 GIT binary patch literal 547 zcmWIWW@fQxU}E57SQTv+eEE#s{#-@|h9xWv3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIp6)~-R^ zl_!!4gujX!|FTjzaK-f0N7HjvHfg(@ZiMdS+qKr=om1KC+wl!|#kOq-%%5M8m)iAl z>iOLzvjWp9ri9+I{g%)%%QEZV?)e=@;@hVbUh`WV*{U}={2gyp6~nEz$>t9wa-7&? z?ZpmSIj*{?mmBeE-OeSPKh_)HFGvi(G1Xzu0~^~p_wI=JWln9f7xh2Ew5FA#pj0es z|I5w=Yp2$fevnY|s+_Xzj)jw2LBOA^`;7VjQe3MI|0~Q3d#T)G^Ld5FrQ0@J50>Ts z+0)A2C}tg`BE2+i;uYKQB>T@ong4oKt7mGi%Xn($Up`rJ|NkG70{a5I8JX;vaYq|4 b=D?r<7?q?%Vt_X*8%PHu5Jmv$tzi8C@73M# literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.1-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.1-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..cef2ef0b3b39a36d3212c1efc7d60110da0217ec GIT binary patch literal 559 zcmWIWW@fQxU}E57SQTv+yiATQw33m5VG9cbgBAk=Lvm?xNq%m8YEe;sk*=LB^F=nxn3ny$ncwc}z-;bU!9&Y{_0twCU^Nk{opOF@y~mDd z^DlFi-Y<9hU}ZYxy;F+T>#J5gv(C@#YUjG@G&$eb{p;lV9~Eg@Hjmjqtw{8o(apP8 zc}K24J+35}^U!tZX11j6fIxqz{7i0|5FM-}wLl literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.10-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.10-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..28f594b0247ee8fbc5bf29eda5680a2a4ff46aa4 GIT binary patch literal 556 zcmWIWW@fQxU}E57SQBj){A~80M`er*4BJ>37_=A|7?MkiOY(E$Q;Ul7i*yb2O!N%& zit}^gQ!5Jci%Q}Xi;^=k%To2Siu3b0Sy&lj85kNE7;HN_(vANZ7cRVXZksjloTGV} zs{7?ydxNCx)Yo(GHr@F0aP`vd5zO~L@-{b|*&nKw{Uq*1$Jwn5{NMcWo{_$SE9Boz z_gm3NC!P4lu!<}3VR#eIym=<2+m@=odU#CiM-h{AhpLm*xjxNk1)0hGmVe{Bt&Plf z~`y)RB% zix=nBS>I~*lIxN2`TC*4ppA8k$<5gZ4isK*n`TfMwUWzvS4h$veTn0Ieb+afs^nR? z>C;^slhXD{2{N~q@BJgV{6omGWplk(&RgQ-)Uf-eZqA+9H#3u_%EinwlfEu=YiDRj zwCvH1%oiIs+!VKr7V2Dmyq-dN!hyNDrSzd7NN#x`T++NF($?!IkI zyLfePM1#8jo*!QXPY8zcZ(r$|;J@x!y02X28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^;jYa_EA zc@>}MU$HjX%j1=HaP8CC?YAGji?`WUseb&|Ve^OUC4`b5I9*%3B0Bu__sQi6>^yT1 zNc4LcThF=>ASO0jQ>pZKE7z=m+gI3QVz;sEpIatnC)ael(3m@xN!I9E^!2OPH2?i_ z@UgtkW4}DMTH7PjE-BN$s%}E8{SpjF%45PhJOJt$HWW^tvZOG?BBc(byBbT9&81du)n)(-%y0P4j6 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.11-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3fb301733d5177a6a389817f09838ba24951251a GIT binary patch literal 556 zcmWIWW@fQxU}E57SQBj)Eb#2hj50X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIp6)<(G# zPOu8k-NyMyU2gv8gTI)JU%oQj%c69@-iMR>`OM`QsrL^`y>n5(aBi=7dm?R!atgp>k*4{r=J@bp5Ldl<>Paev*6|H-E=iuckOV;a4 zH+9+mI_4d`;Pd|iJ(m!7x2v~m>;CS%^gANwt^YZXZT`I{1?E0pRV=;of?Vu7j)&hf z7IK|sZRP(|b4Wvaw(8#bf%#_ylY@60=2+;FU9n+`cG&emOH-3aD<}PtTVnVBXkNI$ z{!iVWdf~H<)k|fo+fJC#@hM@+oQtPUPnUL!R=v4r-MpYVZ=5WD_O!BJmV2~WTmH|6 nkPQLej7;{-xZ@8Pg<#MCj8jr#Gr*gb4Wxq+2qS>>KCpfOfYj+e literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.11-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.11-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..cedd4590b6283b45f4a7581a00f1aecbcd05ffdc GIT binary patch literal 567 zcmWIWW@fQxU}E57SQBj)JjGk{bt5AK!!Z^H1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^;jYopu= zCs>8&ZsUBUE;s-4!Cy?qFJBq%Wl{PZHMzg$y3IF_Sp5T{Zt{2MOmdaqo4p`w{_!ls zSqkMC&6a${RHGcLHGN1Rnbl9VRY0Iq*r%ZVz zBpQrl0|RFXsJg!3s!3sZ8c@+!elE^cWmRj%r3%C8wIwfGB`$AK^Ha?}TxRX!#K)I- zO(vPa%MmA3kMbcfY!K@C%%khRnHe);+2ochJ9DelgvPQH5e z#QBlfmCNSS=Cua1+QceeVviS2f4zVAUv-&Ru^SxfZs8$DKLDIu<*)z% literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.12-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..22d574f961a396e49991ea381116571b4ccb585e GIT binary patch literal 556 zcmWIWW@fQxU}E57SQBj)%$4v)tc;O?VH*nrgBAk=Lvm?xNq%m8YEe;sk* zXVVVPT|2L&)cykhovnP#J6tF1m7ltPisj2C8MkaAxq0r!GRDO|-)hpCU;kjuS(|<~ zBaSP%^K(BPV7FxII2atU+hT%KPR9(#_zmICyZ*ekNVu@_Rx@Mh(@hB?PanLiW`4*jtuJH*AA3asKuc?Sou#dM?|M%k1 z&&xO!myU;|~~xV9)@JQ&M6xz?+o~q=OL%BY^Ziuzmn0W8tm< literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.12-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.12-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..32a4a421c27a49050a35e8da7bb546828d55b953 GIT binary patch literal 567 zcmWIWW@fQxU}E57SQBj)Jn6ymS&fVg498d)7_=A|7?MkiOY(E$Q;Ul7i*yb2O!N%& zit}^gQ!5Jci%Q}Xi;^=k%To2Siu3b0Sy&lj85kNE7;HN_(vANZ7cRVXZksjloTGV} zs{7?ydxNCx)Yo(GHr@F0aP`vd5zO~L@-{b|*&nKw{Uq*1$Jwn5{NMcWo{_$SE9Boz z_gm3NC!P4lu!<}3VR#eIym=<2+m@=odU#CiM-h{AhpLm*xjxNk1)0hGmVe{Bt&J84 zKAU!U?%H`JrS=#2?`-8`-r+i7ul&@5vNq|RzHC3!8ead94lxQ{z9{uWZ@p%5wS|L| z`MucE&79`WN|%>jQ)N<9JZ2>qvN2q-SIPOftaRiy))`CoBs^5Lmlof(o0Nr zZTxZgmA>GIUPiyU+xj+gxjeGBuZqulHg%VDYWVZMebKD{_k6wd;joR#r?!oSWscu1 zV!G#M=_g-H-#pj#`IVzS3?zK|_#TW3GD zTdH|W{hY=oBfS+j_Ge)K?5*)Nr~71Z&o&t4n`o10MaMH`T=_f=jQ+b literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.2-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.2-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..8d721f3fd6c5f200beb1ec50f728b2c9bef365a7 GIT binary patch literal 547 zcmWIWW@fQxU}E57SQTv+yjDA3HYSVLsvmcKcYQ49%>3#)zn=g4-_R-S^-XJ1G@WMbW{CN7e@En`+ovCV z<;s2SvFGGoo5MG*T-h~gV%EHLpU+02KXq;DKFUl}ddR-M=f?SPk^K&LCS(aJzdQ8! z(X;5%t0{X5_)kAl5B+GZcg||+r+HuR=1H)}>^T)Y>n*RjpUTo({d+fdOo*#VGxd&B zS^i2_S=qeb%U`sANh3qIvxcP1)WtKz1!_X?KS`Z<)!lY~<+f6*?%v?3F?W7mzn~fE zH~Ev*@lZ*pC)!K?ZRFk36Y;%0#q9ONrZdJ}9CziM&P-*~u&Ma}V|@fyfHxzPJu~iT d1I8Q}GytQLlt>KlW@Q8EU1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^;j>nxUI zE956{`~Nuf)HyffRX^_f?)q5HnZ;l=zq)vxx8RPO8~dwtrtd6c&E-ps^-B-Pe1BxI zX26F^n?#q{lQqj+xeV`L;n7q$r*tbQFLZ)Oj|sz_b;5Cq%6;eL`WJ?!IXI`<76o>G z=)7hud7g2blShbn-o+L*_q^3-!Hd>baplZ^ISig-WlE z>{UWsk$Od}A7`9)*O;?k$09@f-EyBvSF?9+oE8%$mvM^YL#5f*o_*VeW^6J{x%272X53K-j72bL07fe*5gOpl$_CQG2!s(p`XE?806atBcmMzZ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.3-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.3-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..01dfeddd6240fcdbd26942cc37b68d28231d647e GIT binary patch literal 547 zcmWIWW@fQxU}E57SQTv+++MaICYOYSVLsvmcKcYQ49%>3#)zn=g4-_R-S^-XJ1G@WMbW{CN7e@En`+ovCV z<;s2SvFGHTUCVdPZjGIzG;_tjjH@S;QYO9o@Z;}QHIdL9p^Eu+uP(_i@cut}aFGSOYm_49JBbE;O&Zi$174ST0IzCCs%Ga>N*&vu)J0B=SnduH6x d28=l{XaGhfDUlf9&B_MS!3cyAKzb`!KLEt6=4Jo@ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.3-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.3-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..de300bdc0500175e3f21fe95863d8a697b2057c4 GIT binary patch literal 559 zcmWIWW@fQxU}E57SQTv+ykW7ag6hAk`%3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIp6)_t+Z zU&v41_WyC{sdH||tA5<|-Sx4YGmF7$es%FWZ^0cmH}+TQOy60?n#-3M>z5vo`Toda z&43S;Hi<5?Cu^3uav9#g!lS8hPU%)qUg!kj8sDEALD77DbIzM9W z<&!1*&3M{AYA9~@o7A9E5xewFWl;BSm6Yf?N)^|W@34G1EdA`ffer)H|J^nX(+;Ye zPA>5e{>?IP^P?3G<=$HFbQr&!?8^Mo)v#e*mfO^=a&yy;eq7m^W%WID^UJ1}SMRL& pedJ(jfHxzPJu~ho1jZs5GytQOln4#*W@Q8EUX z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIp6*4sGN z1?>A7`i_A)@{(3k>f+zCf>*CtAf*<{#ioO_GhY9RygM>=-1L@5%vq$C zcVXGXEpMOv-Br;wMK9Lzw?A*x>y)ZhrqQiW!By3LBEH%Y!?WZdUyrzNDe_+w6m zmGM+Rmd){h9@mCS3ErKg+o^HST})=WTjpag`GtIE^Gd}n-Z!Wlv#Q(dIhb3@a*=uV zy2*g{{n9oOjw%8LT9D_*Zw$E2}b(4R`c!tt*-Q@&C_g3%dYsMkae^+|dS% bIWTAdMkOhc7~svy2GYR@gb_e`D_B1O1$EZP literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.4-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.4-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..a688083a24d9b5fae45365c37358c87a26285cb1 GIT binary patch literal 559 zcmWIWW@fQxU}E57SRHK^>|k>?rIL|>VG9cbgBAk=Lvm?xNq%m8YEe;sk*33;MFS@NEz*Yd*X|o<+j_Crf+GSv|n-}`)l>ZlKzei<@=5q zDa5qfZi;{4^DuMHDPHM$vud4=%S&O;h1^3W4h4t%Uez_7F=5Mr(?#) z+^wrq{vK7HE@v4WR&rwf=aN_#4MF?JV+#b9c|@KF)QSwde^k#~V*;PBvb5uqgR8UE z_kDeG_;_H$;(qSTUyEf#g(UkwM!)^7w1WA@2{->c&+c}9oZup)d)(FV#rf@Z-J!2u q|6a*p65!3qWY3H{3W2c*1`WVyB_%=wyjj^mIv9a40!SYO>jwZ0GULDi literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.5-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.5-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..09ef6758ee0afb018f65c814301a4e7f8e47607f GIT binary patch literal 547 zcmWIWW@fQxU}E57SRHK^Y_+dwaV{eR!x9z-1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^;j>${~} z+8BcJhNxNm)muIl7{*07f;nH0=ETo&RV$M>2;s8 zs-`kGXW|iF(}Niae@bK&pE(88xjvc6IPvJ~|M-2kJ8JX;vaYq|4 b=D?r<7?q?%Vt_X*8%PHu5Jmv$tzi8Cz%AJV literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.5-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.5-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..16b4829d9b879f796d9172d64c29e2d842838fcc GIT binary patch literal 559 zcmWIWW@fQxU}E57SRHK^d^+hBTO}g{!xk0>1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^;j>${~} z+8BM@K(jrzb`kg8#doHW)!Nv5I zOYfK~Y%PDYy3b1gJ;$Bfp&vOTx4n7X_`6`{%XnoiYq{^WrxyuT$gQ|ml2xa0;DV2S zs<(btit(4&qPEh9&Ij(-PqV##t2Apbx2o)9POhmIJl}RNjE{<)?ek8PYtjbwLk*uD z=Eh#X|Mrw3pKFvsry`$OdYy5wE%Py-dy2|xc6??5&z~opD=gfm^!v~o_FG)fKZO0! o`n)f|n~}+$8Fv%{V-XA*fYC}yga&xCvVn9k0$~J@J_yzi0N#e-K>z>% literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.6-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.6-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d1cb13d83e8d3e50399404832d2648150806adac GIT binary patch literal 547 zcmWIWW@fQxU}E57SRHK^>=LPLn9In(u!MzyL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8R%sDPO$8 z>B;VTD|uJ^=sW+`__-y&mj$ER)?U?4{u7?NQ&WX*#hkGpJlksB~r8*Ov`lLI)0}A6v5jrgCSH&#W__ zRu?dbf7!uwP-E}^n8pN;LbkgNY1&MB)_=Fg=$$z*^>N^%ee(bB#!O5I@MdJPXT}|E dz?cJr24GZ@5{UuctZX11j6fIxq_=|g0{~2(-_ig8 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.6-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.6-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..08bdc27c74863dd0d1a67c1cf82aff39a9aa3370 GIT binary patch literal 559 zcmWIWW@fQxU}E57SRHK^9M;&pppub+VG9cbgBAk=Lvm?xNq%m8YEe;sk*@pDUlFAGMsZ4-+k?Vq$|oIky9)^vumC-@0uP_^jpbl2X^6 zi@Y~{YmdF&op#;*LVsXh`N}PgS0y&7EN961ZtrtWy?*+MZ*Mpj%t`q;A&BRglmGmw zp_`Jo9^CfZfhpFG`%XP?+o_B!##d`Tl`<}uTlj|GsW(lJys@4sS8o^GDK_4ygamrT0< q?-~|g3h-uRvS-E}g}_(@g9c!s literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.7-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.7-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c7e9bac1da9e23d71735d179a1e75a2e8089bb5f GIT binary patch literal 547 zcmWIWW@fQxU}E57SRHK^oX7IUA(xSXVF?QZgBAk=Lvm?xNq%m8YEe;sk*QQbF zp1duGHt(Iwt8_@PLUe{-zsxHciRUTr5FbyU5=QTzP3tO~+UN z@2@|$uHt69@a#W&OHO_DU$%6oit#;3_B~f!xw^Kf_U3)jE!%DOvYmNr#EYu_g0GWb zxy=jr;xgODuv*GBKR2a4V9HOW9rL2Di3LSTJ($umwZrp3hT8vMo~r)>ycwD7nQ=!O cFy_FZ0T`8}L}Gw9D;r1$BM?Ra>8)V>0D2VM*Z=?k literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.7-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.7-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..a89cb64790618932c990aa44e9c636d5ad42e28c GIT binary patch literal 559 zcmWIWW@fQxU}E57SRHK^eE0s6LzRpS3|m+j7_=A|7?MkiOY(E$Q;Ul7i*yb2O!N%& zit}^gQ!5Jci%Q}Xi;^=k%To2Siu3b0Sy&lj85kNE7;HN_(vANZ7cRVXZksjloTGV} zs{7?ydxNCx)Yo(GHr@F0aP`vd5zO~L@-{b|*&nKw{Uq*1$Jwn5{NMcWo{_$SE9Boz z_gm3NC!P4lu!<}3VR#eIym=<2+m@=odU#CiM-h{AhpLm*xjxNk1)0hGmVe{BZFJMP z=D19b7H48_D;8XO_t5gI&pyrHJT>n9|7AIL(S=g|(p!(zC_Xn6VV%0@L~`QSdD(`{ zQzl)%)3k71z|qTdEOWQ1Jw8-X(&D#V;`F4b2pc}mm*?h~eR}KBCi!AQ?rDY2WQFk5 zcUR~AUp?z`_@&i(q4zAOOZW6zAK1sTz|VGD;JcF#+N*v{WR~vKRaJ<$&A996^rh@^ z>+3}qHa%8q$*VsTutV(Y+9wWKe<$0W{XFSw_5VeOyJ8>N&Rl1ctbQzIRi#Juzu;w# zGmqa?TQP(GaqZQ!IfZ_F6Rh7ypLh^A$#3s#gP>BONsl;J&Odc$m*rljy{op!v2Z?q rvEh%axle#MBa=Nd?kEJtA{aCPqm`5h4e(}V1LNCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8U4XCXnHo zvDSnSyqz_dbXgZPHZGjAe(Orpg_i$=6Bc~n@3?tu{fus@P2ca=DF63;Vvx)?H_*9n zUGTcjccKgbX8aS_p*z8}l=IY~xBYJF6=mCQ-*_gTdCv5(i{q6Wkw0VHBj4+)J{Nf& ztt`bb@7~|*+?TzgwyykCGd1|(i)Yp6e63SH?p9iN!N>AQ-dD9J88tD-cFxS5x$i`l z&WWWZG4~h5TW2q_{hiB|@X%Vn?N4Bp>{Bb@&2#)-JhYo}Tj-JM!+BTDjOW+NZn_$C z-)qgKZ6Bm|o^x_)e|X>K@_)W39V#>D^~Q9Rrrl%>3_RiBq-i(%eL(-8dm3#A{vTU? n)hEE4k;$GJcl-gP5DXfCaY{;T26(fwfpjneVFZxg2i6Y&V?^l( literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.8-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.8-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..900668ce3951bfc8b16900df03bda34e4e30b8ea GIT binary patch literal 567 zcmWIWW@fQxU}E57SRHK^++EC~-pI(naFm6CL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8U4XCXnHo zvDSnSyqz_dbXgZPHZGjAe(Orpg)aV+98RWp)l1qI3Ufq#e3^ewr+m+J^@H`DS9>4L zSaYfVknE#XhSD$32zaJ6iteAFG>32dGYg58Hx_5=s^$GZTglkQoHV^OxQ(Gkk!NFM z2=Ao0sXwo{Z(GZw|K+UhDj9>k_iA(O`RC0jUAlyeWnJsJ`G0ieLL;QFE=iP>Ww-Uc zyGQkMn(*Jf6Fyz_ zdegM%`p`R#wG(E|UD~j8q0x@+FBUgr-%ssZhIkGs} yVnag9oz$%VXGQM(3h-uRvS-E}mB82pg9c#qk`l22-mGjO9gIL20i;iY^#cIamgKMi literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.9-compact.zip b/tests/ast-parsing/compile/custom_error-0.6.9-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..9e0f14ea2efa01bd004d84bbe5e7dd83677b4c30 GIT binary patch literal 556 zcmWIWW@fQxU}E57SRHK^{DNCMyNr>6VJiy*gBAk=Lvm?xNq%m8YEe;sk*!4Kryr_Y`{SAA{G+{Fhg`R#V!@|BMioLBO=@5;gdXU(ER l1H2iT?3r=LA215RpaB@Cq{L=`H!B-R2O|(h0O@^T{Q#t<;Kcv{ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.6.9-legacy.zip b/tests/ast-parsing/compile/custom_error-0.6.9-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..da7c51b9f546f4be2f8568d84923e127a014f00b GIT binary patch literal 567 zcmWIWW@fQxU}E57SRHK^yzRxheT|F^3`bcQ7_=A|7?MkiOY(E$Q;Ul7i*yb2O!N%& zit}^gQ!5Jci%Q}Xi;^=k%To2Siu3b0Sy&lj85kNE7;HN_(vANZ7cRVXZksjloTGV} zs{7?ydxNCx)Yo(GHr@F0aP`vd5zO~L@-{b|*&nKw{Uq*1$Jwn5{NMcWo{_$SE9Boz z_gm3NC!P4lu!<}3VR#eIym=<2+m@=odU#CiM-h{AhpLm*xjxNk1)0hGmVe{BZHmpp zjI}0w;O(rrq|3UXv2o#?^;=h(E_Csq*t6tK!P?#g?K1x<+K#H#U&RvL6Vk0$1}0>viT{zDP$2oY z;;8Tq_iZ{0F0HD)P`Wj(;FA87*1vPC_uO}sP&y)9eqB)CIO8?XU-iz5w<6$7tbgJ7tWgh&bwFL*Xg8v_BtUGasAc4 xe}#5U_};t+smoqtp9{Pe!-t4qpQWG+(#-oc5yVFtz^--?J?>@ z@A_P_rGfvH{>$%Xj>lNd0>Vx;NXR^zW&h};Z)E0amFtN<>GFror8nrbHBPzvi8DRn zUGWXoev|i47Kb~$)|j;Bfp^~iyZ?iZH~zO}e$=yNnk|=RUCo1vwYP7t`DOP}>3ysR zGZ%}J*8L^34#=4V_Z|K19xb8#=H9g1>t=c@X+3G-oIN?PPtpEweSt=RHzSihGwx^u c#vB+l0HczWNDT01WdrG81i}a)y%nq<0K8S*R{#J2 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.0-legacy.zip b/tests/ast-parsing/compile/custom_error-0.7.0-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..d104ec84daf93a76a6fb8c69a2ccbbbaa14019e9 GIT binary patch literal 559 zcmWIWW@fQxU}E57SQBj)Tq)n0T*=75u!V(zL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8R&2{bB#7 zToqf+m^o^+?d4Q))_=ktzu-@j(bLYaCz#kx|I{D*Y}#}5#;lGRk-o)W)_ds)h(}zC z;%0uV?YZ>%y3<$ng(ttd_T#a_r{E{`EuI$+&C1}|&~eN#^T_h>a$em8$4$&rj{fhf z_&#YVZ|V2Al8Pg%7I$1*uu&uJ*6kGre-F*OsX5!UqFaxhCqmE5OQ>;4Thf`QP9{74 zUppKvq9D0Tjk$W=4?(ecq2A@}?eXW91)Ah;T@k2Jyk)iU*-M2l3?IuLxpI6BuTFKy z=DwMRhFhKIoYH9J_2A?a?pVRhsdxX9t=akr56RsTe824J+35}^U!tZX11j6fIxqz{7i0|0oI-_`&C literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.1-compact.zip b/tests/ast-parsing/compile/custom_error-0.7.1-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..ae7674b6ec7d0622bf95bfb74421820799179ed2 GIT binary patch literal 547 zcmWIWW@fQxU}E57SQBj)TpQDWG?$TqVF?QZgBAk=Lvm?xNq%m8YEe;sk*WtsJF_xz3{@$FLzulX&GY}K0_{*E`Qis4qQ7Zs!utAM1_p7bJ$?nCh_SfsO5)dv`?qGN(4#i~65nTGPr=P%0L+ z|7GWbwNq}h3h6tfOekzSfM@rrGDlKp3)%zwSA)iX8MWjrF~FOZ4Wxq+2qS>>R1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^-XL$er pb)Bgwz?+fDo*8!(0%H*j8i3JCN`wY@v$BD7Falu&kUj|34*=dI;d=l8 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.2-compact.zip b/tests/ast-parsing/compile/custom_error-0.7.2-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b84522e6e2414ff0d45224906837c84661afd05b GIT binary patch literal 547 zcmWIWW@fQxU}E57SQBj)%)I+vcrGIY!x9z-1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^-)7@_WyC{sdH||tA5<|-Sx4YGxMwK{CfWDe?zCR*Eg+6(R7-zn<3`U{T-2$Zl8Ye zl`HqP$DWgWZ4TeKa%I<~iCOc~eLfq7{?xUp`zSL_=^^|2o*U=GMfN+~nUE!@{O-`> zN6(^5ucquN;6MFHJ@lis-Z`tOpXPnNnCPsI236tmY4o6Z<_aom-2Iy03`!=~c@kM$8;0p5&E_RP4W d4H$D^&;X1|QX(?degM_&;#2?t literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.2-legacy.zip b/tests/ast-parsing/compile/custom_error-0.7.2-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..2bfe6d3b75e8dbd9d7d2ea9437e23f4c3dc9f054 GIT binary patch literal 559 zcmWIWW@fQxU}E57SQBj)oWJPw@=8VqhAk`%3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIn!J@Q|H`_SN*u_yX#{)XBLCi{OaO$-hw-BZtSnpnZC1(HJ2|j)-OFE^Zk*< zngJgwZ4zB(Pu47Rt7g_=HQ%aTNK#& zq4S!t4RYX03XZXUH||9 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.3-compact.zip b/tests/ast-parsing/compile/custom_error-0.7.3-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..50ab663a96432db67ebdf8695e1811ce07dc79b5 GIT binary patch literal 547 zcmWIWW@fQxU}E57SQ~8?tock(EtipjVF?QZgBAk=Lvm?xNq%m8YEe;sk*(##eAGOnIXN}2TT!;imL)kH#bgevCOy}Bg7!2AE?l_w1n z^o1P_Gd3m4C@-ivbthZbDsy(}k&9(Nh4kYpXDMBH?-@BKG@)PYWzFMKk+ZtLdP`m& zENLqb;z)2d65M(A&4tV?0ULocA#?evR*Ch#{qt34%|wAyd`2Ux6 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.4-compact.zip b/tests/ast-parsing/compile/custom_error-0.7.4-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..30723f20d5bca6f3c58d68913f1c17fd96990ac9 GIT binary patch literal 547 zcmWIWW@fQxU}E57SQ~8?yswyNMJ^))!x9z-1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^-A7`i_A)@{(3k>f+zCf>*CtAf*<{#ioO_GhY9RygM>=-1L@5%vq$C zcVXGXEpMOv-Br;wMK9Lzw?A*x>y)ZhrqQiW!By3LBEH%Y!?WZdUyrzNDe_+w6m zmGM+Rmd){h9@mCS3ErKg+o^HST})=WTjpag`GtIE^Gd}n-Z!Wlv#Q(dIhb3@a*=uV zy2*g{{n9oOjw%8LT9D_*Zw$E2}b(4R`c!tt*-Q@&C_g3%dYsMkae^+|dS% bIWTAdMkOhc7~svy2GYR@gb_e`D_B1OqNCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8R%z+#!y2 z0sDT2zGGmHyrh+sy7>33;MFS@NEz*Yd*X|o<+j_Crf+GSv|n-}`)l>ZlKzei<@=5q zDa5qfZi;{4^DuMHDPHM$vud4=%S&O;h1^3W4h4t%Uez_7F=5Mr(?#) z+^wrq{vK7HE@v4WR&rwf=aN_#4MF?JV+#b9c|@KF)QSwde^k#~V*;PBvb5uqgR8UE z_kDeG_;_H$;(qSTUyEf#g(UkwM!)^7w1WA@2{->c&+c}9oZup)d)(FV#rf@Z-J!2u q|6a*p65!3qWY3H{3W2c*1`WVyB_%=wyjj^mIv9a40!SYO>jwa%j^dgC literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.5-compact.zip b/tests/ast-parsing/compile/custom_error-0.7.5-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..9f637991d5ae473ab1e2eb9d05041aa56c8ecfa7 GIT binary patch literal 547 zcmWIWW@fQxU}E57SQ~8?JVo#D&0IzXh9xWv3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIn!y%fIUS-3l;hSJkCOXe?Au$0yBFNU)x*BwYX9``ewbjtW7k6C*Mr`afL| z+rKM!Nk>}V>zR&AJ$jEU=USws<+RN|wDGL>JD({hC0`UIEZGtIfA3$8C90BrIzj1P z>&|wD`U;DP+dXtqnKPN?me7lZk-KV-{V45yqIj-d^X~6OqW^y>95o2=W@NHw#vN_I cm;-|bU{sP4i2>fMY#<$sKo|j}w}SNp0H8wIxBvhE literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.5-legacy.zip b/tests/ast-parsing/compile/custom_error-0.7.5-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..70844b1b03457a1e76d053fd820175bde500b01b GIT binary patch literal 559 zcmWIWW@fQxU}E57SQ~8?Jm1zYsFIO^VG9cbgBAk=Lvm?xNq%m8YEe;sk*M@K(jrzb`kg8#doHW)!Nv5I zOYfK~Y%PDYy3b1gJ;$Bfp&vOTx4n7X_`6`{%XnoiYq{^WrxyuT$gQ|ml2xa0;DV2S zs<(btit(4&qPEh9&Ij(-PqV##t2Apbx2o)9POhmIJl}RNjE{<)?ek8PYtjbwLk*uD z=Eh#X|Mrw3pKFvsry`$OdYy5wE%Py-dy2|xc6??5&z~opD=gfm^!v~o_FG)fKZO0! o`n)f|n~}+$8Fv%{V-XA*fYC}yga&xCvVn9k0$~J@J_yzi0BLRD6951J literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.7.6-compact.zip b/tests/ast-parsing/compile/custom_error-0.7.6-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3ab1a8e7b1ce8a5508dfe5120f4ed6dc0e9f0fb5 GIT binary patch literal 547 zcmWIWW@fQxU}E57SQ~8?{OaT+?_5R(h9xWv3|b5f49TU%CHcAWsYONkMY;xhCVB>X z#rZk$sTBqJMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~ z)%|jg&08n{Ir0xO(aK2p7slTLhNSjCn2FuaLp-aM1iZA;Z(Jv=7%qln45L)A&@T%TsNg3M%o%fIn!uCduaL9XP@S8o*L|w%31Pn31?;T*NnxBqMooW$Q7CEWODOO^v(0a zD=chR&r8uUJoV?#mykqCKePW^1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^-<@&ei% zHZGH+#hKXKiUpV6J+%DlvrqFkPmO#3e_4)QbfHwg^wuLaiqFkNSf?&Jk(~H-UbZ3g zlu6g`G%Z{gaP;yV%iL{hj}KLpwD>KTI6WyU!iJCY<+(X#pWb@3Nxqnnds?A0Ss^_2 z-PL*jSI@c}era`H=snBn(mlP_2llZn@Uz_(`0nI`_NpHfnWZ~*RTbiGGwwP%eJOj~ z`g+lYO^=mY^6Jk7>=669_K8E*-^q4oKTrBv{eRKnuGmMmGuPQ9s~<~QRq0XvFL;^b z%;PuJR?OgkTzmCwPN5&)1nc+FCmzI2^4t5`AgEMm(j(55^H1H`Wx1DW@2V|wES!&D rZ2049?i1k6$YjrqI|_lZ2nG$nXeA{=1H4(;Ksp$KFak&)1nUO?LT~Cb literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.0-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.0-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a0de75d88717132e03b244a98ab528142e006d76 GIT binary patch literal 549 zcmWIWW@fQxU}E57NDZzFZtU92na{|;u!MzyL5qQbA-S};BtJJkwWuh+NY_BmM9)C4 zI6o&owW1)us3bnIC^;juELAV7I6se*g_R+efuVtc!M39#-T04j;lfMjwpsJeIhvQL zx?irfH%Q7(eLeSX(~U0=S1;Wj!F>NCZ*#+${h?~vPvTy5oZY&>|IH8Y8R;vyLjK)! zzZHFS(ur>jtGE&$hBxudn`ctGZK?XJhsVTz6frq>s5(iV>(h)@keSSH`8WRN)Y>{% z=9q6LVb`YQEh||(<#JMePH5`icrniF9(p@iBR;Ad`=&B@`aKd@n0Aou@~w0YCH@Z` zjPn)cQ|sL(A8C)fac#@gwjXYP*EpSUEpUiTWJ=2wEq&FxD=$B^h1W&r=qo4j+}Sf; zNKY=1=Xn>j-_cV*BtXVl!|9aAjmG2YTV*2+wHF^&hGylzyOS0A9=IBxF9~MyXYNpXe9@J0xBK1~@@r-l9KFf<^7boN%aipn z<$HZ!M0Gr^U9@^qJzr14rBwo)QtQk%r5Knjl)IZ!dcRSC c7-%>V!Z literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.1-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.1-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c4eda730546259bcc7ff6d7f43a72dd0b0517eb0 GIT binary patch literal 549 zcmWIWW@fQxU}E57NDZzFUVXi&BA=0gVF?QZgBAk=Lvm?xNq%m8YEe;sk*Aon7_tWLRGp1*YS?5j6RGcRmYS&sZ38c=uD`TK^v7EhS~o*fy}wn0Z?uMWX5MI9nJsjZ8$Yjrq fJK}(G2L=tm$Rs5i1H4(;Ksp$KFak(#2kQp_b<5+g literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.10-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.10-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5fac2ba8dfed878b83d7b0329533c3fcba979c41 GIT binary patch literal 4470 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.2-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.2-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..f9d1a54ef660b7be5ca83b9ab042febe5e7c30d2 GIT binary patch literal 549 zcmWIWW@fQxU}E57NDZzFzG|TSDxZ;oVF?QZgBAk=Lvm?xNq%m8YEe;sk*`tuuNlG*Zc(byBbT9&81d!ei)(-#$1m5HT literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.3-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.3-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..66cb969fd757aba188e14219185bb3b2e08a4c48 GIT binary patch literal 549 zcmWIWW@fQxU}E57NDZzF{-671c0MBm!x9z-1}z2#hUC)XlKkBG)S{yNB3%PL6FmdH z;{2TW)QW=qqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0 z>VCP_-XJME_4VAlO*g(gT)lLA1oQomyv+?~_J^uvKZ$$Madzth|2IFpXQZ#-3i)@_ z{Z{nRNhiKBtl~<17~aG)Z=Ol%wx#N?9v&0>QN-ljq3R@cu1_;sL1r?)<=^--4`%nj zdn?>y$wEBcnxI!+*V^&&u!LQ&5?cVepy+n;+oAnFZ`SH>q@Q{v+c>8 zUsVM`MIotIYq#WXk{3ReXwp_!`=@$R~k+Rcc3r^RH(o=VtM#&&l~9cspCj zTdKczB|}-OZBfKRIsSTvMb%5~B5PXY^^DmZ`s+k}c{425v)+{Wq;1zCpm<06&vLh| zx}TfwHy&f@Ps$aJ@KjhXJ5#eDfMMpL3iIw&k2g+pH2adX{{OE-=L!P68JX;vaYr05 b?!ce{7@4F*V}Lg+8%PHu5Jmv$?O^=?>Uq{& literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.4-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e5e9a2935e5e0e97e40bf74c01ca8b8013b9245b GIT binary patch literal 4408 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.5-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.5-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a1e1cc166f9b621869da1edfcc65f24db0fb9bfe GIT binary patch literal 4414 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.6-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.6-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c937beb6b03590d4faaea2a21510ae3f14705b46 GIT binary patch literal 4413 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 F{|B4-T2BA~ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.8-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..fcc44253c398d4aa570fa2ff54d54a4e84a02413 GIT binary patch literal 4457 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 b=l@S32CoSo{r7?MpPK(?Z~p@-0KoqMXaKvT literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.9-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.9-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..4af11bb6bef081104ca27f28a9e281a6c3bd5016 GIT binary patch literal 4464 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