From e6eb2e6dab3429be078339886e01009e215e414f Mon Sep 17 00:00:00 2001 From: Miles Vella <673-vella@users.noreply.gitlab.cs.uni-duesseldorf.de> Date: Mon, 10 Mar 2025 14:40:37 +0100 Subject: [PATCH] fix some visitors not working with records --- .../codegenerator/MachineConstantsOptimizer.java | 6 +++--- .../codegenerator/MachineConstantsPreprocessor.java | 3 +++ .../codegenerator/analyzers/IdentifierAnalyzer.java | 3 +++ .../analyzers/ParallelConstructAnalyzer.java | 7 +++++++ .../analyzers/PrimedIdentifierAnalyzer.java | 3 +++ .../generators/LambdaFunctionGenerator.java | 3 +++ .../codegenerator/generators/MachineGenerator.java | 2 +- .../generators/MachinePreprocessor.java | 12 +++++++++--- 8 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/hhu/stups/codegenerator/MachineConstantsOptimizer.java b/src/main/java/de/hhu/stups/codegenerator/MachineConstantsOptimizer.java index 50dcbb023..63ad6b25d 100644 --- a/src/main/java/de/hhu/stups/codegenerator/MachineConstantsOptimizer.java +++ b/src/main/java/de/hhu/stups/codegenerator/MachineConstantsOptimizer.java @@ -313,17 +313,17 @@ public class MachineConstantsOptimizer implements AbstractVisitor<Node, Void> { @Override public Node visitRecordNode(RecordNode node, Void expected) { - return node; + return new RecordNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(expr, expected)).collect(Collectors.toList())); } @Override public Node visitStructNode(StructNode node, Void expected) { - return node; + return new StructNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(expr, expected)).collect(Collectors.toList())); } @Override public Node visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) { - return node; + return new RecordFieldAccessNode(node.getSourceCodePosition(), (ExprNode) visitExprNode(node.getRecord(), expected), node.getIdentifier()); } @Override diff --git a/src/main/java/de/hhu/stups/codegenerator/MachineConstantsPreprocessor.java b/src/main/java/de/hhu/stups/codegenerator/MachineConstantsPreprocessor.java index 68d6799fc..692bfbf12 100644 --- a/src/main/java/de/hhu/stups/codegenerator/MachineConstantsPreprocessor.java +++ b/src/main/java/de/hhu/stups/codegenerator/MachineConstantsPreprocessor.java @@ -271,16 +271,19 @@ public class MachineConstantsPreprocessor implements AbstractVisitor<Node, Void> @Override public Node visitRecordNode(RecordNode node, Void expected) { + node.getExpressions().forEach(e -> visitExprNode(e, expected)); return null; } @Override public Node visitStructNode(StructNode node, Void expected) { + node.getExpressions().forEach(e -> visitExprNode(e, expected)); return null; } @Override public Node visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) { + visitExprNode(node.getRecord(), expected); return null; } diff --git a/src/main/java/de/hhu/stups/codegenerator/analyzers/IdentifierAnalyzer.java b/src/main/java/de/hhu/stups/codegenerator/analyzers/IdentifierAnalyzer.java index 4497f95a7..9443a5d03 100644 --- a/src/main/java/de/hhu/stups/codegenerator/analyzers/IdentifierAnalyzer.java +++ b/src/main/java/de/hhu/stups/codegenerator/analyzers/IdentifierAnalyzer.java @@ -348,16 +348,19 @@ public class IdentifierAnalyzer implements AbstractVisitor<Void, Void> { @Override public Void visitRecordNode(RecordNode node, Void expected) { + node.getExpressions().forEach(expr -> visitExprNode(expr, expected)); return null; } @Override public Void visitStructNode(StructNode node, Void expected) { + node.getExpressions().forEach(expr -> visitExprNode(expr, expected)); return null; } @Override public Void visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) { + visitExprNode(node.getRecord(), expected); return null; } diff --git a/src/main/java/de/hhu/stups/codegenerator/analyzers/ParallelConstructAnalyzer.java b/src/main/java/de/hhu/stups/codegenerator/analyzers/ParallelConstructAnalyzer.java index f69dd9b74..cc743f914 100644 --- a/src/main/java/de/hhu/stups/codegenerator/analyzers/ParallelConstructAnalyzer.java +++ b/src/main/java/de/hhu/stups/codegenerator/analyzers/ParallelConstructAnalyzer.java @@ -433,8 +433,15 @@ public class ParallelConstructAnalyzer implements AbstractVisitor<Void, Void> { return null; } + /* + * When visiting a record node, local variables are added to ignored variables as they are not relevant for variables in a parallel substitution. + */ @Override public Void visitStructNode(StructNode node, Void expected) { + List<String> locals = node.getDeclarations().stream().map(DeclarationNode::getName).collect(Collectors.toList()); + ignoredVariables.addAll(locals); + node.getExpressions().forEach(expr -> visitExprNode(expr, expected)); + ignoredVariables.removeAll(locals); return null; } diff --git a/src/main/java/de/hhu/stups/codegenerator/analyzers/PrimedIdentifierAnalyzer.java b/src/main/java/de/hhu/stups/codegenerator/analyzers/PrimedIdentifierAnalyzer.java index b6e27d7a2..1f60345cc 100644 --- a/src/main/java/de/hhu/stups/codegenerator/analyzers/PrimedIdentifierAnalyzer.java +++ b/src/main/java/de/hhu/stups/codegenerator/analyzers/PrimedIdentifierAnalyzer.java @@ -272,16 +272,19 @@ public class PrimedIdentifierAnalyzer implements AbstractVisitor<Void, Void> { @Override public Void visitRecordNode(RecordNode node, Void expected) { + node.getExpressions().forEach(expr -> visitExprNode(expr, expected)); return null; } @Override public Void visitStructNode(StructNode node, Void expected) { + node.getExpressions().forEach(expr -> visitExprNode(expr, expected)); return null; } @Override public Void visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) { + visitExprNode(node.getRecord(), expected); return null; } diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/LambdaFunctionGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/LambdaFunctionGenerator.java index 7ef64bfbb..2b3a05849 100644 --- a/src/main/java/de/hhu/stups/codegenerator/generators/LambdaFunctionGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/LambdaFunctionGenerator.java @@ -416,16 +416,19 @@ public class LambdaFunctionGenerator implements AbstractVisitor<Void, Void> { @Override public Void visitRecordNode(RecordNode node, Void expected) { + node.getExpressions().forEach(expr -> visitExprNode(expr, expected)); return null; } @Override public Void visitStructNode(StructNode node, Void expected) { + node.getExpressions().forEach(expr -> visitExprNode(expr, expected)); return null; } @Override public Void visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) { + visitExprNode(node.getRecord(), expected); return null; } diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java index 84cb6906c..e1ead492b 100755 --- a/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java @@ -739,7 +739,7 @@ public class MachineGenerator implements AbstractVisitor<String, Void> { @Override public String visitStructNode(StructNode node, Void expected) { - return ""; + return expressionGenerator.visitExprNode(node); } @Override diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/MachinePreprocessor.java b/src/main/java/de/hhu/stups/codegenerator/generators/MachinePreprocessor.java index 75107c093..4af3f1a47 100644 --- a/src/main/java/de/hhu/stups/codegenerator/generators/MachinePreprocessor.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/MachinePreprocessor.java @@ -577,17 +577,23 @@ public class MachinePreprocessor implements AbstractVisitor<Node, Void> { @Override public Node visitRecordNode(RecordNode node, Void expected) { - return node; + RecordNode result = new RecordNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(node, expected)).collect(Collectors.toList())); + result.setType(node.getType()); + return result; } @Override public Node visitStructNode(StructNode node, Void expected) { - return node; + StructNode result = new StructNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(node, expected)).collect(Collectors.toList())); + result.setType(node.getType()); + return result; } @Override public Node visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) { - return node; + RecordFieldAccessNode result = new RecordFieldAccessNode(node.getSourceCodePosition(), (ExprNode) visitExprNode(node.getRecord(), expected), node.getIdentifier()); + result.setType(node.getType()); + return result; } @Override -- GitLab