Remove asserts, replace fixed size lexer_buf.

This commit is contained in:
Brian Taylor 2022-11-06 10:09:04 -08:00 committed by Holger Vogt
parent f9236131ff
commit 104afe77cb
1 changed files with 22 additions and 9 deletions

View File

@ -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);