src/Pure/System/isabelle_system.scala
changeset 77079 395a0701a125
parent 77027 ac7af931189f
child 77218 86217697863c
--- a/src/Pure/System/isabelle_system.scala	Tue Jan 24 18:26:20 2023 +0100
+++ b/src/Pure/System/isabelle_system.scala	Tue Jan 24 18:56:33 2023 +0100
@@ -21,6 +21,13 @@
 object Isabelle_System {
   /* settings environment */
 
+  trait Settings { def get(name: String): String }
+  trait Settings_Env extends Settings { def env: JMap[String, String] }
+
+  class Env(val env: JMap[String, String]) extends Settings_Env {
+    override def get(name: String): String = Option(env.get(name)).getOrElse("")
+  }
+
   def settings(putenv: List[(String, String)] = Nil): JMap[String, String] = {
     val env0 = isabelle.setup.Environment.settings()
     if (putenv.isEmpty) env0
@@ -31,10 +38,12 @@
     }
   }
 
-  def getenv(name: String, env: JMap[String, String] = settings()): String =
-    Option(env.get(name)).getOrElse("")
+  def settings_env(putenv: List[(String, String)] = Nil): Settings_Env =
+    new Env(settings(putenv = putenv))
 
-  def getenv_strict(name: String, env: JMap[String, String] = settings()): String =
+  def getenv(name: String, env: Settings = settings_env()): String = env.get(name)
+
+  def getenv_strict(name: String, env: Settings = settings_env()): String =
     proper_string(getenv(name, env)) getOrElse
       error("Undefined Isabelle environment variable: " + quote(name))