src/Tools/Code/code_scala.ML
changeset 67207 ad538f6c5d2f
parent 66327 f44f7cf3d1a1
child 67496 eff8b632bdc6
--- a/src/Tools/Code/code_scala.ML	Thu Dec 14 21:40:43 2017 +0100
+++ b/src/Tools/Code/code_scala.ML	Thu Dec 14 18:42:39 2017 +0100
@@ -7,7 +7,6 @@
 signature CODE_SCALA =
 sig
   val target: string
-  val case_insensitive: bool Config.T;
 end;
 
 structure Code_Scala : CODE_SCALA =
@@ -20,11 +19,6 @@
 infixr 5 @@;
 infixr 5 @|;
 
-(** preliminary: option to circumvent clashes on case-insensitive file systems **)
-
-val case_insensitive = Attrib.setup_config_bool @{binding "scala_case_insensitive"} (K false);
-
-
 (** Scala serializer **)
 
 val target = "Scala";
@@ -339,9 +333,9 @@
            | _ => I) program;
   in Symtab.lookup_list tab end;
 
-fun scala_program_of_program ctxt module_name reserved identifiers exports program =
+fun scala_program_of_program ctxt case_insensitive module_name reserved identifiers exports program =
   let
-    val variant = if Config.get ctxt case_insensitive
+    val variant = if case_insensitive
       then Code_Namespace.variant_case_insensitive
       else Name.variant;
     fun namify_module name_fragment ((nsp_class, nsp_object), nsp_common) =
@@ -389,13 +383,13 @@
       exports program
   end;
 
-fun serialize_scala ctxt { module_name, reserved_syms, identifiers,
+fun serialize_scala case_insensitive ctxt { module_name, reserved_syms, identifiers,
     includes, class_syntax, tyco_syntax, const_syntax } exports program =
   let
 
     (* build program *)
     val { deresolver, hierarchical_program = scala_program } =
-      scala_program_of_program ctxt module_name (Name.make_context reserved_syms)
+      scala_program_of_program ctxt case_insensitive module_name (Name.make_context reserved_syms)
         identifiers exports program;
 
     (* print statements *)
@@ -434,7 +428,8 @@
   end;
 
 val serializer : Code_Target.serializer =
-  Code_Target.parse_args (Scan.succeed ()) #> K serialize_scala;
+  Code_Target.parse_args (Scan.optional (Args.$$$ "case_insensitive" >> K true) false
+    >> (fn case_insensitive => serialize_scala case_insensitive));
 
 val literals = let
   fun char_scala c = if c = "'" then "\\'"
@@ -464,7 +459,8 @@
       check = { env_var = "SCALA_HOME",
         make_destination = fn p => Path.append p (Path.explode "ROOT.scala"),
         make_command = fn _ =>
-          "isabelle_scala scalac $ISABELLE_SCALAC_OPTIONS ROOT.scala" } })
+          "isabelle_scala scalac $ISABELLE_SCALAC_OPTIONS ROOT.scala"},
+      evaluation_args = Token.explode Keyword.empty_keywords @{here} "case_insensitive"})
   #> Code_Target.set_printings (Type_Constructor ("fun",
     [(target, SOME (2, fn print_typ => fn fxy => fn [ty1, ty2] =>
       brackify_infix (1, R) fxy (