Skip to content

Commit

Permalink
fix more builtins
Browse files Browse the repository at this point in the history
  • Loading branch information
tserg committed Nov 15, 2023
1 parent 5a51de3 commit 3078bcc
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions vyper/builtins/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -725,14 +725,14 @@ class MethodID(FoldedFunction):
def evaluate(self, node):
validate_call_args(node, 1, ["output_type"])

args = node.args
if not isinstance(args[0], vy_ast.Str):
value = node.args[0]._metadata.get("folded_value")
if not isinstance(value, vy_ast.Str):
raise InvalidType("method id must be given as a literal string", args[0])
if " " in args[0].value:
if " " in value.value:
raise InvalidLiteral("Invalid function signature - no spaces allowed.")

return_type = self.infer_kwarg_types(node)
value = method_id_int(args[0].value)
value = method_id_int(value.value)

if return_type.compare_type(BYTES4_T):
return vy_ast.Hex.from_node(node, value=hex(value))
Expand Down Expand Up @@ -1359,13 +1359,14 @@ def evaluate(self, node):
self.__class__._warned = True

validate_call_args(node, 2)
for arg in node.args:
if not isinstance(arg, vy_ast.Int):
values = [i._metadata.get("folded_value") for i in node.args]
for val, arg in zip(values, node.args):
if not isinstance(val, vy_ast.Int):
raise UnfoldableNode
if arg.value < 0 or arg.value >= 2**256:
if val.value < 0 or val.value >= 2**256:
raise InvalidLiteral("Value out of range for uint256", arg)

value = node.args[0].value & node.args[1].value
value = values[0].value & values[1].value
return vy_ast.Int.from_node(node, value=value)

@process_inputs
Expand All @@ -1385,13 +1386,14 @@ def evaluate(self, node):
self.__class__._warned = True

validate_call_args(node, 2)
for arg in node.args:
if not isinstance(arg, vy_ast.Int):
values = [i._metadata.get("folded_value") for i in node.args]
for val, arg in zip(values, node.args):
if not isinstance(val, vy_ast.Int):
raise UnfoldableNode
if arg.value < 0 or arg.value >= 2**256:
if val.value < 0 or val.value >= 2**256:
raise InvalidLiteral("Value out of range for uint256", arg)

value = node.args[0].value | node.args[1].value
value = values[0].value | values[1].value
return vy_ast.Int.from_node(node, value=value)

@process_inputs
Expand All @@ -1411,13 +1413,14 @@ def evaluate(self, node):
self.__class__._warned = True

validate_call_args(node, 2)
for arg in node.args:
if not isinstance(arg, vy_ast.Int):
values = [i._metadata.get("folded_value") for i in node.args]
for val, arg in zip(values, node.args):
if not isinstance(val, vy_ast.Int):
raise UnfoldableNode
if arg.value < 0 or arg.value >= 2**256:
if val.value < 0 or val.value >= 2**256:
raise InvalidLiteral("Value out of range for uint256", arg)

value = node.args[0].value ^ node.args[1].value
value = values[0].value ^ values[1].value
return vy_ast.Int.from_node(node, value=value)

@process_inputs
Expand All @@ -1437,10 +1440,11 @@ def evaluate(self, node):
self.__class__._warned = True

validate_call_args(node, 1)
if not isinstance(node.args[0], vy_ast.Int):
value = node.args[0]._metadata.get("folded_value")
if not isinstance(value, vy_ast.Int):
raise UnfoldableNode

value = node.args[0].value
value = value.value
if value < 0 or value >= 2**256:
raise InvalidLiteral("Value out of range for uint256", node.args[0])

Expand Down

0 comments on commit 3078bcc

Please sign in to comment.