File: gc-type.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (42 lines) | stat: -rw-r--r-- 1,228 bytes parent folder | download | duplicates (5)
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
(*
 * Abstract interface for GC types.
 *)
functor GCType(ObjType : OBJ_TYPE) : GC_TYPE =
struct

   structure O = ObjType

   type ty = int

   datatype gctype = 
     CONST of int                 (* integer constant *)
   | NONREF of O.objtype ref      (* non-reference value *)
   | REF of O.objtype ref         (* a reference, pointer to a gc object *)
   | ADD of ty * gctype * gctype  (* address arithmetic + *)
   | SUB of ty * gctype * gctype  (* address arithmetic - *)
   | BOT
   | TOP

   type gcmap = gctype Intmap.intmap

   exception GCTYPE

   fun int i = if i >= 0 then Int.toString i else "-"^Int.toString(~i)

   fun toString BOT = "bot"
     | toString TOP = "top"
     | toString (CONST i) = int i
     | toString (NONREF(ref obj)) = "nonref "^O.toString obj
     | toString (REF(ref obj)) = "ref "^O.toString obj
     | toString (ADD(ty,a,b)) = "("^toString a^"+"^toString b^")"
     | toString (SUB(ty,a,b)) = "("^toString a^"-"^toString b^")"

   fun mapToString gcmap =
   let val lookup = Intmap.map gcmap
       fun f r = "{"^toString(lookup r)^"}" handle _ => "{?}"
   in  f end

   val GCMAP       = Annotations.new NONE : gcmap Annotations.property
   val GCSAFEPOINT = Annotations.newFlag ""

end