[m-rev.] for review: full implementation of RTTI for equivalence types

Peter Wang wangp at students.csse.unimelb.edu.au
Fri Jun 1 13:27:20 AEST 2007


On 2007-06-01, Peter Ross <pro at missioncriticalit.com> wrote:

> Index: compiler/elds_to_erlang.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/elds_to_erlang.m,v
> retrieving revision 1.7
> diff -u -r1.7 elds_to_erlang.m
> --- compiler/elds_to_erlang.m	31 May 2007 08:12:53 -0000	1.7
> +++ compiler/elds_to_erlang.m	1 Jun 2007 02:39:16 -0000
> @@ -514,20 +514,35 @@
>  output_rtti_id(ModuleInfo, RttiId, !IO) :-
>      module_info_get_name(ModuleInfo, CurModuleName),
>      (
> -        (
> -            RttiId = elds_rtti_type_ctor_id(ModuleName, TypeName, Arity),
> -            Prefix = "TypeCtorInfo_" 
> -        ;
> -            RttiId = elds_rtti_type_info_id(ModuleName, TypeName, Arity),
> -            Prefix = "TypeInfo_" 
> -        ),
> +        RttiId = elds_rtti_type_ctor_id(RttiTypeCtor),
> +        RttiTypeCtor = rtti_type_ctor(ModuleName, _, _),
> +
>          % The only things with an empty module name should be the builtins.
>          ( ModuleName = unqualified("") ->
>              InstanceModule = mercury_public_builtin_module
>          ;
>              InstanceModule = ModuleName
>          ),
> -        Atom = Prefix ++ TypeName ++ "_" ++ string.from_int(Arity)
> +
> +        CRttiId = ctor_rtti_id(RttiTypeCtor, type_ctor_type_ctor_info),
> +        id_to_c_identifier(CRttiId, Atom)

Module qualify that.

>  
> +    %
> +    % These three types should never actually be used in
> +    % an Erlang program.
> +    %
> +erlang_type_ctor_rep(erlang_impl_artifact(erlang_impl_ctor_hp)) =
> +    elds_term(make_enum_alternative("hp")).
> +erlang_type_ctor_rep(erlang_impl_artifact(erlang_impl_ctor_subgoal)) =
> +    elds_term(make_enum_alternative("subgoal")).
> +erlang_type_ctor_rep(erlang_impl_artifact(erlang_impl_ctor_ticket)) =
> +    elds_term(make_enum_alternative("ticket")).

Should you throw exceptions for these?

>  :- pred gen_init_special_pred(module_info::in, maybe(rtti_proc_label)::in,
>      elds_expr::out, prog_varset::in, prog_varset::out) is det.
> @@ -559,6 +712,49 @@
>      WrapperFun = elds_fun(elds_clause(terms_from_vars(WrapperInputVars),
>          DoCall)).
>  
> +
> +    %
> +    % erlang_type_ctor_details(MI, D, E, Defns)
> +    %

Use full names for these variables.

The rest looks fine.

Peter
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list