:- module rtti_implementation. :- use_module builtin, int, list, private_builtin, require, std_util, string. :- type (rtti_implementation:typeinfo_locn) ---> typeinfo_locn((builtin:c_pointer)) . :- type (rtti_implementation:type_layout) ---> type_layout((builtin:c_pointer)) . :- type (rtti_implementation:type_info) ---> type_info((builtin:c_pointer)) . :- type (rtti_implementation:type_functors) ---> type_functors((builtin:c_pointer)) . :- type (rtti_implementation:type_ctor_rep) ---> enum ; enum_usereq ; du ; du_usereq ; notag ; notag_usereq ; equiv ; (func) ; int ; char ; float ; string ; (pred) ; univ ; void ; c_pointer ; typeinfo ; typeclassinfo ; array ; succip ; hp ; curfr ; maxfr ; redofr ; redoip ; trail_ptr ; ticket ; notag_ground ; notag_ground_usereq ; equiv_ground ; tuple ; reserved_addr ; reserved_addr_usereq ; type_ctor_info ; base_typeclass_info ; type_desc ; type_ctor_desc ; foreign ; unknown . :- type (rtti_implementation:type_ctor_info) ---> type_ctor_info((builtin:c_pointer)) . :- type (rtti_implementation:sectag_locn) ---> none ; local ; remote ; variable . :- type (rtti_implementation:ptag_entry) ---> ptag_entry((builtin:c_pointer)) . :- type (rtti_implementation:pseudo_type_info) ---> pred_type((builtin:c_pointer)) . :- type (rtti_implementation:pred_type) ---> pred_type((builtin:c_pointer)) . :- type (rtti_implementation:exist_info) ---> exist_info((builtin:c_pointer)) . :- type (rtti_implementation:du_sectag_alternatives) ---> du_sectag_alternatives((builtin:c_pointer)) . :- type (rtti_implementation:du_functor_descriptor) ---> du_functor_descriptor((builtin:c_pointer)) . :- type (rtti_implementation:compare_pred) ---> compare_pred((builtin:c_pointer)) . :- type (rtti_implementation:arg_types) ---> arg_types((builtin:c_pointer)) . :- func rtti_implementation:type_ctor_arity((rtti_implementation:type_ctor_info)) = int. :- mode rtti_implementation:type_ctor_arity((builtin:in)) = (builtin:out) is det. :- func rtti_implementation:type_ctor_module_name((rtti_implementation:type_ctor_info)) = string. :- mode rtti_implementation:type_ctor_module_name((builtin:in)) = (builtin:out) is det. :- func rtti_implementation:type_ctor_name((rtti_implementation:type_ctor_info)) = string. :- mode rtti_implementation:type_ctor_name((builtin:in)) = (builtin:out) is det. :- pragma foreign_proc("C", rtti_implementation:get_type_info(_T :: (builtin:unused)) = (TypeInfo :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " TypeInfo = TypeInfo_for_T; "). rtti_implementation:type_ctor_name_and_arity(TypeCtorInfo_5, ModuleName_6, Name_7, Arity_8) :- ModuleName_6 = rtti_implementation:type_ctor_module_name(TypeCtorInfo_5), Name_7 = rtti_implementation:type_ctor_name(TypeCtorInfo_5), Arity_8 = rtti_implementation:type_ctor_arity(TypeCtorInfo_5). :- pragma foreign_proc("C", rtti_implementation:unsafe_cast(VarIn :: (builtin:in)) = (VarOut :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " VarOut = VarIn; "). :- pragma foreign_proc("C", rtti_implementation:type_ctor_arity(TypeCtorInfo :: (builtin:in)) = (Arity :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " MR_TypeCtorInfo tci = (MR_TypeCtorInfo) TypeCtorInfo; Arity = tci->MR_type_ctor_arity; "). :- pragma foreign_proc("C", rtti_implementation:type_ctor_module_name(TypeCtorInfo :: (builtin:in)) = (Name :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " MR_TypeCtorInfo tci = (MR_TypeCtorInfo) TypeCtorInfo; Name = (MR_String) MR_type_ctor_module_name(tci); "). :- pragma foreign_proc("C", rtti_implementation:type_ctor_name(TypeCtorInfo :: (builtin:in)) = (Name :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " MR_TypeCtorInfo tci = (MR_TypeCtorInfo) TypeCtorInfo; Name = (MR_String) MR_type_ctor_name(tci); "). :- pragma termination_info(rtti_implementation:get_type_info((builtin:unused)) = (builtin:out), infinite, cannot_loop). :- pragma termination_info(rtti_implementation:generic_unify((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(rtti_implementation:generic_compare((builtin:out), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop). :- pragma termination_info(rtti_implementation:compare_type_infos((builtin:out), (builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(rtti_implementation:type_ctor_and_args((builtin:in), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(rtti_implementation:type_ctor_name_and_arity((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(rtti_implementation:deconstruct((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop). :- pragma termination_info(rtti_implementation:unsafe_cast((builtin:in)) = (builtin:out), infinite, cannot_loop).