This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/H/pl-read.h

119 lines
3.6 KiB
C

typedef struct vlist_struct_t {
struct VARSTRUCT *ve;
struct vlist_struct_t *next;
} vlist_t;
typedef struct qq_struct_t {
unsigned char *text;
IOPOS start, mid, end;
vlist_t *vlist;
struct qq_struct_t *next;
} qq_t;
typedef unsigned char * ucharp;
typedef const unsigned char * cucharp;
#define utf8_get_uchar(s, chr) (ucharp)utf8_get_char((char *)(s), chr)
#define FASTBUFFERSIZE 256 /* read quickly upto this size */
struct read_buffer
{ int size; /* current size of read buffer */
unsigned char *base; /* base of read buffer */
unsigned char *here; /* current position in read buffer */
unsigned char *end; /* end of the valid buffer */
IOSTREAM *stream; /* stream we are reading from */
unsigned char fast[FASTBUFFERSIZE]; /* Quick internal buffer */
};
#define RD_MAGIC 0xefebe128
typedef struct read_data_t
{ unsigned char *here; /* current character */
unsigned char *base; /* base of clause */
unsigned char *end; /* end of the clause */
unsigned char *token_start; /* start of most recent read token */
int magic; /* RD_MAGIC */
IOPOS position; /* Line, line pos, char and byte */
unsigned char *posp; /* position pointer */
size_t posi; /* position number */
term_t subtpos; /* Report Subterm positions */
bool cycles; /* Re-establish cycles */
source_location start_of_term; /* Position of start of term */
module_t module; /* Current source module */
unsigned int flags; /* Module syntax flags */
int styleCheck; /* style-checking mask */
bool backquoted_string; /* Read `hello` as string */
int *char_conversion_table; /* active conversion table */
atom_t on_error; /* Handling of syntax errors */
int has_exception; /* exception is raised */
term_t exception; /* raised exception */
term_t variables; /* report variables */
term_t singles; /* Report singleton variables */
term_t varnames; /* Report variables+names */
int strictness; /* Strictness level */
#ifdef O_QUASIQUOTATIONS
term_t quasi_quotations; /* User option quasi_quotations(QQ) */
term_t qq; /* Quasi quoted list */
term_t qq_tail; /* Tail of the quoted stuff */
#endif
term_t comments; /* Report comments */
struct read_buffer _rb; /* keep read characters here */
} read_data, *ReadData;
#define rdhere (_PL_rd->here)
#define rdbase (_PL_rd->base)
#define rdend (_PL_rd->end)
#define last_token_start (_PL_rd->token_start)
#define rb (_PL_rd->_rb)
#define DO_CHARESCAPE true(_PL_rd, M_CHARESCAPE)
extern IOFUNCTIONS Sstringfunctions;
#ifndef NULL_ATOM
#define NULL_ATOM 0
#endif
static inline void
setCurrentSourceLocation(ReadData _PL_rd ARG_LD)
{ atom_t a;
IOSTREAM *s = rb.stream;
if ( (a = fileNameStream(s)) )
_PL_rd->start_of_term.file = a;
else
_PL_rd->start_of_term.file = NULL_ATOM;
if ( s->position )
{ _PL_rd->start_of_term.position.lineno = s->position->lineno;
_PL_rd->start_of_term.position.linepos = s->position->linepos - 1;
_PL_rd->start_of_term.position.charno = s->position->charno - 1;
/* byteno maintained get getchr__() */
} else
{ _PL_rd->start_of_term.position.lineno = -1;
_PL_rd->start_of_term.position.linepos = -1;
_PL_rd->start_of_term.position.charno = 0;
_PL_rd->start_of_term.position.byteno = 0;
}
LD->read_source = _PL_rd->start_of_term;
}
extern int Yap_read_term(term_t t, IOSTREAM *st, struct read_data_t *rdt);
/* parser.c */
extern Term Yap_Parse( struct read_data_t *);
extern void init_read_data( struct read_data_t *, IOSTREAM *st ARG_LD);
extern void free_read_data( struct read_data_t *);