equal
deleted
inserted
replaced
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 **) |