summaryrefslogtreecommitdiff
path: root/toplevel/expunge.ml
diff options
context:
space:
mode:
Diffstat (limited to 'toplevel/expunge.ml')
-rw-r--r--toplevel/expunge.ml83
1 files changed, 0 insertions, 83 deletions
diff --git a/toplevel/expunge.ml b/toplevel/expunge.ml
deleted file mode 100644
index 1b52d1bc64..0000000000
--- a/toplevel/expunge.ml
+++ /dev/null
@@ -1,83 +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$ *)
-
-(* "Expunge" a toplevel by removing compiler modules from the global List.map.
- Usage: expunge <source file> <dest file> <names of modules to keep> *)
-
-open Sys
-open Misc
-
-module StringSet =
- Set.Make(struct
- type t = string
- let compare = compare
- end)
-
-let to_keep = ref StringSet.empty
-
-let expunge_map tbl =
- Symtable.filter_global_map
- (fun id -> StringSet.mem (Ident.name id) !to_keep)
- tbl
-
-let expunge_crcs tbl =
- List.filter (fun (unit, crc) -> StringSet.mem unit !to_keep) tbl
-
-let main () =
- let input_name = Sys.argv.(1) in
- let output_name = Sys.argv.(2) in
- Array.iter
- (fun exn -> to_keep := StringSet.add exn !to_keep)
- Runtimedef.builtin_exceptions;
- for i = 3 to Array.length Sys.argv - 1 do
- to_keep := StringSet.add (String.capitalize Sys.argv.(i)) !to_keep
- done;
- let ic = open_in_bin input_name in
- Bytesections.read_toc ic;
- let toc = Bytesections.toc() in
- let pos_first_section = Bytesections.pos_first_section ic in
- if Sys.os_type = "MacOS" then begin
- (* Create output as a text file for bytecode scripts *)
- let c = open_out_gen [Open_wronly; Open_creat] 0o777 output_name in
- close_out c
- end;
- let oc =
- open_out_gen [Open_wronly; Open_creat; Open_trunc; Open_binary] 0o777
- output_name in
- (* Copy the file up to the symbol section as is *)
- seek_in ic 0;
- copy_file_chunk ic oc pos_first_section;
- (* Copy each section, modifying the symbol section in passing *)
- Bytesections.init_record oc;
- List.iter
- (fun (name, len) ->
- begin match name with
- "SYMB" ->
- let global_map = (input_value ic : Symtable.global_map) in
- output_value oc (expunge_map global_map)
- | "CRCS" ->
- let crcs = (input_value ic : (string * Digest.t) list) in
- output_value oc (expunge_crcs crcs)
- | _ ->
- copy_file_chunk ic oc len
- end;
- Bytesections.record oc name)
- toc;
- (* Rewrite the toc and trailer *)
- Bytesections.write_toc_and_trailer oc;
- (* Done *)
- close_in ic;
- close_out oc
-
-let _ = Printexc.catch main (); exit 0