diff --git a/sjsonnet/src-jvm-native/sjsonnet/SjsonnetMain.scala b/sjsonnet/src-jvm-native/sjsonnet/SjsonnetMain.scala index 04d1f8c7..2c982026 100644 --- a/sjsonnet/src-jvm-native/sjsonnet/SjsonnetMain.scala +++ b/sjsonnet/src-jvm-native/sjsonnet/SjsonnetMain.scala @@ -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 { @@ -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 ) diff --git a/sjsonnet/src/sjsonnet/Interpreter.scala b/sjsonnet/src/sjsonnet/Interpreter.scala index 6ce485bc..f764f430 100644 --- a/sjsonnet/src/sjsonnet/Interpreter.scala +++ b/sjsonnet/src/sjsonnet/Interpreter.scala @@ -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] @@ -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 @@ -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)