diff --git a/midas/checker/builtins.py b/midas/checker/builtins.py index 961545a..b1adf6d 100644 --- a/midas/checker/builtins.py +++ b/midas/checker/builtins.py @@ -29,6 +29,7 @@ def define_builtins(reg: TypesRegistry): int = reg.define_type("int", BaseType(name="int")) float = reg.define_type("float", BaseType(name="float")) str = reg.define_type("str", BaseType(name="str")) + slice = reg.define_type("slice", BaseType(name="slice")) list = reg.define_type( "list", diff --git a/midas/checker/python.py b/midas/checker/python.py index 9ce9399..f28ce77 100644 --- a/midas/checker/python.py +++ b/midas/checker/python.py @@ -507,6 +507,9 @@ class PythonTyper( expr.location, operation, [(expr.index, index)], {} ) + def visit_slice_expr(self, expr: p.SliceExpr) -> Type: + return self.types.get_type("slice") + def visit_base_type(self, node: p.BaseType) -> Type: base: Type try: diff --git a/midas/checker/resolver.py b/midas/checker/resolver.py index 636ccfe..12f18cf 100644 --- a/midas/checker/resolver.py +++ b/midas/checker/resolver.py @@ -200,3 +200,11 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]): def visit_subscript_expr(self, expr: p.SubscriptExpr) -> None: self.resolve(expr.object) self.resolve(expr.index) + + def visit_slice_expr(self, expr: p.SliceExpr) -> None: + if expr.lower is not None: + self.resolve(expr.lower) + if expr.upper is not None: + self.resolve(expr.upper) + if expr.step is not None: + self.resolve(expr.step)