src/Pure/Isar/toplevel.ML
changeset 15549 14d167259812
parent 15531 08c8dad8e399
child 15570 8d8c70b41bab
equal deleted inserted replaced
15548:aea2f1706fdf 15549:14d167259812
   212 fun node_trans _ _ _ (State NONE) = raise UNDEF
   212 fun node_trans _ _ _ (State NONE) = raise UNDEF
   213   | node_trans int hist f (State (SOME (node, term))) =
   213   | node_trans int hist f (State (SOME (node, term))) =
   214       let
   214       let
   215         fun mk_state nd = State (SOME (nd, term));
   215         fun mk_state nd = State (SOME (nd, term));
   216 
   216 
   217         val cont_node = History.map (checkpoint_node int) node;
   217         val f' = checkpoint_node int o f int o copy_node int;
   218         val back_node = History.map (copy_node int) cont_node;
   218 
   219 
   219         val trans = if hist then History.apply else History.map;
   220         val trans = if hist then History.apply_copy (copy_node int) else History.map;
       
   221         val (result, opt_exn) =
   220         val (result, opt_exn) =
   222           (mk_state (transform_error (interruptible (trans (f int))) cont_node), NONE)
   221           (mk_state (transform_error (interruptible (trans f')) node), NONE)
   223             handle exn => (mk_state cont_node, SOME exn);
   222             handle exn => (mk_state node, SOME exn);
   224       in
   223       in
   225         if is_stale result then return (mk_state back_node, SOME (if_none opt_exn rollback))
   224         if is_stale result then return (mk_state node, SOME (if_none opt_exn rollback))
   226         else return (result, opt_exn)
   225         else return (result, opt_exn)
   227       end;
   226       end;
   228 
   227 
   229 fun check_stale state =
   228 fun check_stale state =
   230   if not (is_stale state) then ()
   229   if not (is_stale state) then ()