Skip to content

Commit e6eb2e6

Browse files
committed
fix some visitors not working with records
1 parent 8df4442 commit e6eb2e6

8 files changed

+32
-7
lines changed

src/main/java/de/hhu/stups/codegenerator/MachineConstantsOptimizer.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -313,17 +313,17 @@ public Node visitStringNode(StringNode node, Void expected) {
313313

314314
@Override
315315
public Node visitRecordNode(RecordNode node, Void expected) {
316-
return node;
316+
return new RecordNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(expr, expected)).collect(Collectors.toList()));
317317
}
318318

319319
@Override
320320
public Node visitStructNode(StructNode node, Void expected) {
321-
return node;
321+
return new StructNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(expr, expected)).collect(Collectors.toList()));
322322
}
323323

324324
@Override
325325
public Node visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) {
326-
return node;
326+
return new RecordFieldAccessNode(node.getSourceCodePosition(), (ExprNode) visitExprNode(node.getRecord(), expected), node.getIdentifier());
327327
}
328328

329329
@Override

src/main/java/de/hhu/stups/codegenerator/MachineConstantsPreprocessor.java

+3
Original file line numberDiff line numberDiff line change
@@ -271,16 +271,19 @@ public Node visitStringNode(StringNode node, Void expected) {
271271

272272
@Override
273273
public Node visitRecordNode(RecordNode node, Void expected) {
274+
node.getExpressions().forEach(e -> visitExprNode(e, expected));
274275
return null;
275276
}
276277

277278
@Override
278279
public Node visitStructNode(StructNode node, Void expected) {
280+
node.getExpressions().forEach(e -> visitExprNode(e, expected));
279281
return null;
280282
}
281283

282284
@Override
283285
public Node visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) {
286+
visitExprNode(node.getRecord(), expected);
284287
return null;
285288
}
286289

src/main/java/de/hhu/stups/codegenerator/analyzers/IdentifierAnalyzer.java

+3
Original file line numberDiff line numberDiff line change
@@ -348,16 +348,19 @@ public Void visitChoiceSubstitutionNode(ChoiceSubstitutionNode node, Void expect
348348

349349
@Override
350350
public Void visitRecordNode(RecordNode node, Void expected) {
351+
node.getExpressions().forEach(expr -> visitExprNode(expr, expected));
351352
return null;
352353
}
353354

354355
@Override
355356
public Void visitStructNode(StructNode node, Void expected) {
357+
node.getExpressions().forEach(expr -> visitExprNode(expr, expected));
356358
return null;
357359
}
358360

359361
@Override
360362
public Void visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) {
363+
visitExprNode(node.getRecord(), expected);
361364
return null;
362365
}
363366

src/main/java/de/hhu/stups/codegenerator/analyzers/ParallelConstructAnalyzer.java

+7
Original file line numberDiff line numberDiff line change
@@ -433,8 +433,15 @@ public Void visitRecordNode(RecordNode node, Void expected) {
433433
return null;
434434
}
435435

436+
/*
437+
* When visiting a record node, local variables are added to ignored variables as they are not relevant for variables in a parallel substitution.
438+
*/
436439
@Override
437440
public Void visitStructNode(StructNode node, Void expected) {
441+
List<String> locals = node.getDeclarations().stream().map(DeclarationNode::getName).collect(Collectors.toList());
442+
ignoredVariables.addAll(locals);
443+
node.getExpressions().forEach(expr -> visitExprNode(expr, expected));
444+
ignoredVariables.removeAll(locals);
438445
return null;
439446
}
440447

src/main/java/de/hhu/stups/codegenerator/analyzers/PrimedIdentifierAnalyzer.java

+3
Original file line numberDiff line numberDiff line change
@@ -272,16 +272,19 @@ public Void visitChoiceSubstitutionNode(ChoiceSubstitutionNode node, Void expect
272272

273273
@Override
274274
public Void visitRecordNode(RecordNode node, Void expected) {
275+
node.getExpressions().forEach(expr -> visitExprNode(expr, expected));
275276
return null;
276277
}
277278

278279
@Override
279280
public Void visitStructNode(StructNode node, Void expected) {
281+
node.getExpressions().forEach(expr -> visitExprNode(expr, expected));
280282
return null;
281283
}
282284

283285
@Override
284286
public Void visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) {
287+
visitExprNode(node.getRecord(), expected);
285288
return null;
286289
}
287290

src/main/java/de/hhu/stups/codegenerator/generators/LambdaFunctionGenerator.java

+3
Original file line numberDiff line numberDiff line change
@@ -416,16 +416,19 @@ public Void visitChoiceSubstitutionNode(ChoiceSubstitutionNode node, Void expect
416416

417417
@Override
418418
public Void visitRecordNode(RecordNode node, Void expected) {
419+
node.getExpressions().forEach(expr -> visitExprNode(expr, expected));
419420
return null;
420421
}
421422

422423
@Override
423424
public Void visitStructNode(StructNode node, Void expected) {
425+
node.getExpressions().forEach(expr -> visitExprNode(expr, expected));
424426
return null;
425427
}
426428

427429
@Override
428430
public Void visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) {
431+
visitExprNode(node.getRecord(), expected);
429432
return null;
430433
}
431434

src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ public String visitRecordNode(RecordNode node, Void expected) {
739739

740740
@Override
741741
public String visitStructNode(StructNode node, Void expected) {
742-
return "";
742+
return expressionGenerator.visitExprNode(node);
743743
}
744744

745745
@Override

src/main/java/de/hhu/stups/codegenerator/generators/MachinePreprocessor.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -577,17 +577,23 @@ public Node visitStringNode(StringNode node, Void expected) {
577577

578578
@Override
579579
public Node visitRecordNode(RecordNode node, Void expected) {
580-
return node;
580+
RecordNode result = new RecordNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(node, expected)).collect(Collectors.toList()));
581+
result.setType(node.getType());
582+
return result;
581583
}
582584

583585
@Override
584586
public Node visitStructNode(StructNode node, Void expected) {
585-
return node;
587+
StructNode result = new StructNode(node.getSourceCodePosition(), node.getDeclarations(), node.getExpressions().stream().map(expr -> (ExprNode) visitExprNode(node, expected)).collect(Collectors.toList()));
588+
result.setType(node.getType());
589+
return result;
586590
}
587591

588592
@Override
589593
public Node visitRecordFieldAccessNode(RecordFieldAccessNode node, Void expected) {
590-
return node;
594+
RecordFieldAccessNode result = new RecordFieldAccessNode(node.getSourceCodePosition(), (ExprNode) visitExprNode(node.getRecord(), expected), node.getIdentifier());
595+
result.setType(node.getType());
596+
return result;
591597
}
592598

593599
@Override

0 commit comments

Comments
 (0)