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.
This commit is contained in:
2023-03-20 19:54:48 +01:00
parent 0594542167
commit 198bd74a47
2 changed files with 17 additions and 6 deletions

View File

@@ -355,12 +355,15 @@ public class ContextAnalysis extends KlangBaseVisitor<Node> {
}
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;