feat(checker): type check slice expressions
This commit is contained in:
@@ -29,6 +29,7 @@ def define_builtins(reg: TypesRegistry):
|
|||||||
int = reg.define_type("int", BaseType(name="int"))
|
int = reg.define_type("int", BaseType(name="int"))
|
||||||
float = reg.define_type("float", BaseType(name="float"))
|
float = reg.define_type("float", BaseType(name="float"))
|
||||||
str = reg.define_type("str", BaseType(name="str"))
|
str = reg.define_type("str", BaseType(name="str"))
|
||||||
|
slice = reg.define_type("slice", BaseType(name="slice"))
|
||||||
|
|
||||||
list = reg.define_type(
|
list = reg.define_type(
|
||||||
"list",
|
"list",
|
||||||
|
|||||||
@@ -507,6 +507,9 @@ class PythonTyper(
|
|||||||
expr.location, operation, [(expr.index, index)], {}
|
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:
|
def visit_base_type(self, node: p.BaseType) -> Type:
|
||||||
base: Type
|
base: Type
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -200,3 +200,11 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]):
|
|||||||
def visit_subscript_expr(self, expr: p.SubscriptExpr) -> None:
|
def visit_subscript_expr(self, expr: p.SubscriptExpr) -> None:
|
||||||
self.resolve(expr.object)
|
self.resolve(expr.object)
|
||||||
self.resolve(expr.index)
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user