Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,14 @@ public Object function(final Object a, final Object b) {
}

// NB: Unknown function type.
return null;
throw new UnsupportedOperationException("function " + a + " was not found");
}

// -- dot --

@Override
public Object dot(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("dot");
}

// -- groups --
Expand All @@ -142,12 +142,12 @@ public Object braces(final Object... args) {

@Override
public Object transpose(final Object a) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("transpose");
}

@Override
public Object dotTranspose(final Object a) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("dotTranspose");
}

@Override
Expand All @@ -156,15 +156,15 @@ public Object pow(final Object a, final Object b) {
if (isD(av) && isD(bv)) return pow(d(av), d(bv));
if (isBI(av) && isI(bv)) return pow(bi(av), i(bv));
if (isBD(av) && isI(bv)) return pow(bd(av), i(bv));
return null;
return throwUnsupportedTypes("pow", av, bv);
}
public double pow(final double av, final double bv) { return Math.pow(av, bv); }
public BigInteger pow(final BigInteger av, final int bv) { return av.pow(bv); }
public BigDecimal pow(final BigDecimal av, final int bv) { return av.pow(bv); }

@Override
public Object dotPow(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("dotPow");
}

// -- unary --
Expand Down Expand Up @@ -206,7 +206,7 @@ public Object complement(final Object a) {
final Object av = value(a);
if (isI(av)) return complement(i(av));
if (isL(av)) return complement(l(av));
return null;
return throwUnsupportedTypes("complement", av);
}
public int complement(final int a) { return ~a; }
public long complement(final long a) { return ~a; }
Expand All @@ -226,7 +226,7 @@ public Object mul(final Object a, final Object b) {
if (isD(av) && isD(bv)) return mul(d(av), d(bv));
if (isBI(av) && isBI(bv)) return mul(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return mul(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("mul", av, bv);
}
public int mul(final int av, final int bv) { return av * bv; }
public long mul(final long av, final long bv) { return av * bv; }
Expand All @@ -248,7 +248,7 @@ public Object div(final Object a, final Object b) {
if (isD(av) && isD(bv)) return div(d(av), d(bv));
if (isBI(av) && isBI(bv)) return div(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return div(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("div", av, bv);
}
public int div(final int av, final int bv) { return av / bv; }
public long div(final long av, final long bv) { return av / bv; }
Expand All @@ -270,7 +270,7 @@ public Object mod(final Object a, final Object b) {
if (isD(av) && isD(bv)) return mod(d(av), d(bv));
if (isBI(av) && isBI(bv)) return mod(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return mod(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("mod", av, bv);
}
public int mod(final int av, final int bv) { return av % bv; }
public long mod(final long av, final long bv) { return av % bv; }
Expand All @@ -285,22 +285,22 @@ public BigDecimal mod(final BigDecimal av, final BigDecimal bv) {

@Override
public Object rightDiv(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("rightDiv");
}

@Override
public Object dotMul(Object a, Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("dotMul");
}

@Override
public Object dotDiv(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("dotDiv");
}

@Override
public Object dotRightDiv(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("dotRightDiv");
}

// -- additive --
Expand All @@ -315,7 +315,7 @@ public Object add(final Object a, final Object b) {
if (isD(av) && isD(bv)) return add(d(av), d(bv));
if (isBI(av) && isBI(bv)) return add(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return add(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("add", av, bv);
}
public String add(final String av, final String bv) { return av + bv; }
public int add(final int av, final int bv) { return av + bv; }
Expand All @@ -338,7 +338,7 @@ public Object sub(final Object a, final Object b) {
if (isD(av) && isD(bv)) return sub(d(av), d(bv));
if (isBI(av) && isBI(bv)) return sub(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return sub(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("sub", av, bv);
}
public int sub(final int av, final int bv) { return av - bv; }
public long sub(final long av, final long bv) { return av - bv; }
Expand All @@ -359,7 +359,7 @@ public Object leftShift(final Object a, final Object b) {
if (isI(av) && isI(bv)) return leftShift(i(av), i(bv));
if (isL(av) && isL(bv)) return leftShift(l(av), l(bv));
if (isBI(av) && isI(bv)) return leftShift(bi(av), i(bv));
return null;
return throwUnsupportedTypes("leftShift", av, bv);
}
public int leftShift(final int av, final int bv) { return av << bv; }
public long leftShift(final long av, final long bv) { return av << bv; }
Expand All @@ -373,7 +373,7 @@ public Object rightShift(final Object a, final Object b) {
if (isI(av) && isI(bv)) return rightShift(i(av), i(bv));
if (isL(av) && isL(bv)) return rightShift(l(av), l(bv));
if (isBI(av) && isI(bv)) return rightShift(bi(av), i(bv));
return null;
return throwUnsupportedTypes("rightShift", av, bv);
}
public int rightShift(final int av, final int bv) { return av >> bv; }
public long rightShift(final long av, final long bv) { return av >> bv; }
Expand All @@ -386,7 +386,7 @@ public Object unsignedRightShift(final Object a, final Object b) {
final Object av = value(a), bv = value(b);
if (isI(av) && isI(bv)) return unsignedRightShift(i(av), i(bv));
if (isL(av) && isL(bv)) return unsignedRightShift(l(av), l(bv));
return null;
return throwUnsupportedTypes("unsignedRightShift", av, bv);
}
public int unsignedRightShift(final int av, final int bv) { return av >>> bv; }
public long unsignedRightShift(final long av, final long bv) { return av >>> bv; }
Expand All @@ -404,7 +404,7 @@ public Object lessThan(final Object a, final Object b) {
if (isD(av) && isD(bv)) return lessThan(d(av), d(bv));
if (isBI(av) && isBI(bv)) return lessThan(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return lessThan(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("lessThan", av, bv);
}
public <T> boolean lessThan(final Comparable<T> av, final T bv) {
return av.compareTo(bv) < 0;
Expand All @@ -421,7 +421,7 @@ public Object greaterThan(final Object a, final Object b) {
if (isD(av) && isD(bv)) return greaterThan(d(av), d(bv));
if (isBI(av) && isBI(bv)) return greaterThan(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return greaterThan(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("greaterThan", av, bv);
}
public <T> boolean greaterThan(final Comparable<T> av, final T bv) {
return av.compareTo(bv) > 0;
Expand All @@ -438,7 +438,7 @@ public Object lessThanOrEqual(final Object a, final Object b) {
if (isD(av) && isD(bv)) return lessThanOrEqual(d(av), d(bv));
if (isBI(av) && isBI(bv)) return lessThanOrEqual(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return lessThanOrEqual(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("lessThanOrEqual", av, bv);
}
public <T> boolean lessThanOrEqual(final Comparable<T> av, final T bv) {
return av.compareTo(bv) <= 0;
Expand All @@ -455,15 +455,15 @@ public Object greaterThanOrEqual(final Object a, final Object b) {
if (isD(av) && isD(bv)) return greaterThanOrEqual(d(av), d(bv));
if (isBI(av) && isBI(bv)) return greaterThanOrEqual(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return greaterThanOrEqual(bd(av), bd(bv));
return null;
return throwUnsupportedTypes("greaterThanOrEqual", av, bv);
}
public <T> boolean greaterThanOrEqual(final Comparable<T> av, final T bv) {
return av.compareTo(bv) >= 0;
}

@Override
public Object instanceOf(final Object av, final Object bv) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("instanceOf");
}

// -- equality --
Expand All @@ -486,7 +486,7 @@ public Object bitwiseAnd(final Object a, final Object b) {
if (isI(av) && isI(bv)) return bitwiseAnd(i(av), i(bv));
if (isL(av) && isL(bv)) return bitwiseAnd(l(av), l(bv));
if (isBI(av) && isBI(bv)) return bitwiseAnd(bi(av), bi(bv));
return null;
return throwUnsupportedTypes("bitwiseAnd", av, bv);
}
public int bitwiseAnd(final int av, final int bv) { return av & bv; }
public long bitwiseAnd(final long av, final long bv) { return av & bv; }
Expand All @@ -500,7 +500,7 @@ public Object bitwiseOr(final Object a, final Object b) {
if (isI(av) && isI(bv)) return bitwiseOr(i(av), i(bv));
if (isL(av) && isL(bv)) return bitwiseOr(l(av), l(bv));
if (isBI(av) && isBI(bv)) return bitwiseOr(bi(av), bi(bv));
return null;
return throwUnsupportedTypes("bitwiseOr", av, bv);
}
public int bitwiseOr(final int av, final int bv) { return av | bv; }
public long bitwiseOr(final long av, final long bv) { return av | bv; }
Expand All @@ -514,28 +514,28 @@ public BigInteger bitwiseOr(final BigInteger av, final BigInteger bv) {
public Object logicalAnd(final Object a, final Object b) {
final Object av = value(a), bv = value(b);
if (isBool(av) && isBool(bv)) return logicalAnd(bool(av), bool(bv));
return null;
return throwUnsupportedTypes("logicalAnd", av, bv);
}
public boolean logicalAnd(final boolean av, final boolean bv) { return av && bv; }

@Override
public Object logicalOr(final Object a, final Object b) {
final Object av = value(a), bv = value(b);
if (isBool(av) && isBool(bv)) return logicalOr(bool(av), bool(bv));
return null;
return throwUnsupportedTypes("logicalOr", av, bv);
}
public boolean logicalOr(final boolean av, final boolean bv) { return av || bv; }

// -- ternary --

@Override
public Object question(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("question");
}

@Override
public Object colon(Object a, Object b) {
throw new UnsupportedOperationException();
return throwUnimplementedOp("colon");
}

// -- Helper methods - type matching --
Expand Down Expand Up @@ -628,4 +628,23 @@ private Object callFunction(final String name, final Object b) {
return null;
}

// -- Helper methods - exception formatting --

private Object throwUnimplementedOp(final String op) {
throw new UnsupportedOperationException("Operation " + op + " is not implemented");
}

private Object throwUnsupportedTypes(String op, Object a) {
throw new UnsupportedOperationException("Invalid parameter type for unary operation " + op + ": " + typeAndValue(a));
}

private Object throwUnsupportedTypes(String op, Object a, Object
b) {
throw new UnsupportedOperationException("Invalid parameter types for binary operation " + op + ": A = " + typeAndValue(a) + ", B = " + typeAndValue(b));
}

private String typeAndValue(Object o) {
return o == null ? "<null>" : o.getClass().getSimpleName() + " [" + o + "]";
}

}
Loading
Loading