From 837b7018b91763f564bb5fae4a8042f049bc70f6 Mon Sep 17 00:00:00 2001 From: SirYwell Date: Sat, 10 May 2025 07:14:37 +0200 Subject: [PATCH] Special-case compound assignment analysis --- .../vads/compiler/semantic/VariableStatusAnalysis.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/kit/kastel/vads/compiler/semantic/VariableStatusAnalysis.java b/src/main/java/edu/kit/kastel/vads/compiler/semantic/VariableStatusAnalysis.java index 556d6d1..ea90736 100644 --- a/src/main/java/edu/kit/kastel/vads/compiler/semantic/VariableStatusAnalysis.java +++ b/src/main/java/edu/kit/kastel/vads/compiler/semantic/VariableStatusAnalysis.java @@ -1,5 +1,6 @@ package edu.kit.kastel.vads.compiler.semantic; +import edu.kit.kastel.vads.compiler.lexer.Operator; import edu.kit.kastel.vads.compiler.parser.ast.AssignmentTree; import edu.kit.kastel.vads.compiler.parser.ast.DeclarationTree; import edu.kit.kastel.vads.compiler.parser.ast.IdentExpressionTree; @@ -23,7 +24,11 @@ class VariableStatusAnalysis implements NoOpVisitor { VariableStatus status = data.get(name); - checkDeclared(name, status); + if (assignmentTree.operator().type() == Operator.OperatorType.ASSIGN) { + checkDeclared(name, status); + } else { + checkInitialized(name, status); + } if (status != VariableStatus.INITIALIZED) { // only update when needed, reassignment is totally fine updateStatus(data, VariableStatus.INITIALIZED, name);