src/Pure/General/secure.ML
author wenzelm
Tue, 23 Feb 2016 16:20:12 +0100
changeset 62387 ad3eb2889f9a
parent 62356 e307a410f46c
permissions -rw-r--r--
support for polyml-git ec49a49972c5 (branch FixedPrecisionInt);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/General/secure.ML
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     3
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     4
Secure critical operations.
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     5
*)
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     6
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     7
signature SECURE =
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
     8
sig
20977
dbf1eca9b34e tuned signature;
wenzelm
parents: 20925
diff changeset
     9
  val set_secure: unit -> unit
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    10
  val is_secure: unit -> bool
26080
d920e4c8ba82 export deny_secure;
wenzelm
parents: 25753
diff changeset
    11
  val deny_secure: string -> unit
31330
7bfbd0e07a40 export secure_mltext;
wenzelm
parents: 30672
diff changeset
    12
  val secure_mltext: unit -> unit
60956
10d463883dc2 explicit debug flag for ML compiler;
wenzelm
parents: 58846
diff changeset
    13
  val use_text: use_context ->
10d463883dc2 explicit debug flag for ML compiler;
wenzelm
parents: 58846
diff changeset
    14
    {line: int, file: string, verbose: bool, debug: bool} -> string -> unit
10d463883dc2 explicit debug flag for ML compiler;
wenzelm
parents: 58846
diff changeset
    15
  val use_file: use_context -> {verbose: bool, debug: bool} -> string -> unit
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    16
end;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    17
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    18
structure Secure: SECURE =
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    19
struct
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    20
20992
05c3703cc6c5 added execute/system;
wenzelm
parents: 20977
diff changeset
    21
(** secure flag **)
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    22
32738
15bb09ca0378 explicit indication of Unsynchronized.ref;
wenzelm
parents: 31473
diff changeset
    23
val secure = Unsynchronized.ref false;
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    24
20977
dbf1eca9b34e tuned signature;
wenzelm
parents: 20925
diff changeset
    25
fun set_secure () = secure := true;
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    26
fun is_secure () = ! secure;
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    27
22567
1565d476a9e2 removed assert/deny (avoid clash with Alice keywords and confusion due to strict evaluation);
wenzelm
parents: 22144
diff changeset
    28
fun deny_secure msg = if is_secure () then error msg else ();
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    29
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    30
25753
99c9fc5e11f2 tuned spaces;
wenzelm
parents: 25703
diff changeset
    31
20992
05c3703cc6c5 added execute/system;
wenzelm
parents: 20977
diff changeset
    32
(** critical operations **)
05c3703cc6c5 added execute/system;
wenzelm
parents: 20977
diff changeset
    33
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    34
fun secure_mltext () = deny_secure "Cannot evaluate ML source in secure mode";
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    35
30672
beaadd5af500 more systematic type use_context, with particular values ML_Parse.global_context and ML_Context.local_context;
wenzelm
parents: 30625
diff changeset
    36
val raw_use_text = use_text;
beaadd5af500 more systematic type use_context, with particular values ML_Parse.global_context and ML_Context.local_context;
wenzelm
parents: 30625
diff changeset
    37
val raw_use_file = use_file;
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    38
60956
10d463883dc2 explicit debug flag for ML compiler;
wenzelm
parents: 58846
diff changeset
    39
fun use_text context flags (text: string) = (secure_mltext (); raw_use_text context flags text);
10d463883dc2 explicit debug flag for ML compiler;
wenzelm
parents: 58846
diff changeset
    40
fun use_file context flags (file: string) = (secure_mltext (); raw_use_file context flags file);
23922
707639e9497d marked some CRITICAL sections (for multithreading);
wenzelm
parents: 22567
diff changeset
    41
20925
2d19e511fe2c Secure critical operations.
wenzelm
parents:
diff changeset
    42
end;