bug fices
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// Fields are TAB spaced
|
||||
// Atoms are of the form A Name Normal,FullLookup String
|
||||
// Atoms are of the form A Name Normal,FullLookup String
|
||||
// Functors are of the form F Name Atom Arity
|
||||
// Terms are of the form T FullName Atom
|
||||
//
|
||||
@@ -25,6 +25,7 @@ A ArrayAccess F "$array_arg"
|
||||
A ArrayOverflow N "array_overflow"
|
||||
A ArrayType N "array_type"
|
||||
A Arrow N "->"
|
||||
A AttributedModule N "attributes_module"
|
||||
A DoubleArrow N "-->"
|
||||
A Assert N ":-"
|
||||
A EmptyBrackets N "()"
|
||||
@@ -514,6 +515,7 @@ F PermissionError PermissionError 3
|
||||
F Plus Plus 2
|
||||
F Portray Portray 1
|
||||
F PrintMessage PrintMessage 2
|
||||
F Procedure Procedure 5
|
||||
F PrologConstraint Prolog 2
|
||||
F Query Query 1
|
||||
F RecordedWithKey RecordedWithKey 6
|
||||
@@ -545,4 +547,3 @@ F UMinus Minus 1
|
||||
F UPlus Plus 1
|
||||
F VBar VBar 2
|
||||
F HiddenVar HiddenVar 1
|
||||
|
||||
|
358
misc/HEAPFIELDS
358
misc/HEAPFIELDS
@@ -25,193 +25,195 @@
|
||||
// Restore... sets up call to RestoreFunc
|
||||
//
|
||||
|
||||
START_HEAP
|
||||
|
||||
/* memory management */
|
||||
UInt hole_size Yap_HoleSize void void
|
||||
struct malloc_state *av_ Yap_av void void
|
||||
UInt Yap_HoleSize void void
|
||||
struct malloc_state *Yap_av void void
|
||||
#if USE_DL_MALLOC
|
||||
struct memory_hole memory_holes[MAX_DLMALLOC_HOLES] Yap_MemoryHoles void void
|
||||
UInt nof_memory_holes Yap_NOfMemoryHoles void void
|
||||
struct Yap_MemoryHoles[MAX_DLMALLOC_HOLES] void void
|
||||
UInt Yap_NOfMemoryHoles void void
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
lockvar dlmalloc_lock DLMallocLock MkLock
|
||||
lockvar DLMallocLock MkLock
|
||||
#endif
|
||||
#endif
|
||||
#if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO)
|
||||
#ifndef HeapUsed
|
||||
#define HeapUsed Yap_givemallinfo()
|
||||
#endif
|
||||
Int heap_used NotHeapUsed void void
|
||||
Int NotHeapUsed void void
|
||||
#else
|
||||
Int heap_used HeapUsed void void
|
||||
Int HeapUsed void void
|
||||
#endif
|
||||
Int heap_max HeapMax void void
|
||||
ADDR heap_top HeapTop void void
|
||||
ADDR heap_lim HeapLim void void
|
||||
struct FREEB *free_blocks FreeBlocks void void
|
||||
Int HeapMax void void
|
||||
ADDR HeapTop void void
|
||||
ADDR HeapLim void void
|
||||
struct FREEB *FreeBlocks void void
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
lockvar free_blocks_lock FreeBlocksLock MkLock
|
||||
lockvar heap_used_lock HeapUsedLock MkLock
|
||||
lockvar heap_top_lock HeapTopLock MkLock
|
||||
int heap_top_owner HeapTopOwner =-1 void
|
||||
lockvar FreeBlocksLock MkLock
|
||||
lockvar HeapUsedLock MkLock
|
||||
lockvar HeapTopLock MkLock
|
||||
int HeapTopOwner =-1 void
|
||||
#endif
|
||||
UInt MaxStack_ MaxStack =0 void
|
||||
UInt MaxTrail_ MaxTrail =0 void
|
||||
UInt MaxStack =0 void
|
||||
UInt MaxTrail =0 void
|
||||
|
||||
/* execution info */
|
||||
/* OPCODE REVERSE TABLE, needed to recover op tables */
|
||||
#if USE_THREADED_CODE
|
||||
op_entry *op_rtable OP_RTABLE void OpRTableAdjust
|
||||
op_entry *OP_RTABLE void OpRTableAdjust
|
||||
#endif
|
||||
|
||||
/* popular opcodes */
|
||||
OPCODE execute_cpred_op_code EXECUTE_CPRED_OP_CODE MkOp _execute_cpred
|
||||
OPCODE expand_op_code EXPAND_OP_CODE MkOp _expand_index
|
||||
OPCODE fail_op FAIL_OPCODE MkOp _op_fail
|
||||
OPCODE index_op INDEX_OPCODE MkOp _index_pred
|
||||
OPCODE lockpred_op LOCKPRED_OPCODE MkOp _lock_pred
|
||||
OPCODE orlast_op ORLAST_OPCODE MkOp _or_last
|
||||
OPCODE undef_op UNDEF_OPCODE MkOp _undef_p
|
||||
OPCODE retry_userc_op RETRY_USERC_OPCODE MkOp _retry_userc
|
||||
OPCODE execute_cpred_op EXECUTE_CPRED_OPCODE MkOp _execute_cpred
|
||||
OPCODE EXECUTE_CPRED_OP_CODE MkOp _execute_cpred
|
||||
OPCODE EXPAND_OP_CODE MkOp _expand_index
|
||||
OPCODE FAIL_OPCODE MkOp _op_fail
|
||||
OPCODE INDEX_OPCODE MkOp _index_pred
|
||||
OPCODE LOCKPRED_OPCODE MkOp _lock_pred
|
||||
OPCODE ORLAST_OPCODE MkOp _or_last
|
||||
OPCODE UNDEF_OPCODE MkOp _undef_p
|
||||
OPCODE RETRY_USERC_OPCODE MkOp _retry_userc
|
||||
OPCODE EXECUTE_CPRED_OPCODE MkOp _execute_cpred
|
||||
|
||||
/* atom tables */
|
||||
UInt n_of_atoms NOfAtoms void void
|
||||
UInt atom_hash_table_size AtomHashTableSize void void
|
||||
UInt wide_atom_hash_table_size WideAtomHashTableSize void void
|
||||
UInt n_of_wide_atoms NOfWideAtoms void void
|
||||
AtomHashEntry invisiblechain INVISIBLECHAIN InitInvisibleAtoms() RestoreInvisibleAtoms()
|
||||
AtomHashEntry *wide_hash_chain WideHashChain InitWideAtoms() RestoreWideAtoms()
|
||||
AtomHashEntry *hash_chain HashChain InitAtoms() RestoreAtoms()
|
||||
UInt NOfAtoms void void
|
||||
UInt AtomHashTableSize void void
|
||||
UInt WideAtomHashTableSize void void
|
||||
UInt NOfWideAtoms void void
|
||||
AtomHashEntry INVISIBLECHAIN InitInvisibleAtoms() RestoreInvisibleAtoms()
|
||||
AtomHashEntry *WideHashChain InitWideAtoms() RestoreWideAtoms()
|
||||
AtomHashEntry *HashChain InitAtoms() RestoreAtoms()
|
||||
|
||||
/* use atom defs here */
|
||||
ATOMS
|
||||
|
||||
#ifdef EUROTRA
|
||||
Term term_dollar_u TermDollarU MkAT AtomDollarU
|
||||
Term TermDollarU MkAT AtomDollarU
|
||||
#endif
|
||||
|
||||
//modules
|
||||
Term user_module USER_MODULE MkAT AtomUser
|
||||
Term idb_module IDB_MODULE MkAT AtomIDB
|
||||
Term attributes_module ATTRIBUTES_MODULE MkAT AtomAttributes
|
||||
Term charsio_module CHARSIO_MODULE MkAT AtomCharsio
|
||||
Term chtype_module CHTYPE_MODULE MkAT AtomChType
|
||||
Term terms_module TERMS_MODULE MkAT AtomTerms
|
||||
Term system_module SYSTEM_MODULE MkAT AtomSystem
|
||||
Term readutil_module READUTIL_MODULE MkAT AtomReadutil
|
||||
Term hacks_module HACKS_MODULE MkAT AtomYapHacks
|
||||
Term arg_module ARG_MODULE MkAT AtomArg
|
||||
Term globals_module GLOBALS_MODULE MkAT AtomNb
|
||||
Term swi_module SWI_MODULE MkAT AtomSwi
|
||||
Term dbload_module DBLOAD_MODULE MkAT AtomDBLoad
|
||||
Term range_module RANGE_MODULE MkAT AtomRange
|
||||
Term error_module ERROR_MODULE MkAT AtomError
|
||||
Term USER_MODULE MkAT AtomUser
|
||||
Term IDB_MODULE MkAT AtomIDB
|
||||
Term ATTRIBUTES_MODULE MkAT AtomAttributes
|
||||
Term CHARSIO_MODULE MkAT AtomCharsio
|
||||
Term CHTYPE_MODULE MkAT AtomChType
|
||||
Term TERMS_MODULE MkAT AtomTerms
|
||||
Term SYSTEM_MODULE MkAT AtomSystem
|
||||
Term READUTIL_MODULE MkAT AtomReadutil
|
||||
Term HACKS_MODULE MkAT AtomYapHacks
|
||||
Term ARG_MODULE MkAT AtomArg
|
||||
Term GLOBALS_MODULE MkAT AtomNb
|
||||
Term SWI_MODULE MkAT AtomSwi
|
||||
Term DBLOAD_MODULE MkAT AtomDBLoad
|
||||
Term RANGE_MODULE MkAT AtomRange
|
||||
Term ERROR_MODULE MkAT AtomError
|
||||
|
||||
//
|
||||
// Module list
|
||||
//
|
||||
struct mod_entry *current_modules CurrentModules =NULL ModEntryPtrAdjust
|
||||
struct mod_entry *CurrentModules =NULL ModEntryPtrAdjust
|
||||
// make sure we have the modules set at this point.
|
||||
// don't actually want to define a field
|
||||
void void void Yap_InitModules() void
|
||||
void void Yap_InitModules() void
|
||||
|
||||
// hidden predicates
|
||||
Prop hidden_predicates HIDDEN_PREDICATES =NULL RestoreHiddenPredicates()
|
||||
Prop HIDDEN_PREDICATES =NULL RestoreHiddenPredicates()
|
||||
|
||||
// make sure we have the streams set at this point.
|
||||
// don't actually want to define a field
|
||||
void void void Yap_InitPlIO() void
|
||||
void void Yap_InitPlIO() void
|
||||
|
||||
union flagTerm* GLOBAL_Flags_ GLOBAL_Flags =0 void
|
||||
UInt GLOBAL_flagCount_ GLOBAL_flagCount Yap_InitFlags(true) RestoreFlags(GLOBAL_flagCount)
|
||||
union flagTerm* GLOBAL_Flags =0 void
|
||||
UInt GLOBAL_flagCount Yap_InitFlags(true) RestoreFlags(GLOBAL_flagCount)
|
||||
|
||||
/* Anderson's JIT */
|
||||
yap_exec_mode execution_mode Yap_ExecutionMode =INTERPRETED void
|
||||
yap_exec_mode Yap_ExecutionMode =INTERPRETED void
|
||||
|
||||
/* The Predicate Hash Table: fast access to predicates. */
|
||||
struct pred_entry **pred_hash PredHash InitPredHash() RestorePredHash()
|
||||
struct pred_entry **PredHash InitPredHash() RestorePredHash()
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
rwlock_t pred_hash_rw_lock PredHashRWLock void
|
||||
rwlock_t PredHashRWLock void
|
||||
#endif
|
||||
UInt preds_in_hash_table PredsInHashTable =0 void
|
||||
UInt pred_hash_table_size PredHashTableSize void
|
||||
UInt PredsInHashTable =0 void
|
||||
uint64_t PredHashTableSize =0 void
|
||||
|
||||
|
||||
/* Well-Known Predicates */
|
||||
struct pred_entry *creep_code CreepCode MkPred AtomCreep 1 PROLOG_MODULE
|
||||
struct pred_entry *undef_code UndefCode MkPred AtomUndefp 2 PROLOG_MODULE
|
||||
struct pred_entry *spy_code SpyCode MkPred AtomSpy 1 PROLOG_MODULE
|
||||
struct pred_entry *pred_fail PredFail MkPred AtomFail 0 PROLOG_MODULE
|
||||
struct pred_entry *pred_true PredTrue MkPred AtomTrue 0 PROLOG_MODULE
|
||||
struct pred_entry *CreepCode MkPred AtomCreep 1 PROLOG_MODULE
|
||||
struct pred_entry *UndefCode MkPred AtomUndefp 2 PROLOG_MODULE
|
||||
struct pred_entry *SpyCode MkPred AtomSpy 1 PROLOG_MODULE
|
||||
struct pred_entry *PredFail MkPred AtomFail 0 PROLOG_MODULE
|
||||
struct pred_entry *PredTrue MkPred AtomTrue 0 PROLOG_MODULE
|
||||
#ifdef COROUTINING
|
||||
struct pred_entry *wake_up_code WakeUpCode MkPred AtomWakeUpGoal 2 PROLOG_MODULE
|
||||
struct pred_entry *WakeUpCode MkPred AtomWakeUpGoal 2 PROLOG_MODULE
|
||||
#endif
|
||||
struct pred_entry *pred_goal_expansion PredGoalExpansion MkPred FunctorGoalExpansion USER_MODULE
|
||||
struct pred_entry *pred_meta_call PredMetaCall MkPred FunctorMetaCall PROLOG_MODULE
|
||||
struct pred_entry *pred_trace_meta_call PredTraceMetaCall MkPred FunctorTraceMetaCall PROLOG_MODULE
|
||||
struct pred_entry *pred_dollar_catch PredDollarCatch MkPred FunctorCatch PROLOG_MODULE
|
||||
struct pred_entry *pred_recorded_with_key PredRecordedWithKey MkPred FunctorRecordedWithKey PROLOG_MODULE
|
||||
struct pred_entry *pred_log_upd_clause PredLogUpdClause MkPred FunctorDoLogUpdClause PROLOG_MODULE
|
||||
struct pred_entry *pred_log_upd_clause_erase PredLogUpdClauseErase MkPred FunctorDoLogUpdClauseErase PROLOG_MODULE
|
||||
struct pred_entry *pred_log_upd_clause0 PredLogUpdClause0 MkPred FunctorDoLogUpdClause PROLOG_MODULE
|
||||
struct pred_entry *pred_static_clause PredStaticClause MkPred FunctorDoStaticClause PROLOG_MODULE
|
||||
struct pred_entry *pred_throw PredThrow MkPred FunctorThrow PROLOG_MODULE
|
||||
struct pred_entry *pred_handle_throw PredHandleThrow MkPred FunctorHandleThrow PROLOG_MODULE
|
||||
struct pred_entry *pred_is PredIs MkPred FunctorIs PROLOG_MODULE
|
||||
struct pred_entry *pred_safe_call_cleanup PredSafeCallCleanup MkPred FunctorSafeCallCleanup PROLOG_MODULE
|
||||
struct pred_entry *pred_restore_regs PredRestoreRegs MkPred FunctorRestoreRegs PROLOG_MODULE
|
||||
struct pred_entry *pred_comment_hook PredCommentHook MkPred FunctorCommentHook PROLOG_MODULE
|
||||
struct pred_entry *PredGoalExpansion MkPred FunctorGoalExpansion USER_MODULE
|
||||
struct pred_entry *PredMetaCall MkPred FunctorMetaCall PROLOG_MODULE
|
||||
struct pred_entry *PredTraceMetaCall MkPred FunctorTraceMetaCall PROLOG_MODULE
|
||||
struct pred_entry *PredDollarCatch MkPred FunctorCatch PROLOG_MODULE
|
||||
struct pred_entry *PredRecordedWithKey MkPred FunctorRecordedWithKey PROLOG_MODULE
|
||||
struct pred_entry *PredLogUpdClause MkPred FunctorDoLogUpdClause PROLOG_MODULE
|
||||
struct pred_entry *PredLogUpdClauseErase MkPred FunctorDoLogUpdClauseErase PROLOG_MODULE
|
||||
struct pred_entry *PredLogUpdClause0 MkPred FunctorDoLogUpdClause PROLOG_MODULE
|
||||
struct pred_entry *PredStaticClause MkPred FunctorDoStaticClause PROLOG_MODULE
|
||||
struct pred_entry *PredThrow MkPred FunctorThrow PROLOG_MODULE
|
||||
struct pred_entry *PredHandleThrow MkPred FunctorHandleThrow PROLOG_MODULE
|
||||
struct pred_entry *PredIs MkPred FunctorIs PROLOG_MODULE
|
||||
struct pred_entry *PredSafeCallCleanup MkPred FunctorSafeCallCleanup PROLOG_MODULE
|
||||
struct pred_entry *PredRestoreRegs MkPred FunctorRestoreRegs PROLOG_MODULE
|
||||
struct pred_entry *PredCommentHook MkPred FunctorCommentHook PROLOG_MODULE
|
||||
#ifdef YAPOR
|
||||
struct pred_entry *pred_getwork PredGetwork MkPred AtomGetwork 0 PROLOG_MODULE
|
||||
struct pred_entry *pred_getwork_seq PredGetworkSeq MkPred AtomGetworkSeq 0 PROLOG_MODULE
|
||||
struct pred_entry *PredGetwork MkPred AtomGetwork 0 PROLOG_MODULE
|
||||
#endif /* YAPOR */
|
||||
struct pred_entry *PredProcedure MkLogPred FunctorProcedure PROLOG_MODULE
|
||||
|
||||
/* low-level tracer */
|
||||
#ifdef LOW_LEVEL_TRACER
|
||||
int yap_do_low_level_trace Yap_do_low_level_trace =FALSE void
|
||||
int Yap_do_low_level_trace =FALSE void
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
lockvar low_level_trace_lock Yap_low_level_trace_lock MkLock
|
||||
lockvar Yap_low_level_trace_lock MkLock
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* code management info */
|
||||
UInt clause_space Yap_ClauseSpace =0 void
|
||||
UInt index_space_Tree Yap_IndexSpace_Tree =0 void
|
||||
UInt index_space_EXT Yap_IndexSpace_EXT =0 void
|
||||
UInt index_space_SW Yap_IndexSpace_SW =0 void
|
||||
UInt lu_clause_space Yap_LUClauseSpace =0 void
|
||||
UInt lu_index_space_Tree Yap_LUIndexSpace_Tree =0 void
|
||||
UInt lu_index_space_CP Yap_LUIndexSpace_CP =0 void
|
||||
UInt lu_index_space_EXT Yap_LUIndexSpace_EXT =0 void
|
||||
UInt lu_index_space_SW Yap_LUIndexSpace_SW =0 void
|
||||
UInt Yap_ClauseSpace =0 void
|
||||
UInt Yap_IndexSpace_Tree =0 void
|
||||
UInt Yap_IndexSpace_EXT =0 void
|
||||
UInt Yap_IndexSpace_SW =0 void
|
||||
UInt Yap_LUClauseSpace =0 void
|
||||
UInt Yap_LUIndexSpace_Tree =0 void
|
||||
UInt Yap_LUIndexSpace_CP =0 void
|
||||
UInt Yap_LUIndexSpace_EXT =0 void
|
||||
UInt Yap_LUIndexSpace_SW =0 void
|
||||
|
||||
/* static code: may be shared by many predicate or may be used for meta-execution */
|
||||
yamop comma_code[5] COMMA_CODE void void
|
||||
yamop dummycode[1] DUMMYCODE MkInstE _op_fail
|
||||
yamop failcode[1] FAILCODE MkInstE _op_fail
|
||||
yamop nocode[1] NOCODE MkInstE _Nstop
|
||||
yamop COMMA_CODE[5] void void
|
||||
yamop DUMMYCODE[1] MkInstE _op_fail
|
||||
yamop FAILCODE[1] MkInstE _op_fail
|
||||
yamop NOCODE[1] MkInstE _Nstop
|
||||
|
||||
yamop env_for_trustfail[2] ENV_FOR_TRUSTFAIL InitEnvInst(ENV_FOR_TRUSTFAIL,&TRUSTFAILCODE,_trust_fail,PredFail) RestoreEnvInst(ENV_FOR_TRUSTFAIL,&TRUSTFAILCODE,_trust_fail,PredFail)
|
||||
yamop *trustfailcode TRUSTFAILCODE void
|
||||
yamop env_for_yescode[2] ENV_FOR_YESCODE InitEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail) RestoreEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail)
|
||||
yamop *yescode YESCODE void
|
||||
yamop ENV_FOR_TRUSTFAIL[2] InitEnvInst(ENV_FOR_TRUSTFAIL,&TRUSTFAILCODE,_trust_fail,PredFail) RestoreEnvInst(ENV_FOR_TRUSTFAIL,&TRUSTFAILCODE,_trust_fail,PredFail)
|
||||
yamop *TRUSTFAILCODE void
|
||||
yamop ENV_FOR_YESCODE[2] InitEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail) RestoreEnvInst(ENV_FOR_YESCODE,&YESCODE,_Ystop,PredFail)
|
||||
yamop *YESCODE void
|
||||
|
||||
yamop rtrycode[1] RTRYCODE InitOtaplInst(RTRYCODE,_retry_and_mark,PredFail) RestoreOtaplInst(RTRYCODE,_retry_and_mark,PredFail)
|
||||
yamop RTRYCODE[1] InitOtaplInst(RTRYCODE,_retry_and_mark,PredFail) RestoreOtaplInst(RTRYCODE,_retry_and_mark,PredFail)
|
||||
|
||||
#ifdef BEAM
|
||||
yamop beam_retry_code[1] BEAM_RETRY_CODE MkInstE _beam_retry_code
|
||||
yamop BEAM_RETRY_CODE[1] MkInstE _beam_retry_code
|
||||
#endif /* BEAM */
|
||||
#ifdef YAPOR
|
||||
yamop getwork_code[1] GETWORK InitOtaplInst(GETWORK,_getwork,PredGetwork) RestoreOtaplInst(GETWORK,_getwork,PredGetwork)
|
||||
yamop getwork_seq_code[1] GETWORK_SEQ InitOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq) RestoreOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq)
|
||||
yamop getwork_first_time[1] GETWORK_FIRST_TIME MkInstE _getwork_first_time
|
||||
yamop GETWORK[1] InitOtaplInst(GETWORK,_getwork,PredGetwork) RestoreOtaplInst(GETWORK,_getwork,PredGetwork)
|
||||
yamop GETWORK_SEQ[1] InitOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq) RestoreOtaplInst(GETWORK_SEQ,_getwork_seq,PredGetworkSeq)
|
||||
yamop GETWORK_FIRST_TIME[1] MkInstE _getwork_first_time
|
||||
#endif /* YAPOR */
|
||||
#ifdef TABLING
|
||||
yamop table_load_answer_code[1] LOAD_ANSWER InitOtaplInst(LOAD_ANSWER,_table_load_answer,PredFail) RestoreOtaplInst(LOAD_ANSWER,_table_load_answer,PredFail)
|
||||
yamop table_try_answer_code[1] TRY_ANSWER InitOtaplInst(TRY_ANSWER,_table_try_answer,PredFail) RestoreOtaplInst(TRY_ANSWER,_table_try_answer,PredFail)
|
||||
yamop table_answer_resolution_code[1] ANSWER_RESOLUTION InitOtaplInst(ANSWER_RESOLUTION,_table_answer_resolution,PredFail) RestoreOtaplInst(ANSWER_RESOLUTION,_table_answer_resolution,PredFail)
|
||||
yamop table_completion_code[1] COMPLETION InitOtaplInst(COMPLETION,_table_completion,PredFail) RestoreOtaplInst(COMPLETION,_table_completion,PredFail)
|
||||
yamop LOAD_ANSWER[1] InitOtaplInst(LOAD_ANSWER,_table_load_answer,PredFail) RestoreOtaplInst(LOAD_ANSWER,_table_load_answer,PredFail)
|
||||
yamop TRY_ANSWER[1] InitOtaplInst(TRY_ANSWER,_table_try_answer,PredFail) RestoreOtaplInst(TRY_ANSWER,_table_try_answer,PredFail)
|
||||
yamop ANSWER_RESOLUTION[1] InitOtaplInst(ANSWER_RESOLUTION,_table_answer_resolution,PredFail) RestoreOtaplInst(ANSWER_RESOLUTION,_table_answer_resolution,PredFail)
|
||||
yamop COMPLETION[1] InitOtaplInst(COMPLETION,_table_completion,PredFail) RestoreOtaplInst(COMPLETION,_table_completion,PredFail)
|
||||
#ifdef THREADS_CONSUMER_SHARING
|
||||
yamop table_answer_resolution_completion_code[1] ANSWER_RESOLUTION_COMPLETION InitOtaplInst(ANSWER_RESOLUTION_COMPLETION,_table_answer_resolution_completion,PredFail) RestoreOtaplInst(ANSWER_RESOLUTION_COMPLETION,_table_answer_resolution_completion,PredFail)
|
||||
yamop ANSWER_RESOLUTION_COMPLETION[1] InitOtaplInst(ANSWER_RESOLUTION_COMPLETION,_table_answer_resolution_completion,PredFail) RestoreOtaplInst(ANSWER_RESOLUTION_COMPLETION,_table_answer_resolution_completion,PredFail)
|
||||
#endif /* THREADS_CONSUMER_SHARING */
|
||||
#endif /* TABLING */
|
||||
|
||||
@@ -219,123 +221,125 @@ yamop table_answer_resolution_completion_code[1] ANSWER_RESOLUTIO
|
||||
/* PREG just before we enter $spy. We use that to find out the clause which */
|
||||
/* was calling the debugged goal. */
|
||||
/* */
|
||||
yamop *debugger_p_before_spy P_before_spy =NULL PtoOpAdjust
|
||||
yamop *P_before_spy =NULL PtoOpAdjust
|
||||
|
||||
/* support recorded_k */
|
||||
yamop *retry_recordedp_code RETRY_C_RECORDEDP_CODE =NULL PtoOpAdjust
|
||||
yamop *retry_recorded_k_code RETRY_C_RECORDED_K_CODE =NULL PtoOpAdjust
|
||||
|
||||
yamop *RETRY_C_RECORDEDP_CODE =NULL PtoOpAdjust
|
||||
yamop *RETRY_C_RECORDED_K_CODE =NULL PtoOpAdjust
|
||||
R
|
||||
/* compiler flags */
|
||||
int system_profiling PROFILING =FALSE void
|
||||
int system_call_counting CALL_COUNTING =FALSE void
|
||||
int compiler_optimizer_on optimizer_on =TRUE void
|
||||
int compiler_compile_mode compile_mode =0 void
|
||||
int compiler_profiling profiling =FALSE void
|
||||
int compiler_call_counting call_counting =FALSE void
|
||||
int PROFILING =FALSE void
|
||||
int CALL_COUNTING =FALSE void
|
||||
int optimizer_on =TRUE void
|
||||
int compile_mode =0 void
|
||||
int profiling =FALSE void
|
||||
int call_counting =FALSE void
|
||||
/********* whether we should try to compile array references ******************/
|
||||
int compiler_compile_arrays compile_arrays =FALSE void
|
||||
int compile_arrays =FALSE void
|
||||
|
||||
/* DBTerms: pre-compiled ground terms */
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
lockvar dbterms_list_lock DBTermsListLock MkLock
|
||||
lockvar DBTermsListLock MkLock
|
||||
#endif
|
||||
struct dbterm_list *dbterms_list DBTermsList =NULL RestoreDBTermsList()
|
||||
struct dbterm_list *DBTermsList =NULL RestoreDBTermsList()
|
||||
|
||||
/* JITI support */
|
||||
yamop *expand_clauses_first ExpandClausesFirst =NULL void
|
||||
yamop *expand_clauses_last ExpandClausesLast =NULL RestoreExpandList()
|
||||
UInt expand_clauses Yap_ExpandClauses =0 void
|
||||
yamop *ExpandClausesFirst =NULL void
|
||||
yamop *ExpandClausesLast =NULL RestoreExpandList()
|
||||
UInt Yap_ExpandClauses =0 void
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
lockvar expand_clauses_list_lock ExpandClausesListLock MkLock
|
||||
lockvar op_list_lock OpListLock MkLock
|
||||
lockvar ExpandClausesListLock MkLock
|
||||
lockvar OpListLock MkLock
|
||||
#endif
|
||||
/* instrumentation */
|
||||
#ifdef DEBUG
|
||||
UInt new_cps Yap_NewCps =0L void
|
||||
UInt live_cps Yap_LiveCps =0L void
|
||||
UInt dirty_cps Yap_DirtyCps =0L void
|
||||
UInt freed_cps Yap_FreedCps =0L void
|
||||
UInt Yap_NewCps =0L void
|
||||
UInt Yap_LiveCps =0L void
|
||||
UInt Yap_DirtyCps =0L void
|
||||
UInt Yap_FreedCps =0L void
|
||||
#endif
|
||||
UInt expand_clauses_sz Yap_expand_clauses_sz =0L void
|
||||
UInt Yap_expand_clauses_sz =0L void
|
||||
|
||||
/* UDI support */
|
||||
struct udi_info *udi_control_blocks UdiControlBlocks =NULL RestoreUdiControlBlocks()
|
||||
struct udi_info *UdiControlBlocks =NULL RestoreUdiControlBlocks()
|
||||
|
||||
/* data-base statistics */
|
||||
/* system boots in compile mode */
|
||||
Int static_predicates_marked STATIC_PREDICATES_MARKED =FALSE void
|
||||
Int STATIC_PREDICATES_MARKED =FALSE void
|
||||
|
||||
|
||||
/* Internal Database */
|
||||
Prop *IntKeys INT_KEYS =NULL RestoreIntKeys()
|
||||
Prop *IntLUKeys INT_LU_KEYS =NULL RestoreIntLUKeys()
|
||||
Prop *IntBBKeys INT_BB_KEYS =NULL RestoreIntBBKeys()
|
||||
Prop *INT_KEYS =NULL RestoreIntKeys()
|
||||
Prop *INT_LU_KEYS =NULL RestoreIntLUKeys()
|
||||
Prop *INT_BB_KEYS =NULL RestoreIntBBKeys()
|
||||
|
||||
/* Internal Database Statistics */
|
||||
UInt int_keys_size INT_KEYS_SIZE =INT_KEYS_DEFAULT_SIZE void
|
||||
UInt int_keys_timestamp INT_KEYS_TIMESTAMP =0L void
|
||||
UInt int_bb_keys_size INT_BB_KEYS_SIZE =INT_KEYS_DEFAULT_SIZE void
|
||||
UInt INT_KEYS_SIZE =INT_KEYS_DEFAULT_SIZE void
|
||||
UInt INT_KEYS_TIMESTAMP =0L void
|
||||
UInt INT_BB_KEYS_SIZE =INT_KEYS_DEFAULT_SIZE void
|
||||
|
||||
/* Internal Data-Base Control */
|
||||
int update_mode UPDATE_MODE =UPDATE_MODE_LOGICAL void
|
||||
int UPDATE_MODE =UPDATE_MODE_LOGICAL void
|
||||
|
||||
/* nasty IDB stuff */
|
||||
struct DB_STRUCT *db_erased_marker DBErasedMarker InitDBErasedMarker() RestoreDBErasedMarker()
|
||||
struct logic_upd_clause *logdb_erased_marker LogDBErasedMarker InitLogDBErasedMarker() RestoreLogDBErasedMarker()
|
||||
struct DB_STRUCT *DBErasedMarker InitDBErasedMarker() RestoreDBErasedMarker()
|
||||
struct logic_upd_clause *LogDBErasedMarker InitLogDBErasedMarker() RestoreLogDBErasedMarker()
|
||||
|
||||
/* Dead clauses and IDB entries */
|
||||
struct static_clause *dead_static_clauses DeadStaticClauses =NULL RestoreDeadStaticClauses()
|
||||
struct static_mega_clause *dead_mega_clauses DeadMegaClauses =NULL RestoreDeadMegaClauses()
|
||||
struct static_index *dead_static_indices DeadStaticIndices =NULL RestoreDeadStaticIndices()
|
||||
struct logic_upd_clause *db_erased_list DBErasedList =NULL RestoreDBErasedList()
|
||||
struct logic_upd_index *db_erased_ilist DBErasedIList =NULL RestoreDBErasedIList()
|
||||
struct static_clause *DeadStaticClauses =NULL RestoreDeadStaticClauses()
|
||||
struct static_mega_clause *DeadMegaClauses =NULL RestoreDeadMegaClauses()
|
||||
struct static_index *DeadStaticIndices =NULL RestoreDeadStaticIndices()
|
||||
struct logic_upd_clause *DBErasedList =NULL RestoreDBErasedList()
|
||||
struct logic_upd_index *DBErasedIList =NULL RestoreDBErasedIList()
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
lockvar dead_static_clauses_lock DeadStaticClausesLock MkLock
|
||||
lockvar dead_mega_clauses_lock DeadMegaClausesLock MkLock
|
||||
lockvar dead_static_indices_lock DeadStaticIndicesLock MkLock
|
||||
lockvar DeadStaticClausesLock MkLock
|
||||
lockvar DeadMegaClausesLock MkLock
|
||||
lockvar DeadStaticIndicesLock MkLock
|
||||
#endif
|
||||
|
||||
#ifdef COROUTINING
|
||||
/* number of attribute modules */
|
||||
int num_of_atts NUM_OF_ATTS =1 void
|
||||
int NUM_OF_ATTS =1 void
|
||||
/* initialised by memory allocator */
|
||||
UInt atts_size Yap_AttsSize void void
|
||||
UInt Yap_AttsSize void void
|
||||
#endif
|
||||
|
||||
/* Operators */
|
||||
struct operator_entry *op_list OpList =NULL OpListAdjust
|
||||
struct operator_entry *OpList =NULL OpListAdjust
|
||||
|
||||
/* foreign code loaded */
|
||||
struct ForeignLoadItem *foreign_code_loaded ForeignCodeLoaded =NULL RestoreForeignCode()
|
||||
ADDR foreign_code_base ForeignCodeBase =NULL void
|
||||
ADDR foreign_code_top ForeignCodeTop =NULL void
|
||||
ADDR foreign_code_max ForeignCodeMax =NULL void
|
||||
struct ForeignLoadItem *ForeignCodeLoaded =NULL RestoreForeignCode()
|
||||
ADDR ForeignCodeBase =NULL void
|
||||
ADDR ForeignCodeTop =NULL void
|
||||
ADDR ForeignCodeMax =NULL void
|
||||
|
||||
/* recorded terms */
|
||||
struct record_list *yap_records Yap_Records =NULL RestoreYapRecords()
|
||||
struct record_list *Yap_Records =NULL RestoreYapRecords()
|
||||
|
||||
/* SWI atoms and functors */
|
||||
Atom *swi_atoms SWI_Atoms InitSWIAtoms() RestoreSWIAtoms()
|
||||
Functor *swi_functors SWI_Functors void void
|
||||
Atom *SWI_Atoms InitSWIAtoms() RestoreSWIAtoms()
|
||||
Functor *SWI_Functors void void
|
||||
|
||||
struct swi_reverse_hash swi_reverse_hash[N_SWI_HASH] SWI_ReverseHash void void
|
||||
swi_rev_hash SWI_ReverseHash[N_SWI_HASH] void void
|
||||
|
||||
/* integer access to atoms */
|
||||
Int atom_translations AtomTranslations void void
|
||||
Int max_atom_translations MaxAtomTranslations void void
|
||||
Int AtomTranslations void void
|
||||
Int MaxAtomTranslations void void
|
||||
|
||||
/* integer access to functors */
|
||||
Int functor_translations FunctorTranslations void void
|
||||
Int max_functor_translations MaxFunctorTranslations void void
|
||||
Int FunctorTranslations void void
|
||||
Int MaxFunctorTranslations void void
|
||||
|
||||
Atom empty_wakeups[MAX_EMPTY_WAKEUPS] EmptyWakeups InitEmptyWakeups() RestoreEmptyWakeups()
|
||||
int max_empty_wakeups MaxEmptyWakeups =0
|
||||
Atom EmptyWakeups[MAX_EMPTY_WAKEUPS] InitEmptyWakeups() RestoreEmptyWakeups()
|
||||
int MaxEmptyWakeups =0
|
||||
|
||||
/* SWI blobs */
|
||||
struct YAP_blob_t *swi_blob_types BlobTypes =NULL RestoreBlobTypes()
|
||||
struct AtomEntryStruct *swi_blobs Blobs =NULL RestoreBlobs()
|
||||
UInt nofblobs NOfBlobs =0
|
||||
UInt nofblobsmax NOfBlobsMax =256
|
||||
struct YAP_blob_t *BlobTypes =NULL RestoreBlobTypes()
|
||||
struct AtomEntryStruct *Blobs =NULL RestoreBlobs()
|
||||
UInt NOfBlobs =0
|
||||
UInt NOfBlobsMax =256
|
||||
#if defined(YAPOR) || defined(THREADS)
|
||||
lockvar blobs_lock Blobs_Lock MkLock
|
||||
lockvar Blobs_Lock MkLock
|
||||
#endif
|
||||
|
||||
END_HEAP
|
||||
|
@@ -30,11 +30,9 @@ main :-
|
||||
%file_filter_with_initialization('misc/LOCALS','H/dlocals.h',gen_dstruct,Warning,['dlocals.h','LOCALS']),
|
||||
%file_filter_with_initialization('misc/LOCALS','H/rlocals.h',gen_hstruct,Warning,['rlocals.h','LOCALS']),
|
||||
%file_filter_with_initialization('misc/LOCALS','H/ilocals.h',gen_init,Warning,['ilocals.h','LOCALS']).
|
||||
|
||||
|
||||
warning('~n /* This file, ~a, was generated automatically by \"yap -L misc/buildheap\"~n please do not update, update misc/~a instead */~n~n').
|
||||
|
||||
|
||||
|
||||
/* define the field */
|
||||
gen_struct(Inp,"") :-
|
||||
Inp = [0'/,0'/|_], !.
|
||||
@@ -50,6 +48,12 @@ gen_struct(Inp,Out) :-
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "END_WORKER_LOCAL", !,
|
||||
Out = "} w_local;".
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "START_HEAP", !,
|
||||
Out = "typedef struct worker_local {".
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "END_HEAP", !,
|
||||
Out = "} w_local;".
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "START_GLOBAL_DATA", !,
|
||||
Out = "typedef struct global_data {".
|
||||
@@ -76,7 +80,7 @@ gen_struct(Inp,Out) :-
|
||||
gen_struct(Inp,_) :-
|
||||
split(Inp," ",[_, _, _| _]),
|
||||
format(user_error,"OOPS: could not gen_struct for ~s~n",[Inp]).
|
||||
|
||||
|
||||
gen_dstruct(Inp,"") :-
|
||||
Inp = [0'/,0'/|_], !.
|
||||
gen_dstruct(Inp,"") :-
|
||||
@@ -145,8 +149,8 @@ cut_c_stuff(Name, RName) :-
|
||||
cut_mat(Name, RName).
|
||||
|
||||
cut_mat([], []).
|
||||
cut_mat([0'[|_], []) :- !. %'
|
||||
cut_mat(H.Name, H.RName) :-
|
||||
cut_mat([0'[|_], []) :- !. %'
|
||||
cut_mat([H|Name], [H|RName]) :-
|
||||
cut_mat(Name, RName).
|
||||
|
||||
gen_hstruct(Inp,"") :-
|
||||
@@ -185,9 +189,9 @@ gen_hstruct(Inp,Out) :-
|
||||
glue(Inp2, " ", Inp3),
|
||||
gen_hstruct(Inp3,Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",["const"|Inp2]), !,
|
||||
glue(Inp2, " ", Inp3),
|
||||
gen_hstruct(Inp3,Out).
|
||||
split(Inp," ",["const"|Inp2]), !,
|
||||
glue(Inp2, " ", Inp3),
|
||||
gen_hstruct(Inp3,Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, MacroName, "MkAT", _]), !,
|
||||
fetch_name(Global,Field,MacroName),
|
||||
@@ -257,6 +261,14 @@ gen_init(Inp,Out) :-
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
Out = "}",
|
||||
retract(globals(all)).
|
||||
gen_init(Inp,Out) :-
|
||||
Inp = "START_HEAP", !,
|
||||
Out = "static void InitGlobal(void) {",
|
||||
assert(globals(heap)).
|
||||
gen_init(Inp,Out) :-
|
||||
Inp = "END_HEAP", !,
|
||||
Out = "}",
|
||||
retract(globals(heap)).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",["struct"|Inp2]), !,
|
||||
glue(Inp2, " ", Inp3),
|
||||
@@ -306,20 +318,20 @@ gen_init(Inp,Out) :-
|
||||
fetch_name(Global,RField,MacroName),
|
||||
append([" ",Global,"->opc = Yap_opcode(",OP,");"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, MacroName, "MkPred", Atom, "0", Module]), !,
|
||||
split(Inp," ",[_, Field, MacroName, "MkLogPred", Atom, "0", Module]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField,MacroName),
|
||||
append([" ",Global," = RepPredProp(PredPropByAtom(",Atom,",",Module,"));"], Out).
|
||||
append([" ",Global," = Yap_MkLogPred(RepPredProp(PredPropByAtom(",Atom,",",Module,")));"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, MacroName, "MkPred", Atom, Arity, Module]), !,
|
||||
split(Inp," ",[_, Field, MacroName, "MkLogPred", Atom, Arity, Module]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField,MacroName),
|
||||
append([" ",Global," = RepPredProp(PredPropByFunc(Yap_MkFunctor(",Atom,",",Arity,"),",Module,"));"], Out).
|
||||
append([" ",Global," = Yap_MkLogPred(RepPredProp(PredPropByFunc(Yap_MkFunctor(",Atom,",",Arity,"),",Module,")));"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, MacroName, "MkPred", Fun, Module]), !,
|
||||
split(Inp," ",[_, Field, MacroName, "MkLogPred", Fun, Module]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField,MacroName),
|
||||
append([" ",Global," = RepPredProp(PredPropByFunc(",Fun,",",Module,"));"], Out).
|
||||
append([" ",Global," = Yap_MkLogPred(RepPredProp(PredPropByFunc(",Fun,",",Module,")));"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, MacroName, F0|_]),
|
||||
append("=",F,F0), !,
|
||||
@@ -329,4 +341,3 @@ gen_init(Inp,Out) :-
|
||||
gen_init(Inp,_) :-
|
||||
split(Inp," ",[_, _, _| _]),
|
||||
format(user_error,"OOPS: could not gen_init for ~s~n",[Inp]).
|
||||
|
||||
|
@@ -1,12 +1,12 @@
|
||||
|
||||
:- use_module(library(lineutils),
|
||||
[file_filter_with_init/5,
|
||||
split/3,
|
||||
glue/3]).
|
||||
[file_filter_with_init/5,
|
||||
split/3,
|
||||
glue/3]).
|
||||
|
||||
:- use_module(library(lists),
|
||||
[append/2,
|
||||
append/3]).
|
||||
[append/2,
|
||||
append/3]).
|
||||
|
||||
:- initialization(main).
|
||||
|
||||
@@ -17,31 +17,33 @@
|
||||
:- style_check(all).
|
||||
|
||||
file_filter_with_initialization(A,B,C,D,E) :-
|
||||
file_filter_with_init(A,B,C,D,E).
|
||||
file_filter_with_init(A,B,C,D,E).
|
||||
|
||||
main :-
|
||||
warning(Warning),
|
||||
%file_filter_with_initialization('misc/HEAPFIELDS','H/hstruct.h',gen_struct,Warning,['hstruct.h','HEAPFIELDS']),
|
||||
%file_filter_with_initialization('misc/HEAPFIELDS','H/dhstruct.h',gen_dstruct,Warning,['dhstruct.h','HEAPFIELDS']),
|
||||
%file_filter_with_initialization('misc/HEAPFIELDS','H/rhstruct.h',gen_hstruct,Warning,['rhstruct.h','HEAPFIELDS']),
|
||||
%file_filter_with_initialization('misc/HEAPFIELDS','H/ihstruct.h',gen_init,Warning,['ihstruct.h','HEAPFIELDS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/hglobals.h',gen_struct,Warning,['hglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/dglobals.h',gen_dstruct,Warning,['dglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/rglobals.h',gen_hstruct,Warning,['rglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/iglobals.h',gen_init,Warning,['iglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/hlocals.h',gen_struct,Warning,['hlocals.h','LOCALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/dlocals.h',gen_dstruct,Warning,['dlocals.h','LOCALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/rlocals.h',gen_hstruct,Warning,['rlocals.h','LOCALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/ilocals.h',gen_init,Warning,['ilocals.h','LOCALS']).
|
||||
|
||||
file_filter_with_initialization('misc/HEAPFIELDS','H/heap/hstruct.h',gen_struct,Warning,['hstruct.h','HEAPFIELDS']),
|
||||
file_filter_with_initialization('misc/HEAPFIELDS','H/heap/dhstruct.h',gen_dstruct,Warning,['dhstruct.h','HEAPFIELDS']),
|
||||
file_filter_with_initialization('misc/HEAPFIELDS','H/heap/h0struct.h',gen_0struct,Warning,['d0hstruct.h','HEAPFIELDS']),
|
||||
file_filter_with_initialization('misc/HEAPFIELDS','H/heap/rhstruct.h',gen_hstruct,Warning,['rhstruct.h','HEAPFIELDS']),
|
||||
file_filter_with_initialization('misc/HEAPFIELDS','H/heap/ihstruct.h',gen_init,Warning,['ihstruct.h','HEAPFIELDS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/heap/h0globals.h',gen_0struct,Warning,['hglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/heap/hglobals.h',gen_struct,Warning,['hglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/heap/dglobals.h',gen_dstruct,Warning,['dglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/heap/iglobals.h',gen_init,Warning,['iglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/GLOBALS','H/heap/i0globals.h',gen_0init,Warning,['iglobals.h','GLOBALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/heap/hlocals.h',gen_struct,Warning,['hlocals.h','LOCALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/heap/dlocals.h',gen_dstruct,Warning,['dlocals.h','LOCALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/heap/rlocals.h',gen_hstruct,Warning,['rlocals.h','LOCALS']),
|
||||
file_filter_with_initialization('misc/LOCALS','H/heap/ilocals.h',gen_init,Warning,['ilocals.h','LOCALS']).
|
||||
|
||||
warning('~n /* This file, ~a, was generated automatically by \"yap -L misc/buildlocalglobal\"~n please do not update, update misc/~a instead */~n~n').
|
||||
|
||||
|
||||
|
||||
/* define the field */
|
||||
gen_struct(Inp,"") :-
|
||||
gen_struct(Inp,Inp) :-
|
||||
Inp = [0'/,0'/|_], !.
|
||||
gen_struct(Inp,"") :-
|
||||
gen_struct(Inp,Inp) :-
|
||||
Inp = [0'/,0'*|_], !.
|
||||
gen_struct(Inp, Out) :-
|
||||
Inp = [0'#|_], !, Out = Inp. % '
|
||||
@@ -59,6 +61,12 @@ gen_struct(Inp,Out) :-
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
Out = "} w_shared;".
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "START_HEAP", !,
|
||||
Out = "".
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "END_HEAP", !,
|
||||
Out = "".
|
||||
gen_struct(Inp,Out) :-
|
||||
Inp = "ATOMS", !,
|
||||
Out = "#include \"tatoms.h\"".
|
||||
@@ -74,7 +82,7 @@ gen_struct(Inp,Out) :-
|
||||
gen_struct(Inp,"") :-
|
||||
split(Inp," ",["void","void"|_]), !.
|
||||
gen_struct(Inp,Out) :-
|
||||
split(Inp," ",[Type, Field|_]),
|
||||
split(Inp," ",[Type, Field|_]),
|
||||
split(Field,"[",[RField,VECField]), !,
|
||||
append([" ",Type," ",RField,"_","[",VECField,";"], Out).
|
||||
gen_struct(Inp,Out) :-
|
||||
@@ -83,7 +91,68 @@ gen_struct(Inp,Out) :-
|
||||
gen_struct(Inp,_) :-
|
||||
split(Inp," ",[_, _, _| _]),
|
||||
format(user_error,"OOPS: could not gen_struct for ~s~n",[Inp]).
|
||||
|
||||
|
||||
/* define the field */
|
||||
gen_0struct(Inp,Inp) :-
|
||||
Inp = [0'/,0'/|_], !.
|
||||
gen_0struct(Inp,Inp) :-
|
||||
Inp = [0'/,0'*|_], !.
|
||||
gen_0struct(Inp, Out) :-
|
||||
Inp = [0'#|_], !, Out = Inp. % '
|
||||
gen_0struct(Inp,"") :-
|
||||
Inp = [0'.|_], !. %'
|
||||
gen_0struct(Inp,Out) :-
|
||||
Inp = "START_GLOBAL_DATA", !,
|
||||
Out = "",
|
||||
assert(globals(all)).
|
||||
gen_0struct(Inp,Out) :-
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
Out = "",
|
||||
retract(globals(all)).
|
||||
gen_0struct(Inp,Out) :-
|
||||
Inp = "START_HEAP", !,
|
||||
Out = "",
|
||||
assert(globals(heap)).
|
||||
gen_0struct(Inp,Out) :-
|
||||
Inp = "END_HEAP", !,
|
||||
Out = "",
|
||||
retract(globals(heap)).
|
||||
gen_0struct(Inp,Out) :-
|
||||
Inp = "ATOMS", !,
|
||||
Out = "#include \"tatoms.h\"".
|
||||
gen_0struct(Inp,Out) :-
|
||||
split(Inp," ",["struct",Type, Field|L]), !,
|
||||
extract("struct", Inp, NInp),
|
||||
gen_0struct( NInp, NOut ),
|
||||
extract("EXTERNAL", NOut, IOut),
|
||||
append("EXTERNAL struct ", IOut, Out).
|
||||
gen_0struct(Inp,Out) :-
|
||||
split(Inp," ",["const",Type, Field|L]), !,
|
||||
extract("const", Inp, NInp),
|
||||
gen_0struct( NInp, NOut ),
|
||||
extract("EXTERNAL", NOut, IOut),
|
||||
append("EXTERNAL const ", IOut, Out).
|
||||
gen_0struct(Inp,Out) :-
|
||||
split(Inp," ",["union",Type, Field|L]), !,
|
||||
extract("union", Inp, NInp),
|
||||
gen_0struct( NInp, NOut ),
|
||||
extract("EXTERNAL", NOut, IOut),
|
||||
append("EXTERNAL union ", IOut, Out).
|
||||
gen_0struct(Inp,"") :-
|
||||
split(Inp," ",["void","void"|_]), !.
|
||||
gen_0struct(Inp,Out) :-
|
||||
split(Inp," ",[Type, Field|_]),
|
||||
split(Field,"[",[RField,VECField]), !,
|
||||
fetch_name(Name, RField),
|
||||
append(["EXTERNAL ",Type," ",Name,"[",VECField,";"], Out).
|
||||
gen_0struct(Inp,Out) :-
|
||||
split(Inp," ",[Type, Field|_]), !,
|
||||
fetch_name(Name, Field),
|
||||
append(["EXTERNAL ",Type," ",Name,";"], Out).
|
||||
gen_0struct(Inp,_) :-
|
||||
split(Inp," ",[_, _, _| _]),
|
||||
format(user_error,"OOPS: could not gen_0struct for ~s~n",[Inp]).
|
||||
|
||||
gen_dstruct(Inp,"") :-
|
||||
Inp = [0'/,0'/|_], !.
|
||||
gen_dstruct(Inp,"") :-
|
||||
@@ -102,6 +171,12 @@ gen_dstruct(Inp,"") :-
|
||||
gen_dstruct(Inp,"") :-
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
retract(globals(all)).
|
||||
gen_dstruct(Inp,"") :-
|
||||
Inp = "START_HEAP", !,
|
||||
assert(globals(heap)).
|
||||
gen_dstruct(Inp,"") :-
|
||||
Inp = "END_HEAP", !,
|
||||
retract(globals(heap)).
|
||||
gen_dstruct(Inp,Out) :-
|
||||
Inp = "ATOMS", !,
|
||||
Out = "".
|
||||
@@ -138,6 +213,9 @@ fetch_name(Global,Global2,RField," ") :-
|
||||
globals(all), !,
|
||||
append(["GLOBAL_", RField],Global),
|
||||
append(["Yap_global->", RField,"_"],Global2).
|
||||
fetch_name(RField,Global2,RField," ") :-
|
||||
globals(heap), !,
|
||||
append(["Yap_heap_regs->", RField,"_"],Global2).
|
||||
fetch_name(Global,Global2,RField," ") :-
|
||||
globals(worker),
|
||||
append(["LOCAL_", RField],Global),
|
||||
@@ -161,16 +239,18 @@ fetch_name(Global, RField) :-
|
||||
fetch_name(Global, RField) :-
|
||||
globals(all), !,
|
||||
append(["GLOBAL_", RField],Global).
|
||||
fetch_name(RField, RField) :-
|
||||
globals(heap), !.
|
||||
|
||||
% handle *field[4]
|
||||
% handle *field[4]
|
||||
cut_c_stuff([0'*|Name], RName) :- !, % 'cut *
|
||||
cut_c_stuff(Name, RName).
|
||||
cut_c_stuff(Name, RName) :-
|
||||
cut_mat(Name, RName).
|
||||
|
||||
cut_mat([], []).
|
||||
cut_mat([0'[|_], []) :- !. %'
|
||||
cut_mat(H.Name, H.RName) :-
|
||||
cut_mat([0'[|_], []) :- !. %'
|
||||
cut_mat(H.Name, H.RName) :-
|
||||
cut_mat(Name, RName).
|
||||
|
||||
gen_hstruct(Inp,"") :-
|
||||
@@ -191,13 +271,21 @@ gen_hstruct(Inp,Out) :-
|
||||
Out = "}",
|
||||
retract(globals(worker_init)).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
Inp = "START_GLOBAL_DATA", !,
|
||||
Out = "static void RestoreGlobal(void) {",
|
||||
assert(globals(all)).
|
||||
Inp = "START_GLOBAL_DATA", !,
|
||||
Out = "static void RestoreGlobal(void) {",
|
||||
assert(globals(all)).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
Out = "}",
|
||||
retract(globals(all)).
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
Out = "}",
|
||||
retract(globals(all)).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
Inp = "START_HEAP", !,
|
||||
Out = "",
|
||||
assert(globals(heap)).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
Inp = "END_HEAP", !,
|
||||
Out = "",
|
||||
retract(globals(heap)).
|
||||
gen_hstruct(Inp, Out) :-
|
||||
Inp = [0'#|_], !, Out = Inp. % '
|
||||
gen_hstruct(Inp,Out) :-
|
||||
@@ -213,18 +301,28 @@ gen_hstruct(Inp,Out) :-
|
||||
glue(Inp2, " ", Inp3),
|
||||
gen_hstruct(Inp3,Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, "MkAT", _]), !,
|
||||
split(Inp," ",[_, Field, "MkAT", _]),
|
||||
globals(heap),
|
||||
!,
|
||||
fetch_name(Global,Field),
|
||||
append([" ",Global,Field," = AtomTermAdjust(Yap_heap_regs->",Field,");"], Out).
|
||||
append([" ",Global," = AtomTermAdjust(",Global,");"], Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, "MkPred"| _]), !,
|
||||
globals(heap),
|
||||
split(Inp," ",[_, Field, "MkPred"| _]),
|
||||
!,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField),
|
||||
append([" ",Global,RField," = PtoPredAdjust(Yap_heap_regs->",RField,");"], Out).
|
||||
append([" ",Global," = PtoPredAdjust(",Global,");"], Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
globals(heap),
|
||||
split(Inp," ",[_, Field, "MkLogPred"| _]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField),
|
||||
append([" ",Global," = PtoPredAdjust(",Global,");"], Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, "MkOp", Name]), !,
|
||||
fetch_name(Global,Field),
|
||||
append([" ",Global,Field," = Yap_opcode(",Name,");"], Out).
|
||||
append([" ",Global," = Yap_opcode(",Name,");"], Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, "MkLock"]), !,
|
||||
fetch_name(Global,Field),
|
||||
@@ -232,12 +330,12 @@ gen_hstruct(Inp,Out) :-
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field,"MkRWLock"]), !,
|
||||
fetch_name(Global,Field),
|
||||
append([" REINIT_RWLOCK(",Global,Field,");"], Out).
|
||||
append([" REINIT_RWLOCK(",Global,");"], Out).
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field,"MkInstE",OP]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField),
|
||||
append([" ",Global,RField,"->opc = Yap_opcode(",OP,");"], Out).
|
||||
append([" ",Global,"->opc = Yap_opcode(",OP,");"], Out).
|
||||
gen_hstruct(Inp,"") :-
|
||||
split(Inp," ",[_, _, _]), !.
|
||||
gen_hstruct(Inp,"") :-
|
||||
@@ -246,6 +344,10 @@ gen_hstruct(Inp,Restore) :-
|
||||
split(Inp," ",[_, _, _, Restore0]),
|
||||
append("Restore",_,Restore0), !,
|
||||
append([" ",Restore0,";"],Restore). %'
|
||||
gen_hstruct(Inp,Restore) :-
|
||||
split(Inp," ",[_, _, _, Restore0]),
|
||||
append("Restore",_,Restore0), !,
|
||||
append([" ",Restore0,";"],Restore). %'
|
||||
gen_hstruct(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, _, Adjust]),
|
||||
append(Adjust,"Adjust",_), !,
|
||||
@@ -274,13 +376,21 @@ gen_init(Inp,Out) :-
|
||||
Out = "}",
|
||||
retract(globals(worker_init)).
|
||||
gen_init(Inp,Out) :-
|
||||
Inp = "START_GLOBAL_DATA", !,
|
||||
Out = "static void InitGlobal(void) {",
|
||||
assert(globals(all)).
|
||||
Inp = "START_GLOBAL_DATA", !,
|
||||
Out = "static void InitGlobal(void) {",
|
||||
assert(globals(all)).
|
||||
gen_init(Inp,Out) :-
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
Out = "}",
|
||||
retract(globals(all)).
|
||||
Inp = "END_GLOBAL_DATA", !,
|
||||
Out = "}",
|
||||
retract(globals(all)).
|
||||
gen_init(Inp,Out) :-
|
||||
Inp = "START_HEAP", !,
|
||||
Out = "",
|
||||
assert(globals(heap)).
|
||||
gen_init(Inp,Out) :-
|
||||
Inp = "END_HEAP", !,
|
||||
Out = "",
|
||||
retract(globals(heap)).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",["struct"|Inp2]), !,
|
||||
glue(Inp2, " ", Inp3),
|
||||
@@ -342,6 +452,21 @@ gen_init(Inp,Out) :-
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField),
|
||||
append([" ",Global," = RepPredProp(PredPropByFunc(",Fun,",",Module,"));"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, "MkLogPred", Atom, "0", Module]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField),
|
||||
append([" ",Global," = Yap_MkLogPred(RepPredProp(PredPropByAtom(",Atom,",",Module,")));"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, "MkLogPred", Atom, Arity, Module]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField),
|
||||
append([" ",Global," = Yap_MkLogPred(RepPredProp(PredPropByFunc(Yap_MkFunctor(",Atom,",",Arity,"),",Module,")));"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[_, Field, "MkLogPred", Fun, Module]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
fetch_name(Global,RField),
|
||||
append([" ",Global," = Yap_MkLogPred(RepPredProp(PredPropByFunc(",Fun,",",Module,")));"], Out).
|
||||
gen_init(Inp,Out) :-
|
||||
split(Inp," ",[".", Field,F0|_]), !,
|
||||
cut_c_stuff(Field, RField),
|
||||
@@ -359,3 +484,18 @@ gen_init(Inp,_) :-
|
||||
split(Inp," ",[_, _, _| _]),
|
||||
format(user_error,"OOPS: could not gen_init for ~s~n",[Inp]).
|
||||
|
||||
extract(X, Y, F) :-
|
||||
append(X, R, Y),
|
||||
!,
|
||||
extract(R, F).
|
||||
|
||||
extract([0' |H], IF) :- !,
|
||||
extract( H, IF).
|
||||
extract([0'\t |H], IF) :- !,
|
||||
extract( H, IF).
|
||||
extract(H,H).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -69,6 +69,7 @@
|
||||
;; ; see `prolog-system' below for possible values
|
||||
;; (setq auto-mode-alist (append '(("\\.pl$" . prolog-mode)
|
||||
;; ("\\.yap$" . prolog-mode)
|
||||
;; ("\\.ypp$" . prolog-mode)
|
||||
;; ("\\.prolog$" . prolog-mode)
|
||||
;; ("\\.m$" . mercury-mode))
|
||||
;; auto-mode-alist))
|
||||
@@ -447,9 +448,10 @@ Legal values:
|
||||
"meta_predicate" "module" "module_transparent" "multifile" "require"
|
||||
"use_module" "volatile"))
|
||||
(yap
|
||||
("discontiguous" "dynamic" "ensure_loaded" "export" "export_list" "import"
|
||||
("block" "char_conversion" "discontiguous" "dynamic" "encoding"
|
||||
"ensure_loaded" "export" "expects_dialect" "export_list" "import"
|
||||
"meta_predicate" "module" "module_transparent" "multifile" "require"
|
||||
"table" "use_module" "volatile"))
|
||||
"table" "thread_local" "use_module" "wait"))
|
||||
(gnu
|
||||
("built_in" "char_conversion" "discontiguous" "dynamic" "ensure_linked"
|
||||
"ensure_loaded" "foreign" "include" "initialization" "multifile" "op"
|
||||
@@ -650,6 +652,7 @@ nil means send actual operating system end of file."
|
||||
'((eclipse "^[a-zA-Z0-9()]* *\\?- \\|^\\[[a-zA-Z]* [0-9]*\\]:")
|
||||
(sicstus "| [ ?][- ] *")
|
||||
(swi "^\\(\\[[a-zA-Z]*\\] \\)?[1-9]?[0-9]*[ ]?\\?- \\|^| +")
|
||||
(yap "^\\(\\[[a-zA-Z]*\\] \\)?[1-9]?[0-9]*[ ]?\\?- \\|^| +")
|
||||
(t "^ *\\?-"))
|
||||
"*Alist of prompts of the prolog system command line."
|
||||
:group 'prolog-inferior
|
||||
@@ -657,6 +660,7 @@ nil means send actual operating system end of file."
|
||||
|
||||
(defcustom prolog-continued-prompt-regexp
|
||||
'((sicstus "^\\(| +\\| +\\)")
|
||||
(yap` "^\\(| +\\| +\\)")
|
||||
(t "^|: +"))
|
||||
"*Alist of regexps matching the prompt when consulting `user'."
|
||||
:group 'prolog-inferior
|
||||
|
831
misc/sysgraph
831
misc/sysgraph
@@ -1,831 +0,0 @@
|
||||
#!/usr/local/bin/yap -L -- $*
|
||||
#.
|
||||
|
||||
:- style_check(all).
|
||||
|
||||
:- yap_flag( write_strings, on).
|
||||
:- yap_flag( gc_trace, verbose ).
|
||||
|
||||
:- use_module(library(readutil)).
|
||||
:- use_module(library(lineutils)).
|
||||
:- use_module(library(lists)).
|
||||
:- use_module(library(maplist)).
|
||||
:- use_module(library(system)).
|
||||
|
||||
:- use_module(library(analysis/graphs)).
|
||||
:- use_module(library(analysis/load)).
|
||||
|
||||
:- initialization(main).
|
||||
|
||||
:- style_check(all).
|
||||
|
||||
:- yap_flag( double_quotes, string ).
|
||||
%:- yap_flag( dollar_as_lower_case, on ).
|
||||
|
||||
:- dynamic
|
||||
node/4,
|
||||
edge/1,
|
||||
public/2,
|
||||
private/2,
|
||||
module_on/3,
|
||||
exported/1,
|
||||
dir/2,
|
||||
consulted/2,
|
||||
op_export/3,
|
||||
library/1,
|
||||
undef/2,
|
||||
c_dep/2,
|
||||
do_comment/5,
|
||||
module_file/2.
|
||||
|
||||
% @short node(?Module:module, ?Predicate:pred_indicator, ?File:file, ?Generator:atom) is nondet
|
||||
%
|
||||
|
||||
|
||||
inline( !/0 ).
|
||||
inline( (\+)/1 ).
|
||||
inline( (fail)/0 ).
|
||||
inline( (false)/0 ).
|
||||
inline( (repeat)/0 ).
|
||||
inline( (true)/0 ).
|
||||
inline( []/0 ).
|
||||
|
||||
% @short edge(+SourceModule:module, +SourcePredicate:pred_indicator, +TargetPredicate:pred_indicator, +InFile:file) is nondet
|
||||
%
|
||||
|
||||
main :-
|
||||
init,
|
||||
fail.
|
||||
main :-
|
||||
unix(argv([D])),
|
||||
Dirs = ['C'-prolog,
|
||||
'os'-prolog,
|
||||
'pl'-prolog,
|
||||
'OPTYap'-prolog,
|
||||
'library'-user,
|
||||
% 'swi/console'-user
|
||||
'packages'-user
|
||||
],
|
||||
% maplist(distribute(D), Dirs, Paths),
|
||||
load( D, Dirs ),
|
||||
maplist( pl_graphs, Dirs ),
|
||||
fail.
|
||||
main :-
|
||||
%%% phase 4: construct graph
|
||||
retractall( consulted(_,_) ),
|
||||
undefs,
|
||||
doubles,
|
||||
% pl_exported(pl).
|
||||
c_links,
|
||||
mkdocs.
|
||||
|
||||
distribute( Root, File-Class, Path-Class) :-
|
||||
sub_atom(Root,_,_,1,/),
|
||||
!,
|
||||
atom_concat(Root, File, Path ).
|
||||
distribute( Root, File-Class, Path-Class) :-
|
||||
atom_concat([Root, /, File], Path ).
|
||||
|
||||
init :-
|
||||
retractall(dir(_)),
|
||||
retractall(edge(_)),
|
||||
retractall(private(_,_)),
|
||||
retractall(public(_,_)),
|
||||
retractall(undef(_,_)),
|
||||
retractall(consulted(_,_)),
|
||||
retractall(module_on(_,_,_)),
|
||||
retractall(op_export(_,_,_)),
|
||||
retractall(exported(_)),
|
||||
retractall(do_comment(_,_,_,_,_)).
|
||||
init :-
|
||||
user_c_dep(A,B),
|
||||
do_user_c_dep(A,B),
|
||||
fail.
|
||||
init :-
|
||||
user_skip(A),
|
||||
do_user_skip(A),
|
||||
fail.
|
||||
init :-
|
||||
user_expand(N,A),
|
||||
do_user_expand(N,A),
|
||||
fail.
|
||||
init :-
|
||||
catch( make_directory(tmp), _, fail),
|
||||
fail.
|
||||
init.
|
||||
|
||||
init_loop( _Dirs ).
|
||||
|
||||
doubles :-
|
||||
node(M, P, F-_, _),
|
||||
node(M1, P, F1-_, _),
|
||||
M @< M1,
|
||||
is_public( P, M, F),
|
||||
is_public( P, M1, F1),
|
||||
format('~w vs ~w~n', [M:P,M1:P]),
|
||||
fail.
|
||||
doubles.
|
||||
|
||||
undefs :-
|
||||
trace,
|
||||
format('UNDEFINED procedure calls:~n',[]),
|
||||
setof(M, Target^F^Line^NA^undef( ( Target :- F-M:NA ), Line ), Ms ),
|
||||
member( Mod, Ms ),
|
||||
format(' module ~a:~n',[Mod]),
|
||||
setof(NA, Target^F^Line^undef( ( Target :- F-Mod:NA ), Line ), Ns ),
|
||||
member( NA, Ns ),
|
||||
\+ node( Mod , NA , _File1, _ ),
|
||||
\+ node( prolog , NA , _File2, _ ),
|
||||
format(' predicate ~w:~n',[NA]),
|
||||
(
|
||||
setof(F-Line, Target^undef( ( Target :- F-Mod:NA ), Line ), FLs ),
|
||||
member(F-L, FLs ),
|
||||
format(' line ~w, file ~a~n',[L,F]),
|
||||
fail
|
||||
;
|
||||
setof(F-M,Type^node( M, NA, F, Type ) , FMs ),
|
||||
format(' same name at:~n',[]),
|
||||
member((F-L)-M, FMs ),
|
||||
format(' module ~a, file ~a, line ~d~n',[M,F,L]),
|
||||
fail
|
||||
).
|
||||
undefs.
|
||||
|
||||
out_list([]) :-
|
||||
format('[]', []).
|
||||
out_list([El]) :-
|
||||
format('[~q]', [El]).
|
||||
out_list([E1,E2|Es]) :-
|
||||
format('[~q', [E1]),
|
||||
maplist(out_el, [E2|Es]),
|
||||
format(']', []).
|
||||
|
||||
out_el( El ) :-
|
||||
format(',~n ~q',[El]).
|
||||
|
||||
pub(M, P) :-
|
||||
node(M, P, _, _),
|
||||
P = N/_A,
|
||||
\+ sub_atom(N,0,1,_,'$').
|
||||
|
||||
has_edge(M1, P1, M, F) :-
|
||||
edge(M1:P1, _P, F:_),
|
||||
node(M1, P1, _, _),
|
||||
M1 \= prolog,
|
||||
M1 \= M,
|
||||
\+ is_public(P1, M1, _).
|
||||
|
||||
mod_priv(M, P) :-
|
||||
node(M, P, _, _),
|
||||
node(M, P, _, _),
|
||||
\+ is_public(P, M, _),
|
||||
edge(M1:P, _P0, _), M1 \= M.
|
||||
|
||||
priv(M, P) :-
|
||||
node(M, P, F:_, _),
|
||||
\+ is_public(P, M, _),
|
||||
edge(_:P, _P1, F1:_), F1 \= F.
|
||||
|
||||
% utilities
|
||||
|
||||
split_string( S , Cs, N) :-
|
||||
string_codes(S, S1),
|
||||
string_codes(Cs, NCs),
|
||||
split(S1, NCs, Ncs0),
|
||||
maplist(remove_escapes, Ncs0, Ncs),
|
||||
maplist(string_codes, N, Ncs).
|
||||
|
||||
remove_escapes([0'\\ ,A|Cs], [A|NCs]) :- !, %'
|
||||
remove_escapes(Cs, NCs).
|
||||
remove_escapes([A|Cs], [A|NCs]) :-
|
||||
remove_escapes(Cs, NCs).
|
||||
remove_escapes( [], [] ).
|
||||
|
||||
always_strip_module(V, M, V1) :- var(V), !,
|
||||
V = M:call(V1).
|
||||
always_strip_module(M0:A, M0, call(A)) :- var(A), !.
|
||||
always_strip_module(_:M0:A, M1, B) :- !,
|
||||
always_strip_module(M0:A, M1, B).
|
||||
always_strip_module(M0:A, M0, call(A)) :- var(A),!.
|
||||
always_strip_module(M0:A, M0, A).
|
||||
|
||||
c_links :-
|
||||
open('tmp/foreigns.yap', write, S),
|
||||
clinks(S),
|
||||
fail.
|
||||
c_links :-
|
||||
open('tmp/foreigns.c', write, S),
|
||||
cclinks(S),
|
||||
fail.
|
||||
|
||||
clinks(S) :-
|
||||
module_file( F, NM ),
|
||||
format( S, 'mod( ~q , ~q ).~n', [NM, F] ),
|
||||
fail.
|
||||
clinks(S) :-
|
||||
system_predicate(C),
|
||||
functor(C, N, A),
|
||||
format( S, 'sys ~q/~d.~n', [N, A] ),
|
||||
fail.
|
||||
clinks(S) :-
|
||||
exported( ( Fi0-M:F/A :- Fi1-M1:F1/A ) ),
|
||||
( M \= M1 -> M \= prolog ; F \= F1 ),
|
||||
% functor(S0, F, A),
|
||||
% S0 =.. [F| Args],
|
||||
% S1 =.. [F1| Args],
|
||||
% numbervars(Args, 0, _),
|
||||
format( S, '% ~q <- ~q.~n~q:~q imports ~q:~q. ~n', [Fi0, Fi1, M,F/A, M1,F1/A] ),
|
||||
fail.
|
||||
clinks(S) :-
|
||||
close(S).
|
||||
|
||||
cclinks(S) :-
|
||||
node( M, F/A, File-_Line, c(F)),
|
||||
% functor( S0, F, A),
|
||||
% S0 =.. [F| Args],
|
||||
% S1 =.. [foreign, F| Args],
|
||||
% numbervars(Args, 0, _),
|
||||
format( S, '/// @file ~a~n', [File] ),
|
||||
format( S, '/// @memberof ~a ~a:~a/~d~n', [F, M, F, A] ),
|
||||
fail.
|
||||
cclinks(S) :-
|
||||
close(S).
|
||||
|
||||
warn_singletons(_Vars, _Pos).
|
||||
|
||||
%%
|
||||
% comment( +Comment )
|
||||
%
|
||||
% Handle documentation comments
|
||||
%
|
||||
comment( _Pos - Comment) :-
|
||||
skip_blanks(1, Comment, N),
|
||||
doc( Comment, N ),
|
||||
format( "%s\n", [Comment] ),
|
||||
!.
|
||||
comment( _Pos - _Comment).
|
||||
|
||||
skip_blanks(I, Comment, N) :-
|
||||
get_string_code( I, Comment, Code ),
|
||||
code_type( Code, space ),
|
||||
I1 is I+1,
|
||||
skip_blanks(I1, Comment, N).
|
||||
skip_blanks(N, _Comment, N).
|
||||
|
||||
doc( Comment , N ) :-
|
||||
N1 is N+1,
|
||||
sub_string( Comment, N1, 3, _, Header ),
|
||||
( Header == "/**" -> true ; Header == "/*!" ), !, % */
|
||||
N4 is N+4,
|
||||
get_string_code( N4, Comment, Code ),
|
||||
code_type( Code, space ).
|
||||
doc( Comment, N ) :-
|
||||
N1 is N+1,
|
||||
sub_string( Comment, N1, 2, _, Header ),
|
||||
( Header == "%%" -> true ; Header == "%!" ),
|
||||
N3 is N+3,
|
||||
get_string_code( N3, Comment, Code ),
|
||||
code_type( Code, space ).
|
||||
|
||||
|
||||
%%
|
||||
% search_file( +Target, +Location, +FileType, -File )
|
||||
%
|
||||
%
|
||||
% Directories into atoms
|
||||
search_file( Loc , F, Type, FN ) :-
|
||||
search_file0( Loc , F, Type, FN ),
|
||||
!.
|
||||
search_file( Loc , F, _FN ) :-
|
||||
format('~n~n~n###############~n~n FAILED TO FIND ~w when at ~a~n~n###############~n~n~n', [Loc, F ]),
|
||||
fail.
|
||||
|
||||
%
|
||||
% handle some special cases.
|
||||
%
|
||||
search_file0( F, _, _Type, FN ) :-
|
||||
doexpand(F, FN), !.
|
||||
search_file0( A/B, F, Type, FN ) :- !,
|
||||
term_to_atom(A/B, AB),
|
||||
search_file0( AB, F, Type, FN ).
|
||||
% libraries can be anywhere in the source.
|
||||
search_file0( LibLoc, F, Type, FN ) :-
|
||||
LibLoc =.. [Dir,File],
|
||||
!,
|
||||
( term_to_atom( Dir/File, Full ) ; Full = File ),
|
||||
search_file0( Full, F, Type, FN ).
|
||||
%try to use your base
|
||||
search_file0( Loc , F, c, FN ) :-
|
||||
atom_concat( D, '.yap', F),
|
||||
atom_concat( [ D, '/', Loc], F1),
|
||||
check_suffix( F1 , c, NLoc ),
|
||||
absolute_file_name( NLoc, FN),
|
||||
file_base_name( FN, LocNam),
|
||||
file_directory_name( FN, D),
|
||||
dir( D, LocNam ).
|
||||
search_file0( Loc , F, Type, FN ) :-
|
||||
file_directory_name( F, FD),
|
||||
check_suffix( Loc , Type, LocS ),
|
||||
atom_concat( [ FD, '/', LocS], NLoc),
|
||||
absolute_file_name( NLoc, FN),
|
||||
file_base_name( FN, LocNam),
|
||||
file_directory_name( FN, D),
|
||||
dir( D, LocNam).
|
||||
search_file0( Loc , _F, Type, FN ) :-
|
||||
file_base_name( Loc, Loc0),
|
||||
file_directory_name( Loc, LocD),
|
||||
check_suffix( Loc0 , Type, LocS ),
|
||||
dir( D, LocS),
|
||||
sub_dir( D, DD),
|
||||
atom_concat( [ DD, '/', LocD], NLoc),
|
||||
absolute_file_name( NLoc, D),
|
||||
atom_concat( [D,'/', LocS], FN).
|
||||
search_file0( Loc , _F, Type, FN ) :-
|
||||
file_base_name( Loc, Loc0),
|
||||
check_suffix( Loc0 , Type, LocS ),
|
||||
dir( D, LocS),
|
||||
atom_concat( [D,'/', LocS], FN).
|
||||
% you try using the parent
|
||||
|
||||
sub_dir( D, D ).
|
||||
sub_dir( D, DD) :-
|
||||
D \= '/',
|
||||
atom_concat( D, '/..', DD0),
|
||||
absolute_file_name( DD0, DDA),
|
||||
sub_dir( DDA, DD).
|
||||
|
||||
% files must be called .yap or .pl
|
||||
% if it is .yap...
|
||||
check_suffix( Loc , pl, Loc ) :-
|
||||
atom_concat( _, '.yap', Loc ), !.
|
||||
%, otherwise, .pl
|
||||
check_suffix( Loc , pl, Loc ) :-
|
||||
atom_concat( _, '.pl', Loc ), !.
|
||||
%, otherwise, .prolog
|
||||
check_suffix( Loc , pl, Loc ) :-
|
||||
atom_concat( _, '.prolog', Loc ), !.
|
||||
%, otherwise, .P
|
||||
% try adding suffix
|
||||
check_suffix( Loc0 , pl, Loc ) :-
|
||||
member( Suf , ['.yap', '.ypp', '.pl' , '.prolog']),
|
||||
atom_concat( Loc0, Suf, Loc ).
|
||||
check_suffix( Loc , c, Loc ) :-
|
||||
atom_concat( _, '.c', Loc ), !.
|
||||
%, otherwise, .pl
|
||||
check_suffix( Loc , c, Loc ) :-
|
||||
atom_concat( _, '.icc', Loc ), !.
|
||||
%, otherwise, .prolog
|
||||
check_suffix( Loc , c, Loc ) :-
|
||||
atom_concat( _, '.cpp', Loc ), !.
|
||||
%, otherwise, .P
|
||||
% try adding suffix
|
||||
check_suffix( Loc0 , c, Loc ) :-
|
||||
member( Suf , ['.c', '.icc' , '.cpp']),
|
||||
atom_concat( Loc0, Suf, Loc ).
|
||||
|
||||
|
||||
|
||||
match_file( LocD, Loc0, Type, FN ) :-
|
||||
var(LocD), !,
|
||||
dir( LocD, Loc0 ),
|
||||
atom_concat( [LocD, '/', Loc0], F ),
|
||||
absolute_file_name( F, Type, FN ),
|
||||
exists( FN ).
|
||||
match_file( SufLocD, Loc0, Type, FN ) :-
|
||||
dir( LocD, Loc0 ),
|
||||
atom_concat(_, SufLocD, LocD ),
|
||||
atom_concat( [LocD, '/', Loc0], Type, FN ).
|
||||
|
||||
|
||||
new_op( F, M, op(X,Y,Z) ) :-
|
||||
nb_getval( private, true ),
|
||||
!,
|
||||
private( F, M, op(X,Y,Z) ),
|
||||
op( X, Y, Z).
|
||||
new_op( F, M, op( X, Y, Z) ) :-
|
||||
public( F, M, op( X, Y, Z) ).
|
||||
|
||||
|
||||
ypp(F, error(syntax_error(syntax_error),[syntax_error(read(_228515),between(K,L,M),_,_L,_)-_]) ) :-
|
||||
format('SYNTAX ERROR at file ~a, line ~d (~d - ~d).~n', [F,L,K,M] ),
|
||||
break.
|
||||
|
||||
preprocess_file(F,NF) :-
|
||||
atom_concat(_, '.ypp', F ), !,
|
||||
atom_concat( [ 'cpp -CC -w -DMYDDAS_MYSQL -DMYDDAS_ODBC -DMYDDAS_STATS -DMYDDAS_TOP_LEVEL -P ',F], OF ),
|
||||
NF = pipe( OF ).
|
||||
preprocess_file(F,F).
|
||||
|
||||
|
||||
%%%%%%%
|
||||
%% declare a concept export1able
|
||||
public( F, M, op(X,Y,Z) ) :-
|
||||
retract( private( F, M:op(X,Y,Z) ) ),
|
||||
fail.
|
||||
public( F, M, op(X,Y,Z) ) :- !,
|
||||
assert( op_export(F, _M, op(X,Y,Z) ) ),
|
||||
assert_new( public( F, M:op(X,Y,Z) ) ),
|
||||
(
|
||||
( M == user ; M == prolog )
|
||||
->
|
||||
op( X, Y, prolog:Z )
|
||||
;
|
||||
op( X, Y, M:Z )
|
||||
).
|
||||
public( F, M, M:N/Ar ) :-
|
||||
retract( private( F, M:N/Ar ) ),
|
||||
fail.
|
||||
public( F, M, N/Ar ) :-
|
||||
assert_new( public( F, M:N/Ar ) ),
|
||||
\+ node( M, N/Ar, F-_, _ ),
|
||||
nb_getval( line, L ),
|
||||
assert( node( M, N/Ar, F-L, prolog ) ), !.
|
||||
public( _F, _M, _/_Ar ).
|
||||
public( F, M, M:N//Ar ) :-
|
||||
Ar2 is Ar+2,
|
||||
retract( private( F, M:N/Ar2 ) ),
|
||||
fail.
|
||||
public( F, M, N//Ar ) :-
|
||||
Ar2 is Ar+2,
|
||||
assert_new( public( F, M:N/Ar2 ) ),
|
||||
\+ node( M, N/Ar2, F-_, _ ),
|
||||
nb_getval( line, L ),
|
||||
assert( node( M, N/Ar2, F-L, prolog ) ), !.
|
||||
public( _F, _M, _//_Ar ).
|
||||
|
||||
private( F, M, op(X,Y,Z) ) :-
|
||||
assert_new( private( F, M:op(X,Y,Z) ) ),
|
||||
(
|
||||
( M == user ; M == prolog )
|
||||
->
|
||||
op( X, Y, prolog:Z )
|
||||
;
|
||||
op( X, Y, M:Z )
|
||||
), !.
|
||||
private( _F, _M, op(_X,_Y,_Z) ).
|
||||
private( F, M, N/Ar ) :-
|
||||
assert_new( private( F, M:N/Ar ) ),
|
||||
\+ node( M, N/Ar, F-_, _ ),
|
||||
nb_getval( line, L ),
|
||||
assert( node( M, N/Ar, F-L, prolog ) ), !.
|
||||
private( _F, _M, _N/_Ar ).
|
||||
private( F, M, N//Ar ) :-
|
||||
Ar2 is Ar+2,
|
||||
assert_new( private( F, M:N/Ar2 ) ),
|
||||
\+ node( M, N/Ar2, F-_, _ ),
|
||||
nb_getval( line, L ),
|
||||
assert_new( node( M, N/Ar2, F-L, prolog ) ), !.
|
||||
private( _F, _M, _N//_Ar ).
|
||||
|
||||
is_public( F, M, OP ) :-
|
||||
public( F, M:OP ).
|
||||
|
||||
is_private( F, M, OP ) :-
|
||||
private( F, M :OP ).
|
||||
|
||||
assert_new( G ) :- G, !.
|
||||
assert_new( G ) :- assert( G ).
|
||||
|
||||
error( Error ) :- throw(Error ).
|
||||
|
||||
|
||||
%% mkdocs inserts a file with a sequence of comments into a sequence of Prolog/C files.
|
||||
%
|
||||
%
|
||||
mkdocs :-
|
||||
open( 'tmp/pages', write, S1),
|
||||
close( S1 ),
|
||||
open( 'tmp/bads', write, S2),
|
||||
close( S2 ),
|
||||
open( 'tmp/groups', write, S3),
|
||||
close( S3 ),
|
||||
open( 'tmp/groups.yap', write, S4),
|
||||
close( S4 ),
|
||||
open( 'docs/yapdocs.yap', read, S),
|
||||
repeat,
|
||||
(
|
||||
blanks(S, Comment, Rest)
|
||||
->
|
||||
get_comment(S, Rest),
|
||||
store_comment( Comment ),
|
||||
fail
|
||||
;
|
||||
close(S),
|
||||
!,
|
||||
add_comments
|
||||
).
|
||||
|
||||
blanks( S , T, TF) :-
|
||||
read_line_to_codes(S, T1, T2),
|
||||
( T1 == end_of_file -> fail;
|
||||
T2 == [] -> fail;
|
||||
T1 \== T2, foldl( check, [0'/,0'*,0'*],T1, _) -> TF = T2, T = T1 ; % '
|
||||
blanks( S , T, TF) ).
|
||||
|
||||
get_comment( S , T) :-
|
||||
read_line_to_codes(S, T, T0),
|
||||
( T == end_of_file -> T = [];
|
||||
T0 == [] -> T=[];
|
||||
diff_end( [0'*,0'/,10],T, T0 ) -> true ;
|
||||
get_comment( S , T0) ).
|
||||
|
||||
check(C, [C0|L], L) :-
|
||||
C == C0.
|
||||
|
||||
diff_end( L, T, [] ) :-
|
||||
append(_, L, T).
|
||||
|
||||
store_comment(Comment) :-
|
||||
header( Pred, A, Comment, _ ),
|
||||
atom_codes( P, Pred),
|
||||
( node( Mod, P/A, File-Line, Type) ->
|
||||
true
|
||||
;
|
||||
format('Missing definition for ~q.~n', [P/A] ),
|
||||
node( Mod, P/Ar, File-Line, Type),
|
||||
format(' ~w exists.~n',[Mod:P/Ar]),
|
||||
fail
|
||||
),
|
||||
( node( M1, P/A, _, _), M1 \= Mod -> Dup = true ; Dup = false),
|
||||
!,
|
||||
string_codes( C, Comment ),
|
||||
assert( do_comment( File, Line, C, Type, Dup ) ).
|
||||
store_comment(Comment) :-
|
||||
page( Comment, _ ), !,
|
||||
open( 'tmp/pages', append, S),
|
||||
format(S, '*******************************~n~n~s~n~n', [Comment]),
|
||||
close(S).
|
||||
store_comment(Comment) :-
|
||||
defgroup( Comment, _ ), !,
|
||||
open( 'tmp/groups', append, S),
|
||||
format(S, '*******************************~n~n~s~n~n', [Comment]),
|
||||
close(S).
|
||||
store_comment(Comment) :-
|
||||
open( 'tmp/bads', append, S),
|
||||
format(S, '*******************************~n~n~s~n~n', [Comment]),
|
||||
close(S).
|
||||
|
||||
defgroup -->
|
||||
"/**", % */
|
||||
blanks_or_stars,
|
||||
"@defgroup".
|
||||
defgroup -->
|
||||
"%%", % */
|
||||
blanks_or_percs,
|
||||
"@defgroup".
|
||||
|
||||
page -->
|
||||
"/**", % */
|
||||
blanks,
|
||||
"@page".
|
||||
|
||||
header(Pred, Arity) -->
|
||||
"/**", % */
|
||||
blanks,
|
||||
"@pred",
|
||||
blanks,
|
||||
atom(_),
|
||||
":",
|
||||
!,
|
||||
atom(Pred),
|
||||
atom_pred(Arity).
|
||||
header(Pred, Arity) -->
|
||||
"/**", % */
|
||||
blanks,
|
||||
"@pred",
|
||||
blanks,
|
||||
atom(Pred),
|
||||
atom_pred(Arity),
|
||||
!.
|
||||
header(Pred, 2, Comment, _) :-
|
||||
split(Comment, [[0'/,0'*,0'*],[0'@,0'p,0'r,0'e,0'd],_,Pred,_,[0'i,0's]|_]), !.
|
||||
|
||||
|
||||
atom_pred(Arity) -->
|
||||
"/", !,
|
||||
int( 0, Arity ).
|
||||
atom_pred(N) -->
|
||||
"(",
|
||||
!,
|
||||
decl(1,N).
|
||||
atom_pred(0) -->
|
||||
blanks, !.
|
||||
|
||||
int(I0, I) -->
|
||||
[A],
|
||||
{ A >= "0", A =< "9" },
|
||||
!,
|
||||
{ I1 is I0*10+(A-"0") },
|
||||
int(I1, I).
|
||||
int( I, I ) --> [].
|
||||
|
||||
decl(I, I) -->
|
||||
")", !.
|
||||
decl(I0, I) -->
|
||||
",", !,
|
||||
{ I1 is I0+1 },
|
||||
decl(I1, I).
|
||||
decl(I0, I) -->
|
||||
[_],
|
||||
decl( I0, I).
|
||||
|
||||
skip_early_comment(C) -->
|
||||
[C], !,
|
||||
skip_early_comment(C).
|
||||
skip_early_comment(C) -->
|
||||
( " " ; "\t" ; "\n" ), !,
|
||||
skip_early_comment(C).
|
||||
skip_early_comment(C) -->
|
||||
"@", ( "{" ; "}" ), !,
|
||||
skip_early_comment(C).
|
||||
skip_early_comment(_) --> [].
|
||||
|
||||
blanks --> " ", !, blanks.
|
||||
blanks --> "\t", !, blanks.
|
||||
blanks --> [].
|
||||
|
||||
atom([A|As]) -->
|
||||
[A],
|
||||
{ A >= "a", A =< "z" },
|
||||
atom2( As ).
|
||||
|
||||
atom2([A|As]) -->
|
||||
[A],
|
||||
{ A >= "a", A =< "z" -> true ;
|
||||
A >= "A", A =< "Z" -> true ;
|
||||
A >= "0", A =< "9" -> true ;
|
||||
A =:= "_"
|
||||
},
|
||||
!,
|
||||
atom2( As ).
|
||||
atom2([]) --> [].
|
||||
|
||||
add_comments :-
|
||||
open('tmp/comments.yap', write, S),
|
||||
findall(File, do_comment( File, Line, C, Type, Dup), Fs0 ),
|
||||
(
|
||||
sort(Fs0, Fs),
|
||||
member( File, Fs ),
|
||||
setof(Line-C-Type-Dup, do_comment( File, Line, C, Type, Dup) , Lines0 ),
|
||||
reverse( Lines0, Lines),
|
||||
member(Line-Comment-Type-Dup, Lines),
|
||||
check_comment( Comment, CN, Line, File ),
|
||||
Line1 is Line-1,
|
||||
format(S, '#~a~ncat << "EOF" > tmp~n~sEOF~nsed -e "~dr tmp" ~a > x~n\
|
||||
mv x ~a~n~n',[Dup,CN, Line1, File, File])
|
||||
;
|
||||
close(S)
|
||||
),
|
||||
fail.
|
||||
add_comments :-
|
||||
listing( open_comment ).
|
||||
|
||||
check_comment( Comment, CN, _Line, _qFile ) :-
|
||||
string_codes( Comment, [_,_,_|C]),
|
||||
check_groups(0,_C,[]),
|
||||
check_quotes(0,C,[]),
|
||||
(
|
||||
append(C0,[0'@,0'},0' ,0'*,0'/,10], C) -> %'
|
||||
append(C0,[0'*,0'/,10], CN)
|
||||
;
|
||||
CN = C
|
||||
),
|
||||
!.
|
||||
check_comment( Comment, Comment, Line, File ) :-
|
||||
format(user_error,'*** bad comment ~a ~d~n~n~s~n~', [File,Line,Comment]).
|
||||
|
||||
check_groups(0) --> [].
|
||||
|
||||
|
||||
check_quotes( 0 ) --> [].
|
||||
check_quotes( 0 ) -->
|
||||
"`", !,
|
||||
check_quotes( 1 ).
|
||||
check_quotes( 1 ) -->
|
||||
"`", !,
|
||||
check_quotes( 0 ).
|
||||
check_quotes( 1 ) -->
|
||||
"\"", !, { fail }.
|
||||
check_quotes( 1 ) -->
|
||||
"'", !, { fail }. %'
|
||||
check_quotes( N ) -->
|
||||
[_],
|
||||
check_quotes( N ).
|
||||
|
||||
|
||||
%%%
|
||||
% ops_default sets operators back to YAP default.
|
||||
%
|
||||
ops_default :-
|
||||
abolish( default_ops/1 ),
|
||||
A = (_,_), functor(A,Comma,2),
|
||||
findall(op(X,Y,prolog:Z), ( current_op(X,Y,prolog:Z), Z\= Comma ), L),
|
||||
assert_static( default_ops(L) ).
|
||||
|
||||
:- initialization(ops_default, now).
|
||||
|
||||
ops_restore :-
|
||||
A = (_,_), functor(A,Comma,2),
|
||||
current_op(_X,Y,prolog:Z),
|
||||
Z\= Comma,
|
||||
op(0,Y,prolog:Z),
|
||||
fail.
|
||||
ops_restore :-
|
||||
default_ops(L),
|
||||
maplist( call, L ).
|
||||
|
||||
do_user_c_dep(F1, F2) :-
|
||||
absolute_file_name(F1, A1),
|
||||
absolute_file_name(F2, A2),
|
||||
assert(c_dep(A1, A2)).
|
||||
do_user_skip(F1) :-
|
||||
absolute_file_name(F1, A1),
|
||||
assert(doskip(A1)).
|
||||
do_user_expand(F, F1) :-
|
||||
absolute_file_name(F1, A1),
|
||||
assert(doexpand(F, A1)).
|
||||
|
||||
user_deps( F, M ) :-
|
||||
c_dep(F, A2),
|
||||
c_file(A2 , M),
|
||||
fail.
|
||||
user_deps( _F, _M ).
|
||||
|
||||
user_c_dep( 'packages/jpl/jpl.pl', 'packages/jpl/src/c/jpl.c' ).
|
||||
user_c_dep( 'packages/real/real.pl', 'packages/real/real.c' ).
|
||||
user_c_dep( 'packages/odbc/odbc.pl', 'packages/odbc/odbc.c' ).
|
||||
user_c_dep( 'packages/clib/unix.pl', 'packages/clib/unix.c' ).
|
||||
user_c_dep( 'packages/clib/cgi.pl', 'packages/clib/cgi.c' ).
|
||||
user_c_dep( 'packages/clib/crypt.pl', 'packages/clib/crypt.c' ).
|
||||
user_c_dep( 'packages/clib/filesex.pl', 'packages/clib/files.c' ).
|
||||
user_c_dep( 'packages/clib/mime.pl', 'packages/clib/mime.c' ).
|
||||
user_c_dep( 'packages/clib/socket.pl', 'packages/clib/socket.c' ).
|
||||
user_c_dep( 'packages/clib/socket.pl', 'packages/clib/winpipe.c' ).
|
||||
user_c_dep( 'packages/http/http_stream.pl', 'packages/http/cgi_stream.c' ).
|
||||
user_c_dep( 'packages/http/http_stream.pl', 'packages/http/stream_range.c' ).
|
||||
user_c_dep( 'packages/http/http_stream.pl', 'packages/http/http_chunked.c' ).
|
||||
user_c_dep( 'packages/http/http_stream.pl', 'packages/http/http_error.c' ).
|
||||
user_c_dep( 'packages/swi-minisat2/minisat.pl', 'packages/swi-minisat2/C/pl-minisat.C' ).
|
||||
user_c_dep( 'packages/gecode/gecode.yap', 'packages/gecode/gecode4_yap.cc' ).
|
||||
user_c_dep( 'packages/gecode/gecode.yap', 'packages/gecode/4.2.1/gecode_yap_cc_forward_auto_generated.icc' ).
|
||||
user_c_dep( 'packages/gecode/gecode.yap', 'packages/gecode/4.2.1/gecode_yap_cc_init_auto_generated.icc' ).
|
||||
user_c_dep( 'packages/gecode/gecode.yap', 'packages/gecode/4.2.1/gecode_yap_cc_impl_auto_generated.icc' ).
|
||||
user_c_dep( 'packages/semweb/rdf_db.pl', 'packages/semweb/atom_map.c' ).
|
||||
user_c_dep( 'packages/semweb/rdf_db.pl', 'packages/semweb/resource.c' ).
|
||||
user_c_dep( 'packages/sgml/sgml.pl', 'packages/sgml/quote.c' ).
|
||||
user_c_dep( 'swi/library/readutil.pl', 'packages/clib/readutil.c' ).
|
||||
user_c_dep( 'packages/myddas/pl/myddas.ypp', 'packages/myddas/myddas_shared.c' ).
|
||||
user_c_dep( 'packages/myddas/pl/myddas.ypp', 'packages/myddas/myddas_odbc.c' ).
|
||||
user_c_dep( 'packages/myddas/pl/myddas.ypp', 'packages/myddas/myddas_mysql.c' ).
|
||||
user_c_dep( 'packages/myddas/pl/myddas.ypp', 'packages/myddas/myddas_top_level.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/bpx.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/error.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/fputil.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/gamma.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/glue.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/idtable.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/idtable_preds.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/random.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/termpool.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/vector.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/core/xmalloc.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/em_aux.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/em_aux_ml.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/em_aux_vb.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/em_ml.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/em_preds.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/flags.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/graph.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/graph_aux.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/hindsight.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/util.c' ).
|
||||
user_c_dep( 'packages/prism/src/prolog/prism.yap', 'packages/prism/src/c/up/viterbi.c' ).
|
||||
|
||||
doskip( D):- sub_atom( D, _, _, 0, '~' ).
|
||||
doskip( D):- sub_atom( D, _, _, 0, '/.' ).
|
||||
doskip( D):- sub_atom( D, _, _, 0, '/..' ).
|
||||
doskip( D):- sub_atom( D, _, _, 0, '/.git' ).
|
||||
doskip( D):- sub_atom( D, _, _, _, '/.#' ).
|
||||
doskip( D):- sub_atom( D, _, _, 0, '#' ).
|
||||
doskip( D):- user_skip( D ).
|
||||
|
||||
user_skip( 'packages/gecode/3.6.0').
|
||||
user_skip( 'packages/gecode/3.7.0').
|
||||
user_skip( 'packages/gecode/3.7.1').
|
||||
user_skip( 'packages/gecode/3.7.2').
|
||||
user_skip( 'packages/gecode/3.7.3').
|
||||
user_skip( 'packages/gecode/4.0.0').
|
||||
user_skip( 'packages/gecode/4.2.0').
|
||||
user_skip( 'packages/gecode/4.2.1').
|
||||
user_skip( 'packages/gecode/gecode3.yap' ).
|
||||
user_skip( 'packages/gecode/gecode3_yap.cc' ).
|
||||
user_skip( 'packages/gecode/gecode3_yap_hand_written.yap').
|
||||
user_skip( 'packages/gecode/gecode3.yap-common.icc').
|
||||
user_skip( 'packages/prism/src/prolog/core').
|
||||
user_skip( 'packages/prism/src/prolog/up').
|
||||
user_skip( 'packages/prism/src/prolog/mp').
|
||||
user_skip( 'packages/prism/src/prolog/trans').
|
||||
user_skip( 'packages/prism/src/prolog/bp').
|
||||
user_skip( 'packages/prism/src/c').
|
||||
|
||||
user_expand( library(clpfd), 'library/clp/clpfd.pl' ).
|
37
misc/tests
37
misc/tests
@@ -1,3 +1,34 @@
|
||||
current_predicate 2
|
||||
X Y _
|
||||
goal_expansion Y goal_expansion(_)
|
||||
|
||||
:- op(test, fx, 1200).
|
||||
|
||||
test_mode.
|
||||
|
||||
test( ( G :- Sols ) :-
|
||||
reset_sols,
|
||||
init_io( Streams ),
|
||||
catch( do_test(G, Sols), Done, handler( Done ) ).
|
||||
close_io( Streams ).
|
||||
|
||||
do_test(G0, Sols)
|
||||
copy_term(G0, G),
|
||||
catch( ( G, answer(G, Sol) ) , Error, test_error(Error, Sol) ),
|
||||
next_solution( I, Sol, G0, Sol ),
|
||||
!.
|
||||
do_test(G, Sols) :-
|
||||
counter(I),
|
||||
failure(G, Sols, I).
|
||||
|
||||
next_solution( I, Sol , G0, Sols ) :-
|
||||
inc(I),
|
||||
fetch(I, Sols, Pattern, Next),
|
||||
(
|
||||
Sol =@= Pattern
|
||||
->
|
||||
success(I, G0)
|
||||
;
|
||||
error(I, G0, Sol )
|
||||
),
|
||||
( var(Next) -> throw( done ) ).
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user