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:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user