3  * Author: Kaustuv Chaudhuri <kaustuv+@cs.cmu.edu>
 
   4  * Modified: Alex Vaynberg <alv@andrew.cmu.edu>
 
   5  * Modified: Frank Pfenning <fp@cs.cmu.edu>
 
  12   val reset : unit -> unit      (* resets temp numbering *)
 
  13   val new : string -> int -> temp       (* returns a unique new temp *)
 
  14   val name : temp -> string     (* returns the name of a temp *)
 
  15   val size : temp -> int        (* returns the size of a temp *)
 
  16   val compare : temp * temp -> order (* comparison function *)
 
  17   val eq : temp * temp -> bool
 
  20 structure Temp :> TEMP = 
 
  22   type temp = int * string * int
 
  27     (* warning: calling reset() may jeopardize uniqueness of temps! *)
 
  28     fun reset () = ( counter := 1 )
 
  29     fun new str size = (!counter, str, size) before ( counter := !counter + 1 )
 
  32   fun name (t,s, sz) = "+t" ^ Int.toString t ^ "[" ^ s ^ "]"
 
  33   fun size (t, s, sz) = sz
 
  34   fun compare ((t1,_,_),(t2,_,_)) = Int.compare (t1,t2)
 
  36   fun eq ((t1,_,_), (t2,_,_)) = t1 = t2