Lexer fixes

This commit is contained in:
Dale Weiler 2012-04-28 16:25:43 -04:00
parent bdb238b705
commit 7a81848d88
2 changed files with 5 additions and 25 deletions

View file

@ -271,8 +271,6 @@ uint32_t util_crc32(const char *, int, register const short);
#define VECTOR_MAKE(T,N) \
VECTOR_TYPE(T,N); \
VECTOR_CORE(T,N)
/* Builds a vector add function pointer for inside structures */
#define VECTOR_IMPL(T,N) int (*N##_add)(T)
//===================================================================
//=========================== code.c ================================

28
lex.c
View file

@ -139,22 +139,10 @@ static int lex_digraph(lex_file *file, int first) {
static int lex_getch(lex_file *file) {
int ch = lex_inget(file);
static int str = 0;
switch (ch) {
case '?' :
return lex_trigraph(file);
case '<' :
case ':' :
case '%' :
case '"' : str = !str; if (str) { file->line ++; }
return lex_digraph(file, ch);
case '\n':
if (!str)
file->line++;
}
if (ch == '?')
return lex_trigraph(file);
if (ch == '<' || ch == ':' || ch == '%')
return lex_digraph(file, ch);
return ch;
}
@ -283,13 +271,7 @@ int lex_token(lex_file *file) {
if (ch > 0 && (ch == '_' || isalpha(ch))) {
lex_clear(file);
/*
* Yes this is dirty, but there is no other _sane_ easy
* way to do it, this is what I call defensive programming
* if something breaks, add more defense :-)
*/
while (ch > 0 && ch != ' ' && ch != '(' &&
ch != '\n' && ch != ';' && ch != ')') {
while (ch > 0 && (ch == '_' || isalpha(ch))) {
lex_addch(ch, file);
ch = lex_getsource(file);
}