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