From 220970db6d69281a3498dd4c8395e8ffccb1cbde Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Wed, 13 Nov 2013 12:57:52 +0000 Subject: [PATCH] more integration and cleanup work: allow irect access from YAP to swi global and local, to check flags quickly. --- C/init.c | 1 - C/iopreds.c | 7 +- C/parser.c | 2 + C/scanner.c | 2 + C/stdpreds.c | 5 - C/write.c | 1 + H/Yap.h | 25 ++++- H/pl-global.h | 83 +++++++++++++++++ H/pl-incl.h | 181 ------------------------------------ H/pl-shared.h | 217 +++++++++++++++++++++++++++++++------------ include/SWI-Prolog.h | 2 +- 11 files changed, 275 insertions(+), 251 deletions(-) diff --git a/C/init.c b/C/init.c index a81947292..91f69e155 100755 --- a/C/init.c +++ b/C/init.c @@ -909,7 +909,6 @@ InitFlags(void) yap_flags[INTEGER_ROUNDING_FLAG] = 0; yap_flags[YAP_MAX_INTEGER_FLAG] = (Int)(~((CELL)1 << (sizeof(Int)*8-1))); yap_flags[YAP_MIN_INTEGER_FLAG] = (Int)(((CELL)1 << (sizeof(Int)*8-1))); - yap_flags[CHAR_CONVERSION_FLAG] = 1; yap_flags[YAP_TO_CHARS_FLAG] = ISO_TO_CHARS; yap_flags[LANGUAGE_MODE_FLAG] = 0; yap_flags[STRICT_ISO_FLAG] = FALSE; diff --git a/C/iopreds.c b/C/iopreds.c index d807c0600..898213873 100755 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -29,6 +29,8 @@ static char SccsId[] = "%W% %G%"; #include "YapHeap.h" #include "yapio.h" #include "eval.h" +/* stuff we want to use in standard YAP code */ +#include "pl-shared.h" #include #if HAVE_STDARG_H #include @@ -974,7 +976,8 @@ p_char_conversion( USES_REGS1 ) } /* check if we do have a table for converting characters */ if (CharConversionTable2 == NULL) { - int i; + GET_LD + int i; /* don't create a table if we don't need to */ if (s0[0] == s1[0]) @@ -986,7 +989,7 @@ p_char_conversion( USES_REGS1 ) return(FALSE); } } - if (yap_flags[CHAR_CONVERSION_FLAG] != 0) { + if (truePrologFlag(PLFLAG_CHARCONVERSION)) { if (p_force_char_conversion( PASS_REGS1 ) == FALSE) return(FALSE); } diff --git a/C/parser.c b/C/parser.c index ba596cef3..aa252777d 100644 --- a/C/parser.c +++ b/C/parser.c @@ -51,6 +51,8 @@ static char SccsId[] = "%W% %G%"; #include "YapHeap.h" #include "yapio.h" #include "eval.h" +/* stuff we want to use in standard YAP code */ +#include "pl-shared.h" #if HAVE_STRING_H #include #endif diff --git a/C/scanner.c b/C/scanner.c index e7d16b047..6b424ed9a 100644 --- a/C/scanner.c +++ b/C/scanner.c @@ -39,6 +39,8 @@ #include "yapio.h" #include "alloc.h" #include "eval.h" +/* stuff we want to use in standard YAP code */ +#include "pl-shared.h" #if _MSC_VER || defined(__MINGW32__) #if HAVE_FINITE==1 #undef HAVE_FINITE diff --git a/C/stdpreds.c b/C/stdpreds.c index 03058c71d..eeaa217a1 100644 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -1649,11 +1649,6 @@ p_set_yap_flags( USES_REGS1 ) value = IntOfTerm(tvalue); /* checking should have been performed */ switch(flag) { - case CHAR_CONVERSION_FLAG: - if (value != 0 && value != 1) - return(FALSE); - yap_flags[CHAR_CONVERSION_FLAG] = value; - break; case YAP_TO_CHARS_FLAG: if (value != 0 && value != 1) return(FALSE); diff --git a/C/write.c b/C/write.c index b888ed06c..987609ed2 100644 --- a/C/write.c +++ b/C/write.c @@ -28,6 +28,7 @@ static char SccsId[] = "%W% %G%"; #if COROUTINING #include "attvar.h" #endif +#include "pl-shared.h" #if HAVE_STRING_H #include diff --git a/H/Yap.h b/H/Yap.h index 96128f8a5..a44db0175 100755 --- a/H/Yap.h +++ b/H/Yap.h @@ -347,7 +347,6 @@ typedef enum INTEGER_ROUNDING_FLAG = 2, YAP_MAX_INTEGER_FLAG = 3, YAP_MIN_INTEGER_FLAG = 4, - CHAR_CONVERSION_FLAG = 5, YAP_TO_CHARS_FLAG = 7, LANGUAGE_MODE_FLAG = 8, STRICT_ISO_FLAG = 9, @@ -376,8 +375,28 @@ typedef enum #define ISO_CHARACTER_ESCAPES 1 #define SICSTUS_CHARACTER_ESCAPES 2 -/* stuff we want to use in standard YAP code */ -#include "pl-shared.h" +// SWI Stuff +typedef enum + { DBG_OFF = 0, /* no debugging */ + DBG_ON, /* switch on in current environment */ + DBG_ALL /* switch on globally */ + } debug_type; + +typedef int bool; + +typedef struct debuginfo +{ size_t skiplevel; /* current skip level */ + bool tracing; /* are we tracing? */ + debug_type debugging; /* are we debugging? */ + int leashing; /* ports we are leashing */ + int visible; /* ports that are visible */ + bool showContext; /* tracer shows context module */ + int styleCheck; /* source style checking */ + int suspendTrace; /* tracing is suspended now */ + //LocalFrame retryFrame; /* Frame to retry */ +} pl_debugstatus_t; +// over SWI + typedef enum { diff --git a/H/pl-global.h b/H/pl-global.h index dd10757c8..63460f18d 100644 --- a/H/pl-global.h +++ b/H/pl-global.h @@ -1,3 +1,86 @@ +typedef enum +{ LDATA_IDLE = 0, + LDATA_SIGNALLED, + LDATA_ANSWERING, + LDATA_ANSWERED +} ldata_status_t; + +typedef enum +{ CLN_NORMAL = 0, /* Normal mode */ + CLN_ACTIVE, /* Started cleanup */ + CLN_FOREIGN, /* Foreign hooks */ + CLN_PROLOG, /* Prolog hooks */ + CLN_SHARED, /* Unload shared objects */ + CLN_DATA /* Remaining data */ +} cleanup_status; + +#ifdef O_PLMT + +typedef struct free_chunk *FreeChunk; /* left-over chunk */ + +struct free_chunk +{ FreeChunk next; /* next of chain */ + size_t size; /* size of free bit */ +}; + +typedef struct _PL_thread_info_t +{ int pl_tid; /* Prolog thread id */ + size_t local_size; /* Stack sizes */ + size_t global_size; + size_t trail_size; + size_t stack_size; /* system (C-) stack */ + int (*cancel)(int id); /* cancel function */ + int open_count; /* for PL_thread_detach_engine() */ + bool detached; /* detached thread */ + int status; /* PL_THREAD_* */ + pthread_t tid; /* Thread identifier */ + int has_tid; /* TRUE: tid = valid */ +#ifdef __linux__ + pid_t pid; /* for identifying */ +#endif +#ifdef __WINDOWS__ + unsigned long w32id; /* Win32 thread HANDLE */ +#endif + struct PL_local_data *thread_data; /* The thread-local data */ + module_t module; /* Module for starting goal */ + record_t goal; /* Goal to start thread */ + record_t return_value; /* Value (term) returned */ + atom_t name; /* Name of the thread */ + ldata_status_t ldata_status; /* status of forThreadLocalData() */ +} PL_thread_info_t; + +PL_thread_info_t *SWI_thread_info(int tid, PL_thread_info_t *info); +intptr_t system_thread_id(PL_thread_info_t *info); + +#endif + +typedef struct +{ unsigned long flags; /* Fast access to some boolean Prolog flags */ +} pl_features_t; + +typedef enum +{ OCCURS_CHECK_FALSE = 0, + OCCURS_CHECK_TRUE, + OCCURS_CHECK_ERROR +} occurs_check_t; + +typedef enum +{ ACCESS_LEVEL_USER = 0, /* Default user view */ + ACCESS_LEVEL_SYSTEM /* Allow low-level access */ +} access_level_t; + +typedef struct exception_frame /* PL_throw exception environments */ +{ struct exception_frame *parent; /* parent frame */ + jmp_buf exception_jmp_env; /* longjmp environment */ +} exception_frame; + +typedef struct +{ atom_t file; /* current source file */ + int line; /* current line */ + int linepos; /* position in the line */ + int64_t character; /* current character location */ +} source_location; + typedef struct { size_t localSize; /* size of local stack */ size_t globalSize; /* size of global stack */ diff --git a/H/pl-incl.h b/H/pl-incl.h index d20754324..8a1c6e45b 100755 --- a/H/pl-incl.h +++ b/H/pl-incl.h @@ -13,12 +13,6 @@ #define EMULATE_DLOPEN 1 #endif -#if defined(__GNUC__) && !defined(MAY_ALIAS) -#define MAY_ALIAS __attribute__ ((__may_alias__)) -#else -#define MAY_ALIAS -#endif - #ifndef PL_CONSOLE #define PL_KERNEL 1 #endif @@ -170,7 +164,6 @@ typedef enum #if HAVE_STRING_H #include #endif -#define COMMON(X) X #ifdef HAVE_LOCALE_H #include @@ -240,54 +233,12 @@ users foreign language code. #define WM_SIGNALLED (WM_USER+4201) /* how to select a good number!? */ #endif -// THIS HAS TO BE ABSTRACTED - -#define GLOBAL_LD (LOCAL_PL_local_data_p) - -#if !defined(O_PLMT) && !defined(YAPOR) -#define LOCAL_LD (GLOBAL_LD) -#define LD (GLOBAL_LD) -#define ARG1_LD void -#define ARG_LD -#define GET_LD -#define PRED_LD -#define PASS_LD -#define PASS_LD1 -#define IGNORE_LD - -#else - -#define LOCAL_LD (__PL_ld) -#define LD LOCAL_LD - -#define GET_LD CACHE_REGS struct PL_local_data *__PL_ld = GLOBAL_LD; -#define ARG1_LD struct PL_local_data *__PL_ld - -#define ARG_LD , ARG1_LD -#define PASS_LD1 LD -#define PASS_LD , LD -#define PRED_LD GET_LD -#define IGNORE_LD (void)__PL_ld; - -#endif /******************************** * UTILITIES * *********************************/ #define ROUND(p, n) ((((p) + (n) - 1) & ~((n) - 1))) - /******************************** - * HASH TABLES * - *********************************/ - -#include "pl-table.h" - - /******************************** - * OS * - *********************************/ - -#include "pl-os.h" - /******************************** * Error * *********************************/ @@ -300,14 +251,6 @@ users foreign language code. #include "pl-files.h" - /******************************** - * BUFFERS * - *********************************/ - -#define BUFFER_RING_SIZE 16 /* foreign buffer ring (pl-fli.c) */ - -#include "pl-buffer.h" - /******************************* * OPTION LISTS * *******************************/ @@ -409,60 +352,13 @@ typedef struct #define GF_PROCEDURE 2 /* check for max arity */ -#ifdef O_PLMT - -typedef struct free_chunk *FreeChunk; /* left-over chunk */ - -struct free_chunk -{ FreeChunk next; /* next of chain */ - size_t size; /* size of free bit */ -}; - -#endif - /******************************* * LIST BUILDING * *******************************/ #include "pl-privitf.h" -typedef enum -{ CLN_NORMAL = 0, /* Normal mode */ - CLN_ACTIVE, /* Started cleanup */ - CLN_FOREIGN, /* Foreign hooks */ - CLN_PROLOG, /* Prolog hooks */ - CLN_SHARED, /* Unload shared objects */ - CLN_DATA /* Remaining data */ -} cleanup_status; -typedef struct -{ char *state; /* system's boot file */ - char *startup; /* default user startup file */ - int local; /* default local stack size (K) */ - int global; /* default global stack size (K) */ - int trail; /* default trail stack size (K) */ - char *goal; /* default initialisation goal */ - char *toplevel; /* default top level goal */ - bool notty; /* use tty? */ - char *arch; /* machine/OS we are using */ - char *home; /* systems home directory */ -} pl_defaults_t; - - -typedef struct tempfile * TempFile; /* pl-os.c */ -typedef struct canonical_dir * CanonicalDir; /* pl-os.c */ -typedef struct on_halt * OnHalt; /* pl-os.c */ -typedef struct extension_cell * ExtensionCell; /* pl-ext.c */ -typedef struct initialise_handle * InitialiseHandle; - - -typedef struct -{ unsigned long flags; /* Fast access to some boolean Prolog flags */ -} pl_features_t; - -#define truePrologFlag(flag) true(&LD->prolog_flag.mask, flag) -#define setPrologFlagMask(flag) set(&LD->prolog_flag.mask, flag) -#define clearPrologFlagMask(flag) clear(&LD->prolog_flag.mask, flag) // LOCAL variables (heap will get this form LOCAL @@ -475,75 +371,10 @@ typedef struct #define FT_FROM_VALUE 0x0f /* Determine type from value */ #define FT_MASK 0x0f /* mask to get type */ -#define PLFLAG_CHARESCAPE 0x000001 /* handle \ in atoms */ -#define PLFLAG_GC 0x000002 /* do GC */ -#define PLFLAG_TRACE_GC 0x000004 /* verbose gc */ -#define PLFLAG_TTY_CONTROL 0x000008 /* allow for tty control */ -#define PLFLAG_READLINE 0x000010 /* readline is loaded */ -#define PLFLAG_DEBUG_ON_ERROR 0x000020 /* start tracer on error */ -#define PLFLAG_REPORT_ERROR 0x000040 /* print error message */ -#define PLFLAG_FILE_CASE 0x000080 /* file names are case sensitive */ -#define PLFLAG_FILE_CASE_PRESERVING 0x000100 /* case preserving file names */ -#define PLFLAG_DOS_FILE_NAMES 0x000200 /* dos (8+3) file names */ -#define ALLOW_VARNAME_FUNCTOR 0x000400 /* Read Foo(x) as 'Foo'(x) */ -#define PLFLAG_ISO 0x000800 /* Strict ISO compliance */ -#define PLFLAG_OPTIMISE 0x001000 /* -O: optimised compilation */ -#define PLFLAG_FILEVARS 0x002000 /* Expand $var and ~ in filename */ -#define PLFLAG_AUTOLOAD 0x004000 /* do autoloading */ -#define PLFLAG_CHARCONVERSION 0x008000 /* do character-conversion */ -#define PLFLAG_LASTCALL 0x010000 /* Last call optimization enabled? */ -#define PLFLAG_EX_ABORT 0x020000 /* abort with exception */ -#define PLFLAG_BACKQUOTED_STRING 0x040000 /* `a string` */ -#define PLFLAG_SIGNALS 0x080000 /* Handle signals */ -#define PLFLAG_DEBUGINFO 0x100000 /* generate debug info */ -#define PLFLAG_FILEERRORS 0x200000 /* Edinburgh file errors */ - -typedef enum -{ OCCURS_CHECK_FALSE = 0, - OCCURS_CHECK_TRUE, - OCCURS_CHECK_ERROR -} occurs_check_t; - -typedef struct -{ atom_t file; /* current source file */ - int line; /* current line */ - int linepos; /* position in the line */ - int64_t character; /* current character location */ -} source_location; - -typedef struct exception_frame /* PL_throw exception environments */ -{ struct exception_frame *parent; /* parent frame */ - jmp_buf exception_jmp_env; /* longjmp environment */ -} exception_frame; - - /******************************* - * STREAM I/O * - *******************************/ - -#define REDIR_MAGIC 0x23a9bef3 - -typedef struct redir_context -{ int magic; /* REDIR_MAGIC */ - IOSTREAM *stream; /* temporary output */ - int is_stream; /* redirect to stream */ - int redirected; /* output is redirected */ - term_t term; /* redirect target */ - int out_format; /* output type */ - int out_arity; /* 2 for difference-list versions */ - size_t size; /* size of I/O buffer */ - char *data; /* data written */ - char buffer[1024]; /* fast temporary buffer */ -} redir_context; - -#include "pl-file.h" - #define SYSTEM_MODE (LD->prolog_flag.access_level == ACCESS_LEVEL_SYSTEM) #define PL_malloc_atomic malloc -/* vsc: global variables */ -#include "pl-global.h" - #define EXCEPTION_GUARDED(code, cleanup) \ { exception_frame __throw_env; \ __throw_env.parent = LD->exception.throw_environment; \ @@ -684,18 +515,6 @@ void remove_string(char *s); typedef double real; -#define true(s, a) ((s)->flags & (a)) -#define false(s, a) (!true((s), (a))) -#define set(s, a) ((s)->flags |= (a)) -#define clear(s, a) ((s)->flags &= ~(a)) -#ifdef DEBUG -/* should have messages here */ -#undef DEBUG -#define DEBUG(LEVEL, COMMAND) -#else -#define DEBUG(LEVEL, COMMAND) -#endif - #define forwards static /* forwards function declarations */ /* uxnt package interface */ diff --git a/H/pl-shared.h b/H/pl-shared.h index a660f0354..80899978e 100644 --- a/H/pl-shared.h +++ b/H/pl-shared.h @@ -3,26 +3,62 @@ #define PL_SHARED_INCLUDE +#if defined(__GNUC__) && !defined(MAY_ALIAS) +#define MAY_ALIAS __attribute__ ((__may_alias__)) +#else +#define MAY_ALIAS +#endif + +#define COMMON(X) X + +#ifndef PL_HAVE_TERM_T +#define PL_HAVE_TERM_T +typedef uintptr_t term_t; +#endif + #ifndef _FLI_H_INCLUDED typedef void *record_t; -typedef int bool; typedef struct mod_entry *module_t; typedef uintptr_t atom_t; +typedef int (*PL_dispatch_hook_t)(int fd); + +typedef struct pred_entry *predicate_t; + +typedef uintptr_t PL_fid_t; /* opaque foreign context handle */ +#define fid_t PL_fid_t /* avoid AIX name-clash */ + #endif -typedef enum -{ ACCESS_LEVEL_USER = 0, /* Default user view */ - ACCESS_LEVEL_SYSTEM /* Allow low-level access */ -} access_level_t; +#define GLOBAL_LD (LOCAL_PL_local_data_p) -typedef enum -{ LDATA_IDLE = 0, - LDATA_SIGNALLED, - LDATA_ANSWERING, - LDATA_ANSWERED -} ldata_status_t; +#if !defined(O_PLMT) && !defined(YAPOR) +#define LOCAL_LD (GLOBAL_LD) +#define LD (GLOBAL_LD) +#define ARG1_LD void +#define ARG_LD +#define GET_LD +#define PRED_LD +#define PASS_LD +#define PASS_LD1 +#define IGNORE_LD + +#else + +#define LOCAL_LD (__PL_ld) +#define LD LOCAL_LD + +#define GET_LD CACHE_REGS struct PL_local_data *__PL_ld = GLOBAL_LD; +#define ARG1_LD struct PL_local_data *__PL_ld + +#define ARG_LD , ARG1_LD +#define PASS_LD1 LD +#define PASS_LD , LD +#define PRED_LD GET_LD +#define IGNORE_LD (void)__PL_ld; + +#endif #if _WIN32 #ifndef THREADS @@ -30,39 +66,119 @@ typedef int pthread_t; #endif #endif -#if THREADS +#include "SWI-Stream.h" -typedef struct _PL_thread_info_t -{ int pl_tid; /* Prolog thread id */ - size_t local_size; /* Stack sizes */ - size_t global_size; - size_t trail_size; - size_t stack_size; /* system (C-) stack */ - int (*cancel)(int id); /* cancel function */ - int open_count; /* for PL_thread_detach_engine() */ - bool detached; /* detached thread */ - int status; /* PL_THREAD_* */ - pthread_t tid; /* Thread identifier */ - int has_tid; /* TRUE: tid = valid */ -#ifdef __linux__ - pid_t pid; /* for identifying */ -#endif -#ifdef __WINDOWS__ - unsigned long w32id; /* Win32 thread HANDLE */ -#endif - struct PL_local_data *thread_data; /* The thread-local data */ - module_t module; /* Module for starting goal */ - record_t goal; /* Goal to start thread */ - record_t return_value; /* Value (term) returned */ - atom_t name; /* Name of the thread */ - ldata_status_t ldata_status; /* status of forThreadLocalData() */ -} PL_thread_info_t; + /******************************* + * STREAM I/O * + *******************************/ -PL_thread_info_t *SWI_thread_info(int tid, PL_thread_info_t *info); -intptr_t system_thread_id(PL_thread_info_t *info); +#define REDIR_MAGIC 0x23a9bef3 +typedef struct redir_context +{ int magic; /* REDIR_MAGIC */ + IOSTREAM *stream; /* temporary output */ + int is_stream; /* redirect to stream */ + int redirected; /* output is redirected */ + term_t term; /* redirect target */ + int out_format; /* output type */ + int out_arity; /* 2 for difference-list versions */ + size_t size; /* size of I/O buffer */ + char *data; /* data written */ + char buffer[1024]; /* fast temporary buffer */ +} redir_context; + +#include "pl-file.h" + + /******************************** + * HASH TABLES * + *********************************/ + +#include "pl-table.h" + + /******************************** + * BUFFERS * + *********************************/ + +#define BUFFER_RING_SIZE 16 /* foreign buffer ring (pl-fli.c) */ + +#include "pl-buffer.h" + +typedef struct canonical_dir * CanonicalDir; /* pl-os.c */ + +typedef struct +{ char *state; /* system's boot file */ + char *startup; /* default user startup file */ + int local; /* default local stack size (K) */ + int global; /* default global stack size (K) */ + int trail; /* default trail stack size (K) */ + char *goal; /* default initialisation goal */ + char *toplevel; /* default top level goal */ + bool notty; /* use tty? */ + char *arch; /* machine/OS we are using */ + char *home; /* systems home directory */ +} pl_defaults_t; + +typedef struct on_halt * OnHalt; /* pl-os.c */ + +typedef struct extension_cell * ExtensionCell; /* pl-ext.c */ + +typedef struct tempfile * TempFile; /* pl-os.c */ + +typedef struct initialise_handle * InitialiseHandle; + + /******************************** + * Operating System * + *********************************/ + +#include "pl-os.h" + + /******************************** + * Table * + *********************************/ + +#include "pl-table.h" + + +/* vsc: global variables */ +#include "pl-global.h" + +// THIS HAS TO BE ABSTRACTED + +#define true(s, a) ((s)->flags & (a)) +#define false(s, a) (!true((s), (a))) +#define set(s, a) ((s)->flags |= (a)) +#define clear(s, a) ((s)->flags &= ~(a)) +#ifdef DEBUG +/* should have messages here */ +#undef DEBUG +#define DEBUG(LEVEL, COMMAND) +#else +#define DEBUG(LEVEL, COMMAND) #endif +#define PLFLAG_CHARESCAPE 0x000001 /* handle \ in atoms */ +#define PLFLAG_GC 0x000002 /* do GC */ +#define PLFLAG_TRACE_GC 0x000004 /* verbose gc */ +#define PLFLAG_TTY_CONTROL 0x000008 /* allow for tty control */ +#define PLFLAG_READLINE 0x000010 /* readline is loaded */ +#define PLFLAG_DEBUG_ON_ERROR 0x000020 /* start tracer on error */ +#define PLFLAG_REPORT_ERROR 0x000040 /* print error message */ +#define PLFLAG_FILE_CASE 0x000080 /* file names are case sensitive */ +#define PLFLAG_FILE_CASE_PRESERVING 0x000100 /* case preserving file names */ +#define PLFLAG_DOS_FILE_NAMES 0x000200 /* dos (8+3) file names */ +#define ALLOW_VARNAME_FUNCTOR 0x000400 /* Read Foo(x) as 'Foo'(x) */ +#define PLFLAG_ISO 0x000800 /* Strict ISO compliance */ +#define PLFLAG_OPTIMISE 0x001000 /* -O: optimised compilation */ +#define PLFLAG_FILEVARS 0x002000 /* Expand $var and ~ in filename */ +#define PLFLAG_AUTOLOAD 0x004000 /* do autoloading */ +#define PLFLAG_CHARCONVERSION 0x008000 /* do character-conversion */ +#define PLFLAG_LASTCALL 0x010000 /* Last call optimization enabled? */ +#define PLFLAG_EX_ABORT 0x020000 /* abort with exception */ +#define PLFLAG_BACKQUOTED_STRING 0x040000 /* `a string` */ +#define PLFLAG_SIGNALS 0x080000 /* Handle signals */ +#define PLFLAG_DEBUGINFO 0x100000 /* generate debug info */ +#define PLFLAG_FILEERRORS 0x200000 /* Edinburgh file errors */ + /* Flags on module. Most of these flags are copied to the read context in pl-read.c. */ @@ -81,25 +197,10 @@ intptr_t system_thread_id(PL_thread_info_t *info); extern unsigned int getUnknownModule(module_t m); -typedef enum - { DBG_OFF = 0, /* no debugging */ - DBG_ON, /* switch on in current environment */ - DBG_ALL /* switch on globally */ - } debug_type; - - -typedef struct debuginfo -{ size_t skiplevel; /* current skip level */ - bool tracing; /* are we tracing? */ - debug_type debugging; /* are we debugging? */ - int leashing; /* ports we are leashing */ - int visible; /* ports that are visible */ - bool showContext; /* tracer shows context module */ - int styleCheck; /* source style checking */ - int suspendTrace; /* tracing is suspended now */ - //LocalFrame retryFrame; /* Frame to retry */ -} pl_debugstatus_t; - #define debugstatus LOCAL_debugstatus /* status of the debugger */ +#define truePrologFlag(flag) true(&LD->prolog_flag.mask, flag) +#define setPrologFlagMask(flag) set(&LD->prolog_flag.mask, flag) +#define clearPrologFlagMask(flag) clear(&LD->prolog_flag.mask, flag) + #endif /* PL_SHARED_INCLUDE */ diff --git a/include/SWI-Prolog.h b/include/SWI-Prolog.h index 50a959636..4b83c82e4 100755 --- a/include/SWI-Prolog.h +++ b/include/SWI-Prolog.h @@ -141,7 +141,7 @@ typedef uintptr_t term_t; typedef struct mod_entry *module_t; typedef void *record_t; typedef uintptr_t atom_t; -typedef YAP_Term *predicate_t; +typedef struct pred_entry *predicate_t; typedef struct open_query_struct *qid_t; typedef uintptr_t functor_t; typedef int (*PL_agc_hook_t)(atom_t);