diff --git a/midas/checker/midas.py b/midas/checker/midas.py index 4ec4f73..452f9c1 100644 --- a/midas/checker/midas.py +++ b/midas/checker/midas.py @@ -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: ... diff --git a/midas/checker/python.py b/midas/checker/python.py index 361f99c..2e1a08b 100644 --- a/midas/checker/python.py +++ b/midas/checker/python.py @@ -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 _: