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
6 changes: 3 additions & 3 deletions sjsonnet/src/sjsonnet/stdlib/StdLibModule.scala
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ object StdLibModule {
*/
private val traceFunction = new Val.Builtin2("trace", "str", "rest") {
def evalRhs(str: Eval, rest: Eval, ev: EvalScope, pos: Position): Val = {
ev.trace(
s"TRACE: ${pos.fileScope.currentFileLastPathElement} " + str.value.asString
)
val file = pos.fileScope.currentFileLastPathElement
val line = ev.prettyIndex(pos).map { case (l, _) => ":" + l }.getOrElse("")
ev.trace(s"TRACE: $file$line " + str.value.asString)
rest.value
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
TRACE: comprehension_no_unsafe_hoist_trace.jsonnet comp-no-hoist 1
TRACE: comprehension_no_unsafe_hoist_trace.jsonnet comp-no-hoist 1
TRACE: comprehension_no_unsafe_hoist_trace.jsonnet:2 comp-no-hoist 1
TRACE: comprehension_no_unsafe_hoist_trace.jsonnet:2 comp-no-hoist 1
true
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
TRACE: lazy_array_reverse_cache_trace.jsonnet lazy-array-make-reverse-cache 0
TRACE: lazy_array_reverse_cache_trace.jsonnet lazy-array-map-reverse-cache 0
TRACE: lazy_array_reverse_cache_trace.jsonnet lazy-array-mapWithIndex-reverse-cache 0
TRACE: lazy_array_reverse_cache_trace.jsonnet:2 lazy-array-make-reverse-cache 0
TRACE: lazy_array_reverse_cache_trace.jsonnet:4 lazy-array-map-reverse-cache 0
TRACE: lazy_array_reverse_cache_trace.jsonnet:6 lazy-array-mapWithIndex-reverse-cache 0
true
22 changes: 11 additions & 11 deletions sjsonnet/test/resources/test_suite/trace.jsonnet.golden
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet
TRACE: trace.jsonnet Some Trace Message
TRACE: trace.jsonnet:17
TRACE: trace.jsonnet:18
TRACE: trace.jsonnet:19
TRACE: trace.jsonnet:20
TRACE: trace.jsonnet:21
TRACE: trace.jsonnet:22
TRACE: trace.jsonnet:23
TRACE: trace.jsonnet:24
TRACE: trace.jsonnet:25
TRACE: trace.jsonnet:26
TRACE: trace.jsonnet:27 Some Trace Message
true
6 changes: 3 additions & 3 deletions sjsonnet/test/src/sjsonnet/EvaluatorTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -623,23 +623,23 @@ object EvaluatorTests extends TestSuite {

val (used, usedTraces) = evalWithTraces("""std.trace("used trace", 1)""")
used ==> ujson.Num(1)
usedTraces ==> Vector("TRACE: (memory) used trace")
usedTraces ==> Vector("TRACE: (memory):1 used trace")
}
test("identityFunctionTraces") {
// Issue #815: the identity-elision fast paths must force the argument exactly as a normal
// call would — no dropped or duplicated side effects (traces).
// Direct identity elision: the traced argument is forced exactly once.
val (idVal, idTraces) = evalWithTraces("""(function(x) x)(std.trace("idtrace", 5))""")
idVal ==> ujson.Num(5)
idTraces ==> Vector("TRACE: (memory) idtrace")
idTraces ==> Vector("TRACE: (memory):1 idtrace")

// Self-composition identity (g = id): still forced exactly once.
val (compVal, compTraces) =
evalWithTraces(
"""local g = function(x) x; local f = function(x) g(g(x)); f(std.trace("comp", 9))"""
)
compVal ==> ujson.Num(9)
compTraces ==> Vector("TRACE: (memory) comp")
compTraces ==> Vector("TRACE: (memory):1 comp")

// Laziness preserved: identity map stays lazy, so std.length does not force the element.
val (lazyVal, lazyTraces) =
Expand Down
Loading