src/Pure/ML-Systems/exn.ML
changeset 31427 5a07cc86675d
parent 29564 f8b933a62151
child 32100 8ac6b1102f16
equal deleted inserted replaced
31426:5c9dbd511510 31427:5a07cc86675d
    33   | get_exn _ = NONE;
    33   | get_exn _ = NONE;
    34 
    34 
    35 fun capture f x = Result (f x) handle e => Exn e;
    35 fun capture f x = Result (f x) handle e => Exn e;
    36 
    36 
    37 fun release (Result y) = y
    37 fun release (Result y) = y
    38   | release (Exn e) = raise e;
    38   | release (Exn e) = reraise e;
    39 
    39 
    40 
    40 
    41 (* interrupt and nested exceptions *)
    41 (* interrupt and nested exceptions *)
    42 
    42 
    43 exception Interrupt = Interrupt;
    43 exception Interrupt = Interrupt;
    56     (case List.concat (map plain_exns results) of
    56     (case List.concat (map plain_exns results) of
    57       [] => raise Interrupt
    57       [] => raise Interrupt
    58     | exns => raise EXCEPTIONS exns);
    58     | exns => raise EXCEPTIONS exns);
    59 
    59 
    60 fun release_first results = release_all results
    60 fun release_first results = release_all results
    61   handle EXCEPTIONS (exn :: _) => raise exn;
    61   handle EXCEPTIONS (exn :: _) => reraise exn;
    62 
    62 
    63 end;
    63 end;