feature/add-enum-support #1

Merged
nitrix merged 16 commits from feature/add-enum-support into master 2023-03-20 21:19:54 +01:00
2 changed files with 17 additions and 6 deletions
Showing only changes of commit 198bd74a47 - Show all commits

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 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;

View File

@@ -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