summaryrefslogtreecommitdiff
path: root/typing/ident.ml
diff options
context:
space:
mode:
Diffstat (limited to 'typing/ident.ml')
-rw-r--r--typing/ident.ml172
1 files changed, 0 insertions, 172 deletions
diff --git a/typing/ident.ml b/typing/ident.ml
deleted file mode 100644
index ccc132f094..0000000000
--- a/typing/ident.ml
+++ /dev/null
@@ -1,172 +0,0 @@
-(***********************************************************************)
-(* *)
-(* Objective Caml *)
-(* *)
-(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
-(* *)
-(* Copyright 1996 Institut National de Recherche en Informatique et *)
-(* en Automatique. All rights reserved. This file is distributed *)
-(* under the terms of the Q Public License version 1.0. *)
-(* *)
-(***********************************************************************)
-
-(* $Id$ *)
-
-open Format
-
-type t = { stamp: int; name: string; mutable global: bool }
-
-(* A stamp of 0 denotes a persistent identifier *)
-
-let currentstamp = ref 0
-
-let create s =
- incr currentstamp;
- { name = s; stamp = !currentstamp; global = false }
-
-let create_persistent s =
- { name = s; stamp = 0; global = true }
-
-let rename i =
- incr currentstamp;
- { i with stamp = !currentstamp }
-
-let name i = i.name
-
-let unique_name i = i.name ^ "_" ^ string_of_int i.stamp
-
-let unique_toplevel_name i = i.name ^ "/" ^ string_of_int i.stamp
-
-let persistent i = (i.stamp = 0)
-
-let equal i1 i2 = i1.name = i2.name
-
-let same i1 i2 = i1 = i2
- (* Possibly more efficient version (with a real compiler, at least):
- if i1.stamp <> 0
- then i1.stamp = i2.stamp
- else i2.stamp = 0 && i1.name = i2.name *)
-
-let binding_time i = i.stamp
-
-let current_time() = !currentstamp
-let set_current_time t = currentstamp := max !currentstamp t
-
-let reinit_level = ref (-1)
-
-let reinit () =
- if !reinit_level < 0
- then reinit_level := !currentstamp
- else currentstamp := !reinit_level
-
-let hide i =
- { i with stamp = -1 }
-
-let make_global i =
- i.global <- true
-
-let global i =
- i.global
-
-let print ppf i =
- match i.stamp with
- | 0 -> fprintf ppf "%s!" i.name
- | -1 -> fprintf ppf "%s#" i.name
- | n -> fprintf ppf "%s/%i%s" i.name n (if i.global then "g" else "")
-
-type 'a tbl =
- Empty
- | Node of 'a tbl * 'a data * 'a tbl * int
-
-and 'a data =
- { ident: t;
- data: 'a;
- previous: 'a data option }
-
-let empty = Empty
-
-(* Inline expansion of height for better speed
- * let height = function
- * Empty -> 0
- * | Node(_,_,_,h) -> h
- *)
-
-let mknode l d r =
- let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h
- and hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in
- Node(l, d, r, (if hl >= hr then hl + 1 else hr + 1))
-
-let balance l d r =
- let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h
- and hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in
- if hl > hr + 1 then
- match l with
- | Node (ll, ld, lr, _)
- when (match ll with Empty -> 0 | Node(_,_,_,h) -> h) >=
- (match lr with Empty -> 0 | Node(_,_,_,h) -> h) ->
- mknode ll ld (mknode lr d r)
- | Node (ll, ld, Node(lrl, lrd, lrr, _), _) ->
- mknode (mknode ll ld lrl) lrd (mknode lrr d r)
- | _ -> assert false
- else if hr > hl + 1 then
- match r with
- | Node (rl, rd, rr, _)
- when (match rr with Empty -> 0 | Node(_,_,_,h) -> h) >=
- (match rl with Empty -> 0 | Node(_,_,_,h) -> h) ->
- mknode (mknode l d rl) rd rr
- | Node (Node (rll, rld, rlr, _), rd, rr, _) ->
- mknode (mknode l d rll) rld (mknode rlr rd rr)
- | _ -> assert false
- else
- mknode l d r
-
-let rec add id data = function
- Empty ->
- Node(Empty, {ident = id; data = data; previous = None}, Empty, 1)
- | Node(l, k, r, h) ->
- let c = compare id.name k.ident.name in
- if c = 0 then
- Node(l, {ident = id; data = data; previous = Some k}, r, h)
- else if c < 0 then
- balance (add id data l) k r
- else
- balance l k (add id data r)
-
-let rec find_stamp s = function
- None ->
- raise Not_found
- | Some k ->
- if k.ident.stamp = s then k.data else find_stamp s k.previous
-
-let rec find_same id = function
- Empty ->
- raise Not_found
- | Node(l, k, r, _) ->
- let c = compare id.name k.ident.name in
- if c = 0 then
- if id.stamp = k.ident.stamp
- then k.data
- else find_stamp id.stamp k.previous
- else
- find_same id (if c < 0 then l else r)
-
-let rec find_name name = function
- Empty ->
- raise Not_found
- | Node(l, k, r, _) ->
- let c = compare name k.ident.name in
- if c = 0 then
- k.data
- else
- find_name name (if c < 0 then l else r)
-
-let rec keys_aux stack accu = function
- Empty ->
- begin match stack with
- [] -> accu
- | a :: l -> keys_aux l accu a
- end
- | Node(l, k, r, _) ->
- keys_aux (l :: stack) (k.ident :: accu) r
-
-let keys tbl = keys_aux [] [] tbl