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-jvm-native/sjsonnet/SjsonnetMain.scala
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ object SjsonnetMain {

var currentPos: Position = null
val interp = new Interpreter(
extBinding,
tlaBinding,
queryExtVar = extBinding.get(_),
queryTlaVar = extBinding.get(_),
OsPath(wd),
importer = importer match{
case Some(i) => new Importer {
Expand All @@ -217,7 +217,7 @@ object SjsonnetMain {
strictSetOperations = config.strictSetOperations.value,
throwErrorForInvalidSets = config.throwErrorForInvalidSets.value,
),
storePos = if (config.yamlDebug.value) currentPos = _ else null,
storePos = (position: Position) => if (config.yamlDebug.value) currentPos = position else null,
warnLogger = warnLogger,
std = std
)
Expand Down
31 changes: 21 additions & 10 deletions sjsonnet/src/sjsonnet/Interpreter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,27 @@ import scala.util.control.NonFatal
* Wraps all the machinery of evaluating Jsonnet source code, from parsing to
* evaluation to materialization, into a convenient wrapper class.
*/
class Interpreter(extVars: Map[String, String],
tlaVars: Map[String, String],
class Interpreter(queryExtVar: String => Option[String],
queryTlaVar: String => Option[String],
wd: Path,
importer: Importer,
val parseCache: ParseCache,
settings: Settings = Settings.default,
storePos: Position => Unit = null,
warnLogger: (String => Unit) = null,
std: Val.Obj = new Std().Std
) { self =>
parseCache: ParseCache,
settings: Settings,
storePos: Position => Unit,
warnLogger: String => Unit,
std: Val.Obj
) { self =>

def this(extVars: Map[String, String],
tlaVars: Map[String, String],
wd: Path,
importer: Importer,
parseCache: ParseCache,
settings: Settings = Settings.default,
storePos: Position => Unit = null,
warnLogger: (String => Unit) = null,
std: Val.Obj = new Std().Std) =
this(extVars.get(_), tlaVars.get(_), wd, importer, parseCache, settings, storePos, warnLogger, std)

private val internedStrings = new mutable.HashMap[String, String]

Expand All @@ -46,7 +57,7 @@ class Interpreter(extVars: Map[String, String],
lazy val evaluator: Evaluator = createEvaluator(
resolver,
// parse extVars lazily, because they can refer to each other and be recursive
k => extVars.get(k).map(v => parseVar(s"ext-var $k", v)),
k => queryExtVar(k).map(v => parseVar(s"ext-var $k", v)),
wd,
settings,
warn
Expand Down Expand Up @@ -95,7 +106,7 @@ class Interpreter(extVars: Map[String, String],
var i = 0
while(i < defaults2.length) {
val k = f.params.names(i)
for(v <- tlaVars.get(k)){
for(v <- queryTlaVar(k)){
val parsed = parseVar(s"tla-var $k", v)
defaults2(i) = parsed
tlaExpressions.add(parsed)
Expand Down