Archived
Simplify code generation using overridden AST methods.
This commit is contained in:
+10
@@ -30,4 +30,14 @@ public class CharacterExpression extends Expression {
|
||||
}
|
||||
|
||||
public final CharacterLiteral CL;
|
||||
|
||||
@Override
|
||||
public boolean isLiteral() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getValue() {
|
||||
return CL.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -28,6 +28,14 @@ public abstract class Expression extends AbstractSyntaxTree {
|
||||
|
||||
public TypeDenoter type;
|
||||
|
||||
public boolean isLiteral() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public abstract <TArg, TResult> TResult visit(ExpressionVisitor<TArg, TResult> visitor, TArg arg);
|
||||
|
||||
public <TArg, TResult> TResult visit(ExpressionVisitor<TArg, TResult> visitor) {
|
||||
|
||||
+10
@@ -30,4 +30,14 @@ public class IntegerExpression extends Expression {
|
||||
}
|
||||
|
||||
public final IntegerLiteral IL;
|
||||
|
||||
@Override
|
||||
public boolean isLiteral() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getValue() {
|
||||
return IL.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,4 +31,9 @@ public class AnyTypeDenoter extends TypeDenoter {
|
||||
public boolean equals(Object obj) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -41,6 +41,11 @@ public class ArrayTypeDenoter extends TypeDenoter {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return IL.getValue() * T.getSize();
|
||||
}
|
||||
|
||||
public final IntegerLiteral IL;
|
||||
public TypeDenoter T;
|
||||
|
||||
+6
@@ -14,6 +14,7 @@
|
||||
|
||||
package triangle.abstractSyntaxTrees.types;
|
||||
|
||||
import triangle.abstractMachine.Machine;
|
||||
import triangle.abstractSyntaxTrees.visitors.TypeDenoterVisitor;
|
||||
import triangle.syntacticAnalyzer.SourcePosition;
|
||||
|
||||
@@ -26,6 +27,11 @@ public class BoolTypeDenoter extends TypeDenoter {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> v, TArg arg) {
|
||||
return v.visitBoolTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return Machine.booleanSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
+6
@@ -14,6 +14,7 @@
|
||||
|
||||
package triangle.abstractSyntaxTrees.types;
|
||||
|
||||
import triangle.abstractMachine.Machine;
|
||||
import triangle.abstractSyntaxTrees.visitors.TypeDenoterVisitor;
|
||||
import triangle.syntacticAnalyzer.SourcePosition;
|
||||
|
||||
@@ -26,6 +27,11 @@ public class CharTypeDenoter extends TypeDenoter {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> v, TArg arg) {
|
||||
return v.visitCharTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return Machine.characterSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
+5
@@ -27,6 +27,11 @@ public class ErrorTypeDenoter extends TypeDenoter {
|
||||
return v.visitErrorTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return true;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
package triangle.abstractSyntaxTrees.types;
|
||||
|
||||
import triangle.abstractMachine.Machine;
|
||||
import triangle.abstractSyntaxTrees.visitors.TypeDenoterVisitor;
|
||||
import triangle.syntacticAnalyzer.SourcePosition;
|
||||
|
||||
@@ -26,6 +27,11 @@ public class IntTypeDenoter extends TypeDenoter {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> v, TArg arg) {
|
||||
return v.visitIntTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return Machine.integerSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
+5
@@ -31,6 +31,11 @@ public class MultipleFieldTypeDenoter extends FieldTypeDenoter {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> v, TArg arg) {
|
||||
return v.visitMultipleFieldTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return T.getSize() + FT.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
+5
@@ -27,6 +27,11 @@ public class RecordTypeDenoter extends TypeDenoter {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> v, TArg arg) {
|
||||
return v.visitRecordTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return FT.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
+5
@@ -28,6 +28,11 @@ public class SimpleTypeDenoter extends TypeDenoter {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> v, TArg arg) {
|
||||
return v.visitSimpleTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
+5
@@ -29,6 +29,11 @@ public class SingleFieldTypeDenoter extends FieldTypeDenoter {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> v, TArg arg) {
|
||||
return v.visitSingleFieldTypeDenoter(this, arg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return T.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
@@ -32,4 +32,6 @@ public abstract class TypeDenoter extends AbstractSyntaxTree {
|
||||
public <TArg, TResult> TResult visit(TypeDenoterVisitor<TArg, TResult> visitor) {
|
||||
return visit(visitor, null);
|
||||
}
|
||||
|
||||
public abstract int getSize();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user