fix(checker): handle already defined predicates

This commit is contained in:
2026-07-10 11:20:39 +02:00
parent 3ede752cae
commit 4866ab2090

View File

@@ -207,6 +207,7 @@ class MidasTyper(m.Stmt.Visitor[None], m.Expr.Visitor[Type], m.Type.Visitor[Type
)
def visit_predicate_stmt(self, stmt: m.PredicateStmt) -> None:
name: str = stmt.name.lexeme
for spec in stmt.params:
for param in spec.mixed:
assert param.name is not None
@@ -228,14 +229,17 @@ class MidasTyper(m.Stmt.Visitor[None], m.Expr.Visitor[Type], m.Type.Visitor[Type
returns=type,
)
self._predicate_params = {}
try:
self.types.define_predicate(
stmt.name.lexeme,
name,
Predicate(
type=type,
body=stmt.body,
alias=len(params) == 0,
),
)
except ValueError:
self.reporter.error(stmt.location, f"Predicate {name} already defined")
def _is_valid_predicate(self, body: Type) -> bool:
"""Check whether the given type is valid as a predicate's body