Example #1
0
 def types_from_Compare(self, node):
     # comparison: `x < y`
     if isinstance(node.op, vy_ast.In):
         # x in y
         left = self.get_possible_types_from_node(node.left)
         right = self.get_possible_types_from_node(node.right)
         if next((i for i in left if isinstance(i, ArrayDefinition)),
                 False):
             raise InvalidOperation(
                 "Left operand in membership comparison cannot be Array type",
                 node.left,
             )
         if next((i for i in right if not isinstance(i, ArrayDefinition)),
                 False):
             raise InvalidOperation(
                 "Right operand must be Array for membership comparison",
                 node.right)
         types_list = [
             i for i in left
             if _is_type_in_list(i, [i.value_type for i in right])
         ]
         if not types_list:
             raise TypeMismatch(
                 "Cannot perform membership comparison between dislike types",
                 node)
     else:
         types_list = get_common_types(node.left, node.right)
         _validate_op(node, types_list, "validate_comparator")
     return [BoolDefinition()]
Example #2
0
    def visit_Assert(self, node):
        if node.msg:
            _validate_revert_reason(node.msg)

        try:
            validate_expected_type(node.test, BoolDefinition())
        except InvalidType:
            raise InvalidType("Assertion test value must be a boolean", node.test)
Example #3
0
 def visit_If(self, node):
     validate_expected_type(node.test, BoolDefinition())
     with self.namespace.enter_scope():
         for n in node.body:
             self.visit(n)
     with self.namespace.enter_scope():
         for n in node.orelse:
             self.visit(n)
Example #4
0
class AddressDefinition(MemberTypeDefinition):
    _id = "address"
    _type_members = {
        "balance": Uint256Definition(is_immutable=True),
        "codehash": Bytes32Definition(is_immutable=True),
        "codesize": Uint256Definition(is_immutable=True),
        "is_contract": BoolDefinition(is_immutable=True),
    }
Example #5
0
 def types_from_BoolOp(self, node):
     # boolean operation: `x and y`
     types_list = get_common_types(*node.values)
     _validate_op(node, types_list, "validate_boolean_op")
     return [BoolDefinition()]