From 198bd74a47ab6cf7e1da2a5dba9fe62c45cc7508 Mon Sep 17 00:00:00 2001 From: nitrix Date: Mon, 20 Mar 2023 19:54:48 +0100 Subject: [PATCH] Enums: Make the EnumAccessExpression save a reference to the EnumValue it is referencing. This can be used during assembler generation to easily find the correct EnumValue for a given EnumAccessExpression. --- .../de/hsrm/compiler/Klang/ContextAnalysis.java | 13 ++++++++----- .../nodes/expressions/EnumAccessExpression.java | 10 +++++++++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/hsrm/compiler/Klang/ContextAnalysis.java b/src/main/java/de/hsrm/compiler/Klang/ContextAnalysis.java index b3c62fe..f752bce 100644 --- a/src/main/java/de/hsrm/compiler/Klang/ContextAnalysis.java +++ b/src/main/java/de/hsrm/compiler/Klang/ContextAnalysis.java @@ -355,12 +355,15 @@ public class ContextAnalysis extends KlangBaseVisitor { } var enumValueName = path.get(0); - if (Arrays.stream(enumDef.enums).noneMatch(e -> e.value.equals(enumValueName))) { - var error = "Unknown enum value " + enumValueName + " of enum " + enumDef.name + "."; - throw new RuntimeException(Helper.getErrorPrefix(line, col) + error); - } + var enumValue = Arrays.stream(enumDef.enums) + .filter(e -> e.value.equals(enumValueName)) + .findFirst() + .orElseThrow(() -> { + var error = "Unknown enum value " + enumValueName + " of enum " + enumDef.name + "."; + throw new RuntimeException(Helper.getErrorPrefix(line, col) + error); + }); - var enumAccessExpression = new EnumAccessExpression(baseName, enumValueName); + var enumAccessExpression = new EnumAccessExpression(baseName, enumValueName, enumValue); enumAccessExpression.type = enumDef.type; enumAccessExpression.line = line; enumAccessExpression.col = col; diff --git a/src/main/java/de/hsrm/compiler/Klang/nodes/expressions/EnumAccessExpression.java b/src/main/java/de/hsrm/compiler/Klang/nodes/expressions/EnumAccessExpression.java index 476f9a5..d46c715 100644 --- a/src/main/java/de/hsrm/compiler/Klang/nodes/expressions/EnumAccessExpression.java +++ b/src/main/java/de/hsrm/compiler/Klang/nodes/expressions/EnumAccessExpression.java @@ -1,14 +1,22 @@ package de.hsrm.compiler.Klang.nodes.expressions; +import de.hsrm.compiler.Klang.nodes.EnumDefinition; +import de.hsrm.compiler.Klang.nodes.EnumValue; import de.hsrm.compiler.Klang.visitors.Visitor; public class EnumAccessExpression extends Expression { public String enumName; public String enumValueName; + public EnumValue enumValue; - public EnumAccessExpression(String enumName, String enumValueName) { + public EnumAccessExpression( + String enumName, + String enumValueName, + EnumValue enumValue + ) { this.enumName = enumName; this.enumValueName = enumValueName; + this.enumValue = enumValue; } @Override