src/Pure/Isar/toplevel.ML
changeset 5939 2d7c7a4fcd8a
parent 5930 41aa67a045f7
child 5946 a4600d21b59b
equal deleted inserted replaced
5938:fe7640933a47 5939:2d7c7a4fcd8a
    85 datatype state = State of (node * (node -> unit)) list;
    85 datatype state = State of (node * (node -> unit)) list;
    86 
    86 
    87 exception UNDEF;
    87 exception UNDEF;
    88 
    88 
    89 val toplevel = State [];
    89 val toplevel = State [];
       
    90 fun append_states (State ns) (State ms) = State (ns @ ms);
    90 
    91 
    91 fun print_state (State []) = ()
    92 fun print_state (State []) = ()
    92   | print_state (State [(node, _)]) = print_node node
    93   | print_state (State [(node, _)]) = print_node node
    93   | print_state (State ((node, _) :: nodes)) =
    94   | print_state (State ((node, _) :: nodes)) =
    94       (writeln ("Stack size: " ^ string_of_int (length nodes)); print_node node);
    95       (writeln ("Stack size: " ^ string_of_int (length nodes)); print_node node);
   299 
   300 
   300 fun apply int tr state =
   301 fun apply int tr state =
   301   Some (transform_interrupt_state (transform_error (app int tr)) state, None)
   302   Some (transform_interrupt_state (transform_error (app int tr)) state, None)
   302     handle
   303     handle
   303       TERMINATE => None
   304       TERMINATE => None
       
   305     | FAIL (exn_info as (BREAK break_state, _)) =>
       
   306         Some (append_states break_state state, Some exn_info)
   304     | FAIL exn_info => Some (state, Some exn_info)
   307     | FAIL exn_info => Some (state, Some exn_info)
   305     | PureThy.ROLLBACK (copy_thy, opt_exn) =>
   308     | PureThy.ROLLBACK (copy_thy, opt_exn) =>
   306         Some (rollback tr copy_thy state, apsome (fn exn => (exn, at_command tr)) opt_exn)
   309         Some (rollback tr copy_thy state, apsome (fn exn => (exn, at_command tr)) opt_exn)
   307     | exn as BREAK break_state => Some (break_state, Some (exn, at_command tr))
       
   308     | exn => Some (state, Some (exn, at_command tr));
   310     | exn => Some (state, Some (exn, at_command tr));
   309 
   311 
   310 
   312 
   311 (* excursion: toplevel -- apply transformers -- toplevel *)
   313 (* excursion: toplevel -- apply transformers -- toplevel *)
   312 
   314