Skip to content

Commit

Permalink
use throwing instead of maybe when folding
Browse files Browse the repository at this point in the history
  • Loading branch information
tserg committed Dec 26, 2023
1 parent 6daf69f commit ade20fd
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 32 deletions.
19 changes: 8 additions & 11 deletions vyper/ast/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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)):
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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")

Expand Down Expand Up @@ -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")
Expand Down
42 changes: 21 additions & 21 deletions vyper/builtins/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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]
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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

Expand All @@ -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]
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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)):
Expand Down Expand Up @@ -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

Expand Down

0 comments on commit ade20fd

Please sign in to comment.