:- module private_builtin. :- use_module builtin, char, float, int, list, private_builtin, require, std_util, string. :- type (private_builtin:heap_pointer). :- pragma foreign_import_module("C", private_builtin). :- pred private_builtin:builtin_strcmp(int, string, string). :- mode private_builtin:builtin_strcmp((builtin:out), (builtin:in), (builtin:in)) is det. private_builtin:builtin_unify_int(X_3, X_3). :- pragma inline((private_builtin:builtin_compare_int)/3). private_builtin:builtin_compare_int(R_4, X_5, Y_6) :- (if int:(X_5 < Y_6) then R_4 = builtin:(<) else (if X_5 = Y_6 then R_4 = builtin:(=) else R_4 = builtin:(>) ) ). private_builtin:builtin_unify_character(C_3, C_3). :- pragma inline((private_builtin:builtin_compare_character)/3). private_builtin:builtin_compare_character(R_4, X_5, Y_6) :- char:to_int(X_5, XI_7), char:to_int(Y_6, YI_8), (if int:(XI_7 < YI_8) then R_4 = builtin:(<) else (if XI_7 = YI_8 then R_4 = builtin:(=) else R_4 = builtin:(>) ) ). private_builtin:builtin_unify_string(S_3, S_3). :- pragma inline((private_builtin:builtin_compare_string)/3). private_builtin:builtin_compare_string(R_4, S1_5, S2_6) :- private_builtin:builtin_strcmp(Res_7, S1_5, S2_6), (if V_8 = 0, int:(Res_7 < V_8) then R_4 = builtin:(<) else (if Res_7 = 0 then R_4 = builtin:(=) else R_4 = builtin:(>) ) ). private_builtin:builtin_unify_float(F_3, F_3). :- pragma inline((private_builtin:builtin_compare_float)/3). private_builtin:builtin_compare_float(R_4, F1_5, F2_6) :- (if float:(F1_5 < F2_6) then R_4 = builtin:(<) else (if float:(F1_5 > F2_6) then R_4 = builtin:(>) else R_4 = builtin:(=) ) ). :- pragma no_inline((private_builtin:builtin_unify_pred)/2). private_builtin:builtin_unify_pred(_X_3, _Y_4) :- (if std_util:semidet_succeed then V_5 = "attempted higher-order unification", require:error(V_5) else std_util:semidet_succeed ). :- pragma no_inline((private_builtin:builtin_compare_pred)/3). private_builtin:builtin_compare_pred(Result_4, _X_5, _Y_6) :- (if std_util:semidet_succeed then V_7 = "attempted higher-order comparison", require:error(V_7) else Result_4 = builtin:(<) ). :- pragma foreign_proc("C", private_builtin:builtin_strcmp(Res :: (builtin:out), S1 :: (builtin:in), S2 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], "Res = strcmp(S1, S2);"). :- pragma foreign_proc("C", private_builtin:type_info_from_typeclass_info(TypeClassInfo :: (builtin:in), Index :: (builtin:in), TypeInfo :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " TypeInfo = MR_typeclass_info_type_info(TypeClassInfo, Index); "). :- pragma foreign_proc("C", private_builtin:unconstrained_type_info_from_typeclass_info(TypeClassInfo :: (builtin:in), Index :: (builtin:in), TypeInfo :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " TypeInfo = MR_typeclass_info_unconstrained_type_info(TypeClassInfo, Index); "). :- pragma foreign_proc("C", private_builtin:superclass_from_typeclass_info(TypeClassInfo0 :: (builtin:in), Index :: (builtin:in), TypeClassInfo :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " TypeClassInfo = MR_typeclass_info_superclass_info(TypeClassInfo0, Index); "). :- pragma foreign_proc("C", private_builtin:instance_constraint_from_typeclass_info(TypeClassInfo0 :: (builtin:in), Index :: (builtin:in), TypeClassInfo :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], " TypeClassInfo = MR_typeclass_info_arg_typeclass_info(TypeClassInfo0, Index); "). :- pragma foreign_proc("C", private_builtin:store_ticket(Ticket :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_store_ticket(Ticket); #else Ticket = 0; #endif "). :- pragma foreign_proc("C", private_builtin:reset_ticket_undo(Ticket :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_reset_ticket(Ticket, MR_undo); #endif "). :- pragma foreign_proc("C", private_builtin:reset_ticket_commit(Ticket :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_reset_ticket(Ticket, MR_commit); #endif "). :- pragma foreign_proc("C", private_builtin:reset_ticket_solve(Ticket :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_reset_ticket(Ticket, MR_solve); #endif "). :- pragma foreign_proc("C", private_builtin:discard_ticket, [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_discard_ticket(); #endif "). :- pragma foreign_proc("C", private_builtin:prune_ticket, [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_prune_ticket(); #endif "). :- pragma foreign_proc("C", private_builtin:mark_ticket_stack(TicketCounter :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_mark_ticket_stack(TicketCounter); #else TicketCounter = 0; #endif "). :- pragma foreign_proc("C", private_builtin:prune_tickets_to(TicketCounter :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_USE_TRAIL MR_prune_tickets_to(TicketCounter); #endif "). :- pragma inline((private_builtin:free_heap)/1). :- pragma foreign_proc("C", private_builtin:free_heap(Val :: (builtin:di)), [will_not_call_mercury, thread_safe, not_tabled_for_io, promise_pure], "MR_free_heap((void *) Val);"). :- pragma foreign_proc("C", private_builtin:gc_trace(Pointer :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifdef MR_NATIVE_GC *(MR_Word *)Pointer = MR_agc_deep_copy(* (MR_Word *) Pointer, (MR_TypeInfo) TypeInfo_for_T, MR_ENGINE(MR_eng_heap_zone2->min), MR_ENGINE(MR_eng_heap_zone2->hardmax)); #else MR_fatal_error(\"private_builtin__gc_trace/2: \" \"called when accurate GC not enabled\"); #endif "). :- pragma inline((private_builtin:mark_hp)/1). :- pragma foreign_proc("C", private_builtin:mark_hp(SavedHeapPointer :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifndef MR_CONSERVATIVE_GC MR_mark_hp(SavedHeapPointer); #else /* We can\'t do heap reclamation with conservative GC. */ SavedHeapPointer = 0; #endif "). :- pragma inline((private_builtin:restore_hp)/1). :- pragma foreign_proc("C", private_builtin:restore_hp(SavedHeapPointer :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], " #ifndef MR_CONSERVATIVE_GC MR_restore_hp(SavedHeapPointer); #endif "). private_builtin:unused :- (if std_util:semidet_succeed then V_1 = "attempted use of dead predicate", require:error(V_1) else true ). private_builtin:nonvar((V_2 :: (builtin:ui))). private_builtin:nonvar((V_3 :: (builtin:in))). private_builtin:nonvar((V_4 :: (builtin:unused))) :- fail. :- pragma foreign_proc("C", private_builtin:imp, [will_not_call_mercury, thread_safe, not_tabled_for_io], ""). :- pragma termination_info(private_builtin:builtin_unify_int((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_compare_int((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_unify_character((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_compare_character((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(private_builtin:builtin_unify_string((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_compare_string((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_unify_float((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_compare_float((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_unify_pred((builtin:in), (builtin:in)), finite(0, [no, no]), can_loop). :- pragma termination_info(private_builtin:builtin_compare_pred((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(private_builtin:builtin_unify_tuple((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(private_builtin:builtin_compare_tuple((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop). :- pragma termination_info(private_builtin:builtin_compare_non_canonical_type((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop). :- pragma termination_info((private_builtin:compare_error), infinite, can_loop). :- pragma termination_info(private_builtin:builtin_int_lt((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:builtin_int_gt((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:typed_unify((builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop). :- pragma termination_info(private_builtin:typed_unify((builtin:in), (builtin:out)), infinite, can_loop). :- pragma termination_info(private_builtin:typed_compare((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no]), can_loop). :- pragma termination_info(private_builtin:type_info_from_typeclass_info((builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(private_builtin:unconstrained_type_info_from_typeclass_info((builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(private_builtin:superclass_from_typeclass_info((builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(private_builtin:instance_constraint_from_typeclass_info((builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info(private_builtin:store_ticket((builtin:out)), infinite, cannot_loop). :- pragma termination_info(private_builtin:reset_ticket_undo((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(private_builtin:reset_ticket_commit((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info(private_builtin:reset_ticket_solve((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info((private_builtin:discard_ticket), finite(0, []), cannot_loop). :- pragma termination_info((private_builtin:prune_ticket), finite(0, []), cannot_loop). :- pragma termination_info(private_builtin:mark_ticket_stack((builtin:out)), infinite, cannot_loop). :- pragma termination_info(private_builtin:prune_tickets_to((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info((private_builtin:trailed_nondet_pragma_foreign_code), infinite, can_loop). :- pragma termination_info(private_builtin:free_heap((builtin:di)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:gc_trace((builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:mark_hp((builtin:out)), infinite, cannot_loop). :- pragma termination_info(private_builtin:restore_hp((builtin:in)), finite(0, [no]), cannot_loop). :- pragma termination_info((private_builtin:reclaim_heap_nondet_pragma_foreign_code), infinite, can_loop). :- pragma termination_info(private_builtin:unsafe_type_cast((builtin:in), (builtin:out)), infinite, cannot_loop). :- pragma termination_info((private_builtin:unused), finite(0, []), can_loop). :- pragma termination_info(private_builtin:nyi_foreign_type_unify((builtin:in), (builtin:in)), finite(0, [no, no, no]), can_loop). :- pragma termination_info(private_builtin:nyi_foreign_type_compare((builtin:uo), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), can_loop). :- pragma termination_info(private_builtin:var((builtin:ui)), infinite, cannot_loop). :- pragma termination_info(private_builtin:var((builtin:in)), infinite, cannot_loop). :- pragma termination_info(private_builtin:var((builtin:unused)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:nonvar((builtin:ui)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:nonvar((builtin:in)), finite(0, [no, no]), cannot_loop). :- pragma termination_info(private_builtin:nonvar((builtin:unused)), infinite, cannot_loop). :- pragma termination_info(private_builtin:sorry((builtin:in)), infinite, can_loop). :- pragma termination_info((private_builtin:imp), finite(0, []), cannot_loop).