From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by margaux.inria.fr, Mon, 24 May 93 09:39:37 +0200 Received: from concorde.inria.fr by margaux.inria.fr, Wed, 19 May 93 02:56:29 +0200 Received: from Tamuz.Stanford.EDU by concorde.inria.fr; Wed, 19 May 1993 02:57:00 +0200 Received: by Tamuz.Stanford.EDU (5.61/25-theory-eef) id AA18005; Tue, 18 May 93 17:56:39 -0700 From: Xavier Leroy Message-Id: <9305190056.AA18005@Tamuz.Stanford.EDU> Subject: Re: internals of the compiler To: dicosmo@dmi.ens.fr Date: Tue, 18 May 1993 17:56:37 -0700 (PDT) Cc: caml-list@margaux In-Reply-To: <9305071502.AA01496@violette.ens.fr> from "dicosmo@dmi.ens.fr" at May 7, 93 05:02:51 pm Content-Type: text/plain Sender: weis@margaux >> Je veux ecrire une fonction qui, par exemple, fait un recurrence sur >> tous les nom exporte's d'un module. >> --chet-- > C,a m'interesse aussi... je voudrais porter l'util de recherche en librairie > de CAML en CamlLight, et j'ai besoin de reperer les identificateurs > avec leur type (donc il faut aussi le type des types et des utils > pour les manipuler) > --Roberto Bon, voila la technique: un .zi, c'est juste une valeur du type modules__module ("modules", c'est un des fichiers de src/compiler dans la distribution) ecrite avec output_value. Il suffit donc de faire un truc comme #open "modules";; let interface = let ic = open_in_bin "foo.zi" in let m = (input_value ic : module) in close_in ic; m;; Ensuite, pour decrypter les informations contenues dans la valeur lue, il faut utiliser les types definis dans les modules const et globals. Les commentaires dans globals.ml expliquent a peu pres ce qui se passe. La representation des types est documentee la-dedans aussi. Les fonctions de manipulation sur les types sont dans le module types.ml. En resume: il faut au moins faire #open "const";; #open"globals";; #open "modules";; et compiler avec une option -I.....src/compiler. Si en plus on veut utiliser les fonctions de types.ml, il faut linker avec types.zo et sans doute quelques autres .zo du compilateur, a determiner experimentalement. Enfin, pour Roberto: ton outil de recherche dans les bibliotheques ferait un excellent "contrib" ! - Xavier