1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
(*
* User definable annotations.
*
* Note: annotations will now be used extensively in all part of
* the optimizer.
*
* Idea is stolen from Stephen Weeks
*
* -- Allen
*)
signature ANNOTATIONS =
sig
type annotation
type annotations = annotation list
type propList = annotations
exception NoProperty
type 'a property =
{ get : annotations -> 'a option,
peek : annotation -> 'a option,
lookup : annotations -> 'a,
contains : annotations -> bool,
set : 'a * annotations -> annotations,
rmv : annotations -> annotations,
create : 'a -> annotation
}
type flag = unit property
(*
* Generate a new annotation.
* Client should provide a pretty printing function.
*)
val new : ('a -> string) option -> 'a property
val new' : {toString: 'a -> string,
get : exn -> 'a,
create : 'a -> exn
} -> 'a property
(*
* Pretty print an annotation
*)
val toString : annotation -> string
(*
* Attach a pretty printer
*)
val attachPrettyPrinter : (annotation -> string) -> unit
end
|