Files
mercury/compiler/erlang_rtti.m
Zoltan Somogyi 295415090e Convert almost all remaining modules in the compiler to use
Estimated hours taken: 6
Branches: main

compiler/*.m:
	Convert almost all remaining modules in the compiler to use
	"$module, $pred" instead of "this_file" in error messages.

	In a few cases, the old error message was misleading, since it
	contained an incorrect, out-of-date or cut-and-pasted predicate name.

tests/invalid/unresolved_overloading.err_exp:
	Update an expected output containing an updated error message.
2011-05-23 05:08:24 +00:00

180 lines
6.2 KiB
Mathematica

%-----------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et
%-----------------------------------------------------------------------------%
% Copyright (C) 2007, 2011 The University of Melbourne.
% This file may only be copied under the terms of the GNU General
% Public License - see the file COPYING in the Mercury distribution.
%-----------------------------------------------------------------------------%
%
% File: erlang_rtti.m.
% Authors: petdr, zs.
%
% Definitions of data structures for representing run-time type information
% in the Erlang backend.
%
% Note we only define new types for from where the RTTI differs
% from what is defined in rtti.m.
%
% In the context of the MLDS backend erlang_rtti.m is the equivalent of
% rtti.m, while erl_rtti.m is the equivalent to rtti_to_mlds.m
%
% These types have to be kept in sync with the corresponding types in
% library/erlang_rtti_implementation.m
%
%-----------------------------------------------------------------------------%
:- module backend_libs.erlang_rtti.
:- interface.
:- import_module backend_libs.rtti.
:- import_module hlds.
:- import_module hlds.hlds_rtti.
:- import_module mdbcomp.
:- import_module mdbcomp.prim_data.
:- import_module list.
:- import_module maybe.
%-----------------------------------------------------------------------------%
%
% The data structures representing type constructors
%
% A type_ctor_data structure contains all the information that the
% runtime system needs to know about a type constructor.
%
:- type erlang_type_ctor_data
---> erlang_type_ctor_data(
etcr_version :: int,
etcr_module_name :: module_name,
etcr_type_name :: string,
etcr_arity :: int,
%
% It is possible that the type doesn't have
% a unify or compare predicate.
% eg one cannot unify higher-order types.
%
etcr_unify :: maybe(rtti_proc_label),
etcr_compare :: maybe(rtti_proc_label),
etcr_rep_details :: erlang_type_ctor_details
).
% A erlang_type_ctor_details structure contains all the information that
% the runtime system needs to know about the data representation scheme
% used by a type constructor.
%
% XXX Later on we may want to handle the enum and notag du types
% specially.
% Enum is for types that define only constants.
% Notag is for types that define only one unary functor.
%
:- type erlang_type_ctor_details
---> erlang_du(
% The function symbols are listed in declaration order.
edu_functors :: list(erlang_du_functor)
)
; erlang_dummy(
edummy_name :: string
)
% Mercury lists are represented as erlang lists
; erlang_list
%
; erlang_array
; erlang_eqv(
% XXX why is it a pseudo type info
eeqv_type :: rtti_maybe_pseudo_type_info
)
% Builtin Mercury types
; erlang_builtin(
ebuiltin_ctor :: builtin_ctor
)
% Types used just in the implementation.
; erlang_impl_artifact(
eimpl_ctor :: erlang_impl_ctor
)
; erlang_foreign
.
:- type erlang_du_functor
---> erlang_du_functor(
edu_name :: string,
edu_orig_arity :: int,
% The declaration order of the functor.
edu_ordinal :: int,
% The lexicographic order of the functor.
edu_lex :: int,
% erlang atom which represents the functor
% currently encoded version of name
% in the future maybe name_arity
edu_rep :: erlang_atom_raw,
edu_arg_infos :: list(du_arg_info),
edu_exist_info :: maybe(exist_info)
).
:- type erlang_atom_raw
---> erlang_atom_raw(string).
% The list of type constructors that are used behind the scenes by
% the Mercury implementation.
%
:- type erlang_impl_ctor
---> erlang_impl_ctor_type_info
; erlang_impl_ctor_type_ctor_info
; erlang_impl_ctor_typeclass_info
; erlang_impl_ctor_base_typeclass_info
% The following are introduced in
% private_builtin and table_builtin
% but should never be used.
%
; erlang_impl_ctor_hp
; erlang_impl_ctor_subgoal
; erlang_impl_ctor_ticket
.
%-----------------------------------------------------------------------------%
%
% The data structures representing the top-level global data structures
% generated by the Mercury compiler. These are all generated read-only.
:- type erlang_rtti_data
---> erlang_rtti_data_type_ctor_info(
erlang_type_ctor_data
)
; erlang_rtti_data_type_info(
rtti_type_info
)
; erlang_rtti_data_pseudo_type_info(
rtti_pseudo_type_info
)
; erlang_rtti_data_base_typeclass_info(
tc_name, % identifies the type class
module_name, % module containing instance decl.
string, % encodes the names and arities of the
% types in the instance declaration
base_typeclass_info
)
; erlang_rtti_data_type_class_decl(
tc_decl
)
; erlang_rtti_data_type_class_instance(
tc_instance
).
%-----------------------------------------------------------------------------%
:- end_module backend_libs.erlang_rtti.
%-----------------------------------------------------------------------------%