// // File defining fields in the Yap_heap_codes global structure // // these fields used to spread all over the place, because they must be used in 4 ways: // - they must be defined somewhere // - they have an #ifdef to get a shorter name // - they must be initialised somewhere // - they must be restorable and collectable (from the atom gc). // // // The defs include 4+ components: // Type // name in structured // global name // init code and restore code (optional) // // // // MkAT (MkAtomTerm) cvts from a predefined atom to a term // MkPred constructs a pred_entry // MkOp gets an opcode // void does nothing // =VALUE inits as VALUE // Init... sets up call to InitFunc // Restore... sets up call to RestoreFunc // /* multi-thread/ORP support */ #if defined(YAPOR) || defined(THREADS) /* number of threads and processes in system */ UInt n_of_threads NOfThreads =1 void /* number of threads created since start */ UInt n_of_threads_created NOfThreadsCreated =1 void /* total run time for dead threads */ UInt threads_total_time ThreadsTotalTime =0L void /* protect long critical regions */ lockvar bgl BGL MkLock /* worker local data */ worker_local wl[MAX_AGENTS] WorkerLocal void void #ifndef WL #define WL wl[worker_id] #endif #else worker_local wl WorkerLocak void void #ifndef WL #define WL wl #endif #endif /* memory management */ UInt hole_size Yap_HoleSize void void struct malloc_state *av_ 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 #endif #if USE_DL_MALLOC || (USE_SYSTEM_MALLOC && HAVE_MALLINFO) #ifndef HeapUsed #define HeapUsed Yap_givemallinfo() #endif Int heap_used NotHeapUsed void void #else Int heap_used 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 #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 #endif /* execution info */ /* OPCODE TABLE, needed to recover op tables */ #if USE_THREADED_CODE opentry *op_rtable 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 /* 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() /* use atom defs here */ ATOMS #ifdef EUROTRA Term term_dollar_u TermDollarU MkAT AtomDollarU #endif Term term_prolog TermProlog MkAT AtomProlog Term term_refound_var TermReFoundVar MkAT AtomRefoundVar 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 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 // // Module list // struct mod_entry *current_modules 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 /* Anderson's JIT */ yap_exec_mode execution_mode Yap_ExecutionMode =INTERPRETED void /* The Predicate Hash Table: fast access to predicates. */ struct pred_entry **pred_hash PredHash InitPredHash() RestorePredHash() #if defined(YAPOR) || defined(THREADS) rwlock_t pred_hash_rw_lock PredHashRWLock void #endif UInt preds_in_hash_table PredsInHashTable =0 void UInt pred_hash_table_size PredHashTableSize void /* Well-Known Predicates */ struct pred_entry *creep_code CreepCode MkPred AtomCreep 1 PROLOG_MODULE struct pred_entry *undef_code UndefCode MkPred AtomUndefp 1 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 #ifdef COROUTINING struct pred_entry *wake_up_code 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_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 #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 #endif /* YAPOR */ /* low-level tracer */ #ifdef LOW_LEVEL_TRACER int yap_do_low_level_trace Yap_do_low_level_trace =FALSE void #if defined(YAPOR) || defined(THREADS) lockvar low_level_trace_lock 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 /* 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 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 rtrycode[1] RTRYCODE 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 #endif /* BEAM */ #ifdef YAPOR int seq_def SEQUENTIAL_IS_DEFAULT =TRUE void 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 #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) #endif /* TABLING */ /* */ /* 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 /* 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 /* compiler flags */ int system_profiling PROFILING =FALSE void int system_call_counting CALL_COUNTING =FALSE void int system_pred_goal_expansion_all PRED_GOAL_EXPANSION_ALL =FALSE void int system_pred_goal_expansion_func PRED_GOAL_EXPANSION_FUNC =FALSE void int system_pred_goal_expansion_on PRED_GOAL_EXPANSION_ON =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 /********* whether we should try to compile array references ******************/ int compiler_compile_arrays compile_arrays =FALSE void /* DBTerms: pre-compiled ground terms */ #if defined(YAPOR) || defined(THREADS) lockvar dbterms_list_lock DBTermsListLock MkLock #endif struct dbterm_list *dbterms_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 #if defined(YAPOR) || defined(THREADS) lockvar expand_clauses_list_lock ExpandClausesListLock MkLock lockvar op_list_lock 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 #endif UInt expand_clauses_sz Yap_expand_clauses_sz =0L void /* UDI support */ struct udi_info *udi_control_blocks UdiControlBlocks =NULL RestoreUdiControlBlocks() /* data-base statistics */ /* system boots in compile mode */ Int static_predicates_marked 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() /* 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 /* Internal Data-Base Control */ int update_mode 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() /* 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() #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 #endif #ifdef COROUTINING /* number of attribute modules */ int num_of_atts NUM_OF_ATTS =1 void /* initialised by memory allocator */ UInt atts_size Yap_AttsSize void void #endif /* stack overflow expansion/gc control */ int allow_local_expansion Yap_AllowLocalExpansion =TRUE void int allow_global_expansion Yap_AllowGlobalExpansion =TRUE void int allow_trail_expansion Yap_AllowTrailExpansion =TRUE void UInt size_of_overflow SizeOfOverflow =0 void /* amount of space recovered in all garbage collections */ UInt agc_last_call AGcLastCall =0 void /* amount of space recovered in all garbage collections */ UInt agc_threshold AGcThreshold =10000 void Agc_hook agc_hook AGCHook =NULL void /* YAP control flags */ Int yap_flags_field[NUMBER_OF_YAP_FLAGS] yap_flags InitFlags() void /* Operators */ struct operator_entry *op_list OpList =NULL OpListAdjust /* Input/Output */ /* stream array */ struct stream_desc *yap_streams Stream =NULL RestoreStreams() /* stream aliases */ UInt n_of_file_aliases NOfFileAliases =0 void UInt sz_of_file_aliases SzOfFileAliases =0 void struct AliasDescS *file_aliases FileAliases =NULL RestoreAliases() /* prompting */ Atom atprompt AtPrompt =AtomNil AtomAdjust char prompt[MAX_PROMPT] Prompt void void /* readline */ #if HAVE_LIBREADLINE char *readline_buf ReadlineBuf =NULL void char *readline_pos ReadlinePos =0L void #endif /* ISO char conversion: I will make no comments */ char *char_conversion_table CharConversionTable =NULL CodeCharPAdjust char *char_conversion_table2 CharConversionTable2 =NULL CodeCharPAdjust /* write depth */ UInt maxdepth max_depth =0L void UInt axlist max_list =0L void UInt maxwriteargs max_write_args =0L void /* what to do when the parser gives an error: should be thread bound? */ int parser_error_style ParserErrorStyle =EXCEPTION_ON_PARSER_ERROR void /* library location. */ char *yap_lib_dir Yap_LibDir =NULL CodeCharPAdjust /* time */ void *last_wtime LastWtimePtr =NULL CodeVoidPAdjust /* profiling */ int debugger_output_msg output_msg =0L void #if LOW_PROF int profiler_on ProfilerOn =FALSE void int offline_profiler Yap_OffLineProfiler =FALSE void FILE *f_prof FProf =NULL void FILE *f_preds FPreds =NULL void UInt prof_preds ProfPreds =0L void #endif /* LOW_PROF */ /* foreign code loaded */ void *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 /* Threads Array */ #ifdef THREADS lockvar thread_handles_lock ThreadHandlesLock MkLock struct thandle thread_handle[MAX_THREADS] ThreadHandle InitThreadHandles() void #endif