fix(checker): handle already defined types

This commit is contained in:
2026-07-10 11:19:06 +02:00
parent 244e5f351a
commit 3ede752cae
2 changed files with 15 additions and 3 deletions

View File

@@ -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)
else:
type = DerivedType(name=name, type=type)
self.types.define_type(name, type)
try:
self.types.define_type(name, type)
except ValueError:
self.reporter.error(stmt.location, f"Type {name} already defined")
self._local_variables.clear()
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
self._current_name = name
type: Type = stmt.type.accept(self)
self.types.define_type(name, type)
try:
self.types.define_type(name, type)
except ValueError:
self.reporter.error(stmt.location, f"Type {name} already defined")
self._current_name = None
def visit_member_stmt(self, stmt: m.MemberStmt) -> None: ...

View File

@@ -1111,7 +1111,13 @@ class PythonTyper(
else:
variance = Variance.CONTRAVARIANT
var: TypeVar = TypeVar(name=name, bound=bound, variance=variance)
self.types.define_type(name, var)
try:
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
case _: