mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-21 12:23:44 +00:00
159 lines
12 KiB
Plaintext
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.
|