From 6e3ad8ee105af5fcd3b121fb1804141c96c5dc3e Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Sun, 24 Dec 2023 13:53:03 +0800 Subject: [PATCH] replace get with maybe variant --- vyper/builtins/functions.py | 42 +++++++++++------------ vyper/semantics/analysis/local.py | 12 +++---- vyper/semantics/analysis/pre_typecheck.py | 2 +- vyper/semantics/analysis/utils.py | 2 +- vyper/semantics/types/subscriptable.py | 2 +- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/vyper/builtins/functions.py b/vyper/builtins/functions.py index 08f5c6f3bb..9978670f71 100644 --- a/vyper/builtins/functions.py +++ b/vyper/builtins/functions.py @@ -137,7 +137,7 @@ class Floor(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 1) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if not isinstance(value, vy_ast.Decimal): raise UnfoldableNode @@ -168,7 +168,7 @@ class Ceil(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 1) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if not isinstance(value, vy_ast.Decimal): raise UnfoldableNode @@ -462,7 +462,7 @@ class Len(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 1) - arg = node.args[0]._metadata.get("folded_value") + arg = node.args[0].get_folded_value_maybe() if isinstance(arg, (vy_ast.Str, vy_ast.Bytes)): length = len(arg.value) elif isinstance(arg, vy_ast.Hex): @@ -599,7 +599,7 @@ class Keccak256(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 1) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if isinstance(value, vy_ast.Bytes): value = value.value elif isinstance(value, vy_ast.Str): @@ -647,7 +647,7 @@ class Sha256(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 1) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if isinstance(value, vy_ast.Bytes): value = value.value elif isinstance(value, vy_ast.Str): @@ -721,7 +721,7 @@ class MethodID(FoldedFunctionT): def fold(self, node): validate_call_args(node, 1, ["output_type"]) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if not isinstance(value, vy_ast.Str): raise InvalidType("method id must be given as a literal string", node.args[0]) if " " in value.value: @@ -981,7 +981,7 @@ class AsWeiValue(BuiltinFunctionT): } def get_denomination(self, node): - value = node.args[1]._metadata.get("folded_value") + value = node.args[1].get_folded_value_maybe() if not isinstance(value, vy_ast.Str): raise ArgumentException( "Wei denomination must be given as a literal string", node.args[1] @@ -997,7 +997,7 @@ def fold(self, node): validate_call_args(node, 2) denom = self.get_denomination(node) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if not isinstance(value, (vy_ast.Decimal, vy_ast.Int)): raise UnfoldableNode value = value.value @@ -1083,10 +1083,10 @@ def fetch_call_return(self, node): outsize = kwargz.get("max_outsize") if outsize is not None: - outsize = outsize._metadata.get("folded_value") + outsize = outsize.get_folded_value_maybe() revert_on_failure = kwargz.get("revert_on_failure") if revert_on_failure is not None: - revert_on_failure = revert_on_failure._metadata.get("folded_value") + revert_on_failure = revert_on_failure.get_folded_value_maybe() revert_on_failure = revert_on_failure.value if revert_on_failure is not None else True if outsize is None or outsize.value == 0: @@ -1356,7 +1356,7 @@ def fold(self, node): self.__class__._warned = True validate_call_args(node, 2) - values = [i._metadata.get("folded_value") for i in node.args] + values = [i.get_folded_value_maybe() for i in node.args] for val in values: if not isinstance(val, vy_ast.Int): raise UnfoldableNode @@ -1381,7 +1381,7 @@ def fold(self, node): self.__class__._warned = True validate_call_args(node, 2) - values = [i._metadata.get("folded_value") for i in node.args] + values = [i.get_folded_value_maybe() for i in node.args] for val in values: if not isinstance(val, vy_ast.Int): raise UnfoldableNode @@ -1406,7 +1406,7 @@ def fold(self, node): self.__class__._warned = True validate_call_args(node, 2) - values = [i._metadata.get("folded_value") for i in node.args] + values = [i.get_folded_value_maybe() for i in node.args] for val in values: if not isinstance(val, vy_ast.Int): raise UnfoldableNode @@ -1431,7 +1431,7 @@ def fold(self, node): self.__class__._warned = True validate_call_args(node, 1) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if not isinstance(value, vy_ast.Int): raise UnfoldableNode @@ -1457,7 +1457,7 @@ def fold(self, node): self.__class__._warned = True validate_call_args(node, 2) - args = [i._metadata.get("folded_value") for i in node.args] + args = [i.get_folded_value_maybe() for i in node.args] if any(not isinstance(i, vy_ast.Int) for i in args): raise UnfoldableNode value, shift = [i.value for i in args] @@ -1504,7 +1504,7 @@ class _AddMulMod(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 3) - args = [i._metadata.get("folded_value") for i in node.args] + args = [i.get_folded_value_maybe() for i in node.args] if isinstance(args[2], vy_ast.Int) and args[2].value == 0: raise ZeroDivisionException("Modulo by 0", node.args[2]) for arg in args: @@ -1545,7 +1545,7 @@ class PowMod256(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 2) - values = [i._metadata.get("folded_value") for i in node.args] + values = [i.get_folded_value_maybe() for i in node.args] if any(not isinstance(i, vy_ast.Int) for i in values): raise UnfoldableNode @@ -1566,7 +1566,7 @@ class Abs(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 1) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if not isinstance(value, vy_ast.Int): raise UnfoldableNode @@ -2006,8 +2006,8 @@ class _MinMax(BuiltinFunctionT): def fold(self, node): validate_call_args(node, 2) - left = node.args[0]._metadata.get("folded_value") - right = node.args[1]._metadata.get("folded_value") + left = node.args[0].get_folded_value_maybe() + right = node.args[1].get_folded_value_maybe() if not isinstance(left, type(right)): raise UnfoldableNode if not isinstance(left, (vy_ast.Decimal, vy_ast.Int)): @@ -2083,7 +2083,7 @@ def fetch_call_return(self, node): def fold(self, node): validate_call_args(node, 1) - value = node.args[0]._metadata.get("folded_value") + value = node.args[0].get_folded_value_maybe() if not isinstance(value, vy_ast.Int): raise UnfoldableNode diff --git a/vyper/semantics/analysis/local.py b/vyper/semantics/analysis/local.py index c09dbcabf0..e8c651cce6 100644 --- a/vyper/semantics/analysis/local.py +++ b/vyper/semantics/analysis/local.py @@ -369,7 +369,7 @@ def visit_For(self, node): validate_expected_type(n, IntegerT.any()) if bound is None: - n_val = n._metadata.get("folded_value") + n_val = n.get_folded_value_maybe() if not isinstance(n_val, vy_ast.Num): raise StateAccessViolation("Value must be a literal", n) if n_val.value <= 0: @@ -377,7 +377,7 @@ def visit_For(self, node): type_list = get_possible_types_from_node(n) else: - bound_val = bound._metadata.get("folded_value") + bound_val = bound.get_folded_value_maybe() if not isinstance(bound_val, vy_ast.Num): raise StateAccessViolation("bound must be a literal", bound) if bound_val.value <= 0: @@ -394,7 +394,7 @@ def visit_For(self, node): validate_expected_type(args[0], IntegerT.any()) type_list = get_common_types(*args) - arg0_val = args[0]._metadata.get("folded_value") + arg0_val = args[0].get_folded_value_maybe() if not isinstance(arg0_val, vy_ast.Constant): # range(x, x + CONSTANT) if not isinstance(args[1], vy_ast.BinOp) or not isinstance( @@ -417,7 +417,7 @@ def visit_For(self, node): ) else: # range(CONSTANT, CONSTANT) - arg1_val = args[1]._metadata.get("folded_value") + arg1_val = args[1].get_folded_value_maybe() if not isinstance(arg1_val, vy_ast.Int): raise InvalidType("Value must be a literal integer", args[1]) validate_expected_type(args[1], IntegerT.any()) @@ -429,7 +429,7 @@ def visit_For(self, node): else: # iteration over a variable or literal list - iter_val = node.iter._metadata.get("folded_value") + iter_val = node.iter.get_folded_value_maybe() if isinstance(iter_val, vy_ast.List) and len(iter_val.elements) == 0: raise StructureException("For loop must have at least 1 iteration", node.iter) @@ -614,7 +614,7 @@ def visit(self, node, typ): # can happen. super().visit(node, typ) - folded_value = node._metadata.get("folded_value") + folded_value = node.get_folded_value_maybe() if isinstance(folded_value, vy_ast.Constant): validate_expected_type(folded_value, typ) diff --git a/vyper/semantics/analysis/pre_typecheck.py b/vyper/semantics/analysis/pre_typecheck.py index 203937c759..c2f77d79a0 100644 --- a/vyper/semantics/analysis/pre_typecheck.py +++ b/vyper/semantics/analysis/pre_typecheck.py @@ -21,7 +21,7 @@ def get_constants(node: vy_ast.Module) -> dict: for n in c.value.get_descendants(include_self=True, reverse=True): prefold(n, constants) - val = c.value._metadata.get("folded_value") + val = c.value.get_folded_value_maybe() # note that if a constant is redefined, its value will be overwritten, # but it is okay because the syntax error is handled downstream diff --git a/vyper/semantics/analysis/utils.py b/vyper/semantics/analysis/utils.py index 2a53c0f62c..4230c82db8 100644 --- a/vyper/semantics/analysis/utils.py +++ b/vyper/semantics/analysis/utils.py @@ -634,7 +634,7 @@ def _check_literal(node: vy_ast.VyperNode) -> bool: elif isinstance(node, (vy_ast.Tuple, vy_ast.List)): return all(_check_literal(item) for item in node.elements) - if node._metadata.get("folded_value"): + if node.get_folded_value_maybe(): return True return False diff --git a/vyper/semantics/types/subscriptable.py b/vyper/semantics/types/subscriptable.py index 13f6d72297..5e1154416a 100644 --- a/vyper/semantics/types/subscriptable.py +++ b/vyper/semantics/types/subscriptable.py @@ -287,7 +287,7 @@ def from_annotation(cls, node: vy_ast.Subscript) -> "DArrayT": ): raise StructureException(err_msg, node.slice) - length_node = node.slice.value.elements[1]._metadata.get("folded_value") + length_node = node.slice.value.elements[1].get_folded_value_maybe() if not isinstance(length_node, vy_ast.Int): raise StructureException(err_msg, length_node)