Reverted to the older version (before accidental commit)
This commit is contained in:
parent
494d1cb129
commit
9afd9fe776
55
src/parser.c
55
src/parser.c
|
@ -35,7 +35,6 @@ typedef struct _ParserCallbackData ParserCallbackData;
|
||||||
struct _Parser
|
struct _Parser
|
||||||
{
|
{
|
||||||
/* parsing sources */
|
/* parsing sources */
|
||||||
char * inject;
|
|
||||||
char * filename;
|
char * filename;
|
||||||
FILE * fp;
|
FILE * fp;
|
||||||
char * string;
|
char * string;
|
||||||
|
@ -46,6 +45,7 @@ struct _Parser
|
||||||
unsigned int line;
|
unsigned int line;
|
||||||
unsigned int col;
|
unsigned int col;
|
||||||
int last;
|
int last;
|
||||||
|
unsigned int lookahead;
|
||||||
|
|
||||||
ParserFilter scanner;
|
ParserFilter scanner;
|
||||||
|
|
||||||
|
@ -80,28 +80,21 @@ int parser_scan_filter(Parser * parser)
|
||||||
int c = parser->last;
|
int c = parser->last;
|
||||||
size_t i;
|
size_t i;
|
||||||
ParserFilterData * pfd;
|
ParserFilterData * pfd;
|
||||||
|
int l;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s(%p)\n", __func__, parser);
|
fprintf(stderr, "DEBUG: %s(%p)\n", __func__, parser);
|
||||||
#endif
|
#endif
|
||||||
if(parser->inject)
|
if(parser->lookahead)
|
||||||
{
|
parser->lookahead--;
|
||||||
c = parser->inject[0];
|
|
||||||
if((i = strlen(parser->inject)) > 1)
|
|
||||||
memmove(parser->inject, &parser->inject[1], i);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string_delete(parser->inject);
|
|
||||||
parser->inject = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(parser->scanner(&c, parser) != 0)
|
else if(parser->scanner(&c, parser) != 0)
|
||||||
return EOF; /* FIXME report error */
|
return EOF; /* FIXME report error */
|
||||||
for(i = 0; i < parser->filters_cnt; i++)
|
for(i = 0; i < parser->filters_cnt; i++)
|
||||||
{
|
{
|
||||||
pfd = &parser->filters[i];
|
pfd = &parser->filters[i];
|
||||||
if(pfd->filter(&c, pfd->data) != 0)
|
if((l = pfd->filter(&c, pfd->data)) < 0)
|
||||||
return EOF;
|
return EOF;
|
||||||
|
parser->lookahead += l;
|
||||||
}
|
}
|
||||||
parser->last = c;
|
parser->last = c;
|
||||||
return c;
|
return c;
|
||||||
|
@ -188,7 +181,6 @@ static Parser * _new_do(ParserFilter scanner)
|
||||||
|
|
||||||
if((parser = object_new(sizeof(*parser))) == NULL)
|
if((parser = object_new(sizeof(*parser))) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
parser->inject = NULL;
|
|
||||||
parser->filename = NULL;
|
parser->filename = NULL;
|
||||||
parser->fp = NULL;
|
parser->fp = NULL;
|
||||||
parser->string = NULL;
|
parser->string = NULL;
|
||||||
|
@ -197,6 +189,7 @@ static Parser * _new_do(ParserFilter scanner)
|
||||||
parser->line = 1;
|
parser->line = 1;
|
||||||
parser->col = 1;
|
parser->col = 1;
|
||||||
parser->last = EOF;
|
parser->last = EOF;
|
||||||
|
parser->lookahead = 0;
|
||||||
parser->scanner = scanner;
|
parser->scanner = scanner;
|
||||||
parser->filters = NULL;
|
parser->filters = NULL;
|
||||||
parser->filters_cnt = 0;
|
parser->filters_cnt = 0;
|
||||||
|
@ -238,7 +231,6 @@ int parser_delete(Parser * parser)
|
||||||
fprintf(stderr, "DEBUG: %s(%p) \"%s\"\n", __func__, parser,
|
fprintf(stderr, "DEBUG: %s(%p) \"%s\"\n", __func__, parser,
|
||||||
parser->filename);
|
parser->filename);
|
||||||
#endif
|
#endif
|
||||||
free(parser->inject);
|
|
||||||
if(parser->fp != NULL
|
if(parser->fp != NULL
|
||||||
&& fclose(parser->fp) != 0)
|
&& fclose(parser->fp) != 0)
|
||||||
ret = error_set_code(1, "%s: %s", parser->filename,
|
ret = error_set_code(1, "%s: %s", parser->filename,
|
||||||
|
@ -290,15 +282,6 @@ int parser_get_token(Parser * parser, Token ** token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* parser_set_lookahead */
|
|
||||||
void parser_set_lookahead(Parser * parser, unsigned int lookahead)
|
|
||||||
{
|
|
||||||
parser->lookahead = lookahead;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* useful */
|
/* useful */
|
||||||
/* parser_add_callback */
|
/* parser_add_callback */
|
||||||
int parser_add_callback(Parser * parser, ParserCallback callback, void * data)
|
int parser_add_callback(Parser * parser, ParserCallback callback, void * data)
|
||||||
|
@ -335,30 +318,6 @@ int parser_add_filter(Parser * parser, ParserFilter filter, void * data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* parser_inject */
|
|
||||||
int parser_inject(Parser * parser, char const * string)
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
char buf[2] = "\0";
|
|
||||||
|
|
||||||
if(string == NULL || string[0] == '\0')
|
|
||||||
return 0; /* don't bother */
|
|
||||||
c = parser->last;
|
|
||||||
parser->last = string[0];
|
|
||||||
if(parser->inject == NULL)
|
|
||||||
{
|
|
||||||
if((parser->inject = string_new(&string[1])) == NULL)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else if(string_append(&parser->inject, &string[1]) != 0)
|
|
||||||
return -1;
|
|
||||||
buf[0] = c;
|
|
||||||
if(c != EOF && string_append(&parser->inject, buf) != 0)
|
|
||||||
return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* parser_remove_callback */
|
/* parser_remove_callback */
|
||||||
int parser_remove_callback(Parser * parser, ParserCallback callback)
|
int parser_remove_callback(Parser * parser, ParserCallback callback)
|
||||||
/* FIXME untested */
|
/* FIXME untested */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user