Fix initialization after declaration

This commit is contained in:
SirYwell 2025-05-07 17:28:30 +02:00
parent 1f402f5b9f
commit 86bb376062
No known key found for this signature in database

View file

@ -45,8 +45,15 @@ class VariableStatusAnalysis implements NoOpVisitor<Namespace<VariableStatusAnal
} }
} }
private static void checkUndeclared(NameTree name, @Nullable VariableStatus status) {
if (status != null) {
throw new SemanticException("Variable " + name + " is already declared");
}
}
@Override @Override
public Unit visit(DeclarationTree declarationTree, Namespace<VariableStatus> data) { public Unit visit(DeclarationTree declarationTree, Namespace<VariableStatus> data) {
checkUndeclared(declarationTree.name(), data.get(declarationTree.name()));
VariableStatus status = declarationTree.initializer() == null VariableStatus status = declarationTree.initializer() == null
? VariableStatus.DECLARED ? VariableStatus.DECLARED
: VariableStatus.INITIALIZED; : VariableStatus.INITIALIZED;