diff --git a/src/main/java/carpet/script/value/NullValue.java b/src/main/java/carpet/script/value/NullValue.java index 23bba606..8e813f8b 100644 --- a/src/main/java/carpet/script/value/NullValue.java +++ b/src/main/java/carpet/script/value/NullValue.java @@ -32,7 +32,7 @@ public class NullValue extends NumericValue // TODO check nonsingleton code { return new NullValue(); } - private NullValue() {super(0);} + protected NullValue() {super(0);} @Override public boolean equals(final Object o) diff --git a/src/main/java/carpet/script/value/UndefValue.java b/src/main/java/carpet/script/value/UndefValue.java new file mode 100644 index 00000000..89c35c97 --- /dev/null +++ b/src/main/java/carpet/script/value/UndefValue.java @@ -0,0 +1,140 @@ +package carpet.script.value; + +import carpet.script.exception.InternalExpressionException; +import com.google.gson.JsonElement; +import net.minecraft.nbt.Tag; + +public class UndefValue extends NullValue { + public static final UndefValue UNDEF = new UndefValue(); + + private RuntimeException getError() { + return new InternalExpressionException("variable "+boundVariable+" was used before initialization under 'strict' app config"); + } + + + @Override + public String getString() + { + throw getError(); + } + + @Override + public String getPrettyString() + { + return "undefined"; + } + + @Override + public boolean getBoolean() + { + throw getError(); + } + + @Override + public Value clone() + { + return new UndefValue(); + } + + @Override + public boolean equals(final Object o) + { + throw getError(); + } + + @Override + public Value slice(long fromDesc, Long toDesc) { + throw getError(); + } + + @Override + public NumericValue opposite() { + throw getError(); + } + + @Override + public int length() { + throw getError(); + } + + @Override + public int compareTo(Value o) + { + throw getError(); + } + + @Override + public Value in(Value value) { + throw getError(); + } + + @Override + public String getTypeString() + { + return "undef"; + } + + @Override + public int hashCode() + { + throw getError(); + } + + @Override + public Tag toTag(boolean force) + { + throw getError(); + } + + @Override + public Value split(Value delimiter) { + throw getError(); + } + + @Override + public JsonElement toJson() + { + throw getError(); + } + + @Override + public boolean isNull() { + throw getError(); + } + + @Override + public Value add(Value v) { + throw getError(); + } + + @Override + public Value subtract(Value v) + { + throw getError(); + } + + @Override + public Value multiply(Value v) + { + throw getError(); + } + + @Override + public Value divide(Value v) + { + throw getError(); + } + + @Override + public double readDoubleNumber() + { + throw getError(); + } + + @Override + public long readInteger() + { + throw getError(); + } + +} diff --git a/src/main/java/carpet/script/value/Value.java b/src/main/java/carpet/script/value/Value.java index f2919f47..c28edd07 100644 --- a/src/main/java/carpet/script/value/Value.java +++ b/src/main/java/carpet/script/value/Value.java @@ -21,6 +21,7 @@ public abstract class Value implements Comparable, Cloneable public static NumericValue ONE = new NumericValue(1); public static NullValue NULL = NullValue.NULL; + public static UndefValue UNDEF = UndefValue.UNDEF; public String boundVariable;