diff --git a/sjsonnet/src/sjsonnet/ArrayOps.scala b/sjsonnet/src/sjsonnet/ArrayOps.scala deleted file mode 100644 index ae4533e7..00000000 --- a/sjsonnet/src/sjsonnet/ArrayOps.scala +++ /dev/null @@ -1,24 +0,0 @@ -package sjsonnet - -import scala.collection.mutable -import scala.reflect.ClassTag - -/** Array operations which are missing in Scala 2.12 */ -object ArrayOps { - def distinctBy[A <: AnyRef : ClassTag, B](xs: Array[A])(f: A => B): Array[A] = { - val seen = new mutable.HashSet[B] - val b = new mutable.ArrayBuilder.ofRef[A]() - var i = 0 - while(i < xs.length) { - val x = xs(i) - if(seen.add(f(x))) b.+=(x) - i += 1 - } - b.result() - } - - def sortInPlaceBy[A <: AnyRef, B](xs: Array[A])(f: A => B)(implicit ord: Ordering[B]): xs.type = { - java.util.Arrays.sort(xs, 0, xs.length, ord on f) - xs - } -} diff --git a/sjsonnet/src/sjsonnet/StaticOptimizer.scala b/sjsonnet/src/sjsonnet/StaticOptimizer.scala index 694ef7fb..e90803f0 100644 --- a/sjsonnet/src/sjsonnet/StaticOptimizer.scala +++ b/sjsonnet/src/sjsonnet/StaticOptimizer.scala @@ -44,6 +44,7 @@ class StaticOptimizer( scope.get(name) match { case ScopedVal(v: Val with Expr, _, _) => v case ScopedVal(_, _, idx) => ValidId(pos, name, idx) + case null if name == "$std" => std case null if name == "std" => std case _ => failOrWarn("Unknown variable: "+name, e) } diff --git a/sjsonnet/src/sjsonnet/Std.scala b/sjsonnet/src/sjsonnet/Std.scala index caa3fb84..99749ec3 100644 --- a/sjsonnet/src/sjsonnet/Std.scala +++ b/sjsonnet/src/sjsonnet/Std.scala @@ -1503,6 +1503,9 @@ class Std(private val additionalNativeFunctions: Map[String, Val.Builtin] = Map. builtin("trim", "str") { (_, _, str: String) => trailingWhiteSpacePattern.matcher(leadingWhiteSpacePattern.matcher(str).replaceAll("")).replaceAll("") }, + builtin("equals", "a", "b") { (_, ev, a: Val, b: Val) => + ev.equal(a, b) + }, builtin("equalsIgnoreCase", "str1", "str2") { (_, _, str1: String, str2: String) => str1.equalsIgnoreCase(str2) },