(*  Title:      Pure/ML/ml_recursive.ML
    Author:     Makarius
ML name space for recursive compiler invocation.
*)
signature ML_RECURSIVE =
sig
  type env =
    {debug: bool,
     name_space: PolyML.NameSpace.nameSpace,
     add_breakpoints: (int * (bool ref * Thread_Position.T)) list -> unit};
  val get: unit -> env option
  val recursive: env -> (unit -> 'a) -> 'a
end;
structure ML_Recursive: ML_RECURSIVE =
struct
type env =
  {debug: bool,
   name_space: PolyML.NameSpace.nameSpace,
   add_breakpoints: (int * (bool ref * Thread_Position.T)) list -> unit};
val var = Thread_Data.var () : env Thread_Data.var;
fun get () = Thread_Data.get var;
fun recursive space e = Thread_Data.setmp var (SOME space) e ();
end;