diff --git a/vyper/ast/nodes.py b/vyper/ast/nodes.py index e9d4482b01..e4e9f37866 100644 --- a/vyper/ast/nodes.py +++ b/vyper/ast/nodes.py @@ -917,11 +917,8 @@ class List(ExprNode): _translated_fields = {"elts": "elements"} def fold(self) -> Optional[ExprNode]: - elements = [e.get_folded_value_maybe() for e in self.elements] - if None not in elements: - return type(self).from_node(self, elements=elements) - - return None + elements = [e.get_folded_value_throwing() for e in self.elements] + return type(self).from_node(self, elements=elements) class Tuple(ExprNode): @@ -962,7 +959,7 @@ def fold(self) -> ExprNode: Int | Decimal Node representing the result of the evaluation. """ - operand = self.operand.get_folded_value_maybe() + operand = self.operand.get_folded_value_throwing() if isinstance(self.op, Not) and not isinstance(operand, NameConstant): raise UnfoldableNode("Node contains invalid field(s) for evaluation") @@ -1012,7 +1009,7 @@ def fold(self) -> ExprNode: Int | Decimal Node representing the result of the evaluation. """ - left, right = [i.get_folded_value_maybe() for i in (self.left, self.right)] + left, right = [i.get_folded_value_throwing() for i in (self.left, self.right)] if type(left) is not type(right): raise UnfoldableNode("Node contains invalid field(s) for evaluation") if not isinstance(left, (Int, Decimal)): @@ -1162,7 +1159,7 @@ def fold(self) -> ExprNode: NameConstant Node representing the result of the evaluation. """ - values = [i.get_folded_value_maybe() for i in self.values] + values = [i.get_folded_value_throwing() for i in self.values] if any(not isinstance(i, NameConstant) for i in values): raise UnfoldableNode("Node contains invalid field(s) for evaluation") @@ -1218,7 +1215,7 @@ def fold(self) -> ExprNode: NameConstant Node representing the result of the evaluation. """ - left, right = [i.get_folded_value_maybe() for i in (self.left, self.right)] + left, right = [i.get_folded_value_throwing() for i in (self.left, self.right)] if not isinstance(left, Constant): raise UnfoldableNode("Node contains invalid field(s) for evaluation") @@ -1324,8 +1321,8 @@ def fold(self) -> ExprNode: ExprNode Node representing the result of the evaluation. """ - slice_ = self.slice.value.get_folded_value_maybe() - value = self.value.get_folded_value_maybe() + slice_ = self.slice.value.get_folded_value_throwing() + value = self.value.get_folded_value_throwing() if not isinstance(value, List): raise UnfoldableNode("Subscript object is not a literal list") diff --git a/vyper/builtins/functions.py b/vyper/builtins/functions.py index c1f22a601a..718ad806c9 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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].get_folded_value_maybe() + arg = node.args[0].get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[1].get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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.get_folded_value_maybe() + outsize = outsize.get_folded_value_throwing() revert_on_failure = kwargz.get("revert_on_failure") if revert_on_failure is not None: - revert_on_failure = revert_on_failure.get_folded_value_maybe() + revert_on_failure = revert_on_failure.get_folded_value_throwing() 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.get_folded_value_maybe() for i in node.args] + values = [i.get_folded_value_throwing() 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.get_folded_value_maybe() for i in node.args] + values = [i.get_folded_value_throwing() 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.get_folded_value_maybe() for i in node.args] + values = [i.get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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.get_folded_value_maybe() for i in node.args] + args = [i.get_folded_value_throwing() 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.get_folded_value_maybe() for i in node.args] + args = [i.get_folded_value_throwing() 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.get_folded_value_maybe() for i in node.args] + values = [i.get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() 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].get_folded_value_maybe() - right = node.args[1].get_folded_value_maybe() + left = node.args[0].get_folded_value_throwing() + right = node.args[1].get_folded_value_throwing() 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].get_folded_value_maybe() + value = node.args[0].get_folded_value_throwing() if not isinstance(value, vy_ast.Int): raise UnfoldableNode