Remove asserts, replace fixed size lexer_buf.
This commit is contained in:
parent
f9236131ff
commit
104afe77cb
|
|
@ -138,18 +138,19 @@ static void print_sym_tab(SYM_TAB t, BOOL with_addr)
|
|||
/* End of btree symbol table */
|
||||
|
||||
/* Start of lexical scanner */
|
||||
#include <assert.h>
|
||||
#define LEX_ID 256
|
||||
#define LEX_OTHER 257
|
||||
#define LEX_BUF_SZ 512
|
||||
#define LEX_ID 256
|
||||
#define LEX_OTHER 257
|
||||
#define LEX_BUF_SZ 512
|
||||
#define LEX_INIT_SZ 128
|
||||
|
||||
typedef struct lexer *LEXER;
|
||||
struct lexer {
|
||||
char lexer_buf[LEX_BUF_SZ];
|
||||
char *lexer_buf;
|
||||
char *lexer_line;
|
||||
int lexer_pos;
|
||||
int lexer_back;
|
||||
SYM_TAB lexer_sym_tab;
|
||||
size_t lexer_blen;
|
||||
};
|
||||
|
||||
static LEXER parse_lexer = NULL;
|
||||
|
|
@ -161,7 +162,9 @@ static LEXER new_lexer(char *line)
|
|||
lx->lexer_line = TMALLOC(char, (strlen(line) + 1));
|
||||
strcpy(lx->lexer_line, line);
|
||||
lx->lexer_pos = lx->lexer_back = 0;
|
||||
lx->lexer_buf[0] = '\0';
|
||||
lx->lexer_blen = LEX_INIT_SZ;
|
||||
lx->lexer_buf = TMALLOC(char, lx->lexer_blen);
|
||||
(void) memset(lx->lexer_buf, 0, lx->lexer_blen);
|
||||
lx->lexer_sym_tab = NULL;
|
||||
return lx;
|
||||
}
|
||||
|
|
@ -170,6 +173,8 @@ static void delete_lexer(LEXER lx)
|
|||
{
|
||||
if (!lx)
|
||||
return;
|
||||
if (lx->lexer_buf)
|
||||
tfree(lx->lexer_buf);
|
||||
if (lx->lexer_line)
|
||||
tfree(lx->lexer_line);
|
||||
if (lx->lexer_sym_tab)
|
||||
|
|
@ -321,14 +326,22 @@ static int lexer_scan(LEXER lx)
|
|||
else if (lex_oper(c))
|
||||
return c;
|
||||
else if (lex_ident(c)) {
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
while (lex_ident(c)) {
|
||||
if (i >= lx->lexer_blen) {
|
||||
lx->lexer_blen *= 2;
|
||||
lx->lexer_buf =
|
||||
TREALLOC(char, lx->lexer_buf, lx->lexer_blen);
|
||||
}
|
||||
lx->lexer_buf[i] = (char) c;
|
||||
assert(i < LEX_BUF_SZ);
|
||||
i++;
|
||||
c = lexer_getchar(lx);
|
||||
}
|
||||
assert(i < LEX_BUF_SZ);
|
||||
if (i >= lx->lexer_blen) {
|
||||
lx->lexer_blen *= 2;
|
||||
lx->lexer_buf =
|
||||
TREALLOC(char, lx->lexer_buf, lx->lexer_blen);
|
||||
}
|
||||
lx->lexer_buf[i] = '\0';
|
||||
if (c != '\0')
|
||||
lexer_putback(lx);
|
||||
|
|
|
|||
Loading…
Reference in New Issue