253 lines
8.3 KiB
Plaintext
253 lines
8.3 KiB
Plaintext
//
|
|
// File defining fields in the Yap_GLOBAL global structure
|
|
//
|
|
// these fields used to spread all over the place, because they must be used in 3 ways:
|
|
// - they must be defined somewhere
|
|
// - they have an #ifdef to get a shorter name
|
|
// - they must be initialised somewhere
|
|
// - they may be of interest to restore
|
|
//
|
|
// The defs include 4+ components:
|
|
// Type
|
|
// name in structured
|
|
// global name
|
|
// init code (optional)
|
|
// restore code (optional)
|
|
//
|
|
//
|
|
|
|
|
|
// Stuff that must be considered local to a thread or worker
|
|
START_WORKER_LOCAL
|
|
|
|
// Streams
|
|
int c_input_stream Yap_c_input_stream =0
|
|
int c_output_stream Yap_c_output_stream =1
|
|
int c_error_stream Yap_c_error_stream =2
|
|
|
|
/* shifts and restore: per local data-structure */
|
|
restoreinfo rinfo
|
|
. rinfo.old_ASP OldASP =NULL
|
|
. rinfo.old_LCL0 OldLCL0 =NULL
|
|
. rinfo.old_TR OldTR =NULL
|
|
. rinfo.old_GlobalBase OldGlobalBase =NULL
|
|
. rinfo.old_H OldH =NULL
|
|
. rinfo.old_H0 OldH0 =NULL
|
|
. rinfo.old_TrailBase OldTrailBase =NULL
|
|
. rinfo.old_TrailTop OldTrailTop =NULL
|
|
. rinfo.old_HeapBase OldHeapBase =NULL
|
|
. rinfo.old_HeapTop OldHeapTop =NULL
|
|
. rinfo.cl_diff ClDiff =0L
|
|
. rinfo.g_diff GDiff =0L
|
|
. rinfo.h_diff HDiff =0L
|
|
. rinfo.g_diff0 GDiff0 =0L
|
|
. rinfo.g_split GSplit =NULL
|
|
. rinfo.l_diff LDiff =0L
|
|
. rinfo.tr_diff TrDiff =0L
|
|
. rinfo.x_diff XDiff =0L
|
|
. rinfo.delay_diff DelayDiff =0L
|
|
. rinfo.base_diff BaseDiff =0L
|
|
|
|
struct reduction_counters call_counters
|
|
. call_counters.reductions ReductionsCounter =0L
|
|
. call_counters.reductions_retries PredEntriesCounter =0L
|
|
. call_counters.retries RetriesCounter =0L
|
|
. call_counters.reductions_on ReductionsCounterOn =0L
|
|
. call_counters.reductions_retries_on PredEntriesCounterOn =0L
|
|
. call_counters.retries_on RetriesCounterOn =0L
|
|
|
|
int interrupts_disabled Yap_InterruptsDisabled =FALSE
|
|
|
|
// support for consulting files
|
|
/* current consult stack */
|
|
union CONSULT_OBJ* consultsp ConsultSp =NULL
|
|
/* current maximum number of cells in consult stack */
|
|
UInt consultcapacity ConsultCapacity void
|
|
/* top of consult stack */
|
|
union CONSULT_OBJ* consultbase ConsultBase =NULL
|
|
/* low-water mark for consult */
|
|
union CONSULT_OBJ* consultlow ConsultLow =NULL
|
|
|
|
//global variables
|
|
Term global_arena GlobalArena =0L TermToGlobalOrAtomAdjust
|
|
UInt global_arena_overflows GlobalArenaOverflows =0L
|
|
Int delay_arena_overflows DelayArenaOverflows =0L
|
|
Int arena_overflows ArenaOverflows =0L
|
|
Int depth_arenas DepthArenas =0
|
|
|
|
int arith_error ArithError =FALSE
|
|
struct pred_entry* last_asserted_pred LastAssertedPred =NULL
|
|
int debug_on DebugOn =FALSE
|
|
struct format_status* f_info FormatInfo =NULL
|
|
char* scanner_stack ScannerStack =NULL
|
|
struct scanner_extra_alloc* scanner_extra_blocks ScannerExtraBlocks =NULL
|
|
struct DB_TERM *ball_term BallTerm =NULL RestoreBallTerm(wid)
|
|
UInt active_signals ActiveSignals =0L
|
|
UInt i_pred_arity IPredArity =0L
|
|
yamop* prof_end ProfEnd =NULL
|
|
int uncaught_throw UncaughtThrow =FALSE
|
|
int doing_undefp DoingUndefp =FALSE
|
|
Int start_line StartLine =0L
|
|
scratch_block scratchpad ScratchPad InitScratchPad(wid)
|
|
#ifdef COROUTINING
|
|
Term woken_goals WokenGoals =0L TermToGlobalAdjust
|
|
Term atts_mutable_list AttsMutableList =0L TermToGlobalAdjust
|
|
#endif
|
|
|
|
// gc_stuff
|
|
Term gc_generation GcGeneration =0L TermToGlobalAdjust
|
|
Term gc_phase GcPhase =0L TermToGlobalAdjust
|
|
UInt gc_current_phase GcCurrentPhase =0L
|
|
UInt gc_calls GcCalls =0L
|
|
Int tot_gc_time TotGcTime =0L
|
|
YAP_ULONG_LONG tot_gc_recovered TotGcRecovered =0L
|
|
Int last_gc_time LastGcTime =0L
|
|
Int last_ss_time LastSSTime =0L
|
|
|
|
// global variables that cannot be global in a thread/or-p implementation
|
|
#if defined(YAPOR) || defined(THREADS)
|
|
lockvar signal_lock SignalLock MkLock
|
|
struct pred_entry* wpp WPP =NULL
|
|
/* in a single gc */
|
|
Int tot_marked total_marked =0L
|
|
Int tot_oldies total_oldies =0L
|
|
#if DEBUG && COROUTINING
|
|
UInt tot_smarked total_smarked =0L
|
|
#endif
|
|
struct choicept *wl_current_B current_B =NULL
|
|
CELL* wl_prev_HB prev_HB =NULL
|
|
CELL* hgen HGEN =NULL
|
|
CELL** ip_top iptop =NULL
|
|
#if GC_NO_TAGS
|
|
char* b_p Yap_bp =NULL
|
|
#endif
|
|
#if defined(TABLING) || defined(SBA)
|
|
struct trail_frame* wl_sTR sTR =NULL
|
|
struct trail_frame* wl_sTR0 sTR0 =NULL
|
|
struct trail_frame* new_tr new_TR =NULL
|
|
#else
|
|
Term *wl_sTR sTR =NULL
|
|
Term *wl_sTR0 sTR0 =NULL
|
|
Term *new_tr new_TR =NULL
|
|
#endif
|
|
struct gc_mark_continuation* conttop0 cont_top0 =NULL
|
|
struct gc_mark_continuation* conttop cont_top =NULL
|
|
int disc_trail_entries discard_trail_entries =0
|
|
gc_ma_hash_entry Gc_ma_hash_table[GC_MAVARS_HASH_SIZE] gc_ma_hash_table void
|
|
gc_ma_hash_entry* Gc_ma_h_top gc_ma_h_top =NULL
|
|
gc_ma_hash_entry* Gc_ma_h_list gc_ma_h_list =NULL
|
|
UInt Gc_timestamp gc_timestamp =0L
|
|
ADDR DB_vec db_vec =NULL
|
|
ADDR DB_vec0 db_vec0 =NULL
|
|
struct RB_red_blk_node* DB_root db_root =NULL
|
|
struct RB_red_blk_node* DB_nil db_nil =NULL
|
|
#endif /* defined(YAPOR) || defined(THREADS) */
|
|
|
|
|
|
jmp_buf gc_restore Yap_gc_restore void
|
|
struct array_entry* dynamic_arrays DynamicArrays =NULL PtoArrayEAdjust
|
|
struct static_array_entry* static_arrays StaticArrays =NULL PtoArraySAdjust
|
|
struct global_entry* global_variables GlobalVariables =NULL PtoGlobalEAdjust
|
|
int allow_restart Yap_AllowRestart =FALSE
|
|
|
|
// Thread Local Area for Fast Storage of Intermediate Compiled Code.
|
|
struct mem_blk* cmem_first_block Yap_CMemFirstBlock =NULL
|
|
UInt cmem_first_block_sz Yap_CMemFirstBlockSz =0L
|
|
|
|
// Thread Local Area for Labels.
|
|
Int* label_first_array Yap_LabelFirstArray =NULL
|
|
UInt label_first_array_sz Yap_LabelFirstArraySz =0L
|
|
|
|
// Thread Local Area for SWI-Prolog emulation routines.
|
|
char* putc_curp_ putc_curp =NULL
|
|
char* putc_cur_buf_ putc_cur_buf =NULL
|
|
char* putc_cur_lim_ putc_cur_lim =NULL
|
|
UInt putc_cur_flags_ putc_cur_flags =0L
|
|
char* SWI_buffers_[1+SWI_BUF_RINGS] SWI_buffers InitSWIBuffers(wid)
|
|
size_t SWI_buffers_sz_[1+SWI_BUF_RINGS] SWI_buffers_sz void
|
|
int SWI_buf_index_ SWI_buf_index =0
|
|
|
|
|
|
struct open_query_struct* _execution execution =NULL
|
|
|
|
// Ricardo's stuff
|
|
#if (defined(YAPOR) || defined(TABLING)) && defined(THREADS)
|
|
struct worker worker WORKER void
|
|
#endif
|
|
|
|
#ifdef THREADS
|
|
struct thandle thread_handle ThreadHandle InitThreadHandle(wid)
|
|
#define FOREIGN_ThreadHandle(wid) (Yap_WLocal[(wid)].thread_handle)
|
|
#define MY_ThreadHandle (Yap_WLocal[worker_id].thread_handle)
|
|
#endif
|
|
|
|
// END WORKER LOCAL STUFF
|
|
END_WORKER_LOCAL
|
|
|
|
// Stuff that must be shared by all threads or workers
|
|
START_WORKER_SHARED
|
|
|
|
/* multi-thread support */
|
|
#if THREADS
|
|
/* number of threads and processes in system */
|
|
UInt n_of_threads NOfThreads =1
|
|
/* number of threads created since start */
|
|
UInt n_of_threads_created NOfThreadsCreated =1
|
|
/* total run time for dead threads */
|
|
UInt threads_total_time ThreadsTotalTime =0L
|
|
#endif
|
|
|
|
// multi-thread/ORP support
|
|
#if defined(YAPOR) || defined(THREADS)
|
|
// protect long critical regions
|
|
lockvar bgl BGL MkLock
|
|
#endif
|
|
|
|
Functor f_swi_stream FSWIStream =NULL
|
|
SWI_GetFunction swi_getc SWIGetc =NULL
|
|
SWI_PutFunction swi_putc SWIPutc =NULL
|
|
SWI_GetWideFunction swi_wgetc SWIWideGetc =NULL
|
|
SWI_PutWideFunction swi_wputc SWIWidePutc =NULL
|
|
SWI_CloseFunction swi_close SWIClose =NULL
|
|
SWI_FlushFunction swi_flush SWIFlush =NULL
|
|
|
|
// stack overflow expansion/gc control
|
|
int allow_local_expansion Yap_AllowLocalExpansion =TRUE
|
|
int allow_global_expansion Yap_AllowGlobalExpansion =TRUE
|
|
int allow_trail_expansion Yap_AllowTrailExpansion =TRUE
|
|
UInt size_of_overflow SizeOfOverflow =0
|
|
// amount of space recovered in all garbage collections
|
|
UInt agc_last_call AGcLastCall =0
|
|
// amount of space recovered in all garbage collections
|
|
UInt agc_threshold AGcThreshold =10000
|
|
Agc_hook agc_hook AGCHook =NULL
|
|
|
|
// readline
|
|
#if HAVE_LIBREADLINE
|
|
char *readline_buf ReadlineBuf =NULL
|
|
char *readline_pos ReadlinePos =0L
|
|
#endif
|
|
|
|
// Threads Array
|
|
#ifdef THREADS
|
|
lockvar thread_handles_lock ThreadHandlesLock MkLock
|
|
#endif
|
|
|
|
// Ricardo's stuff
|
|
#if defined(YAPOR) || defined(TABLING)
|
|
struct global_data global GLOBAL void
|
|
struct local_data remote[MAX_WORKERS] REMOTE void
|
|
#endif
|
|
|
|
// initialization: tell whether the system has been initialised and by whom.
|
|
int initialised Yap_Initialised =FALSE
|
|
int initialised_from_pl Yap_InitialisedFromPL =FALSE
|
|
int pl_argc Yap_PL_Argc =0
|
|
char **pl_argv Yap_PL_Argv =NULL
|
|
|
|
// halt hooks
|
|
struct halt_hook *yap_halt_hook Yap_HaltHooks =NULL
|
|
|
|
END_WORKER_SHARED
|
|
|