src/Pure/Isar/toplevel.ML
changeset 44187 88d770052bac
parent 44186 806f0ec1a43d
child 44188 9e6698b9dcea
equal deleted inserted replaced
44186:806f0ec1a43d 44187:88d770052bac
    32   val skip_proofs: bool Unsynchronized.ref
    32   val skip_proofs: bool Unsynchronized.ref
    33   val program: (unit -> 'a) -> 'a
    33   val program: (unit -> 'a) -> 'a
    34   val thread: bool -> (unit -> unit) -> Thread.thread
    34   val thread: bool -> (unit -> unit) -> Thread.thread
    35   type transition
    35   type transition
    36   val empty: transition
    36   val empty: transition
    37   val is_init: transition -> bool
       
    38   val print_of: transition -> bool
    37   val print_of: transition -> bool
    39   val name_of: transition -> string
    38   val name_of: transition -> string
    40   val pos_of: transition -> Position.T
    39   val pos_of: transition -> Position.T
    41   val str_of: transition -> string
    40   val str_of: transition -> string
    42   val name: string -> transition -> transition
    41   val name: string -> transition -> transition
    43   val position: Position.T -> transition -> transition
    42   val position: Position.T -> transition -> transition
    44   val interactive: bool -> transition -> transition
    43   val interactive: bool -> transition -> transition
    45   val set_print: bool -> transition -> transition
    44   val set_print: bool -> transition -> transition
    46   val print: transition -> transition
    45   val print: transition -> transition
    47   val no_timing: transition -> transition
    46   val no_timing: transition -> transition
    48   val init_theory: string -> (unit -> theory) -> transition -> transition
    47   val init_theory: (unit -> theory) -> transition -> transition
       
    48   val is_init: transition -> bool
    49   val modify_init: (unit -> theory) -> transition -> transition
    49   val modify_init: (unit -> theory) -> transition -> transition
    50   val exit: transition -> transition
    50   val exit: transition -> transition
    51   val keep: (state -> unit) -> transition -> transition
    51   val keep: (state -> unit) -> transition -> transition
    52   val keep': (bool -> state -> unit) -> transition -> transition
    52   val keep': (bool -> state -> unit) -> transition -> transition
    53   val imperative: (unit -> unit) -> transition -> transition
    53   val imperative: (unit -> unit) -> transition -> transition
   294 
   294 
   295 
   295 
   296 (* primitive transitions *)
   296 (* primitive transitions *)
   297 
   297 
   298 datatype trans =
   298 datatype trans =
   299   Init of string * (unit -> theory) | (*theory name, init*)
   299   Init of unit -> theory |               (*init theory*)
   300   Exit |                                 (*formal exit of theory*)
   300   Exit |                                 (*formal exit of theory*)
   301   Keep of bool -> state -> unit |        (*peek at state*)
   301   Keep of bool -> state -> unit |        (*peek at state*)
   302   Transaction of (bool -> node -> node) * (state -> unit);  (*node transaction and presentation*)
   302   Transaction of (bool -> node -> node) * (state -> unit);  (*node transaction and presentation*)
   303 
   303 
   304 local
   304 local
   305 
   305 
   306 fun apply_tr _ (Init (_, f)) (State (NONE, _)) =
   306 fun apply_tr _ (Init f) (State (NONE, _)) =
   307       State (SOME (Theory (Context.Theory
   307       State (SOME (Theory (Context.Theory
   308           (Theory.checkpoint (Runtime.controlled_execution f ())), NONE)), NONE)
   308           (Theory.checkpoint (Runtime.controlled_execution f ())), NONE)), NONE)
   309   | apply_tr _ Exit (State (SOME (state as Theory (Context.Theory _, _)), _)) =
   309   | apply_tr _ Exit (State (SOME (state as Theory (Context.Theory _, _)), _)) =
   310       exit_transaction state
   310       exit_transaction state
   311   | apply_tr int (Keep f) state =
   311   | apply_tr int (Keep f) state =
   350 val empty = make_transition ("", Position.none, false, false, false, []);
   350 val empty = make_transition ("", Position.none, false, false, false, []);
   351 
   351 
   352 
   352 
   353 (* diagnostics *)
   353 (* diagnostics *)
   354 
   354 
   355 fun get_init (Transition {trans = [Init args], ...}) = SOME args
       
   356   | get_init _ = NONE;
       
   357 
       
   358 val is_init = is_some o get_init;
       
   359 
       
   360 fun print_of (Transition {print, ...}) = print;
   355 fun print_of (Transition {print, ...}) = print;
   361 fun name_of (Transition {name, ...}) = name;
   356 fun name_of (Transition {name, ...}) = name;
   362 fun pos_of (Transition {pos, ...}) = pos;
   357 fun pos_of (Transition {pos, ...}) = pos;
   363 fun str_of tr = quote (name_of tr) ^ Position.str_of (pos_of tr);
   358 fun str_of tr = quote (name_of tr) ^ Position.str_of (pos_of tr);
   364 
   359 
   395 val print = set_print true;
   390 val print = set_print true;
   396 
   391 
   397 
   392 
   398 (* basic transitions *)
   393 (* basic transitions *)
   399 
   394 
   400 fun init_theory name f = add_trans (Init (name, f));
   395 fun init_theory f = add_trans (Init f);
   401 
   396 
   402 fun modify_init f tr =
   397 fun is_init (Transition {trans = [Init _], ...}) = true
   403   (case get_init tr of
   398   | is_init _ = false;
   404     SOME (name, _) => init_theory name f (reset_trans tr)
   399 
   405   | NONE => tr);
   400 fun modify_init f tr = if is_init tr then init_theory f (reset_trans tr) else tr;
   406 
   401 
   407 val exit = add_trans Exit;
   402 val exit = add_trans Exit;
   408 val keep' = add_trans o Keep;
   403 val keep' = add_trans o Keep;
   409 
   404 
   410 fun present_transaction f g = add_trans (Transaction (f, g));
   405 fun present_transaction f g = add_trans (Transaction (f, g));