add bool literal
This commit is contained in:
@@ -23,6 +23,11 @@ public class EvalVisitor implements Visitor<Value> {
|
||||
return new Value(e.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visit(BooleanExpression e) {
|
||||
return new Value(e.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visit(EqualityExpression e) {
|
||||
Value lhs = e.lhs.welcome(this);
|
||||
|
||||
@@ -78,6 +78,12 @@ public class GenASM implements Visitor<Void> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(BooleanExpression e) {
|
||||
this.ex.write(" movq $" + (e.value ? 1 : 0) + ", %rax\n");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(Variable e) {
|
||||
this.ex.write(" movq " + this.env.get(e.name) + "(%rbp), %rax\n");
|
||||
@@ -324,7 +330,7 @@ public class GenASM implements Visitor<Void> {
|
||||
this.ex.write(" jnz .L" + lblStart + "\n");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Void visit(ForLoop e) {
|
||||
int lblStart = ++lCount;
|
||||
@@ -338,7 +344,7 @@ public class GenASM implements Visitor<Void> {
|
||||
e.step.welcome(this);
|
||||
this.ex.write(" jmp .L" + lblStart + "\n");
|
||||
this.ex.write(".L" + lblEnd + ":\n");
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -453,7 +459,7 @@ public class GenASM implements Visitor<Void> {
|
||||
this.ex.write("\n");
|
||||
}
|
||||
this.ex.write(".globl " + mainName + "\n");
|
||||
this.ex.write(".type " +mainName + ", @function\n");
|
||||
this.ex.write(".type " + mainName + ", @function\n");
|
||||
this.ex.write(mainName + ":\n");
|
||||
this.ex.write(" pushq %rbp\n");
|
||||
this.ex.write(" movq %rsp, %rbp\n");
|
||||
|
||||
@@ -22,6 +22,11 @@ class GetVars implements Visitor<Void> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(BooleanExpression e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(Variable e) {
|
||||
return null;
|
||||
|
||||
@@ -72,6 +72,12 @@ public class PrettyPrintVisitor implements Visitor<Void> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(BooleanExpression e) {
|
||||
ex.write(e.value);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visit(EqualityExpression e) {
|
||||
ex.write("(");
|
||||
|
||||
@@ -9,6 +9,7 @@ import de.hsrm.compiler.Klang.nodes.statements.*;
|
||||
|
||||
public interface Visitor<R> {
|
||||
R visit(IntegerExpression e);
|
||||
R visit(BooleanExpression e);
|
||||
R visit(Variable e);
|
||||
R visit(AdditionExpression e);
|
||||
R visit(EqualityExpression e);
|
||||
|
||||
Reference in New Issue
Block a user