summaryrefslogtreecommitdiff
path: root/dice-lang/src/main/java/bjc/dicelang/BindingDiceExpression.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/main/java/bjc/dicelang/BindingDiceExpression.java')
-rw-r--r--dice-lang/src/main/java/bjc/dicelang/BindingDiceExpression.java28
1 files changed, 21 insertions, 7 deletions
diff --git a/dice-lang/src/main/java/bjc/dicelang/BindingDiceExpression.java b/dice-lang/src/main/java/bjc/dicelang/BindingDiceExpression.java
index 94dd761..1813e97 100644
--- a/dice-lang/src/main/java/bjc/dicelang/BindingDiceExpression.java
+++ b/dice-lang/src/main/java/bjc/dicelang/BindingDiceExpression.java
@@ -13,12 +13,12 @@ public class BindingDiceExpression implements IDiceExpression {
/**
* The expression being bound to a name
*/
- private IDiceExpression exp;
+ private IDiceExpression expression;
/**
* The name to bind the expression to
*/
- private String name;
+ private String variableName;
/**
* Create a new dice expression binder from two expressions and an
@@ -34,7 +34,15 @@ public class BindingDiceExpression implements IDiceExpression {
*/
public BindingDiceExpression(IDiceExpression left,
IDiceExpression right, Map<String, IDiceExpression> env) {
- this(((ReferenceDiceExpression) left).getName(), right, env);
+ if (!(left instanceof ReferenceDiceExpression)) {
+ throw new UnsupportedOperationException(
+ "Binding to non-references is unsupported."
+ + " Problematic expression is " + left);
+ } else {
+ String varName = ((ReferenceDiceExpression) left).getName();
+
+ initialize(varName, right, env);
+ }
}
/**
@@ -49,8 +57,13 @@ public class BindingDiceExpression implements IDiceExpression {
*/
public BindingDiceExpression(String name, IDiceExpression exp,
Map<String, IDiceExpression> env) {
- this.name = name;
- this.exp = exp;
+ initialize(name, exp, env);
+ }
+
+ private void initialize(String name, IDiceExpression exp,
+ Map<String, IDiceExpression> env) {
+ this.variableName = name;
+ this.expression = exp;
env.put(name, exp);
}
@@ -62,7 +75,7 @@ public class BindingDiceExpression implements IDiceExpression {
*/
@Override
public int roll() {
- return exp.roll();
+ return expression.roll();
}
/*
@@ -72,6 +85,7 @@ public class BindingDiceExpression implements IDiceExpression {
*/
@Override
public String toString() {
- return "assign[n=" + name + ", exp=" + exp.toString() + "]";
+ return "assign[n=" + variableName + ", exp="
+ + expression.toString() + "]";
}
}