Files
mercury/trial/hlds_data.int
1997-12-23 05:02:38 +00:00

159 lines
12 KiB
Plaintext

:- module hlds_data.
:- interface.
:- import_module hlds_pred, llds, prog_data, (inst).
:- import_module bool, list, map, varset.
:- type (hlds_data:cons_table) == (map:map((hlds_data:cons_id), (list:list((hlds_data:hlds_cons_defn))))).
:- type (hlds_data:cons_id)
---> hlds_data:cons((prog_data:sym_name), (prog_data:arity))
; hlds_data:int_const(int)
; hlds_data:string_const(string)
; hlds_data:float_const(float)
; hlds_data:pred_const((hlds_pred:pred_id), (hlds_pred:proc_id))
; hlds_data:code_addr_const((hlds_pred:pred_id), (hlds_pred:proc_id))
; hlds_data:base_type_info_const(string, string, int).
:- type (hlds_data:hlds_cons_defn)
---> hlds_data:hlds_cons_defn((list:list((prog_data:(type)))), (hlds_data:type_id), (term:context)).
:- pred hlds_data:cons_id_and_args_to_term((hlds_data:cons_id), (list:list((term:term))), (term:term)).
:- mode hlds_data:cons_id_and_args_to_term(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is semidet.
:- pred hlds_data:cons_id_arity((hlds_data:cons_id), (prog_data:arity)).
:- mode hlds_data:cons_id_arity(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:make_functor_cons_id((term:const), (prog_data:arity), (hlds_data:cons_id)).
:- mode hlds_data:make_functor_cons_id(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:make_cons_id((prog_data:sym_name), (list:list((prog_data:constructor_arg))), (hlds_data:type_id), (hlds_data:cons_id)).
:- mode hlds_data:make_cons_id(mercury_builtin:in, mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- type (hlds_data:type_id) == (std_util:pair((prog_data:sym_name), (prog_data:arity))).
:- type (hlds_data:type_table) == (map:map((hlds_data:type_id), (hlds_data:hlds_type_defn))).
:- type (hlds_data:hlds_type_defn).
:- pred hlds_data:set_type_defn((prog_data:tvarset), (list:list((prog_data:type_param))), (hlds_data:hlds_type_body), (hlds_pred:import_status), (term:context), (hlds_data:hlds_type_defn)).
:- mode hlds_data:set_type_defn(mercury_builtin:in, mercury_builtin:in, mercury_builtin:in, mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:get_type_defn_tvarset((hlds_data:hlds_type_defn), (prog_data:tvarset)).
:- mode hlds_data:get_type_defn_tvarset(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:get_type_defn_tparams((hlds_data:hlds_type_defn), (list:list((prog_data:type_param)))).
:- mode hlds_data:get_type_defn_tparams(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:get_type_defn_body((hlds_data:hlds_type_defn), (hlds_data:hlds_type_body)).
:- mode hlds_data:get_type_defn_body(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:get_type_defn_status((hlds_data:hlds_type_defn), (hlds_pred:import_status)).
:- mode hlds_data:get_type_defn_status(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:get_type_defn_context((hlds_data:hlds_type_defn), (term:context)).
:- mode hlds_data:get_type_defn_context(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:set_type_defn_status((hlds_data:hlds_type_defn), (hlds_pred:import_status), (hlds_data:hlds_type_defn)).
:- mode hlds_data:set_type_defn_status(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- type (hlds_data:hlds_type_body)
---> hlds_data:du_type((list:list((prog_data:constructor))), (hlds_data:cons_tag_values), (bool:bool), (std_util:maybe((prog_data:sym_name))))
; hlds_data:uu_type((list:list((prog_data:(type)))))
; hlds_data:eqv_type((prog_data:(type)))
; hlds_data:abstract_type.
:- type (hlds_data:cons_tag_values) == (map:map((hlds_data:cons_id), (hlds_data:cons_tag))).
:- type (hlds_data:cons_tag)
---> hlds_data:string_constant(string)
; hlds_data:float_constant(float)
; hlds_data:int_constant(int)
; hlds_data:pred_closure_tag((hlds_pred:pred_id), (hlds_pred:proc_id))
; hlds_data:code_addr_constant((hlds_pred:pred_id), (hlds_pred:proc_id))
; hlds_data:base_type_info_constant(string, string, int)
; hlds_data:simple_tag((hlds_data:tag_bits))
; hlds_data:complicated_tag((hlds_data:tag_bits), int)
; hlds_data:complicated_constant_tag((hlds_data:tag_bits), int)
; hlds_data:no_tag.
:- type (hlds_data:tag_bits) == int.
:- type (hlds_data:inst_id) == (std_util:pair((prog_data:sym_name), (prog_data:arity))).
:- type (hlds_data:inst_table).
:- type (hlds_data:user_inst_table).
:- type (hlds_data:user_inst_defns) == (map:map((hlds_data:inst_id), (hlds_data:hlds_inst_defn))).
:- type (hlds_data:unify_inst_table) == (map:map((prog_data:inst_name), (hlds_data:maybe_inst_det))).
:- type (hlds_data:unify_inst_pair)
---> hlds_data:unify_inst_pair((prog_data:is_live), ((inst):(inst)), ((inst):(inst)), (prog_data:unify_is_real)).
:- type (hlds_data:merge_inst_table) == (map:map((std_util:pair(((inst):(inst)))), (hlds_data:maybe_inst))).
:- type (hlds_data:ground_inst_table) == (map:map((prog_data:inst_name), (hlds_data:maybe_inst_det))).
:- type (hlds_data:any_inst_table) == (map:map((prog_data:inst_name), (hlds_data:maybe_inst_det))).
:- type (hlds_data:shared_inst_table) == (map:map((prog_data:inst_name), (hlds_data:maybe_inst))).
:- type (hlds_data:mostly_uniq_inst_table) == (map:map((prog_data:inst_name), (hlds_data:maybe_inst))).
:- type (hlds_data:maybe_inst)
---> hlds_data:unknown
; hlds_data:known(((inst):(inst))).
:- type (hlds_data:maybe_inst_det)
---> hlds_data:unknown
; hlds_data:known(((inst):(inst)), (hlds_data:determinism)).
:- type (hlds_data:hlds_inst_defn)
---> hlds_data:hlds_inst_defn((varset:varset), (list:list((prog_data:inst_param))), (hlds_data:hlds_inst_body), (prog_data:condition), (term:context), (hlds_pred:import_status)).
:- type (hlds_data:hlds_inst_body)
---> hlds_data:eqv_inst(((inst):(inst)))
; hlds_data:abstract_inst.
:- pred hlds_data:inst_table_init((hlds_data:inst_table)).
:- mode hlds_data:inst_table_init(mercury_builtin:out) is det.
:- pred hlds_data:inst_table_get_user_insts((hlds_data:inst_table), (hlds_data:user_inst_table)).
:- mode hlds_data:inst_table_get_user_insts(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_get_unify_insts((hlds_data:inst_table), (hlds_data:unify_inst_table)).
:- mode hlds_data:inst_table_get_unify_insts(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_get_merge_insts((hlds_data:inst_table), (hlds_data:merge_inst_table)).
:- mode hlds_data:inst_table_get_merge_insts(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_get_ground_insts((hlds_data:inst_table), (hlds_data:ground_inst_table)).
:- mode hlds_data:inst_table_get_ground_insts(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_get_any_insts((hlds_data:inst_table), (hlds_data:any_inst_table)).
:- mode hlds_data:inst_table_get_any_insts(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_get_shared_insts((hlds_data:inst_table), (hlds_data:shared_inst_table)).
:- mode hlds_data:inst_table_get_shared_insts(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_get_mostly_uniq_insts((hlds_data:inst_table), (hlds_data:mostly_uniq_inst_table)).
:- mode hlds_data:inst_table_get_mostly_uniq_insts(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_set_user_insts((hlds_data:inst_table), (hlds_data:user_inst_table), (hlds_data:inst_table)).
:- mode hlds_data:inst_table_set_user_insts(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_set_unify_insts((hlds_data:inst_table), (hlds_data:unify_inst_table), (hlds_data:inst_table)).
:- mode hlds_data:inst_table_set_unify_insts(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_set_merge_insts((hlds_data:inst_table), (hlds_data:merge_inst_table), (hlds_data:inst_table)).
:- mode hlds_data:inst_table_set_merge_insts(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_set_ground_insts((hlds_data:inst_table), (hlds_data:ground_inst_table), (hlds_data:inst_table)).
:- mode hlds_data:inst_table_set_ground_insts(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_set_any_insts((hlds_data:inst_table), (hlds_data:any_inst_table), (hlds_data:inst_table)).
:- mode hlds_data:inst_table_set_any_insts(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_set_shared_insts((hlds_data:inst_table), (hlds_data:shared_inst_table), (hlds_data:inst_table)).
:- mode hlds_data:inst_table_set_shared_insts(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:inst_table_set_mostly_uniq_insts((hlds_data:inst_table), (hlds_data:mostly_uniq_inst_table), (hlds_data:inst_table)).
:- mode hlds_data:inst_table_set_mostly_uniq_insts(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:user_inst_table_get_inst_defns((hlds_data:user_inst_table), (hlds_data:user_inst_defns)).
:- mode hlds_data:user_inst_table_get_inst_defns(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:user_inst_table_get_inst_ids((hlds_data:user_inst_table), (list:list((hlds_data:inst_id)))).
:- mode hlds_data:user_inst_table_get_inst_ids(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:user_inst_table_insert((hlds_data:user_inst_table), (hlds_data:inst_id), (hlds_data:hlds_inst_defn), (hlds_data:user_inst_table)).
:- mode hlds_data:user_inst_table_insert(mercury_builtin:in, mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is semidet.
:- pred hlds_data:user_inst_table_optimize((hlds_data:user_inst_table), (hlds_data:user_inst_table)).
:- mode hlds_data:user_inst_table_optimize(mercury_builtin:in, mercury_builtin:out) is det.
:- type (hlds_data:mode_id) == (std_util:pair((prog_data:sym_name), (prog_data:arity))).
:- type (hlds_data:mode_table).
:- type (hlds_data:mode_defns) == (map:map((hlds_data:mode_id), (hlds_data:hlds_mode_defn))).
:- type (hlds_data:hlds_mode_defn)
---> hlds_data:hlds_mode_defn((varset:varset), (list:list((prog_data:inst_param))), (hlds_data:hlds_mode_body), (prog_data:condition), (term:context), (hlds_pred:import_status)).
:- type (hlds_data:hlds_mode_body)
---> hlds_data:eqv_mode((prog_data:(mode))).
:- pred hlds_data:mode_table_get_mode_defns((hlds_data:mode_table), (hlds_data:mode_defns)).
:- mode hlds_data:mode_table_get_mode_defns(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:mode_table_get_mode_ids((hlds_data:mode_table), (list:list((hlds_data:mode_id)))).
:- mode hlds_data:mode_table_get_mode_ids(mercury_builtin:in, mercury_builtin:out) is det.
:- pred hlds_data:mode_table_insert((hlds_data:mode_table), (hlds_data:mode_id), (hlds_data:hlds_mode_defn), (hlds_data:mode_table)).
:- mode hlds_data:mode_table_insert(mercury_builtin:in, mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is semidet.
:- pred hlds_data:mode_table_init((hlds_data:mode_table)).
:- mode hlds_data:mode_table_init(mercury_builtin:out) is det.
:- pred hlds_data:mode_table_optimize((hlds_data:mode_table), (hlds_data:mode_table)).
:- mode hlds_data:mode_table_optimize(mercury_builtin:in, mercury_builtin:out) is det.
:- type (hlds_data:determinism)
---> hlds_data:det
; hlds_data:semidet
; hlds_data:nondet
; hlds_data:multidet
; hlds_data:cc_nondet
; hlds_data:cc_multidet
; hlds_data:erroneous
; hlds_data:failure.
:- type (hlds_data:can_fail)
---> hlds_data:can_fail
; hlds_data:cannot_fail.
:- type (hlds_data:soln_count)
---> hlds_data:at_most_zero
; hlds_data:at_most_one
; hlds_data:at_most_many_cc
; hlds_data:at_most_many.
:- pred hlds_data:determinism_components((hlds_data:determinism), (hlds_data:can_fail), (hlds_data:soln_count)).
:- mode hlds_data:determinism_components(mercury_builtin:in, mercury_builtin:out, mercury_builtin:out) is det.
:- mode hlds_data:determinism_components(mercury_builtin:out, mercury_builtin:in, mercury_builtin:in) is det.
:- pred hlds_data:determinism_to_code_model((hlds_data:determinism), (llds:code_model)).
:- mode hlds_data:determinism_to_code_model(mercury_builtin:in, mercury_builtin:out) is det.