summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstudent <student@localhost>2018-04-04 16:35:02 -0400
committerstudent <student@localhost>2018-04-04 16:35:02 -0400
commit6144fc9e987f48617d02c73697b672e65d04e4cd (patch)
tree93b3573d8d103850d31d12781bcdc7a52550df66
parent43524b0742f195304829e5bd4dd12492f8ad1aa1 (diff)
Fix evaluator
-rw-r--r--base/src/bjc/dicelang/eval/Evaluator.java39
1 files changed, 28 insertions, 11 deletions
diff --git a/base/src/bjc/dicelang/eval/Evaluator.java b/base/src/bjc/dicelang/eval/Evaluator.java
index d93958f..351c6ec 100644
--- a/base/src/bjc/dicelang/eval/Evaluator.java
+++ b/base/src/bjc/dicelang/eval/Evaluator.java
@@ -393,12 +393,14 @@ public class Evaluator {
return new Tree<>(Node.FAIL(right));
}
} else if (left.type == INT) {
+ IntegerEvaluatorResult irs = (IntegerEvaluatorResult) left;
+
if (right.type == DICE && !((DiceEvaluatorResult) right).diceVal.isList()) {
Die rhs = ((ScalarDiceExpression) ((DiceEvaluatorResult) right).diceVal).scalar;
- res = new DiceEvaluatorResult(new SimpleDie(left.intVal, rhs));
+ res = new DiceEvaluatorResult(new SimpleDie(irs.value, rhs));
} else if (right.type == INT) {
- res = new DiceEvaluatorResult(new SimpleDie(left.intVal, right.intVal));
+ res = new DiceEvaluatorResult(new SimpleDie(irs.value, ((IntegerEvaluatorResult) right).value));
} else {
Errors.inst.printError(EK_EVAL_INVDGROUP, right.type.toString());
return new Tree<>(Node.FAIL(right));
@@ -481,7 +483,10 @@ public class Evaluator {
switch (op) {
case ADD: {
if (left.type == INT) {
- res = new EvaluatorResult(INT, left.intVal + right.intVal);
+ long lval = ((IntegerEvaluatorResult) left).value;
+ long rval = ((IntegerEvaluatorResult) right).value;
+
+ res = new IntegerEvaluatorResult(lval + rval);
} else if (left.type == DICE) {
if (((DiceEvaluatorResult) left).diceVal.isList()) {
Errors.inst.printError(EK_EVAL_INVDICE, left.toString());
@@ -504,7 +509,10 @@ public class Evaluator {
}
case SUBTRACT: {
if (left.type == INT) {
- res = new EvaluatorResult(INT, left.intVal - right.intVal);
+ long lval = ((IntegerEvaluatorResult) left).value;
+ long rval = ((IntegerEvaluatorResult) right).value;
+
+ res = new IntegerEvaluatorResult(lval - rval);
} else if (left.type == DICE) {
if (((DiceEvaluatorResult) left).diceVal.isList()) {
Errors.inst.printError(EK_EVAL_INVDICE, left.toString());
@@ -527,7 +535,10 @@ public class Evaluator {
}
case MULTIPLY: {
if (left.type == INT) {
- res = new EvaluatorResult(INT, left.intVal * right.intVal);
+ long lval = ((IntegerEvaluatorResult) left).value;
+ long rval = ((IntegerEvaluatorResult) right).value;
+
+ res = new IntegerEvaluatorResult(lval * rval);
} else if (left.type == DICE) {
if (((DiceEvaluatorResult) left).diceVal.isList()) {
Errors.inst.printError(EK_EVAL_INVDICE, left.toString());
@@ -550,11 +561,14 @@ public class Evaluator {
}
case DIVIDE: {
if (left.type == INT) {
- if (right.intVal == 0) {
+ long lval = ((IntegerEvaluatorResult) left).value;
+ long rval = ((IntegerEvaluatorResult) right).value;
+
+ if (rval == 0) {
Errors.inst.printError(EK_EVAL_DIVZERO);
res = new FailureEvaluatorResult(right);
} else {
- res = new EvaluatorResult(FLOAT, left.intVal / right.intVal);
+ res = new FloatEvaluatorResult(lval / rval);
}
} else if (left.type == FLOAT) {
if (((FloatEvaluatorResult) right).floatVal == 0) {
@@ -573,18 +587,21 @@ public class Evaluator {
}
case IDIVIDE: {
if (left.type == INT) {
- if (right.intVal == 0) {
+ long lval = ((IntegerEvaluatorResult) left).value;
+ long rval = ((IntegerEvaluatorResult) right).value;
+
+ if (rval == 0) {
Errors.inst.printError(EK_EVAL_DIVZERO);
res = new FailureEvaluatorResult(right);
} else {
- res = new EvaluatorResult(INT, (int) (left.intVal / right.intVal));
+ res = new IntegerEvaluatorResult((int) (lval / rval));
}
} else if (left.type == FLOAT) {
if (((FloatEvaluatorResult) right).floatVal == 0) {
Errors.inst.printError(EK_EVAL_DIVZERO);
res = new FailureEvaluatorResult(right);
} else {
- res = new EvaluatorResult(INT,
+ res = new IntegerEvaluatorResult(
(int) (((FloatEvaluatorResult) left).floatVal / ((FloatEvaluatorResult) right).floatVal));
}
} else {
@@ -621,7 +638,7 @@ public class Evaluator {
break;
default:
Errors.inst.printError(EK_EVAL_UNTOK, tk.type.toString());
-
+
res = new EvaluatorResult(FAILURE);
}