Skip to content

Commit aeb6b9a

Browse files
Revert "chore: add some static optimization (#294)" (#344)
This partially reverts commit 60db9d0. This is causing performance regressions
1 parent f35070f commit aeb6b9a

2 files changed

Lines changed: 0 additions & 60 deletions

File tree

sjsonnet/src/sjsonnet/StaticOptimizer.scala

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,9 @@ class StaticOptimizer(
4040

4141
case BinaryOp(pos, lhs, BinaryOp.OP_in, ValidSuper(_, selfIdx)) =>
4242
InSuper(pos, lhs, selfIdx)
43-
case BinaryOp(pos, Val.Str(_, key), BinaryOp.OP_in, obj: Val.Obj) if obj.staticSafe =>
44-
Val.bool(pos, obj.containsKey(key))
4543
case b2 @ BinaryOp(pos, lhs: Val.Str, BinaryOp.OP_%, rhs) =>
4644
try ApplyBuiltin1(pos, new Format.PartialApplyFmt(lhs.value), rhs, tailstrict = false)
4745
catch { case _: Exception => b2 }
48-
//optimize booleans
4946
case Or(_, Val.False(_), rhs) => transform(rhs)
5047
case Or(pos, Val.True(_), _) => Val.True(pos)
5148
case Or(pos, _, Val.True(_)) => Val.True(pos)
@@ -55,61 +52,6 @@ class StaticOptimizer(
5552
case UnaryOp(pos, UnaryOp.OP_!, Val.True(_)) => Val.False(pos)
5653
case UnaryOp(pos, UnaryOp.OP_!, Val.False(_)) => Val.True(pos)
5754
case UnaryOp(_, UnaryOp.OP_!, UnaryOp(_, UnaryOp.OP_!, expr)) => expr
58-
//optimize for numbers
59-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_+, Val.Num(_, r)) => Val.Num(pos, l + r)
60-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_-, Val.Num(_, r)) => Val.Num(pos, l - r)
61-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_*, Val.Num(_, r)) => Val.Num(pos, l * r)
62-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_/, Val.Num(_, r)) if r != 0 => Val.Num(pos, l / r)
63-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_%, Val.Num(_, r)) if r != 0 => Val.Num(pos, l % r)
64-
case UnaryOp(pos, UnaryOp.OP_+, Val.Num(_, v)) => Val.Num(pos, v)
65-
case UnaryOp(pos, UnaryOp.OP_-, Val.Num(_, v)) => Val.Num(pos, -v)
66-
case UnaryOp(pos, UnaryOp.OP_~, Val.Num(_, v)) => Val.Num(pos, ~v.toLong)
67-
//optimize for bitwise
68-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_&, Val.Num(_, r)) =>
69-
Val.Num(pos, l.toLong & r.toLong)
70-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_^, Val.Num(_, r)) =>
71-
Val.Num(pos, l.toLong ^ r.toLong)
72-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_|, Val.Num(_, r)) =>
73-
Val.Num(pos, l.toLong | r.toLong)
74-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_<<, Val.Num(_, r)) if r.isValidInt =>
75-
Val.Num(pos, l.toLong << r.toInt)
76-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_>>, Val.Num(_, r)) if r.isValidInt =>
77-
Val.Num(pos, l.toLong >> r.toInt)
78-
//optimize for strings
79-
case BinaryOp(pos, Val.Str(_, l), BinaryOp.OP_+, Val.Str(_, r)) => Val.Str(pos, l + r)
80-
//optimize for comparing
81-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_==, Val.Num(_, r)) => Val.bool(pos, l == r)
82-
case BinaryOp(pos, Val.Str(_, l), BinaryOp.OP_==, Val.Str(_, r)) => Val.bool(pos, l == r)
83-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_!=, Val.Num(_, r)) => Val.bool(pos, l != r)
84-
case BinaryOp(pos, Val.Str(_, l), BinaryOp.OP_!=, Val.Str(_, r)) => Val.bool(pos, l != r)
85-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_<, Val.Num(_, r)) => Val.bool(pos, l < r)
86-
case BinaryOp(pos, Val.Str(_, l), BinaryOp.OP_<, Val.Str(_, r)) => Val.bool(pos, l < r)
87-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_>, Val.Num(_, r)) => Val.bool(pos, l > r)
88-
case BinaryOp(pos, Val.Str(_, l), BinaryOp.OP_>, Val.Str(_, r)) => Val.bool(pos, l > r)
89-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_<=, Val.Num(_, r)) => Val.bool(pos, l <= r)
90-
case BinaryOp(pos, Val.Str(_, l), BinaryOp.OP_<=, Val.Str(_, r)) => Val.bool(pos, l <= r)
91-
case BinaryOp(pos, Val.Num(_, l), BinaryOp.OP_>=, Val.Num(_, r)) => Val.bool(pos, l >= r)
92-
case BinaryOp(pos, Val.Str(_, l), BinaryOp.OP_>=, Val.Str(_, r)) => Val.bool(pos, l >= r)
93-
//optimize for if else
94-
case IfElse(_, Val.True(_), thenExpr, _) => transform(thenExpr)
95-
case IfElse(pos, Val.False(_), _, elseExpr) => `elseExpr` match {
96-
case null => Val.Null(pos)
97-
case _ => transform(elseExpr)
98-
}
99-
//optimize for obj
100-
case b3@BinaryOp(_, lhs: Val.Obj, BinaryOp.OP_+, rhs: Val.Obj) if lhs.staticSafe && rhs.staticSafe =>
101-
if (lhs.allKeyNames.isEmpty) {
102-
rhs
103-
} else if (rhs.allKeyNames.isEmpty) {
104-
lhs
105-
} else b3
106-
//optimize for arr
107-
case b4@BinaryOp(pos, lhs: Val.Arr, BinaryOp.OP_+, rhs: Val.Arr) =>
108-
if (lhs.length == 0) {
109-
new Val.Arr(pos, rhs.asLazyArray)
110-
} else if (rhs.length == 0) {
111-
new Val.Arr(pos, lhs.asLazyArray)
112-
} else b4
11355

11456
case e @ Id(pos, name) =>
11557
scope.get(name) match {

sjsonnet/src/sjsonnet/Val.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,6 @@ object Val{
409409
f(k, v)
410410
}
411411
}
412-
413-
def staticSafe:Boolean = static
414412
}
415413

416414
final class StaticObjectFieldSet(protected val keys: Array[String]) {

0 commit comments

Comments
 (0)