166 val _ = status task [Markup.running]; |
166 val _ = status task [Markup.running]; |
167 val result = |
167 val result = |
168 Exn.capture (Future.interruptible_task e) () |
168 Exn.capture (Future.interruptible_task e) () |
169 |> Future.identify_result pos |
169 |> Future.identify_result pos |
170 |> Exn.map_exn Runtime.thread_context; |
170 |> Exn.map_exn Runtime.thread_context; |
|
171 val errors = |
|
172 Exn.capture (fn () => |
|
173 (case result of |
|
174 Exn.Exn exn => |
|
175 (status task [Markup.failed]; |
|
176 status task [Markup.finished]; |
|
177 Output.report [Markup.markup_only (Markup.bad ())]; |
|
178 if exec_id = 0 then () |
|
179 else List.app (Future.error_message pos) (Runtime.exn_messages exn)) |
|
180 | Exn.Res _ => |
|
181 status task [Markup.finished])) (); |
171 val _ = status task [Markup.joined]; |
182 val _ = status task [Markup.joined]; |
172 val _ = |
183 in Exn.release errors; Exn.release result end); |
173 (case result of |
|
174 Exn.Exn exn => |
|
175 (status task [Markup.failed]; |
|
176 status task [Markup.finished]; |
|
177 Output.report [Markup.markup_only (Markup.bad ())]; |
|
178 if exec_id = 0 then () |
|
179 else List.app (Future.error_message pos) (Runtime.exn_messages exn)) |
|
180 | Exn.Res _ => |
|
181 status task [Markup.finished]) |
|
182 in Exn.release result end); |
|
183 |
184 |
184 val _ = status (Future.task_of future) [Markup.forked]; |
185 val _ = status (Future.task_of future) [Markup.forked]; |
185 in future end)) (); |
186 in future end)) (); |
186 |
187 |
187 |
188 |