aboutsummaryrefslogtreecommitdiff
path: root/lib/dyn.ml
blob: 92fa14f6d4a6b4b5c592cd079abbb5736d834387 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(* $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";
  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