diff options
Diffstat (limited to 'Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations')
10 files changed, 248 insertions, 0 deletions
diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Addition.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Addition.java new file mode 100644 index 0000000..3060883 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Addition.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.DecimalValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Addition extends Expression { + private Expression a, b; + + public Addition (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public DecimalValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof DecimalValue) || !(bval instanceof DecimalValue)) { + throw new RuntimeException("Not Implemented"); + } + return new DecimalValue ((((DecimalValue) aval).getValue(vars, program)).add(((DecimalValue) bval).getValue(vars, program))); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitAnd.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitAnd.java new file mode 100644 index 0000000..e52571f --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitAnd.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class BitAnd extends Expression { + private Expression a, b; + + public BitAnd (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public IntValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof IntValue) || !(bval instanceof IntValue)) { + throw new RuntimeException("Not Implemented"); + } + return new IntValue ((((IntValue) aval).intValue(vars, program)).add(((IntValue) bval).intValue(vars, program))); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitOr.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitOr.java new file mode 100644 index 0000000..6ec203c --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitOr.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class BitOr extends Expression { + private Expression a, b; + + public BitOr (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public IntValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof IntValue) || !(bval instanceof IntValue)) { + throw new RuntimeException("Not Implemented"); + } + return new IntValue ((((IntValue) aval).intValue(vars, program)).or(((IntValue) bval).intValue(vars, program))); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitXOr.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitXOr.java new file mode 100644 index 0000000..d761b23 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/BitXOr.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class BitXOr extends Expression { + private Expression a, b; + + public BitXOr (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public IntValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof IntValue) || !(bval instanceof IntValue)) { + throw new RuntimeException("Not Implemented"); + } + return new IntValue ((((IntValue) aval).intValue(vars, program)).xor(((IntValue) bval).intValue(vars, program))); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Division.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Division.java new file mode 100644 index 0000000..7c92bd9 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Division.java @@ -0,0 +1,24 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.DecimalValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Division extends Expression { + private Expression a, b; + + public Division (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public DecimalValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof DecimalValue) || !(bval instanceof DecimalValue)) { + throw new RuntimeException("Not Implemented"); + } + return new DecimalValue ((((DecimalValue) aval).getValue(vars, program)).divide(((DecimalValue) bval).getValue(vars, program))); + } +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Modulo.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Modulo.java new file mode 100644 index 0000000..641e7a4 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Modulo.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Modulo extends Expression { + private Expression a, b; + + public Modulo (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public IntValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof IntValue) || !(bval instanceof IntValue)) { + throw new RuntimeException("Not Implemented"); + } + return new IntValue ((((IntValue) aval).intValue(vars, program)).mod(((IntValue) bval).intValue(vars, program))); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Multiplication.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Multiplication.java new file mode 100644 index 0000000..05d3287 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Multiplication.java @@ -0,0 +1,24 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.DecimalValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Multiplication extends Expression { + private Expression a, b; + + public Multiplication (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public DecimalValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof DecimalValue) || !(bval instanceof DecimalValue)) { + throw new RuntimeException("Not Implemented"); + } + return new DecimalValue ((((DecimalValue) aval).getValue(vars, program)).multiply(((DecimalValue) bval).getValue(vars, program))); + } +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftLeft.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftLeft.java new file mode 100644 index 0000000..e544189 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftLeft.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class ShiftLeft extends Expression { + private Expression a, b; + + public ShiftLeft (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public IntValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof IntValue) || !(bval instanceof IntValue)) { + throw new RuntimeException("Not Implemented"); + } + return new IntValue ((((IntValue) aval).intValue(vars, program)).shiftLeft(((IntValue) bval).intValue(vars, program).intValue())); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftRight.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftRight.java new file mode 100644 index 0000000..688dc91 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/ShiftRight.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.IntValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class ShiftRight extends Expression { + private Expression a, b; + + public ShiftRight (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public IntValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof IntValue) || !(bval instanceof IntValue)) { + throw new RuntimeException("Not Implemented"); + } + return new IntValue ((((IntValue) aval).intValue(vars, program)).shiftRight(((IntValue) bval).intValue(vars, program).intValue())); + } + +} diff --git a/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Subtraction.java b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Subtraction.java new file mode 100644 index 0000000..2d2d694 --- /dev/null +++ b/Shenanigans/src/org/archphantom/shenanigans/elements/expressions/operations/Subtraction.java @@ -0,0 +1,25 @@ +package org.archphantom.shenanigans.elements.expressions.operations; +import org.archphantom.shenanigans.elements.Program; +import org.archphantom.shenanigans.elements.expressions.Expression; +import org.archphantom.shenanigans.elements.values.DecimalValue; +import org.archphantom.shenanigans.elements.values.Value; +import org.archphantom.shenanigans.elements.variables.VarTable; + +public class Subtraction extends Expression { + private Expression a, b; + + public Subtraction (Expression a, Expression b) { + this.a = a; + this.b = b; + } + + public DecimalValue evaluate (VarTable vars, Program program) { + Value aval = a.evaluate(vars, program); + Value bval = b.evaluate(vars, program); + if (!(aval instanceof DecimalValue) || !(bval instanceof DecimalValue)) { + throw new RuntimeException("Not Implemented"); + } + return new DecimalValue ((((DecimalValue) aval).getValue(vars, program)).subtract(((DecimalValue) bval).getValue(vars, program))); + } + +} |
