* [Caml-list] Is there a typed bin-annot cmt tree with module and type aliases resolved?
@ 2012-12-04 1:08 yoann padioleau
2012-12-04 8:18 ` Esther Baruk
0 siblings, 1 reply; 2+ messages in thread
From: yoann padioleau @ 2012-12-04 1:08 UTC (permalink / raw)
To: caml-list
Hi,
I want to use the .cmt files generated by -bin-annot for some
dependency analysis. The
problem is that not all names are resolved, especially module aliases
and type aliases are not
resolved. For instance on this file:
module X = Variant
open Nested_module
module Y = Nested
let use_variant = function
| X.Constructor1 -> 1
| _ -> 2
I got this dump for the AST/CMT file:
{
str_items=[Tstr_module("X", (), Tmod_ident("Variant", ()));
Tstr_open("Nested_module", ());
Tstr_module("Y", (), Tmod_ident("Nested_module.Nested", ()));
Tstr_value((),
[(Tpat_var("use_variant", ()),
Texp_function((),
[(Tpat_construct("X.Constructor1", (), (), [], false),
Texp_constant(())); (Tpat_any, Texp_constant(()))], ()))])];
str_type=(); str_final_env=(); }
but I would really like an AST where all names are fully resolved, so
X.Constructor1 becomes
Variant.Constructor1. In the example above Nested_module.Nested is
resolved (so the open Nested_module
is handled), but not X.Constructor1.
Same for types, with this file:
type list2 = int list
type use_list2 =
| Constructor of list2
let f = function
| Constructor [] -> 1
| _ -> 2
I got this dump of the AST/CMT:
{
str_items=[Tstr_type(
[("list2", (),
{typ_params=[]; typ_type=(); typ_cstrs=[];
typ_kind=Ttype_abstract; typ_private=();
typ_manifest=Some(Ttyp_constr("list", (),
[Ttyp_constr("int", (), [])]));
typ_variance=[]; typ_loc=(); })]);
Tstr_type(
[("use_list2", (),
{typ_params=[]; typ_type=(); typ_cstrs=[];
typ_kind=Ttype_variant(
[("Constructor", (),
[Ttyp_constr("list2", (), [])], ())]);
typ_private=(); typ_manifest=None; typ_variance=[];
typ_loc=(); })]);
Tstr_value((),
[(Tpat_var("f", ()),
Texp_function((),
[(Tpat_construct("Constructor", (), (),
[Tpat_construct("[]", (), (), [], false)], false),
Texp_constant(())); (Tpat_any, Texp_constant(()))], ()))])];
str_type=(); str_final_env=(); }
and when I ask the type of [], it says list2, but I would really like
the final type that is int list2.
Should I use env.ml for resolving?
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Caml-list] Is there a typed bin-annot cmt tree with module and type aliases resolved?
2012-12-04 1:08 [Caml-list] Is there a typed bin-annot cmt tree with module and type aliases resolved? yoann padioleau
@ 2012-12-04 8:18 ` Esther Baruk
0 siblings, 0 replies; 2+ messages in thread
From: Esther Baruk @ 2012-12-04 8:18 UTC (permalink / raw)
To: yoann padioleau; +Cc: caml-list
[-- Attachment #1: Type: text/plain, Size: 3363 bytes --]
Hi,
The goal of this cmt file is to reflect the AST as it is in the source file
so that explains why the aliases are not meant to be resolved.
You can perform an analysis on the tree and rewrite it while resolving
aliases. A functor will let you write just the functions you need and do
the pattern matching for you : typedtreeIter.ml. It is located in the
"typing" directory of the OCaml sources.
Esther Baruk
On Tue, Dec 4, 2012 at 2:08 AM, yoann padioleau
<yoann.padioleau@gmail.com>wrote:
> Hi,
>
> I want to use the .cmt files generated by -bin-annot for some
> dependency analysis. The
> problem is that not all names are resolved, especially module aliases
> and type aliases are not
> resolved. For instance on this file:
>
> module X = Variant
> open Nested_module
> module Y = Nested
>
> let use_variant = function
> | X.Constructor1 -> 1
> | _ -> 2
>
>
> I got this dump for the AST/CMT file:
> {
> str_items=[Tstr_module("X", (), Tmod_ident("Variant", ()));
> Tstr_open("Nested_module", ());
> Tstr_module("Y", (), Tmod_ident("Nested_module.Nested", ()));
> Tstr_value((),
> [(Tpat_var("use_variant", ()),
> Texp_function((),
> [(Tpat_construct("X.Constructor1", (), (), [], false),
> Texp_constant(())); (Tpat_any, Texp_constant(()))],
> ()))])];
> str_type=(); str_final_env=(); }
>
> but I would really like an AST where all names are fully resolved, so
> X.Constructor1 becomes
> Variant.Constructor1. In the example above Nested_module.Nested is
> resolved (so the open Nested_module
> is handled), but not X.Constructor1.
>
> Same for types, with this file:
> type list2 = int list
>
> type use_list2 =
> | Constructor of list2
>
> let f = function
> | Constructor [] -> 1
> | _ -> 2
>
>
> I got this dump of the AST/CMT:
> {
> str_items=[Tstr_type(
> [("list2", (),
> {typ_params=[]; typ_type=(); typ_cstrs=[];
> typ_kind=Ttype_abstract; typ_private=();
> typ_manifest=Some(Ttyp_constr("list", (),
> [Ttyp_constr("int", (), [])]));
> typ_variance=[]; typ_loc=(); })]);
> Tstr_type(
> [("use_list2", (),
> {typ_params=[]; typ_type=(); typ_cstrs=[];
> typ_kind=Ttype_variant(
> [("Constructor", (),
> [Ttyp_constr("list2", (), [])], ())]);
> typ_private=(); typ_manifest=None; typ_variance=[];
> typ_loc=(); })]);
> Tstr_value((),
> [(Tpat_var("f", ()),
> Texp_function((),
> [(Tpat_construct("Constructor", (), (),
> [Tpat_construct("[]", (), (), [], false)], false),
> Texp_constant(())); (Tpat_any, Texp_constant(()))],
> ()))])];
> str_type=(); str_final_env=(); }
>
> and when I ask the type of [], it says list2, but I would really like
> the final type that is int list2.
>
> Should I use env.ml for resolving?
>
> --
> Caml-list mailing list. Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
[-- Attachment #2: Type: text/html, Size: 4470 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-12-04 8:18 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-04 1:08 [Caml-list] Is there a typed bin-annot cmt tree with module and type aliases resolved? yoann padioleau
2012-12-04 8:18 ` Esther Baruk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox