src/Pure/System/process_result.ML
author wenzelm
Sat, 07 Aug 2021 22:23:37 +0200
changeset 74142 0f051404f487
parent 73284 a97ae083cad1
permissions -rw-r--r--
clarified signature: more options for bash_process;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/System/process_result.scala
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     3
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     4
Result of system process.
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     5
*)
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     6
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     7
signature PROCESS_RESULT =
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
     8
sig
74142
0f051404f487 clarified signature: more options for bash_process;
wenzelm
parents: 73284
diff changeset
     9
  val interrupt_rc: int
0f051404f487 clarified signature: more options for bash_process;
wenzelm
parents: 73284
diff changeset
    10
  val timeout_rc: int
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    11
  type T
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    12
  val make:
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    13
   {rc: int,
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    14
    out_lines: string list,
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    15
    err_lines: string list,
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    16
    timing: Timing.timing} -> T
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    17
  val rc: T -> int
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    18
  val out_lines: T -> string list
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    19
  val err_lines: T -> string list
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    20
  val timing: T -> Timing.timing
73284
a97ae083cad1 tuned signature;
wenzelm
parents: 73281
diff changeset
    21
  val timing_elapsed: T -> Time.time
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    22
  val out: T -> string
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    23
  val err: T -> string
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    24
  val ok: T -> bool
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    25
  val check: T -> T
73281
22417b631453 clarified signature, following Isabelle/Scala;
wenzelm
parents: 73280
diff changeset
    26
  val print: T -> T
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    27
end;
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    28
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    29
structure Process_Result: PROCESS_RESULT =
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    30
struct
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    31
74142
0f051404f487 clarified signature: more options for bash_process;
wenzelm
parents: 73284
diff changeset
    32
val interrupt_rc = 130
0f051404f487 clarified signature: more options for bash_process;
wenzelm
parents: 73284
diff changeset
    33
val timeout_rc = 142
0f051404f487 clarified signature: more options for bash_process;
wenzelm
parents: 73284
diff changeset
    34
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    35
abstype T =
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    36
  Process_Result of
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    37
   {rc: int,
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    38
    out_lines: string list,
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    39
    err_lines: string list,
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    40
    timing: Timing.timing}
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    41
with
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    42
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    43
val make = Process_Result;
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    44
fun rep (Process_Result args) = args;
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    45
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    46
val rc = #rc o rep;
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    47
val out_lines = #out_lines o rep;
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    48
val err_lines = #err_lines o rep;
73284
a97ae083cad1 tuned signature;
wenzelm
parents: 73281
diff changeset
    49
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    50
val timing = #timing o rep;
73284
a97ae083cad1 tuned signature;
wenzelm
parents: 73281
diff changeset
    51
val timing_elapsed = #elapsed o timing;
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    52
73280
wenzelm
parents: 73278
diff changeset
    53
end;
wenzelm
parents: 73278
diff changeset
    54
73277
0110e2e2964c clarified signature: always trim_line of Process_Result.out/err, uniformly in ML and Scala;
wenzelm
parents: 73275
diff changeset
    55
val out = trim_line o cat_lines o out_lines;
0110e2e2964c clarified signature: always trim_line of Process_Result.out/err, uniformly in ML and Scala;
wenzelm
parents: 73275
diff changeset
    56
val err = trim_line o cat_lines o err_lines;
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    57
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    58
fun ok result = rc result = 0;
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    59
73278
7dbae202ff84 clarified signature: Isabelle_System.bash_process is strict and thus cannot check for interrupt_return_code;
wenzelm
parents: 73277
diff changeset
    60
fun check result = if ok result then result else error (err result);
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    61
73281
22417b631453 clarified signature, following Isabelle/Scala;
wenzelm
parents: 73280
diff changeset
    62
fun print result =
22417b631453 clarified signature, following Isabelle/Scala;
wenzelm
parents: 73280
diff changeset
    63
 (warning (err result);
22417b631453 clarified signature, following Isabelle/Scala;
wenzelm
parents: 73280
diff changeset
    64
  writeln (out result);
22417b631453 clarified signature, following Isabelle/Scala;
wenzelm
parents: 73280
diff changeset
    65
  make {rc = rc result, out_lines = [], err_lines = [], timing = timing result});
22417b631453 clarified signature, following Isabelle/Scala;
wenzelm
parents: 73280
diff changeset
    66
73275
f0db1e4c89bc clarified signature, following Isabelle/Scala;
wenzelm
parents:
diff changeset
    67
end;