mirror of https://github.com/m-labs/artiq.git
Convert Slice into typed SliceT.
This commit is contained in:
parent
53fb03d1bf
commit
e9416f4707
|
@ -36,6 +36,9 @@ class ExceptHandlerT(ast.ExceptHandler):
|
||||||
_fields = ("filter", "name", "body") # rename ast.ExceptHandler.type
|
_fields = ("filter", "name", "body") # rename ast.ExceptHandler.type
|
||||||
_types = ("name_type",)
|
_types = ("name_type",)
|
||||||
|
|
||||||
|
class SliceT(ast.Slice, commontyped):
|
||||||
|
pass
|
||||||
|
|
||||||
class AttributeT(ast.Attribute, commontyped):
|
class AttributeT(ast.Attribute, commontyped):
|
||||||
pass
|
pass
|
||||||
class BinOpT(ast.BinOp, commontyped):
|
class BinOpT(ast.BinOp, commontyped):
|
||||||
|
|
|
@ -276,6 +276,15 @@ class ASTTypedRewriter(algorithm.Transformer):
|
||||||
dot_loc=node.dot_loc, attr_loc=node.attr_loc, loc=node.loc)
|
dot_loc=node.dot_loc, attr_loc=node.attr_loc, loc=node.loc)
|
||||||
return self.visit(node)
|
return self.visit(node)
|
||||||
|
|
||||||
|
def visit_Slice(self, node):
|
||||||
|
node = self.generic_visit(node)
|
||||||
|
node = asttyped.SliceT(type=types.TVar(),
|
||||||
|
lower=node.lower, upper=node.upper, step=node.step,
|
||||||
|
bound_colon_loc=node.bound_colon_loc,
|
||||||
|
step_colon_loc=node.step_colon_loc,
|
||||||
|
loc=node.loc)
|
||||||
|
return self.visit(node)
|
||||||
|
|
||||||
def visit_Subscript(self, node):
|
def visit_Subscript(self, node):
|
||||||
node = self.generic_visit(node)
|
node = self.generic_visit(node)
|
||||||
node = asttyped.SubscriptT(type=types.TVar(),
|
node = asttyped.SubscriptT(type=types.TVar(),
|
||||||
|
|
|
@ -119,10 +119,12 @@ class Inferencer(algorithm.Visitor):
|
||||||
self._unify(value.type, builtins.TInt(),
|
self._unify(value.type, builtins.TInt(),
|
||||||
value.loc, None)
|
value.loc, None)
|
||||||
|
|
||||||
def visit_Slice(self, node):
|
def visit_SliceT(self, node):
|
||||||
|
self._unify(node.type, builtins.TInt(),
|
||||||
|
node.loc, None)
|
||||||
for operand in (node.lower, node.upper, node.step):
|
for operand in (node.lower, node.upper, node.step):
|
||||||
if operand is not None:
|
if operand is not None:
|
||||||
self._unify(operand.type, builtins.TInt(),
|
self._unify(operand.type, node.type,
|
||||||
operand.loc, None)
|
operand.loc, None)
|
||||||
|
|
||||||
def visit_ExtSlice(self, node):
|
def visit_ExtSlice(self, node):
|
||||||
|
|
Loading…
Reference in New Issue