Skip to content

Commit 4d27d54

Browse files
authored
chore: Change _tag to a function to reduce allocation. (#503)
Motivation: Using a `def` and `byte` to reduce allocation, as Cats-Effect does
1 parent ad21317 commit 4d27d54

File tree

3 files changed

+44
-44
lines changed

3 files changed

+44
-44
lines changed

sjsonnet/src/sjsonnet/Evaluator.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ class NewEvaluator(
907907
extends Evaluator(r, e, w, s, wa) {
908908

909909
override def visitExpr(e: Expr)(implicit scope: ValScope): Val = try {
910-
(e._tag: @switch) match {
910+
(e.tag: @switch) match {
911911
case ExprTags.ValidId => visitValidId(e.asInstanceOf[ValidId])
912912
case ExprTags.BinaryOp => visitBinaryOp(e.asInstanceOf[BinaryOp])
913913
case ExprTags.Select => visitSelect(e.asInstanceOf[Select])
@@ -955,7 +955,7 @@ class NewEvaluator(
955955
Error.withStackFrame(e)
956956
}
957957
// This is only needed for --no-static-errors, otherwise these expression types do not make it past the optimizer
958-
override def visitInvalid(e: Expr): Nothing = (e._tag: @switch) match {
958+
override def visitInvalid(e: Expr): Nothing = (e.tag: @switch) match {
959959
case ExprTags.Id =>
960960
val id = e.asInstanceOf[Id]
961961
Error.fail("Unknown variable: " + id.name, id.pos)

sjsonnet/src/sjsonnet/Expr.scala

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import java.util
1212
*/
1313
trait Expr {
1414
def pos: Position
15-
private[sjsonnet] val _tag: Int = ExprTags.UNTAGGED
15+
private[sjsonnet] def tag: Byte = ExprTags.UNTAGGED
1616

1717
/** The name of this expression type to be shown in error messages */
1818
def exprErrorString: String = {
@@ -28,26 +28,26 @@ object Expr {
2828
}
2929

3030
final case class Self(pos: Position) extends Expr {
31-
final override private[sjsonnet] val _tag = ExprTags.Self
31+
final override private[sjsonnet] def tag = ExprTags.Self
3232
}
3333
final case class Super(pos: Position) extends Expr {
34-
final override private[sjsonnet] val _tag = ExprTags.Super
34+
final override private[sjsonnet] def tag = ExprTags.Super
3535
}
3636
final case class $(pos: Position) extends Expr {
37-
final override private[sjsonnet] val _tag = ExprTags.`$`
37+
final override private[sjsonnet] def tag = ExprTags.`$`
3838
}
3939

4040
final case class Id(pos: Position, name: String) extends Expr {
41-
final override private[sjsonnet] val _tag = ExprTags.Id
41+
final override private[sjsonnet] def tag = ExprTags.Id
4242
override def exprErrorString: String = s"${super.exprErrorString} $name"
4343
}
4444

4545
final case class ValidId(pos: Position, name: String, nameIdx: Int) extends Expr {
46-
final override private[sjsonnet] val _tag = ExprTags.ValidId
46+
final override private[sjsonnet] def tag = ExprTags.ValidId
4747
override def exprErrorString: String = s"${super.exprErrorString} $name"
4848
}
4949
final case class Arr(pos: Position, value: Array[Expr]) extends Expr {
50-
final override private[sjsonnet] val _tag = ExprTags.Arr
50+
final override private[sjsonnet] def tag = ExprTags.Arr
5151
override def toString: String = s"Arr($pos, ${arrStr(value)})"
5252
}
5353

@@ -88,7 +88,7 @@ object Expr {
8888
}
8989

9090
final case class UnaryOp(pos: Position, op: Int, value: Expr) extends Expr {
91-
final override private[sjsonnet] val _tag = ExprTags.UnaryOp
91+
final override private[sjsonnet] def tag = ExprTags.UnaryOp
9292
override def exprErrorString: String = s"${super.exprErrorString} ${UnaryOp.name(op)}"
9393
}
9494
object UnaryOp {
@@ -100,13 +100,13 @@ object Expr {
100100
def name(op: Int): String = names.getOrElse(op, "<unknown>")
101101
}
102102
final case class And(pos: Position, lhs: Expr, rhs: Expr) extends Expr {
103-
final override private[sjsonnet] val _tag = ExprTags.And
103+
final override private[sjsonnet] def tag = ExprTags.And
104104
}
105105
final case class Or(pos: Position, lhs: Expr, rhs: Expr) extends Expr {
106-
final override private[sjsonnet] val _tag = ExprTags.Or
106+
final override private[sjsonnet] def tag = ExprTags.Or
107107
}
108108
final case class BinaryOp(pos: Position, lhs: Expr, op: Int, rhs: Expr) extends Expr {
109-
final override private[sjsonnet] val _tag = ExprTags.BinaryOp
109+
final override private[sjsonnet] def tag = ExprTags.BinaryOp
110110
override def exprErrorString: String = s"${super.exprErrorString} ${BinaryOp.name(op)}"
111111
}
112112
object BinaryOp {
@@ -154,10 +154,10 @@ object Expr {
154154
}
155155
final case class AssertExpr(pos: Position, asserted: Member.AssertStmt, returned: Expr)
156156
extends Expr {
157-
final override private[sjsonnet] val _tag = ExprTags.AssertExpr
157+
final override private[sjsonnet] def tag = ExprTags.AssertExpr
158158
}
159159
final case class LocalExpr(pos: Position, bindings: Array[Bind], returned: Expr) extends Expr {
160-
final override private[sjsonnet] val _tag = ExprTags.LocalExpr
160+
final override private[sjsonnet] def tag = ExprTags.LocalExpr
161161
override def toString: String = s"LocalExpr($pos, ${arrStr(bindings)}, $returned)"
162162
override def equals(o: Any): Boolean = o match {
163163
case o: LocalExpr =>
@@ -171,16 +171,16 @@ object Expr {
171171

172172
final case class Bind(pos: Position, name: String, args: Params, rhs: Expr) extends Member
173173
final case class Import(pos: Position, value: String) extends Expr {
174-
final override private[sjsonnet] val _tag = ExprTags.Import
174+
final override private[sjsonnet] def tag = ExprTags.Import
175175
}
176176
final case class ImportStr(pos: Position, value: String) extends Expr {
177-
final override private[sjsonnet] val _tag = ExprTags.ImportStr
177+
final override private[sjsonnet] def tag = ExprTags.ImportStr
178178
}
179179
final case class ImportBin(pos: Position, value: String) extends Expr {
180-
final override private[sjsonnet] val _tag = ExprTags.ImportBin
180+
final override private[sjsonnet] def tag = ExprTags.ImportBin
181181
}
182182
final case class Error(pos: Position, value: Expr) extends Expr {
183-
final override private[sjsonnet] val _tag = ExprTags.Error
183+
final override private[sjsonnet] def tag = ExprTags.Error
184184
}
185185
final case class Apply(
186186
pos: Position,
@@ -189,17 +189,17 @@ object Expr {
189189
namedNames: Array[String],
190190
tailstrict: Boolean)
191191
extends Expr {
192-
final override private[sjsonnet] val _tag = ExprTags.Apply
192+
final override private[sjsonnet] def tag = ExprTags.Apply
193193
}
194194
final case class Apply0(pos: Position, value: Expr, tailstrict: Boolean) extends Expr {
195-
final override private[sjsonnet] val _tag = ExprTags.Apply0
195+
final override private[sjsonnet] def tag = ExprTags.Apply0
196196
}
197197
final case class Apply1(pos: Position, value: Expr, a1: Expr, tailstrict: Boolean) extends Expr {
198-
final override private[sjsonnet] val _tag = ExprTags.Apply1
198+
final override private[sjsonnet] def tag = ExprTags.Apply1
199199
}
200200
final case class Apply2(pos: Position, value: Expr, a1: Expr, a2: Expr, tailstrict: Boolean)
201201
extends Expr {
202-
final override private[sjsonnet] val _tag = ExprTags.Apply2
202+
final override private[sjsonnet] def tag = ExprTags.Apply2
203203
}
204204
final case class Apply3(
205205
pos: Position,
@@ -209,25 +209,25 @@ object Expr {
209209
a3: Expr,
210210
tailstrict: Boolean)
211211
extends Expr {
212-
final override private[sjsonnet] val _tag = ExprTags.Apply3
212+
final override private[sjsonnet] def tag = ExprTags.Apply3
213213
}
214214
final case class ApplyBuiltin(
215215
pos: Position,
216216
func: Val.Builtin,
217217
argExprs: Array[Expr],
218218
tailstrict: Boolean)
219219
extends Expr {
220-
final override private[sjsonnet] val _tag = ExprTags.ApplyBuiltin
220+
final override private[sjsonnet] def tag = ExprTags.ApplyBuiltin
221221
override def exprErrorString: String = s"std.${func.functionName}"
222222
}
223223
final case class ApplyBuiltin0(pos: Position, func: Val.Builtin0, tailstrict: Boolean)
224224
extends Expr {
225-
final override private[sjsonnet] val _tag = ExprTags.ApplyBuiltin0
225+
final override private[sjsonnet] def tag = ExprTags.ApplyBuiltin0
226226
override def exprErrorString: String = s"std.${func.functionName}"
227227
}
228228
final case class ApplyBuiltin1(pos: Position, func: Val.Builtin1, a1: Expr, tailstrict: Boolean)
229229
extends Expr {
230-
final override private[sjsonnet] val _tag = ExprTags.ApplyBuiltin1
230+
final override private[sjsonnet] def tag = ExprTags.ApplyBuiltin1
231231
override def exprErrorString: String = s"std.${func.functionName}"
232232
}
233233
final case class ApplyBuiltin2(
@@ -237,7 +237,7 @@ object Expr {
237237
a2: Expr,
238238
tailstrict: Boolean)
239239
extends Expr {
240-
final override private[sjsonnet] val _tag = ExprTags.ApplyBuiltin2
240+
final override private[sjsonnet] def tag = ExprTags.ApplyBuiltin2
241241
override def exprErrorString: String = s"std.${func.functionName}"
242242
}
243243
final case class ApplyBuiltin3(
@@ -248,7 +248,7 @@ object Expr {
248248
a3: Expr,
249249
tailstrict: Boolean)
250250
extends Expr {
251-
final override private[sjsonnet] val _tag = ExprTags.ApplyBuiltin3
251+
final override private[sjsonnet] def tag = ExprTags.ApplyBuiltin3
252252
override def exprErrorString: String = s"std.${func.functionName}"
253253
}
254254
final case class ApplyBuiltin4(
@@ -260,25 +260,25 @@ object Expr {
260260
a4: Expr,
261261
tailstrict: Boolean)
262262
extends Expr {
263-
override private[sjsonnet] val _tag = ExprTags.ApplyBuiltin4
263+
override private[sjsonnet] def tag = ExprTags.ApplyBuiltin4
264264
override def exprErrorString: String = s"std.${func.functionName}"
265265
}
266266
final case class Select(pos: Position, value: Expr, name: String) extends Expr {
267-
final override private[sjsonnet] val _tag = ExprTags.Select
267+
final override private[sjsonnet] def tag = ExprTags.Select
268268
override def exprErrorString: String = s"${super.exprErrorString} $name"
269269
}
270270
final case class SelectSuper(pos: Position, selfIdx: Int, name: String) extends Expr {
271-
final override private[sjsonnet] val _tag = ExprTags.SelectSuper
271+
final override private[sjsonnet] def tag = ExprTags.SelectSuper
272272
override def exprErrorString: String = s"${super.exprErrorString} $name"
273273
}
274274
final case class InSuper(pos: Position, value: Expr, selfIdx: Int) extends Expr {
275-
final override private[sjsonnet] val _tag = ExprTags.InSuper
275+
final override private[sjsonnet] def tag = ExprTags.InSuper
276276
}
277277
final case class Lookup(pos: Position, value: Expr, index: Expr) extends Expr {
278-
final override private[sjsonnet] val _tag = ExprTags.Lookup
278+
final override private[sjsonnet] def tag = ExprTags.Lookup
279279
}
280280
final case class LookupSuper(pos: Position, selfIdx: Int, index: Expr) extends Expr {
281-
final override private[sjsonnet] val _tag = ExprTags.LookupSuper
281+
final override private[sjsonnet] def tag = ExprTags.LookupSuper
282282
}
283283
final case class Slice(
284284
pos: Position,
@@ -287,13 +287,13 @@ object Expr {
287287
end: Option[Expr],
288288
stride: Option[Expr])
289289
extends Expr {
290-
final override private[sjsonnet] val _tag = ExprTags.Slice
290+
final override private[sjsonnet] def tag = ExprTags.Slice
291291
}
292292
final case class Function(pos: Position, params: Params, body: Expr) extends Expr {
293-
final override private[sjsonnet] val _tag = ExprTags.Function
293+
final override private[sjsonnet] def tag = ExprTags.Function
294294
}
295295
final case class IfElse(pos: Position, cond: Expr, `then`: Expr, `else`: Expr) extends Expr {
296-
final override private[sjsonnet] val _tag = ExprTags.IfElse
296+
final override private[sjsonnet] def tag = ExprTags.IfElse
297297
}
298298

299299
sealed trait CompSpec extends Expr
@@ -302,10 +302,10 @@ object Expr {
302302

303303
final case class Comp(pos: Position, value: Expr, first: ForSpec, rest: Array[CompSpec])
304304
extends Expr {
305-
final override private[sjsonnet] val _tag = ExprTags.Comp
305+
final override private[sjsonnet] def tag = ExprTags.Comp
306306
}
307307
final case class ObjExtend(pos: Position, base: Expr, ext: ObjBody) extends Expr {
308-
final override private[sjsonnet] val _tag = ExprTags.ObjExtend
308+
final override private[sjsonnet] def tag = ExprTags.ObjExtend
309309
}
310310

311311
trait ObjBody extends Expr
@@ -316,7 +316,7 @@ object Expr {
316316
fields: Array[Member.Field],
317317
asserts: Array[Member.AssertStmt])
318318
extends ObjBody {
319-
final override private[sjsonnet] val _tag = ExprTags.`ObjBody.MemberList`
319+
final override private[sjsonnet] def tag = ExprTags.`ObjBody.MemberList`
320320
override def toString: String =
321321
s"MemberList($pos, ${arrStr(binds)}, ${arrStr(fields)}, ${arrStr(asserts)})"
322322
}
@@ -330,7 +330,7 @@ object Expr {
330330
first: ForSpec,
331331
rest: List[CompSpec])
332332
extends ObjBody {
333-
final override private[sjsonnet] val _tag = ExprTags.`ObjBody.ObjComp`
333+
final override private[sjsonnet] def tag = ExprTags.`ObjBody.ObjComp`
334334
override def toString: String =
335335
s"ObjComp($pos, ${arrStr(preLocals)}, $key, $value, ${arrStr(postLocals)}, $first, $rest)"
336336
}

sjsonnet/src/sjsonnet/Val.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ object Val {
8787
private val DOUBLE_MIN_SAFE_INTEGER = -((1L << 53) - 1)
8888

8989
abstract class Literal extends Val with Expr {
90-
final override private[sjsonnet] val _tag = ExprTags.`Val.Literal`
90+
final override private[sjsonnet] def tag = ExprTags.`Val.Literal`
9191
}
9292
abstract class Bool extends Literal {
9393
override def asBoolean: Boolean = this.isInstanceOf[True]
@@ -517,7 +517,7 @@ object Val {
517517
abstract class Func(val pos: Position, val defSiteValScope: ValScope, val params: Params)
518518
extends Val
519519
with Expr {
520-
final override private[sjsonnet] val _tag = ExprTags.`Val.Func`
520+
final override private[sjsonnet] def tag = ExprTags.`Val.Func`
521521

522522
def evalRhs(scope: ValScope, ev: EvalScope, fs: FileScope, pos: Position): Val
523523

0 commit comments

Comments
 (0)