fix(checker): handle already defined types
This commit is contained in:
@@ -170,7 +170,10 @@ class MidasTyper(m.Stmt.Visitor[None], m.Expr.Visitor[Type], m.Type.Visitor[Type
|
|||||||
type = GenericType(name=name, params=params, body=type)
|
type = GenericType(name=name, params=params, body=type)
|
||||||
else:
|
else:
|
||||||
type = DerivedType(name=name, type=type)
|
type = DerivedType(name=name, type=type)
|
||||||
|
try:
|
||||||
self.types.define_type(name, type)
|
self.types.define_type(name, type)
|
||||||
|
except ValueError:
|
||||||
|
self.reporter.error(stmt.location, f"Type {name} already defined")
|
||||||
self._local_variables.clear()
|
self._local_variables.clear()
|
||||||
self._current_name = None
|
self._current_name = None
|
||||||
|
|
||||||
@@ -178,7 +181,10 @@ class MidasTyper(m.Stmt.Visitor[None], m.Expr.Visitor[Type], m.Type.Visitor[Type
|
|||||||
name: str = stmt.name.lexeme
|
name: str = stmt.name.lexeme
|
||||||
self._current_name = name
|
self._current_name = name
|
||||||
type: Type = stmt.type.accept(self)
|
type: Type = stmt.type.accept(self)
|
||||||
|
try:
|
||||||
self.types.define_type(name, type)
|
self.types.define_type(name, type)
|
||||||
|
except ValueError:
|
||||||
|
self.reporter.error(stmt.location, f"Type {name} already defined")
|
||||||
self._current_name = None
|
self._current_name = None
|
||||||
|
|
||||||
def visit_member_stmt(self, stmt: m.MemberStmt) -> None: ...
|
def visit_member_stmt(self, stmt: m.MemberStmt) -> None: ...
|
||||||
|
|||||||
@@ -1111,7 +1111,13 @@ class PythonTyper(
|
|||||||
else:
|
else:
|
||||||
variance = Variance.CONTRAVARIANT
|
variance = Variance.CONTRAVARIANT
|
||||||
var: TypeVar = TypeVar(name=name, bound=bound, variance=variance)
|
var: TypeVar = TypeVar(name=name, bound=bound, variance=variance)
|
||||||
|
try:
|
||||||
self.types.define_type(name, var)
|
self.types.define_type(name, var)
|
||||||
|
except ValueError:
|
||||||
|
self.reporter.error(
|
||||||
|
call.location,
|
||||||
|
f"A type or type variable with the name {name} is already defined",
|
||||||
|
)
|
||||||
return var
|
return var
|
||||||
|
|
||||||
case _:
|
case _:
|
||||||
|
|||||||
Reference in New Issue
Block a user