From 8d2cb067ec19728d9a5ca908f17890ec2400a22a Mon Sep 17 00:00:00 2001 From: vsc Date: Thu, 18 Nov 2004 22:32:40 +0000 Subject: [PATCH] fix situation where we might assume nonextsing double initialisation of C predicates (use Hidden Pred Flag). $host_type was double initialised. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1177 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/agc.c | 4 +- C/arrays.c | 14 +++--- C/attvar.c | 2 +- C/bb.c | 2 +- C/bignum.c | 2 +- C/c_interface.c | 13 ++++- C/cdmgr.c | 111 ++++++++++++++++++++++-------------------- C/cmppreds.c | 2 +- C/corout.c | 16 +++--- C/dbase.c | 54 ++++++++++---------- C/depth_bound.c | 4 +- C/exec.c | 46 ++++++++--------- C/grow.c | 10 ++-- C/heapgc.c | 4 +- C/index.c | 10 ++-- C/init.c | 8 ++- C/iopreds.c | 88 ++++++++++++++++----------------- C/load_foreign.c | 4 +- C/modules.c | 8 +-- C/save.c | 8 +-- C/scanner.c | 2 +- C/sort.c | 6 +-- C/stdpreds.c | 70 +++++++++++++------------- C/sysbits.c | 61 +++++++++++++---------- C/threads.c | 56 ++++++++++----------- C/utilpreds.c | 8 +-- C/ypsocks.c | 4 +- H/absmi.h | 2 +- OPTYap/opt.preds.c | 20 ++++---- console/yap.c | 1 + include/yap_structs.h | 2 + m4/Yap.h.m4 | 6 ++- 32 files changed, 335 insertions(+), 313 deletions(-) diff --git a/C/agc.c b/C/agc.c index 7a52c54a2..dfc518caa 100644 --- a/C/agc.c +++ b/C/agc.c @@ -414,6 +414,6 @@ p_inform_agc(void) void Yap_init_agc(void) { - Yap_InitCPred("$atom_gc", 0, p_atom_gc, 0); - Yap_InitCPred("$inform_agc", 3, p_inform_agc, 0); + Yap_InitCPred("$atom_gc", 0, p_atom_gc, HiddenPredFlag); + Yap_InitCPred("$inform_agc", 3, p_inform_agc, HiddenPredFlag); } diff --git a/C/arrays.c b/C/arrays.c index 2a0f2608f..febb7a378 100644 --- a/C/arrays.c +++ b/C/arrays.c @@ -2014,9 +2014,9 @@ p_static_array_to_term(void) void Yap_InitArrayPreds(void) { - Yap_InitCPred("$create_array", 2, p_create_array, SyncPredFlag); - Yap_InitCPred("$array_references", 3, p_array_references, SafePredFlag); - Yap_InitCPred("$array_arg", 3, p_array_arg, SafePredFlag); + Yap_InitCPred("$create_array", 2, p_create_array, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$array_references", 3, p_array_references, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$array_arg", 3, p_array_arg, SafePredFlag|HiddenPredFlag); Yap_InitCPred("static_array", 3, p_create_static_array, SafePredFlag|SyncPredFlag); Yap_InitCPred("resize_static_array", 3, p_resize_static_array, SafePredFlag|SyncPredFlag); Yap_InitCPred("mmapped_array", 4, p_create_mmapped_array, SafePredFlag|SyncPredFlag); @@ -2024,10 +2024,10 @@ Yap_InitArrayPreds(void) Yap_InitCPred("add_to_array_element", 4, p_add_to_array_element, SafePredFlag); Yap_InitCPred("array_element", 3, p_access_array, 0); Yap_InitCPred("close_static_array", 1, p_close_static_array, SafePredFlag); - Yap_InitCPred("$sync_mmapped_arrays", 0, p_sync_mmapped_arrays, SafePredFlag); - Yap_InitCPred("$compile_array_refs", 0, p_compile_array_refs, SafePredFlag); - Yap_InitCPred("$array_refs_compiled", 0, p_array_refs_compiled, SafePredFlag); - Yap_InitCPred("$static_array_properties", 3, p_static_array_properties, SafePredFlag); + Yap_InitCPred("$sync_mmapped_arrays", 0, p_sync_mmapped_arrays, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$compile_array_refs", 0, p_compile_array_refs, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$array_refs_compiled", 0, p_array_refs_compiled, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$static_array_properties", 3, p_static_array_properties, SafePredFlag|HiddenPredFlag); Yap_InitCPred("static_array_to_term", 2, p_static_array_to_term, 0L); } diff --git a/C/attvar.c b/C/attvar.c index 127170625..9c776180f 100644 --- a/C/attvar.c +++ b/C/attvar.c @@ -719,7 +719,7 @@ void Yap_InitAttVarPreds(void) Yap_InitCPred("all_attvars", 1, p_all_attvars, SafePredFlag); CurrentModule = OldCurrentModule; Yap_InitCPred("attvar", 1, p_is_attvar, SafePredFlag|TestPredFlag); - Yap_InitCPred("$att_bound", 1, p_attvar_bound, SafePredFlag|TestPredFlag); + Yap_InitCPred("$att_bound", 1, p_attvar_bound, SafePredFlag|TestPredFlag|HiddenPredFlag); } diff --git a/C/bb.c b/C/bb.c index f6c180e22..6e6876d07 100644 --- a/C/bb.c +++ b/C/bb.c @@ -380,6 +380,6 @@ Yap_InitBBPreds(void) Yap_InitCPred("bb_get", 2, p_bb_get, 0); Yap_InitCPred("bb_delete", 2, p_bb_delete, 0); Yap_InitCPred("bb_update", 3, p_bb_update, 0); - Yap_InitCPred("$resize_bb_int_keys", 1, p_resize_bb_int_keys, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$resize_bb_int_keys", 1, p_resize_bb_int_keys, SafePredFlag|SyncPredFlag|HiddenPredFlag); } diff --git a/C/bignum.c b/C/bignum.c index c8e0d6e60..68ff0f1cc 100644 --- a/C/bignum.c +++ b/C/bignum.c @@ -258,5 +258,5 @@ Yap_InitBigNums(void) ReAllocBigNumSpace, FreeBigNumSpace); #endif - Yap_InitCPred("$bignum", 1, p_is_bignum, SafePredFlag); + Yap_InitCPred("$bignum", 1, p_is_bignum, SafePredFlag|HiddenPredFlag); } diff --git a/C/c_interface.c b/C/c_interface.c index da7154dee..b4fae3691 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -10,8 +10,11 @@ * File: c_interface.c * * comments: c_interface primitives definition * * * -* Last rev: $Date: 2004-10-31 02:18:03 $,$Author: vsc $ * +* Last rev: $Date: 2004-11-18 22:32:31 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.56 2004/10/31 02:18:03 vsc +* fix bug in handling Yap heap overflow while adding new clause. +* * Revision 1.55 2004/10/28 20:12:20 vsc * Use Doug Lea's malloc as an alternative to YAP's standard malloc * don't use TR directly in scanner/parser, this avoids trouble with ^C while @@ -985,7 +988,10 @@ YAP_CompileClause(Term t) codeaddr = Yap_cclause (t,0, mod, t); if (codeaddr != NULL) { t = Deref(ARG1); /* just in case there was an heap overflow */ - Yap_addclause (t, codeaddr, TRUE, mod, &tn); + if (!Yap_addclause (t, codeaddr, TRUE, mod, &tn)) { + YAPLeaveCriticalSection(); + return Yap_ErrorMessage; + } } YAPLeaveCriticalSection(); @@ -1033,6 +1039,8 @@ YAP_Init(YAP_init_args *yap_init) } else { Heap = yap_init->HeapSize; } + /* tell the system who should cope with interruptions */ + Yap_PrologShouldHandleInterrupts = yap_init->PrologShouldHandleInterrupts; Yap_InitWorkspace(Heap, Stack, Trail, yap_init->NumberWorkers, yap_init->SchedulerLoop, @@ -1127,6 +1135,7 @@ YAP_FastInit(char saved_state[]) init_args.NumberWorkers = 1; init_args.SchedulerLoop = 10; init_args.DelayedReleaseLoad = 3; + init_args.PrologShouldHandleInterrupts = FALSE; init_args.Argc = 0; init_args.Argv = NULL; diff --git a/C/cdmgr.c b/C/cdmgr.c index 83c879242..34d0ddf5f 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -11,8 +11,12 @@ * File: cdmgr.c * * comments: Code manager * * * -* Last rev: $Date: 2004-11-04 18:22:31 $,$Author: vsc $ * +* Last rev: $Date: 2004-11-18 22:32:31 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.141 2004/11/04 18:22:31 vsc +* don't ever use memory that has been freed (that was done by LU). +* generic fixes for WIN32 libraries +* * Revision 1.140 2004/10/31 02:18:03 vsc * fix bug in handling Yap heap overflow while adding new clause. * @@ -1203,7 +1207,7 @@ add_first_dynamic(PredEntry *p, yamop *cp, int spy_flag) cl = (DynamicClause *) Yap_AllocCodeSpace((Int)NEXTOP(NEXTOP(NEXTOP(ncp,ld),e),e)); if (cl == NIL) { - Yap_Error(SYSTEM_ERROR,TermNil,"Heap crashed against Stacks"); + Yap_Error(OUT_OF_HEAP_ERROR,TermNil,"Heap crashed against Stacks"); return; } /* skip the first entry, this contains the back link and will always be @@ -1929,11 +1933,12 @@ p_compile(void) if (IntOfTerm(t1) & 4) { Yap_Error(Yap_Error_TYPE, Yap_Error_Term, "in line %d, %s", Yap_FirstLineInParse(), Yap_ErrorMessage); - } else + } else { Yap_Error(Yap_Error_TYPE, Yap_Error_Term, Yap_ErrorMessage); - return (FALSE); + } + return FALSE; } - return (TRUE); + return TRUE; } static Int @@ -4166,56 +4171,56 @@ p_predicate_erased_statistics(void) void Yap_InitCdMgr(void) { - Yap_InitCPred("$compile_mode", 2, p_compile_mode, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$start_consult", 3, p_startconsult, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$show_consult_level", 1, p_showconslultlev, SafePredFlag); - Yap_InitCPred("$end_consult", 0, p_endconsult, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$set_spy", 2, p_setspy, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$rm_spy", 2, p_rmspy, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$compile_mode", 2, p_compile_mode, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$start_consult", 3, p_startconsult, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$show_consult_level", 1, p_showconslultlev, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$end_consult", 0, p_endconsult, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$set_spy", 2, p_setspy, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$rm_spy", 2, p_rmspy, SafePredFlag|SyncPredFlag|HiddenPredFlag); /* gc() may happen during compilation, hence these predicates are now unsafe */ - Yap_InitCPred("$compile", 4, p_compile, SyncPredFlag); - Yap_InitCPred("$compile_dynamic", 5, p_compile_dynamic, SyncPredFlag); - Yap_InitCPred("$purge_clauses", 2, p_purge_clauses, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$in_use", 2, p_in_use, TestPredFlag | SafePredFlag|SyncPredFlag); - Yap_InitCPred("$is_dynamic", 2, p_is_dynamic, TestPredFlag | SafePredFlag); - Yap_InitCPred("$is_log_updatable", 2, p_is_log_updatable, TestPredFlag | SafePredFlag); - Yap_InitCPred("$is_source", 2, p_is_source, TestPredFlag | SafePredFlag); - Yap_InitCPred("$pred_exists", 2, p_pred_exists, TestPredFlag | SafePredFlag); - Yap_InitCPred("$number_of_clauses", 3, p_number_of_clauses, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$undefined", 2, p_undefined, SafePredFlag|TestPredFlag); - Yap_InitCPred("$optimizer_on", 0, p_optimizer_on, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$clean_up_dead_clauses", 0, p_clean_up_dead_clauses, SyncPredFlag); - Yap_InitCPred("$optimizer_off", 0, p_optimizer_off, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$kill_dynamic", 2, p_kill_dynamic, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$in_this_file_before", 3, p_in_this_f_before, SafePredFlag); - Yap_InitCPred("$first_clause_in_file", 3, p_first_cl_in_f, SafePredFlag); - Yap_InitCPred("$mk_cl_not_first", 2, p_mk_cl_not_first, SafePredFlag); - Yap_InitCPred("$new_multifile", 3, p_new_multifile, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$is_multifile", 2, p_is_multifile, TestPredFlag | SafePredFlag); - Yap_InitCPred("$is_profiled", 1, p_is_profiled, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$profile_info", 3, p_profile_info, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$profile_reset", 2, p_profile_reset, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$is_call_counted", 1, p_is_call_counted, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$call_count_info", 3, p_call_count_info, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$call_count_set", 6, p_call_count_set, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$call_count_reset", 0, p_call_count_reset, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$toggle_static_predicates_in_use", 0, p_toggle_static_predicates_in_use, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$set_pred_module", 2, p_set_pred_module, SafePredFlag); - Yap_InitCPred("$parent_pred", 3, p_parent_pred, SafePredFlag); - Yap_InitCPred("$system_predicate", 2, p_system_pred, SafePredFlag); - Yap_InitCPred("$hide_predicate", 2, p_hide_predicate, SafePredFlag); - Yap_InitCPred("$hidden_predicate", 2, p_hidden_predicate, SafePredFlag); - Yap_InitCPred("$pred_for_code", 5, p_pred_for_code, SyncPredFlag); - Yap_InitCPred("$current_stack", 1, p_current_stack, SyncPredFlag); - Yap_InitCPred("$log_update_clause", 4, p_log_update_clause, SyncPredFlag); - Yap_InitCPred("$continue_log_update_clause", 5, p_continue_log_update_clause, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$log_update_clause", 3, p_log_update_clause0, SyncPredFlag); - Yap_InitCPred("$continue_log_update_clause", 4, p_continue_log_update_clause0, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$static_clause", 4, p_static_clause, SyncPredFlag); - Yap_InitCPred("$continue_static_clause", 5, p_continue_static_clause, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$static_pred_statistics", 5, p_static_pred_statistics, SyncPredFlag); - Yap_InitCPred("$p_nth_clause", 4, p_nth_clause, SyncPredFlag); + Yap_InitCPred("$compile", 4, p_compile, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$compile_dynamic", 5, p_compile_dynamic, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$purge_clauses", 2, p_purge_clauses, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$in_use", 2, p_in_use, TestPredFlag | SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$is_dynamic", 2, p_is_dynamic, TestPredFlag | SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$is_log_updatable", 2, p_is_log_updatable, TestPredFlag | SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$is_source", 2, p_is_source, TestPredFlag | SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$pred_exists", 2, p_pred_exists, TestPredFlag | SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$number_of_clauses", 3, p_number_of_clauses, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$undefined", 2, p_undefined, SafePredFlag|TestPredFlag|HiddenPredFlag); + Yap_InitCPred("$optimizer_on", 0, p_optimizer_on, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$clean_up_dead_clauses", 0, p_clean_up_dead_clauses, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$optimizer_off", 0, p_optimizer_off, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$kill_dynamic", 2, p_kill_dynamic, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$in_this_file_before", 3, p_in_this_f_before, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$first_clause_in_file", 3, p_first_cl_in_f, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$mk_cl_not_first", 2, p_mk_cl_not_first, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$new_multifile", 3, p_new_multifile, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$is_multifile", 2, p_is_multifile, TestPredFlag | SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$is_profiled", 1, p_is_profiled, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$profile_info", 3, p_profile_info, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$profile_reset", 2, p_profile_reset, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$is_call_counted", 1, p_is_call_counted, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$call_count_info", 3, p_call_count_info, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$call_count_set", 6, p_call_count_set, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$call_count_reset", 0, p_call_count_reset, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$toggle_static_predicates_in_use", 0, p_toggle_static_predicates_in_use, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$set_pred_module", 2, p_set_pred_module, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$parent_pred", 3, p_parent_pred, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$system_predicate", 2, p_system_pred, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$hide_predicate", 2, p_hide_predicate, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$hidden_predicate", 2, p_hidden_predicate, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$pred_for_code", 5, p_pred_for_code, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$current_stack", 1, p_current_stack, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$log_update_clause", 4, p_log_update_clause, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$continue_log_update_clause", 5, p_continue_log_update_clause, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$log_update_clause", 3, p_log_update_clause0, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$continue_log_update_clause", 4, p_continue_log_update_clause0, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$static_clause", 4, p_static_clause, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$continue_static_clause", 5, p_continue_static_clause, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$static_pred_statistics", 5, p_static_pred_statistics, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$p_nth_clause", 4, p_nth_clause, SyncPredFlag|HiddenPredFlag); #ifdef DEBUG Yap_InitCPred("predicate_erased_statistics", 5, p_predicate_erased_statistics, SyncPredFlag); #endif diff --git a/C/cmppreds.c b/C/cmppreds.c index 13156f072..43280ba9a 100644 --- a/C/cmppreds.c +++ b/C/cmppreds.c @@ -1034,7 +1034,7 @@ Yap_InitCmpPreds(void) Yap_InitCmpPred("=<", 2, a_le, SafePredFlag | BinaryTestPredFlag); Yap_InitCmpPred("<", 2, a_lt, SafePredFlag | BinaryTestPredFlag); Yap_InitCmpPred(">=", 2, a_ge, SafePredFlag | BinaryTestPredFlag); - Yap_InitCPred("$a_compare", 3, p_acomp, TestPredFlag | SafePredFlag); + Yap_InitCPred("$a_compare", 3, p_acomp, TestPredFlag | SafePredFlag|HiddenPredFlag); Yap_InitCPred("\\==", 2, p_noteq, TestPredFlag | SafePredFlag); Yap_InitCPred("@<", 2, p_gen_lt, TestPredFlag | SafePredFlag); Yap_InitCPred("@=<", 2, p_gen_le, TestPredFlag | SafePredFlag); diff --git a/C/corout.c b/C/corout.c index 13ca74e87..72c6fefe5 100644 --- a/C/corout.c +++ b/C/corout.c @@ -556,14 +556,14 @@ Yap_InitCoroutPreds(void) WakeUpCode = pred; #endif Yap_InitAttVarPreds(); - Yap_InitCPred("$yap_has_rational_trees", 0, p_yap_has_rational_trees, SafePredFlag); - Yap_InitCPred("$yap_has_coroutining", 0, p_yap_has_coroutining, SafePredFlag); - Yap_InitCPred("$read_svar_list", 1, p_read_svar_list, SafePredFlag); - Yap_InitCPred("$set_svar_list", 1, p_set_svar_list, SafePredFlag); - Yap_InitCPred("$can_unify", 3, p_can_unify, SafePredFlag); - Yap_InitCPred("$non_ground", 2, p_non_ground, SafePredFlag); - Yap_InitCPred("$coroutining", 0, p_coroutining, SafePredFlag); - Yap_InitCPred("$awoken_goals", 1, p_awoken_goals, SafePredFlag); + Yap_InitCPred("$yap_has_rational_trees", 0, p_yap_has_rational_trees, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$yap_has_coroutining", 0, p_yap_has_coroutining, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$read_svar_list", 1, p_read_svar_list, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$set_svar_list", 1, p_set_svar_list, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$can_unify", 3, p_can_unify, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$non_ground", 2, p_non_ground, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$coroutining", 0, p_coroutining, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$awoken_goals", 1, p_awoken_goals, SafePredFlag|HiddenPredFlag); } diff --git a/C/dbase.c b/C/dbase.c index d1c86d979..91a89cf06 100644 --- a/C/dbase.c +++ b/C/dbase.c @@ -1064,7 +1064,6 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end, #endif return(NULL); -#if !OS_HANDLES_TR_OVERFLOW error_tr_overflow: Yap_Error_TYPE = OUT_OF_TRAIL_ERROR; *vars_foundp = vars_found; @@ -1082,7 +1081,6 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end, H = origH; #endif return(NULL); -#endif #if THREADS #undef Yap_REGS #define Yap_REGS (*Yap_regp) @@ -5055,32 +5053,32 @@ Yap_InitDBPreds(void) Yap_InitCPred("recorded", 3, p_recorded, SyncPredFlag); Yap_InitCPred("recorda", 3, p_rcda, SyncPredFlag); Yap_InitCPred("recordz", 3, p_rcdz, SyncPredFlag); - Yap_InitCPred("$still_variant", 2, p_still_variant, SyncPredFlag); + Yap_InitCPred("$still_variant", 2, p_still_variant, SyncPredFlag|HiddenPredFlag); Yap_InitCPred("recorda_at", 3, p_rcda_at, SyncPredFlag); Yap_InitCPred("recordz_at", 3, p_rcdz_at, SyncPredFlag); - Yap_InitCPred("$recordap", 3, p_rcdap, SyncPredFlag); - Yap_InitCPred("$recordzp", 3, p_rcdzp, SyncPredFlag); - Yap_InitCPred("$recordap", 4, p_drcdap, SyncPredFlag); - Yap_InitCPred("$recordzp", 4, p_drcdzp, SyncPredFlag); + Yap_InitCPred("$recordap", 3, p_rcdap, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$recordzp", 3, p_rcdzp, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$recordap", 4, p_drcdap, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$recordzp", 4, p_drcdzp, SyncPredFlag|HiddenPredFlag); Yap_InitCPred("erase", 1, p_erase, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$erase_clause", 2, p_erase_clause, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$erase_clause", 2, p_erase_clause, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred("erased", 1, p_erased, TestPredFlag | SafePredFlag|SyncPredFlag); Yap_InitCPred("instance", 2, p_instance, SyncPredFlag); - Yap_InitCPred("$instance_module", 2, p_instance_module, SyncPredFlag); + Yap_InitCPred("$instance_module", 2, p_instance_module, SyncPredFlag|HiddenPredFlag); Yap_InitCPred("eraseall", 1, p_eraseall, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$record_stat_source", 4, p_rcdstatp, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$some_recordedp", 1, p_somercdedp, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$first_instance", 3, p_first_instance, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$init_db_queue", 1, p_init_queue, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$db_key", 2, p_db_key, 0); - Yap_InitCPred("$db_enqueue", 2, p_enqueue, SyncPredFlag); - Yap_InitCPred("$db_dequeue", 2, p_dequeue, SyncPredFlag); - Yap_InitCPred("$db_clean_queues", 1, p_clean_queues, SyncPredFlag); - Yap_InitCPred("$switch_log_upd", 1, p_slu, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$log_upd", 1, p_lu, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$hold_index", 3, p_hold_index, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$fetch_reference_from_index", 3, p_fetch_reference_from_index, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$resize_int_keys", 1, p_resize_int_keys, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$record_stat_source", 4, p_rcdstatp, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$some_recordedp", 1, p_somercdedp, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$first_instance", 3, p_first_instance, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$init_db_queue", 1, p_init_queue, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$db_key", 2, p_db_key, HiddenPredFlag); + Yap_InitCPred("$db_enqueue", 2, p_enqueue, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$db_dequeue", 2, p_dequeue, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$db_clean_queues", 1, p_clean_queues, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$switch_log_upd", 1, p_slu, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$log_upd", 1, p_lu, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$hold_index", 3, p_hold_index, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$fetch_reference_from_index", 3, p_fetch_reference_from_index, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$resize_int_keys", 1, p_resize_int_keys, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred("key_statistics", 4, p_key_statistics, SyncPredFlag); #ifdef DEBUG Yap_InitCPred("total_erased", 4, p_total_erased, SyncPredFlag); @@ -5088,19 +5086,19 @@ Yap_InitDBPreds(void) Yap_InitCPred("heap_space_info", 3, p_heap_space_info, SyncPredFlag); #endif Yap_InitCPred("nth_instance", 3, p_nth_instance, SyncPredFlag); - Yap_InitCPred("$nth_instancep", 3, p_nth_instancep, SyncPredFlag); - Yap_InitCPred("$jump_to_next_dynamic_clause", 0, p_jump_to_next_dynamic_clause, SyncPredFlag); - Yap_InitCPred("$install_thread_local", 2, p_install_thread_local, SafePredFlag); + Yap_InitCPred("$nth_instancep", 3, p_nth_instancep, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$jump_to_next_dynamic_clause", 0, p_jump_to_next_dynamic_clause, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$install_thread_local", 2, p_install_thread_local, SafePredFlag|HiddenPredFlag); } void Yap_InitBackDB(void) { - Yap_InitCPredBack("$recorded_with_key", 3, 3, in_rded_with_key, co_rded, SyncPredFlag); + Yap_InitCPredBack("$recorded_with_key", 3, 3, in_rded_with_key, co_rded, SyncPredFlag|HiddenPredFlag); RETRY_C_RECORDED_K_CODE = NEXTOP(PredRecordedWithKey->cs.p_code.FirstClause,lds); - Yap_InitCPredBack("$recordedp", 3, 3, in_rdedp, co_rdedp, SyncPredFlag); + Yap_InitCPredBack("$recordedp", 3, 3, in_rdedp, co_rdedp, SyncPredFlag|HiddenPredFlag); RETRY_C_RECORDEDP_CODE = NEXTOP(RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_LookupAtom("$recordedp"), 3),0))->cs.p_code.FirstClause,lds); Yap_InitCPredBack("$current_immediate_key", 2, 4, init_current_key, cont_current_key, - SyncPredFlag); + SyncPredFlag|HiddenPredFlag); } diff --git a/C/depth_bound.c b/C/depth_bound.c index 606ca0552..5a87e238c 100644 --- a/C/depth_bound.c +++ b/C/depth_bound.c @@ -72,8 +72,8 @@ static Int p_set_depth_limit_for_next_call(void) void Yap_InitItDeepenPreds(void) { Yap_InitCPred("get_depth_limit", 1, p_get_depth_limit, SafePredFlag); - Yap_InitCPred("$set_depth_limit", 1, p_set_depth_limit, 0); - Yap_InitCPred("$set_depth_limit_for_next_call", 1, p_set_depth_limit_for_next_call, 0); + Yap_InitCPred("$set_depth_limit", 1, p_set_depth_limit, HiddenPredFlag); + Yap_InitCPred("$set_depth_limit_for_next_call", 1, p_set_depth_limit_for_next_call, HiddenPredFlag); } #endif diff --git a/C/exec.c b/C/exec.c index 091d78887..fc08e2cf7 100644 --- a/C/exec.c +++ b/C/exec.c @@ -1539,30 +1539,30 @@ void Yap_InitExecFs(void) { Yap_InitComma(); - Yap_InitCPred("$execute", 1, p_execute, 0); - Yap_InitCPred("$execute_in_mod", 2, p_execute_in_mod, 0); - Yap_InitCPred("$call_with_args", 2, p_execute_0, 0); - Yap_InitCPred("$call_with_args", 3, p_execute_1, 0); - Yap_InitCPred("$call_with_args", 4, p_execute_2, 0); - Yap_InitCPred("$call_with_args", 5, p_execute_3, 0); - Yap_InitCPred("$call_with_args", 6, p_execute_4, 0); - Yap_InitCPred("$call_with_args", 7, p_execute_5, 0); - Yap_InitCPred("$call_with_args", 8, p_execute_6, 0); - Yap_InitCPred("$call_with_args", 9, p_execute_7, 0); - Yap_InitCPred("$call_with_args", 10, p_execute_8, 0); - Yap_InitCPred("$call_with_args", 11, p_execute_9, 0); - Yap_InitCPred("$call_with_args", 12, p_execute_10, 0); + Yap_InitCPred("$execute", 1, p_execute, HiddenPredFlag); + Yap_InitCPred("$execute_in_mod", 2, p_execute_in_mod, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 2, p_execute_0, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 3, p_execute_1, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 4, p_execute_2, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 5, p_execute_3, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 6, p_execute_4, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 7, p_execute_5, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 8, p_execute_6, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 9, p_execute_7, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 10, p_execute_8, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 11, p_execute_9, HiddenPredFlag); + Yap_InitCPred("$call_with_args", 12, p_execute_10, HiddenPredFlag); #ifdef DEPTH_LIMIT - Yap_InitCPred("$execute_under_depth_limit", 2, p_execute_depth_limit, 0); + Yap_InitCPred("$execute_under_depth_limit", 2, p_execute_depth_limit, HiddenPredFlag); #endif - Yap_InitCPred("$execute0", 2, p_execute0, 0); - Yap_InitCPred("$execute_nonstop", 2, p_execute_nonstop, 0); - Yap_InitCPred("$save_current_choice_point", 1, p_save_cp, 0); - Yap_InitCPred("$pred_goal_expansion_on", 0, p_pred_goal_expansion_on, SafePredFlag); - Yap_InitCPred("$restore_regs", 1, p_restore_regs, SafePredFlag); - Yap_InitCPred("$restore_regs", 2, p_restore_regs2, SafePredFlag); - Yap_InitCPred("$clean_ifcp", 1, p_clean_ifcp, SafePredFlag); - Yap_InitCPred("$jump_env_and_store_ball", 1, p_jump_env, 0); - Yap_InitCPred("$generate_pred_info", 4, p_generate_pred_info, 0); + Yap_InitCPred("$execute0", 2, p_execute0, HiddenPredFlag); + Yap_InitCPred("$execute_nonstop", 2, p_execute_nonstop, HiddenPredFlag); + Yap_InitCPred("$save_current_choice_point", 1, p_save_cp, HiddenPredFlag); + Yap_InitCPred("$pred_goal_expansion_on", 0, p_pred_goal_expansion_on, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$restore_regs", 1, p_restore_regs, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$restore_regs", 2, p_restore_regs2, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$clean_ifcp", 1, p_clean_ifcp, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$jump_env_and_store_ball", 1, p_jump_env, HiddenPredFlag); + Yap_InitCPred("$generate_pred_info", 4, p_generate_pred_info, HiddenPredFlag); } diff --git a/C/grow.c b/C/grow.c index 94fad7dd8..7507c8c9e 100644 --- a/C/grow.c +++ b/C/grow.c @@ -1385,11 +1385,11 @@ Yap_total_stack_shift_time(void) void Yap_InitGrowPreds(void) { - Yap_InitCPred("$grow_heap", 1, p_growheap, SafePredFlag); - Yap_InitCPred("$grow_stack", 1, p_growstack, SafePredFlag); - Yap_InitCPred("$inform_trail_overflows", 2, p_inform_trail_overflows, SafePredFlag); - Yap_InitCPred("$inform_heap_overflows", 2, p_inform_heap_overflows, SafePredFlag); - Yap_InitCPred("$inform_stack_overflows", 2, p_inform_stack_overflows, SafePredFlag); + Yap_InitCPred("$grow_heap", 1, p_growheap, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$grow_stack", 1, p_growstack, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$inform_trail_overflows", 2, p_inform_trail_overflows, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$inform_heap_overflows", 2, p_inform_heap_overflows, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$inform_stack_overflows", 2, p_inform_stack_overflows, SafePredFlag|HiddenPredFlag); Yap_init_gc(); Yap_init_agc(); } diff --git a/C/heapgc.c b/C/heapgc.c index b8ba29766..86ccd2559 100644 --- a/C/heapgc.c +++ b/C/heapgc.c @@ -3604,8 +3604,8 @@ p_gc(void) void Yap_init_gc(void) { - Yap_InitCPred("$gc", 0, p_gc, 0); - Yap_InitCPred("$inform_gc", 3, p_inform_gc, 0); + Yap_InitCPred("$gc", 0, p_gc, HiddenPredFlag); + Yap_InitCPred("$inform_gc", 3, p_inform_gc, HiddenPredFlag); } void diff --git a/C/index.c b/C/index.c index 98dfc07c9..f78799d31 100644 --- a/C/index.c +++ b/C/index.c @@ -11,8 +11,12 @@ * File: index.c * * comments: Indexing a Prolog predicate * * * -* Last rev: $Date: 2004-11-04 18:22:32 $,$Author: vsc $ * +* Last rev: $Date: 2004-11-18 22:32:36 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.105 2004/11/04 18:22:32 vsc +* don't ever use memory that has been freed (that was done by LU). +* generic fixes for WIN32 libraries +* * Revision 1.104 2004/10/27 15:56:33 vsc * bug fixes on memory overflows and on clauses :- fail being ignored by clause. * @@ -4083,11 +4087,9 @@ reset_stack(istack_entry *sp0) static istack_entry * push_stack(istack_entry *sp, Int arg, Term Tag, Term extra, struct intermediates *cint) { -#if !OS_HANDLES_TR_OVERFLOW || USE_SYSTEM_MALLOC if (sp+1 > (istack_entry *)Yap_TrailTop) { longjmp(cint->CompilerBotch,4); } -#endif sp->pos = arg; sp->val = Tag; sp->extra = extra; @@ -5101,11 +5103,9 @@ Yap_ExpandIndex(PredEntry *ap, UInt nargs) { static path_stack_entry * push_path(path_stack_entry *sp, yamop **pipc, ClauseDef *clp, struct intermediates *cint) { -#if !OS_HANDLES_TR_OVERFLOW || USE_SYSTEM_MALLOC if (sp+1 > (path_stack_entry *)Yap_TrailTop) { longjmp(cint->CompilerBotch,4); } -#endif sp->flag = pc_entry; sp->u.pce.pi_pc = pipc; sp->u.pce.code = clp->Code; diff --git a/C/init.c b/C/init.c index 03e9ef682..8dcb13625 100644 --- a/C/init.c +++ b/C/init.c @@ -459,7 +459,7 @@ Yap_InitCPred(char *Name, unsigned long int Arity, CPredicate code, int flags) { Atom atom = Yap_FullLookupAtom(Name); PredEntry *pe; - yamop *p_code = ((StaticClause *)NULL)->ClCode; + yamop *p_code; StaticClause *cl = NULL; if (Arity) @@ -469,14 +469,12 @@ Yap_InitCPred(char *Name, unsigned long int Arity, CPredicate code, int flags) if (pe->PredFlags & CPredFlag) { /* already exists */ cl = ClauseCodeToStaticClause(pe->CodeOfPred); - if ((flags & SafePredFlag) && - !(pe->PredFlags & SafePredFlag)) { + if ((flags | StandardPredFlag | CPredFlag) != pe->PredFlags) { Yap_FreeCodeSpace((ADDR)cl); cl = NULL; - } else { - p_code = cl->ClCode; } } + p_code = cl->ClCode; while (!cl) { UInt sz; diff --git a/C/iopreds.c b/C/iopreds.c index 8efe3d945..d3ad646c7 100644 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -4798,7 +4798,7 @@ Yap_TermToString(Term t, char *s, unsigned int sz, int flags) void Yap_InitBackIO (void) { - Yap_InitCPredBack ("$current_stream", 3, 1, init_cur_s, cont_cur_s, SafePredFlag|SyncPredFlag); + Yap_InitCPredBack ("$current_stream", 3, 1, init_cur_s, cont_cur_s, SafePredFlag|SyncPredFlag|HiddenPredFlag); } @@ -4813,45 +4813,45 @@ Yap_InitIOPreds(void) if (!Stream) Stream = (StreamDesc *)Yap_AllocCodeSpace(sizeof(StreamDesc)*MaxStreams); /* here the Input/Output predicates */ - Yap_InitCPred ("$check_stream", 2, p_check_stream, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$check_stream", 1, p_check_if_stream, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$stream_flags", 2, p_stream_flags, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$close", 1, p_close, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$check_stream", 2, p_check_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$check_stream", 1, p_check_if_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag|HiddenPredFlag); + Yap_InitCPred ("$stream_flags", 2, p_stream_flags, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$close", 1, p_close, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("flush_output", 1, p_flush, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$flush_all_streams", 0, p_flush_all_streams, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$get", 2, p_get, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$get0", 2, p_get0, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$get0_line_codes", 2, p_get0_line_codes, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$get_byte", 2, p_get_byte, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$open", 4, p_open, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$file_expansion", 2, p_file_expansion, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$open_null_stream", 1, p_open_null_stream, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$open_pipe_stream", 2, p_open_pipe_stream, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$flush_all_streams", 0, p_flush_all_streams, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$get", 2, p_get, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$get0", 2, p_get0, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$get0_line_codes", 2, p_get0_line_codes, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$get_byte", 2, p_get_byte, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$open", 4, p_open, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$file_expansion", 2, p_file_expansion, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$open_null_stream", 1, p_open_null_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$open_pipe_stream", 2, p_open_pipe_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); CurrentModule = CHARSIO_MODULE; Yap_InitCPred ("open_mem_read_stream", 2, p_open_mem_read_stream, SyncPredFlag); Yap_InitCPred ("open_mem_write_stream", 1, p_open_mem_write_stream, SyncPredFlag); Yap_InitCPred ("peek_mem_write_stream", 3, p_peek_mem_write_stream, SyncPredFlag); CurrentModule = cm; - Yap_InitCPred ("$put", 2, p_put, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$put_byte", 2, p_put_byte, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$set_read_error_handler", 1, p_set_read_error_handler, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$get_read_error_handler", 1, p_get_read_error_handler, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$read", 5, p_read, SyncPredFlag); - Yap_InitCPred ("$read", 6, p_read2, SyncPredFlag); - Yap_InitCPred ("$set_input", 1, p_set_input, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$set_output", 1, p_set_output, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$skip", 2, p_skip, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$write", 2, p_write, SyncPredFlag); - Yap_InitCPred ("$write", 3, p_write2, SyncPredFlag); + Yap_InitCPred ("$put", 2, p_put, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$put_byte", 2, p_put_byte, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$set_read_error_handler", 1, p_set_read_error_handler, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$get_read_error_handler", 1, p_get_read_error_handler, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$read", 5, p_read, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$read", 6, p_read2, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$set_input", 1, p_set_input, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$set_output", 1, p_set_output, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$skip", 2, p_skip, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$write", 2, p_write, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$write", 3, p_write2, SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("format", 2, p_format, SyncPredFlag); Yap_InitCPred ("format", 3, p_format2, SyncPredFlag); - Yap_InitCPred ("$current_line_number", 2, p_cur_line_no, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$line_position", 2, p_line_position, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$character_count", 2, p_character_count, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$start_line", 1, p_startline, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$show_stream_flags", 2, p_show_stream_flags, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$show_stream_position", 2, p_show_stream_position, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$set_stream_position", 2, p_set_stream_position, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$current_line_number", 2, p_cur_line_no, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$line_position", 2, p_line_position, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$character_count", 2, p_character_count, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$start_line", 1, p_startline, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$show_stream_flags", 2, p_show_stream_flags, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$show_stream_position", 2, p_show_stream_position, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$set_stream_position", 2, p_set_stream_position, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$user_file_name", 2, p_user_file_name, SafePredFlag|SyncPredFlag), Yap_InitCPred ("$file_name", 2, p_file_name, SafePredFlag|SyncPredFlag), Yap_InitCPred ("$past_eof", 1, p_past_eof, SafePredFlag|SyncPredFlag), @@ -4860,26 +4860,26 @@ Yap_InitIOPreds(void) Yap_InitCPred ("current_input", 1, p_current_input, SafePredFlag|SyncPredFlag); Yap_InitCPred ("current_output", 1, p_current_output, SafePredFlag|SyncPredFlag); Yap_InitCPred ("prompt", 1, p_setprompt, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$is_same_tty", 2, p_is_same_tty, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$is_same_tty", 2, p_is_same_tty, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("prompt", 2, p_prompt, SafePredFlag|SyncPredFlag); Yap_InitCPred ("always_prompt_user", 0, p_always_prompt_user, SafePredFlag|SyncPredFlag); Yap_InitCPred ("write_depth", 2, p_write_depth, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$change_type_of_char", 2, p_change_type_of_char, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$type_of_char", 2, p_type_of_char, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$change_type_of_char", 2, p_change_type_of_char, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$type_of_char", 2, p_type_of_char, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("char_conversion", 2, p_char_conversion, SyncPredFlag); - Yap_InitCPred ("$current_char_conversion", 2, p_current_char_conversion, SyncPredFlag); - Yap_InitCPred ("$all_char_conversions", 1, p_all_char_conversions, SyncPredFlag); - Yap_InitCPred ("$force_char_conversion", 0, p_force_char_conversion, SyncPredFlag); - Yap_InitCPred ("$disable_char_conversion", 0, p_disable_char_conversion, SyncPredFlag); - Yap_InitCPred ("$add_alias_to_stream", 2, p_add_alias_to_stream, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$change_alias_to_stream", 2, p_change_alias_to_stream, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$check_if_valid_new_alias", 1, p_check_if_valid_new_alias, TestPredFlag|SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$fetch_stream_alias", 2, p_fetch_stream_alias, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$current_char_conversion", 2, p_current_char_conversion, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$all_char_conversions", 1, p_all_char_conversions, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$force_char_conversion", 0, p_force_char_conversion, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$disable_char_conversion", 0, p_disable_char_conversion, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$add_alias_to_stream", 2, p_add_alias_to_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$change_alias_to_stream", 2, p_change_alias_to_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$check_if_valid_new_alias", 1, p_check_if_valid_new_alias, TestPredFlag|SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$fetch_stream_alias", 2, p_fetch_stream_alias, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$stream", 1, p_stream, SafePredFlag|TestPredFlag), #if HAVE_SELECT Yap_InitCPred ("stream_select", 3, p_stream_select, SafePredFlag|SyncPredFlag); #endif - Yap_InitCPred ("$same_file", 2, p_same_file, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$same_file", 2, p_same_file, SafePredFlag|SyncPredFlag|HiddenPredFlag); #if USE_SOCKET Yap_InitSockets (); diff --git a/C/load_foreign.c b/C/load_foreign.c index 38d8d1137..25ddfb151 100644 --- a/C/load_foreign.c +++ b/C/load_foreign.c @@ -110,8 +110,8 @@ Yap_InitLoadForeign(void) Yap_FindExecutable("yap"); else Yap_FindExecutable(Yap_argv[0]); - Yap_InitCPred("$load_foreign_files", 3, p_load_foreign, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$obj_suffix", 1, p_obj_suffix, SafePredFlag); + Yap_InitCPred("$load_foreign_files", 3, p_load_foreign, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$obj_suffix", 1, p_obj_suffix, SafePredFlag|HiddenPredFlag); } void diff --git a/C/modules.c b/C/modules.c index 1e2a58358..1bb82e09b 100644 --- a/C/modules.c +++ b/C/modules.c @@ -150,11 +150,11 @@ init_current_module(void) void Yap_InitModulesC(void) { - Yap_InitCPred("$current_module", 2, p_current_module, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$current_module", 1, p_current_module1, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$change_module", 1, p_change_module, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$current_module", 2, p_current_module, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$current_module", 1, p_current_module1, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$change_module", 1, p_change_module, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPredBack("$all_current_modules", 1, 1, init_current_module, cont_current_module, - SafePredFlag|SyncPredFlag); + SafePredFlag|SyncPredFlag|HiddenPredFlag); } diff --git a/C/save.c b/C/save.c index 083271749..a9a10a338 100644 --- a/C/save.c +++ b/C/save.c @@ -1501,8 +1501,8 @@ p_restore(void) void Yap_InitSavePreds(void) { - Yap_InitCPred("$save", 1, p_save, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$save", 2, p_save2, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$save_program", 1, p_save_program, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$restore", 1, p_restore, SyncPredFlag); + Yap_InitCPred("$save", 1, p_save, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$save", 2, p_save2, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$save_program", 1, p_save_program, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$restore", 1, p_restore, SyncPredFlag|HiddenPredFlag); } diff --git a/C/scanner.c b/C/scanner.c index 3cc5be9d4..566167497 100644 --- a/C/scanner.c +++ b/C/scanner.c @@ -568,7 +568,7 @@ Yap_scan_num(int (*Nxtch) (int)) out = MkFloatTerm(-FloatOfTerm(out)); } if (Yap_ErrorMessage != NULL || ch != -1 || cherr) - return(TermNil); + return TermNil; return(out); } diff --git a/C/sort.c b/C/sort.c index 4dc26fadc..b54d3f6e4 100644 --- a/C/sort.c +++ b/C/sort.c @@ -415,7 +415,7 @@ p_ksort(void) void Yap_InitSortPreds(void) { - Yap_InitCPred("$sort", 2, p_sort, 0); - Yap_InitCPred("$msort", 2, p_msort, 0); - Yap_InitCPred("$keysort", 2, p_ksort, 0); + Yap_InitCPred("$sort", 2, p_sort, HiddenPredFlag); + Yap_InitCPred("$msort", 2, p_msort, HiddenPredFlag); + Yap_InitCPred("$keysort", 2, p_ksort, HiddenPredFlag); } diff --git a/C/stdpreds.c b/C/stdpreds.c index 7f9d4f4d9..1183999f0 100644 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -11,8 +11,11 @@ * File: stdpreds.c * * comments: General-purpose C implemented system predicates * * * -* Last rev: $Date: 2004-07-23 21:08:44 $,$Author: vsc $ * +* Last rev: $Date: 2004-11-18 22:32:37 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.71 2004/07/23 21:08:44 vsc +* windows fixes +* * Revision 1.70 2004/06/29 19:04:42 vsc * fix multithreaded version * include new version of Ricardo's profiler @@ -2622,12 +2625,6 @@ p_access_yap_flags(void) return(Yap_unify(ARG2, tout)); } -static Int -p_host_type(void) -{ - return(Yap_unify(ARG1,MkAtomTerm(Yap_LookupAtom(HOST_ALIAS)))); -} - static Int p_has_yap_or(void) { @@ -2795,11 +2792,11 @@ void Yap_InitBackCPreds(void) { Yap_InitCPredBack("$current_atom", 1, 2, init_current_atom, cont_current_atom, - SafePredFlag|SyncPredFlag); + SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPredBack("$current_predicate", 3, 1, init_current_predicate, cont_current_predicate, - SafePredFlag|SyncPredFlag); + SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPredBack("$current_predicate_for_atom", 3, 1, init_current_predicate_for_atom, cont_current_predicate_for_atom, - SafePredFlag|SyncPredFlag); + SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPredBack("current_op", 3, 3, init_current_op, cont_current_op, SafePredFlag|SyncPredFlag); Yap_InitBackIO(); @@ -2817,54 +2814,53 @@ Yap_InitCPreds(void) /* numerical comparison */ Yap_InitCPred("set_value", 2, p_setval, SafePredFlag|SyncPredFlag); Yap_InitCPred("get_value", 2, p_value, TestPredFlag|SafePredFlag|SyncPredFlag); - Yap_InitCPred("$values", 3, p_values, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$values", 3, p_values, SafePredFlag|SyncPredFlag|HiddenPredFlag); /* general purpose */ - Yap_InitCPred("$opdec", 3, p_opdec, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$opdec", 3, p_opdec, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred("name", 2, p_name, SafePredFlag); Yap_InitCPred("char_code", 2, p_char_code, SafePredFlag); Yap_InitCPred("atom_chars", 2, p_atom_chars, SafePredFlag); Yap_InitCPred("atom_codes", 2, p_atom_codes, SafePredFlag); Yap_InitCPred("atom_length", 2, p_atom_length, SafePredFlag); - Yap_InitCPred("$atom_split", 4, p_atom_split, SafePredFlag); + Yap_InitCPred("$atom_split", 4, p_atom_split, SafePredFlag|HiddenPredFlag); Yap_InitCPred("number_chars", 2, p_number_chars, SafePredFlag); Yap_InitCPred("number_atom", 2, p_number_atom, SafePredFlag); Yap_InitCPred("number_codes", 2, p_number_codes, SafePredFlag); Yap_InitCPred("atom_concat", 2, p_atom_concat, SafePredFlag); Yap_InitCPred("atomic_concat", 2, p_atomic_concat, SafePredFlag); Yap_InitCPred("=..", 2, p_univ, 0); - Yap_InitCPred("$statistics_trail_max", 1, p_statistics_trail_max, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$statistics_heap_max", 1, p_statistics_heap_max, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$statistics_global_max", 1, p_statistics_global_max, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$statistics_local_max", 1, p_statistics_local_max, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$statistics_heap_info", 2, p_statistics_heap_info, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$statistics_stacks_info", 3, p_statistics_stacks_info, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$statistics_trail_info", 2, p_statistics_trail_info, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$argv", 1, p_argv, SafePredFlag); - Yap_InitCPred("$runtime", 2, p_runtime, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$cputime", 2, p_cputime, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$walltime", 2, p_walltime, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$access_yap_flags", 2, p_access_yap_flags, SafePredFlag); - Yap_InitCPred("$set_yap_flags", 2, p_set_yap_flags, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$statistics_trail_max", 1, p_statistics_trail_max, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$statistics_heap_max", 1, p_statistics_heap_max, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$statistics_global_max", 1, p_statistics_global_max, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$statistics_local_max", 1, p_statistics_local_max, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$statistics_heap_info", 2, p_statistics_heap_info, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$statistics_stacks_info", 3, p_statistics_stacks_info, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$statistics_trail_info", 2, p_statistics_trail_info, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$argv", 1, p_argv, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$runtime", 2, p_runtime, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$cputime", 2, p_cputime, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$walltime", 2, p_walltime, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$access_yap_flags", 2, p_access_yap_flags, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$set_yap_flags", 2, p_set_yap_flags, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred("abort", 0, p_abort, SyncPredFlag); - Yap_InitCPred("$halt", 1, p_halt, SyncPredFlag); - Yap_InitCPred("$host_type", 1, p_host_type, SyncPredFlag); - Yap_InitCPred("$lock_system", 0, p_lock_system, SafePredFlag); - Yap_InitCPred("$unlock_system", 0, p_unlock_system, SafePredFlag); + Yap_InitCPred("$halt", 1, p_halt, SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$lock_system", 0, p_lock_system, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$unlock_system", 0, p_unlock_system, SafePredFlag|HiddenPredFlag); /* basic predicates for the prolog machine tracer */ /* they are defined in analyst.c */ /* Basic predicates for the debugger */ - Yap_InitCPred("$creep", 0, p_creep, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$stop_creep", 0, p_stop_creep, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$creep", 0, p_creep, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$stop_creep", 0, p_stop_creep, SafePredFlag|SyncPredFlag|HiddenPredFlag); #ifdef DEBUG - Yap_InitCPred("$debug", 1, p_debug, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$debug", 1, p_debug, SafePredFlag|SyncPredFlag|HiddenPredFlag); #endif /* Accessing and changing the flags for a predicate */ - Yap_InitCPred("$flags", 4, p_flags, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$flags", 4, p_flags, SafePredFlag|SyncPredFlag|HiddenPredFlag); /* hiding and unhiding some predicates */ Yap_InitCPred("hide", 1, p_hide, SafePredFlag|SyncPredFlag); Yap_InitCPred("unhide", 1, p_unhide, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$hidden", 1, p_hidden, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$has_yap_or", 0, p_has_yap_or, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$hidden", 1, p_hidden, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$has_yap_or", 0, p_has_yap_or, SafePredFlag|SyncPredFlag|HiddenPredFlag); #ifdef LOW_PROF Yap_InitCPred("profinit",0, profinit, SafePredFlag); Yap_InitCPred("profend" ,0, profend, SafePredFlag); @@ -2876,7 +2872,7 @@ Yap_InitCPreds(void) Yap_InitCPred("profres", 0, profres0, SafePredFlag); #endif #ifndef YAPOR - Yap_InitCPred("$default_sequential", 1, p_default_sequential, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$default_sequential", 1, p_default_sequential, SafePredFlag|SyncPredFlag|HiddenPredFlag); #endif #ifdef INES Yap_InitCPred("euc_dist", 3, p_euc_dist, SafePredFlag); diff --git a/C/sysbits.c b/C/sysbits.c index a36a99395..ede6435b5 100644 --- a/C/sysbits.c +++ b/C/sysbits.c @@ -1030,6 +1030,7 @@ SearchForTrailFault(void) if ((TR > (tr_fr_ptr)Yap_TrailTop-1024 && TR < (tr_fr_ptr)Yap_TrailTop+(64*1024))|| Yap_DBTrailOverflow()) { long trsize = 64*2014L; + while ((CELL)TR > (CELL)Yap_TrailTop+trsize) { trsize += 64*2014L; } @@ -1315,29 +1316,37 @@ MSCHandleSignal(DWORD dwCtrlType) { static void InitSignals (void) { + if (Yap_PrologShouldHandleInterrupts) { #if !defined(LIGHT) && !_MSC_VER && !defined(__MINGW32__) && !defined(LIGHT) - my_signal (SIGQUIT, ReceiveSignal); - my_signal (SIGKILL, ReceiveSignal); - my_signal (SIGUSR1, ReceiveSignal); - my_signal (SIGUSR2, ReceiveSignal); - my_signal (SIGHUP, ReceiveSignal); - my_signal (SIGALRM, HandleALRM); + my_signal (SIGQUIT, ReceiveSignal); + my_signal (SIGKILL, ReceiveSignal); + my_signal (SIGUSR1, ReceiveSignal); + my_signal (SIGUSR2, ReceiveSignal); + my_signal (SIGHUP, ReceiveSignal); + my_signal (SIGALRM, HandleALRM); #endif #if _MSC_VER || defined(__MINGW32__) - signal (SIGINT, SIG_IGN); - SetConsoleCtrlHandler(MSCHandleSignal,TRUE); + signal (SIGINT, SIG_IGN); + SetConsoleCtrlHandler(MSCHandleSignal,TRUE); #else - my_signal (SIGINT, HandleSIGINT); + my_signal (SIGINT, HandleSIGINT); #endif #ifndef MPW - my_signal (SIGFPE, HandleMatherr); + my_signal (SIGFPE, HandleMatherr); #endif #if HAVE_SIGSEGV && !defined(THREADS) - my_signal_info (SIGSEGV, HandleSIGSEGV); + my_signal_info (SIGSEGV, HandleSIGSEGV); #endif #ifdef ACOW - signal(SIGCHLD, SIG_IGN); /* avoid ghosts */ + signal(SIGCHLD, SIG_IGN); /* avoid ghosts */ #endif + } else { +#if OS_HANDLES_TR_OVERFLOW +#if HAVE_SIGSEGV && !defined(THREADS) + my_signal_info (SIGSEGV, HandleSIGSEGV); +#endif +#endif + } } #endif /* HAVE_SIGNAL */ @@ -2241,20 +2250,20 @@ Yap_InitSysPreds(void) InitLastWtime(); Yap_InitCPred ("srandom", 1, p_srandom, SafePredFlag); Yap_InitCPred ("sh", 0, p_sh, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$shell", 1, p_shell, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$system", 1, p_system, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$rename", 2, p_mv, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$cd", 1, p_cd, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$getcwd", 1, p_getcwd, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$dir_separator", 1, p_dir_sp, SafePredFlag); - Yap_InitCPred ("$alarm", 2, p_alarm, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$getenv", 2, p_getenv, SafePredFlag); - Yap_InitCPred ("$putenv", 2, p_putenv, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$file_age", 2, p_file_age, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$set_fpu_exceptions", 0, p_set_fpu_exceptions, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$host_type", 1, p_host_type, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$first_signal", 1, p_first_signal, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$continue_signals", 0, p_continue_signals, SafePredFlag|SyncPredFlag); + Yap_InitCPred ("$shell", 1, p_shell, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$system", 1, p_system, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$rename", 2, p_mv, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$cd", 1, p_cd, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$getcwd", 1, p_getcwd, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$dir_separator", 1, p_dir_sp, SafePredFlag|HiddenPredFlag); + Yap_InitCPred ("$alarm", 2, p_alarm, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$getenv", 2, p_getenv, SafePredFlag|HiddenPredFlag); + Yap_InitCPred ("$putenv", 2, p_putenv, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$file_age", 2, p_file_age, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$set_fpu_exceptions", 0, p_set_fpu_exceptions, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$first_signal", 1, p_first_signal, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$host_type", 1, p_host_type, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$continue_signals", 0, p_continue_signals, SafePredFlag|SyncPredFlag|HiddenPredFlag); } diff --git a/C/threads.c b/C/threads.c index 45ebaf27f..d11cb2ced 100644 --- a/C/threads.c +++ b/C/threads.c @@ -536,31 +536,31 @@ p_thread_runtime(void) void Yap_InitThreadPreds(void) { - Yap_InitCPred("$no_threads", 0, p_no_threads, 0); - Yap_InitCPred("$thread_new_tid", 1, p_thread_new_tid, 0); - Yap_InitCPred("$create_thread", 6, p_create_thread, 0); - Yap_InitCPred("$thread_self", 1, p_thread_self, SafePredFlag); - Yap_InitCPred("$thread_join", 1, p_thread_join, 0); - Yap_InitCPred("$thread_destroy", 1, p_thread_destroy, 0); - Yap_InitCPred("$detach_thread", 1, p_thread_detach, 0); - Yap_InitCPred("$thread_exit", 0, p_thread_exit, 0); + Yap_InitCPred("$no_threads", 0, p_no_threads, HiddenPredFlag); + Yap_InitCPred("$thread_new_tid", 1, p_thread_new_tid, HiddenPredFlag); + Yap_InitCPred("$create_thread", 6, p_create_thread, HiddenPredFlag); + Yap_InitCPred("$thread_self", 1, p_thread_self, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$thread_join", 1, p_thread_join, HiddenPredFlag); + Yap_InitCPred("$thread_destroy", 1, p_thread_destroy, HiddenPredFlag); + Yap_InitCPred("$detach_thread", 1, p_thread_detach, HiddenPredFlag); + Yap_InitCPred("$thread_exit", 0, p_thread_exit, HiddenPredFlag); Yap_InitCPred("thread_setconcurrency", 2, p_thread_set_concurrency, 0); - Yap_InitCPred("$valid_thread", 1, p_valid_thread, 0); - Yap_InitCPred("$new_mutex", 1, p_new_mutex, SafePredFlag); - Yap_InitCPred("$destroy_mutex", 1, p_destroy_mutex, SafePredFlag); - Yap_InitCPred("$lock_mutex", 1, p_lock_mutex, SafePredFlag); - Yap_InitCPred("$trylock_mutex", 1, p_trylock_mutex, SafePredFlag); - Yap_InitCPred("$unlock_mutex", 1, p_unlock_mutex, SafePredFlag); - Yap_InitCPred("$info_mutex", 2, p_info_mutex, SafePredFlag); - Yap_InitCPred("$cond_create", 1, p_cond_create, SafePredFlag); - Yap_InitCPred("$cond_destroy", 1, p_cond_destroy, SafePredFlag); - Yap_InitCPred("$cond_signal", 1, p_cond_signal, SafePredFlag); - Yap_InitCPred("$cond_broadcast", 1, p_cond_broadcast, SafePredFlag); - Yap_InitCPred("$cond_wait", 2, p_cond_wait, SafePredFlag); - Yap_InitCPred("$signal_thread", 1, p_thread_signal, SafePredFlag); - Yap_InitCPred("$nof_threads", 1, p_nof_threads, SafePredFlag); - Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag); - Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag); + Yap_InitCPred("$valid_thread", 1, p_valid_thread, HiddenPredFlag); + Yap_InitCPred("$new_mutex", 1, p_new_mutex, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$destroy_mutex", 1, p_destroy_mutex, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$lock_mutex", 1, p_lock_mutex, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$trylock_mutex", 1, p_trylock_mutex, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$unlock_mutex", 1, p_unlock_mutex, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$info_mutex", 2, p_info_mutex, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$cond_create", 1, p_cond_create, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$cond_destroy", 1, p_cond_destroy, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$cond_signal", 1, p_cond_signal, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$cond_broadcast", 1, p_cond_broadcast, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$cond_wait", 2, p_cond_wait, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$signal_thread", 1, p_thread_signal, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$nof_threads", 1, p_nof_threads, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag|HiddenPredFlag); } #else @@ -591,10 +591,10 @@ p_thread_runtime(void) void Yap_InitThreadPreds(void) { - Yap_InitCPred("$no_threads", 0, p_no_threads, SafePredFlag); - Yap_InitCPred("$nof_threads", 1, p_nof_threads, SafePredFlag); - Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag); - Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag); + Yap_InitCPred("$no_threads", 0, p_no_threads, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$nof_threads", 1, p_nof_threads, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag|HiddenPredFlag); } diff --git a/C/utilpreds.c b/C/utilpreds.c index 20caae6cd..2335fd7a8 100644 --- a/C/utilpreds.c +++ b/C/utilpreds.c @@ -1843,10 +1843,10 @@ void Yap_InitUtilCPreds(void) { Term cm = CurrentModule; Yap_InitCPred("copy_term", 2, p_copy_term, 0); - Yap_InitCPred("$copy_term_but_not_constraints", 2, p_copy_term_no_delays, 0); + Yap_InitCPred("$copy_term_but_not_constraints", 2, p_copy_term_no_delays, HiddenPredFlag); Yap_InitCPred("ground", 1, p_ground, SafePredFlag); - Yap_InitCPred("$variables_in_term", 3, p_variables_in_term, SafePredFlag); - Yap_InitCPred("$non_singletons_in_term", 3, p_non_singletons_in_term, SafePredFlag); + Yap_InitCPred("$variables_in_term", 3, p_variables_in_term, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$non_singletons_in_term", 3, p_non_singletons_in_term, SafePredFlag|HiddenPredFlag); CurrentModule = TERMS_MODULE; Yap_InitCPred("term_variables", 2, p_term_variables, SafePredFlag); Yap_InitCPred("variable_in_term", 2, p_var_in_term, SafePredFlag); @@ -1855,7 +1855,7 @@ void Yap_InitUtilCPreds(void) Yap_InitCPred("subsumes", 2, p_subsumes, SafePredFlag); CurrentModule = cm; #ifdef DEBUG - Yap_InitCPred("$force_trail_expansion", 1, p_force_trail_expansion, SafePredFlag); + Yap_InitCPred("$force_trail_expansion", 1, p_force_trail_expansion, SafePredFlag|HiddenPredFlag); Yap_InitCPred("dum", 1, camacho_dum, SafePredFlag); #endif } diff --git a/C/ypsocks.c b/C/ypsocks.c index 006c3441e..e66c3ca0f 100644 --- a/C/ypsocks.c +++ b/C/ypsocks.c @@ -1243,8 +1243,8 @@ Yap_InitSockets(void) Yap_InitCPred("socket_connect", 3, p_socket_connect, SafePredFlag|SyncPredFlag); Yap_InitCPred("socket_listen", 2, p_socket_listen, SafePredFlag|SyncPredFlag); Yap_InitCPred("socket_accept", 3, p_socket_accept, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$socket_buffering", 4, p_socket_buffering, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$socket_select", 4, p_socket_select, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$socket_buffering", 4, p_socket_buffering, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$socket_select", 4, p_socket_select, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred("current_host", 1, p_current_host, SafePredFlag); Yap_InitCPred("hostname_address", 2, p_hostname_address, SafePredFlag); #if _MSC_VER || defined(__MINGW32__) diff --git a/H/absmi.h b/H/absmi.h index 6df1117b7..802800212 100644 --- a/H/absmi.h +++ b/H/absmi.h @@ -672,7 +672,7 @@ Macros to check the limits of stacks /* for the moment I don't know how to handle trail overflows in a pure Windows environment */ -#if !_MSC_VER && !defined(__MINGW32__) && !defined(THREADS) && !defined(YAPOR) +#if !_MSC_VER && !defined(__MINGW32__) && !defined(THREADS) && !defined(YAPOR) && !USE_SYSTEM_MALLOC && !USE_DL_MALLOC #define OS_HANDLES_TR_OVERFLOW 1 #endif #endif diff --git a/OPTYap/opt.preds.c b/OPTYap/opt.preds.c index 1de8c9a8e..586f54104 100644 --- a/OPTYap/opt.preds.c +++ b/OPTYap/opt.preds.c @@ -70,20 +70,20 @@ static int p_debug_prolog(void); void Yap_init_optyap_preds(void) { #ifdef YAPOR - Yap_InitCPred("$yapor_on", 0, yapor_on, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$start_yapor", 0, start_yapor, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$sequential", 1, p_sequential, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$default_sequential", 1, p_default_sequential, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$yapor_on", 0, yapor_on, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$start_yapor", 0, start_yapor, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$sequential", 1, p_sequential, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$default_sequential", 1, p_default_sequential, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred("execution_mode", 1, p_execution_mode, SafePredFlag|SyncPredFlag); Yap_InitCPred("performance", 1, p_performance, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$parallel_new_answer", 1, p_parallel_new_answer, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$parallel_yes_answer", 0, p_parallel_yes_answer, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$parallel_new_answer", 1, p_parallel_new_answer, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$parallel_yes_answer", 0, p_parallel_yes_answer, SafePredFlag|SyncPredFlag|HiddenPredFlag); #endif /* YAPOR */ #ifdef TABLING - Yap_InitCPred("$do_table", 2, p_table, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$do_abolish_trie", 2, p_abolish_trie, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$show_trie", 3, p_show_trie, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$resume_trie", 2, p_resume_trie, SafePredFlag|SyncPredFlag); + Yap_InitCPred("$do_table", 2, p_table, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$do_abolish_trie", 2, p_abolish_trie, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$show_trie", 3, p_show_trie, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred("$resume_trie", 2, p_resume_trie, SafePredFlag|SyncPredFlag|HiddenPredFlag); #endif /* TABLING */ #ifdef STATISTICS Yap_InitCPred("show_frames", 0, p_show_frames, SafePredFlag|SyncPredFlag); diff --git a/console/yap.c b/console/yap.c index a8afe5f3d..f0ba6c647 100644 --- a/console/yap.c +++ b/console/yap.c @@ -443,6 +443,7 @@ init_standard_system(int argc, char *argv[], YAP_init_args *iap) iap->NumberWorkers = DEFAULT_NUMBERWORKERS; iap->SchedulerLoop = DEFAULT_SCHEDULERLOOP; iap->DelayedReleaseLoad = DEFAULT_DELAYEDRELEASELOAD; + iap->PrologShouldHandleInterrupts = TRUE; iap->Argc = argc; iap->Argv = argv; diff --git a/include/yap_structs.h b/include/yap_structs.h index 37db2dea2..2e1573406 100644 --- a/include/yap_structs.h +++ b/include/yap_structs.h @@ -92,6 +92,8 @@ typedef struct { /* if NON-0, say how long to keep nodes (default = 3) */ int DelayedReleaseLoad; /* end of YAPOR fields */ + /* whether Prolog should handle interrupts */ + int PrologShouldHandleInterrupts; /* number of arguments that Prolog will see */ int Argc; /* array of arguments as seen by Prolog */ diff --git a/m4/Yap.h.m4 b/m4/Yap.h.m4 index 800e52aa1..ca2f129bc 100644 --- a/m4/Yap.h.m4 +++ b/m4/Yap.h.m4 @@ -10,7 +10,7 @@ * File: Yap.h.m4 * * mods: * * comments: main header file for YAP * -* version: $Id: Yap.h.m4,v 1.73 2004-10-27 15:56:34 vsc Exp $ * +* version: $Id: Yap.h.m4,v 1.74 2004-11-18 22:32:40 vsc Exp $ * *************************************************************************/ #include "config.h" @@ -924,6 +924,10 @@ extern int Yap_CritLocks; extern char **Yap_argv; extern int Yap_argc; +/******** whether Yap is responsible for signal handling ******************/ + +int Yap_PrologShouldHandleInterrupts; + /******************* number of modules ****************************/ #define MaxModules 256