aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/dyn.ml
blob: 3d6d43f8c40530fe74c4c9fec7eb5de7376e25f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

(* $Id$ *)

open Util

(* Dynamics, programmed with DANGER !!! *)

type t = string * Obj.t

let dyntab = ref ([] : string list)

let create s =
  if List.mem s !dyntab then 
    anomaly ("Dyn.create: already declared dynamic " ^ s);
  dyntab := s :: !dyntab;
  ((fun v -> (s,Obj.repr v)),
   (fun (s',rv) ->
      if s = s' then Obj.magic rv else failwith "dyn_out"))

let tag (s,_) = s