src/Pure/ML-Systems/smlnj.ML
changeset 39232 69c6d3e87660
parent 38635 f76ad0771f67
child 39233 9a0c67d4517a
equal deleted inserted replaced
39231:25c345302a17 39232:69c6d3e87660
   140 
   140 
   141 in
   141 in
   142 
   142 
   143 fun interruptible (f: 'a -> 'b) x =
   143 fun interruptible (f: 'a -> 'b) x =
   144   let
   144   let
   145     val result = ref (Exn.Exn Interrupt: 'b Exn.result);
   145     val result = ref (Exn.interrupt_exn: 'b Exn.result);
   146     val old_handler = Signals.inqHandler Signals.sigINT;
   146     val old_handler = Signals.inqHandler Signals.sigINT;
   147   in
   147   in
   148     SMLofNJ.Cont.callcc (fn cont =>
   148     SMLofNJ.Cont.callcc (fn cont =>
   149       (Signals.setHandler (Signals.sigINT, Signals.HANDLER (fn _ => cont));
   149       (Signals.setHandler (Signals.sigINT, Signals.HANDLER (fn _ => cont));
   150         result := Exn.capture f x));
   150         result := Exn.capture f x));
   163 
   163 
   164 structure TextIO =
   164 structure TextIO =
   165 struct
   165 struct
   166   open TextIO;
   166   open TextIO;
   167   fun inputLine is = TextIO.inputLine is
   167   fun inputLine is = TextIO.inputLine is
   168     handle IO.Io _ => raise Interrupt;
   168     handle IO.Io _ => Exn.interrupt ();
   169 end;
   169 end;
   170 
   170 
   171 
   171 
   172 
   172 
   173 (** OS related **)
   173 (** OS related **)