WIP: Add enum support

This commit is contained in:
2023-03-15 15:55:41 +01:00
parent 7c40a50196
commit 7af815042b
28 changed files with 436 additions and 255 deletions

View File

@@ -4,12 +4,7 @@ import java.util.HashMap;
import java.util.Map;
import de.hsrm.compiler.Klang.Value;
import de.hsrm.compiler.Klang.nodes.Block;
import de.hsrm.compiler.Klang.nodes.FunctionDefinition;
import de.hsrm.compiler.Klang.nodes.Parameter;
import de.hsrm.compiler.Klang.nodes.Program;
import de.hsrm.compiler.Klang.nodes.StructDefinition;
import de.hsrm.compiler.Klang.nodes.StructField;
import de.hsrm.compiler.Klang.nodes.*;
import de.hsrm.compiler.Klang.nodes.expressions.*;
import de.hsrm.compiler.Klang.nodes.loops.DoWhileLoop;
import de.hsrm.compiler.Klang.nodes.loops.ForLoop;
@@ -471,6 +466,11 @@ public class EvalVisitor implements Visitor<Value> {
return null;
}
@Override
public Value visit(EnumDefinition e) {
return null;
}
@Override
public Value visit(StructDefinition e) {
// We get these from a previous visitor

View File

@@ -1,11 +1,5 @@
package de.hsrm.compiler.Klang.visitors;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import de.hsrm.compiler.Klang.asm.ASM;
import de.hsrm.compiler.Klang.helper.Helper;
import de.hsrm.compiler.Klang.nodes.*;
@@ -16,6 +10,8 @@ import de.hsrm.compiler.Klang.nodes.loops.WhileLoop;
import de.hsrm.compiler.Klang.nodes.statements.*;
import de.hsrm.compiler.Klang.types.Type;
import java.util.*;
public class GenASM implements Visitor<Void> {
private class FloatWriter {
private StringBuilder sb = new StringBuilder();
@@ -778,6 +774,11 @@ public class GenASM implements Visitor<Void> {
return null;
}
@Override
public Void visit(EnumDefinition e) {
return null;
}
@Override
public Void visit(StructDefinition e) {
// We get these from a previous visitor

View File

@@ -234,6 +234,11 @@ class GetVars implements Visitor<Void> {
return null;
}
@Override
public Void visit(EnumDefinition e) {
return null;
}
@Override
public Void visit(StructDefinition e) {
return null;

View File

@@ -68,6 +68,12 @@ public class PrettyPrintVisitor implements Visitor<Void> {
ex.nl();
}
for (var enumDef: e.enums.values()) {
enumDef.welcome(this);
ex.nl();
ex.nl();
}
e.expression.welcome(this);
ex.write(";");
return null;
@@ -377,6 +383,22 @@ public class PrettyPrintVisitor implements Visitor<Void> {
return null;
}
@Override
public Void visit(EnumDefinition e) {
ex.write("enum " + e.name + " { ");
var first = true;
for(var enumName: e.enums) {
if (!first) {
ex.write(", ");
} else {
first = false;
}
ex.write(enumName);
}
ex.write(" }");
return null;
}
@Override
public Void visit(StructDefinition e) {
ex.write("struct " + e.name + " {");

View File

@@ -1,11 +1,6 @@
package de.hsrm.compiler.Klang.visitors;
import de.hsrm.compiler.Klang.nodes.Block;
import de.hsrm.compiler.Klang.nodes.FunctionDefinition;
import de.hsrm.compiler.Klang.nodes.Parameter;
import de.hsrm.compiler.Klang.nodes.Program;
import de.hsrm.compiler.Klang.nodes.StructDefinition;
import de.hsrm.compiler.Klang.nodes.StructField;
import de.hsrm.compiler.Klang.nodes.*;
import de.hsrm.compiler.Klang.nodes.expressions.*;
import de.hsrm.compiler.Klang.nodes.loops.*;
import de.hsrm.compiler.Klang.nodes.statements.*;
@@ -42,6 +37,7 @@ public interface Visitor<R> {
R visit(FunctionCall e);
R visit(Program e);
R visit(Parameter e);
R visit(EnumDefinition e);
R visit(StructDefinition e);
R visit(StructField e);
R visit(StructFieldAccessExpression e);