From 37a464d2bc7ea3f166b878c27121c191c8d655c9 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Sun, 14 Jun 2026 16:58:20 +0200 Subject: [PATCH] feat(checker): type check slice expressions --- midas/checker/builtins.py | 1 + midas/checker/python.py | 3 +++ midas/checker/resolver.py | 8 ++++++++ 3 files changed, 12 insertions(+) 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)