src/Pure/ML/ml_recursive.ML
author wenzelm
Thu, 07 Apr 2016 21:27:17 +0200
changeset 62910 f37878ebba65
child 62941 5612ec9f0f49
permissions -rw-r--r--
explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap; handle bootstrap signatures as well;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62910
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/ML/ml_recursive.ML
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     3
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     4
ML name space for recursive compiler invocation.
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     5
*)
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     6
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     7
signature ML_RECURSIVE =
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     8
sig
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
     9
  val get: unit -> PolyML.NameSpace.nameSpace option
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    10
  val recursive: PolyML.NameSpace.nameSpace -> (unit -> 'a) -> 'a
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    11
end;
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    12
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    13
structure ML_Recursive: ML_RECURSIVE =
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    14
struct
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    15
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    16
val var = Thread_Data.var () : PolyML.NameSpace.nameSpace Thread_Data.var;
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    17
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    18
fun get () = Thread_Data.get var;
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    19
fun recursive space e = Thread_Data.setmp var (SOME space) e ();
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    20
f37878ebba65 explicit handling of recursive ML name space, e.g. relevant for ML_Bootstrap;
wenzelm
parents:
diff changeset
    21
end;