tokenizer.c

changeset 62
aae5facf9fc5
parent 60
a4033700e35c
child 70
e866dc825481
--- a/tokenizer.c	Mon Feb 16 18:09:03 2004 +0100
+++ b/tokenizer.c	Mon Feb 16 18:50:28 2004 +0100
@@ -21,27 +21,27 @@
 
 
 static const char *errors[]={
-	DUMMY_TR("(no error)"),
-	DUMMY_TR("Unexpected end of file"),				/* E_TOKZ_UNEXPECTED_EOF */
-	DUMMY_TR("Unexpected end of line"),				/* E_TOKZ_UNEXPECTED_EOL */
-	DUMMY_TR("End of line expected"),				/* E_TOKZ_EOL_EXPECTED */
-	DUMMY_TR("Invalid character"),					/* E_TOKZ_INVALID_CHAR*/
-	DUMMY_TR("Numeric constant too big"),			/* E_TOKZ_TOOBIG */
-	DUMMY_TR("Invalid numberic format"),			/* E_TOKZ_NUMFMT */
-	DUMMY_TR("Junk after numeric constant"),		/* E_TOKZ_NUM_JUNK */
-	DUMMY_TR("Not an integer"),						/* E_TOKZ_NOTINT */
-	DUMMY_TR("Numeric constant out of range"),		/* E_TOKZ_RANGE */
-	DUMMY_TR("Multi-character character constant"),	/* E_TOKZ_MULTICHAR */
-	DUMMY_TR("Token/statement limit reached"),		/* E_TOKZ_TOKEN_LIMIT */
-	DUMMY_TR("Unknown option"),						/* E_TOKZ_UNKONWN_OPTION */
-	DUMMY_TR("Syntax error"),						/* E_TOKZ_SYNTAX */
-	DUMMY_TR("Invalid argument"),					/* E_TOKZ_INVALID_ARGUMENT */
-	DUMMY_TR("End of statement expected"),			/* E_TOKZ_EOS_EXPECTED */
-	DUMMY_TR("Too few arguments"),					/* E_TOKZ_TOO_FEW_ARGS */
-	DUMMY_TR("Too many arguments"),					/* E_TOKZ_TOO_MANY_ARGS */
-	DUMMY_TR("Maximum section nestin level exceeded"), /* E_TOK_Z_MAX_NEST */
-	DUMMY_TR("Identifier expected"),				/* E_TOKZ_IDENTIFIER_EXPECTED */
-	DUMMY_TR("Starting brace ('{') expected"),		/* E_TOKZ_LBRACE_EXPECTED */
+    DUMMY_TR("(no error)"),
+    DUMMY_TR("Unexpected end of file"),                /* E_TOKZ_UNEXPECTED_EOF */
+    DUMMY_TR("Unexpected end of line"),                /* E_TOKZ_UNEXPECTED_EOL */
+    DUMMY_TR("End of line expected"),                /* E_TOKZ_EOL_EXPECTED */
+    DUMMY_TR("Invalid character"),                    /* E_TOKZ_INVALID_CHAR*/
+    DUMMY_TR("Numeric constant too big"),            /* E_TOKZ_TOOBIG */
+    DUMMY_TR("Invalid numberic format"),            /* E_TOKZ_NUMFMT */
+    DUMMY_TR("Junk after numeric constant"),        /* E_TOKZ_NUM_JUNK */
+    DUMMY_TR("Not an integer"),                        /* E_TOKZ_NOTINT */
+    DUMMY_TR("Numeric constant out of range"),        /* E_TOKZ_RANGE */
+    DUMMY_TR("Multi-character character constant"),    /* E_TOKZ_MULTICHAR */
+    DUMMY_TR("Token/statement limit reached"),        /* E_TOKZ_TOKEN_LIMIT */
+    DUMMY_TR("Unknown option"),                        /* E_TOKZ_UNKONWN_OPTION */
+    DUMMY_TR("Syntax error"),                        /* E_TOKZ_SYNTAX */
+    DUMMY_TR("Invalid argument"),                    /* E_TOKZ_INVALID_ARGUMENT */
+    DUMMY_TR("End of statement expected"),            /* E_TOKZ_EOS_EXPECTED */
+    DUMMY_TR("Too few arguments"),                    /* E_TOKZ_TOO_FEW_ARGS */
+    DUMMY_TR("Too many arguments"),                    /* E_TOKZ_TOO_MANY_ARGS */
+    DUMMY_TR("Maximum section nestin level exceeded"), /* E_TOK_Z_MAX_NEST */
+    DUMMY_TR("Identifier expected"),                /* E_TOKZ_IDENTIFIER_EXPECTED */
+    DUMMY_TR("Starting brace ('{') expected"),        /* E_TOKZ_LBRACE_EXPECTED */
 };
 
 
@@ -58,45 +58,45 @@
 
 static bool _string_append(char **p, char *tmp, int *tmplen, char c)
 {
-	char *tmp2;
-	
-	if(*tmplen==STRBLEN-1){
-		tmp[STRBLEN-1]='\0';
-		if(*p!=NULL){
-			tmp2=scat(*p, tmp);
-			free(*p);
-			*p=tmp2;
-		}else{
-			*p=scopy(tmp);
-		}
-		*tmplen=1;
-		tmp[0]=c;
-		return *p!=NULL;
-	}else{
-		tmp[(*tmplen)++]=c;
-		return TRUE;
-	}
+    char *tmp2;
+    
+    if(*tmplen==STRBLEN-1){
+        tmp[STRBLEN-1]='\0';
+        if(*p!=NULL){
+            tmp2=scat(*p, tmp);
+            free(*p);
+            *p=tmp2;
+        }else{
+            *p=scopy(tmp);
+        }
+        *tmplen=1;
+        tmp[0]=c;
+        return *p!=NULL;
+    }else{
+        tmp[(*tmplen)++]=c;
+        return TRUE;
+    }
 }
 
 
 static bool _string_finish(char **p, char *tmp, int tmplen)
 {
-	char *tmp2;
-	
-	if(tmplen==0){
-		if(*p==NULL)
-			*p=scopy("");
-	}else{
-		tmp[tmplen]='\0';
-		if(*p!=NULL){
-			tmp2=scat(*p, tmp);
-			free(*p);
-			*p=tmp2;
-		}else{
-			*p=scopy(tmp);
-		}
-	}
-	return *p!=NULL;
+    char *tmp2;
+    
+    if(tmplen==0){
+        if(*p==NULL)
+            *p=scopy("");
+    }else{
+        tmp[tmplen]='\0';
+        if(*p!=NULL){
+            tmp2=scat(*p, tmp);
+            free(*p);
+            *p=tmp2;
+        }else{
+            *p=scopy(tmp);
+        }
+    }
+    return *p!=NULL;
 }
 
 
@@ -109,28 +109,28 @@
 
 static int _getch(Tokenizer *tokz)
 {
-	int c;
-	
-	if(tokz->ungetc!=-1){
-		c=tokz->ungetc;
-		tokz->ungetc=-1;
-	}else if (tokz->flags&TOKZ_READ_FROM_BUFFER) {
-		assert(tokz->buffer.data!=NULL);
-		if (tokz->buffer.pos==tokz->buffer.len)
-			c=EOF;
-		else
-			c=tokz->buffer.data[tokz->buffer.pos++];
-	}else{
-		c=getc(tokz->file);
-	}
+    int c;
+    
+    if(tokz->ungetc!=-1){
+        c=tokz->ungetc;
+        tokz->ungetc=-1;
+    }else if (tokz->flags&TOKZ_READ_FROM_BUFFER) {
+        assert(tokz->buffer.data!=NULL);
+        if (tokz->buffer.pos==tokz->buffer.len)
+            c=EOF;
+        else
+            c=tokz->buffer.data[tokz->buffer.pos++];
+    }else{
+        c=getc(tokz->file);
+    }
 
-	return c;
+    return c;
 }
 
 
 static void _ungetch(Tokenizer *tokz, int c)
 {
-	tokz->ungetc=c;
+    tokz->ungetc=c;
 }
 
 
@@ -139,37 +139,37 @@
 
 static int scan_line_comment(Token *tok, Tokenizer *tokz)
 {
-	STRING_DECL_P(s, "#");
-	int c;
+    STRING_DECL_P(s, "#");
+    int c;
 
-	c=GETCH();
-				
-	while(c!='\n' && c!=EOF){
-		STRING_APPEND(s, c);
-		c=GETCH();
-	}
+    c=GETCH();
+                
+    while(c!='\n' && c!=EOF){
+        STRING_APPEND(s, c);
+        c=GETCH();
+    }
 
-	UNGETCH(c);
+    UNGETCH(c);
 
-	STRING_FINISH(s);
-	
-	TOK_SET_COMMENT(tok, s);
-	
-	return 0;
+    STRING_FINISH(s);
+    
+    TOK_SET_COMMENT(tok, s);
+    
+    return 0;
 }
 
 
 static int skip_line_comment(Tokenizer *tokz)
 {
-	int c;
-	
-	do{
-		c=GETCH();
-	}while(c!='\n' && c!=EOF);
+    int c;
+    
+    do{
+        c=GETCH();
+    }while(c!='\n' && c!=EOF);
 
-	UNGETCH(c);
-		
-	return 0;
+    UNGETCH(c);
+        
+    return 0;
 }
 
 
@@ -178,62 +178,62 @@
 
 static int scan_c_comment(Token *tok, Tokenizer *tokz)
 {
-	STRING_DECL_P(s, "/*");
-	int c;
-	int st=0;
-	
-	while(1){
-		c=GETCH();
-		
-		if(c==EOF){
-			STRING_FREE(s);
-			return E_TOKZ_UNEXPECTED_EOF;
-		}
-		
-		STRING_APPEND(s, c);
-		
-		if(c=='\n'){
-			INC_LINE();
-		}else if(st==0 && c=='*'){
-			st=1;
-		}else if(st==1){
-			if(c=='/')
-				break;
-			st=0;
-		}
-	}
+    STRING_DECL_P(s, "/*");
+    int c;
+    int st=0;
+    
+    while(1){
+        c=GETCH();
+        
+        if(c==EOF){
+            STRING_FREE(s);
+            return E_TOKZ_UNEXPECTED_EOF;
+        }
+        
+        STRING_APPEND(s, c);
+        
+        if(c=='\n'){
+            INC_LINE();
+        }else if(st==0 && c=='*'){
+            st=1;
+        }else if(st==1){
+            if(c=='/')
+                break;
+            st=0;
+        }
+    }
 
-	STRING_FINISH(s);
+    STRING_FINISH(s);
 
-	TOK_SET_COMMENT(tok, s);
+    TOK_SET_COMMENT(tok, s);
 
-	return 0;
+    return 0;
 }
 
 
 static int skip_c_comment(Tokenizer *tokz)
 {
-	int c;
-	int st=0;
-	
-	while(1){
-		c=GETCH();
-		
-		if(c==EOF)
-			return E_TOKZ_UNEXPECTED_EOF;
-		
-		if(c=='\n')
-			INC_LINE();
-		else if(st==0 && c=='*')
-			st=1;
-		else if(st==1){
-			if(c=='/')
-				break;
-			st=0;
-		}
-	}
-	
-	return 0;
+    int c;
+    int st=0;
+    
+    while(1){
+        c=GETCH();
+        
+        if(c==EOF)
+            return E_TOKZ_UNEXPECTED_EOF;
+        
+        if(c=='\n')
+            INC_LINE();
+        else if(st==0 && c=='*')
+            st=1;
+        else if(st==1){
+            if(c=='/')
+                break;
+            st=0;
+        }
+    }
+    
+    return 0;
 }
 
 
@@ -242,75 +242,75 @@
 
 static int scan_char_escape(Tokenizer *tokz)
 {
-	static char* special_chars="nrtbae";
-	static char* specials="\n\r\t\b\a\033";
-	int base, max;
-	int i ,c;
-	
-	c=GETCH();
-	
-	for(i=0;special_chars[i];i++){
-		if(special_chars[i]==c)
-			return specials[c];
-	}
-	
-	if(c=='x' || c=='X'){
-		base=16;max=2;i=0;
-	}else if(c=='d' || c=='D'){
-		base=10;max=3;i=0;
-	}else if(c=='8' || c=='9'){
-		base=10;max=2;i=c-'0';
-	}else if('0'<=c && c<='7'){
-		base=8;max=2;i=c-'0';
-	}else if(c=='\n'){
-		UNGETCH(c);
-		return -2;
-	}else{
-		return c;
-	}
-	
-		
-	while(--max>=0){
-		c=GETCH();
-		
-		if(c==EOF)
-			return EOF;
-		
-		if(c=='\n'){
-			UNGETCH(c);
-			return -2;
-		}
-		
-		if(base==16){
-			if(!isxdigit(c))
-				break;
-			
-			i<<=4;
-			
-			if(isdigit(c))
-				i+=c-'0';
-			else if(i>='a')
-				i+=0xa+c-'a';
-			else
-				i+=0xa+c-'a';
-			
-		}else if(base==10){
-			if(!isdigit(c))
-				break;
-			i*=10;
-			i+=c-'0';
-		}else{
-			if(c<'0' || c>'7')
-				break;
-			i<<=3;
-			i+=c-'0';
-		}
-	}
-	
-	if(max>=0)
-		UNGETCH(c);
+    static char* special_chars="nrtbae";
+    static char* specials="\n\r\t\b\a\033";
+    int base, max;
+    int i ,c;
+    
+    c=GETCH();
+    
+    for(i=0;special_chars[i];i++){
+        if(special_chars[i]==c)
+            return specials[c];
+    }
+    
+    if(c=='x' || c=='X'){
+        base=16;max=2;i=0;
+    }else if(c=='d' || c=='D'){
+        base=10;max=3;i=0;
+    }else if(c=='8' || c=='9'){
+        base=10;max=2;i=c-'0';
+    }else if('0'<=c && c<='7'){
+        base=8;max=2;i=c-'0';
+    }else if(c=='\n'){
+        UNGETCH(c);
+        return -2;
+    }else{
+        return c;
+    }
+    
+        
+    while(--max>=0){
+        c=GETCH();
+        
+        if(c==EOF)
+            return EOF;
+        
+        if(c=='\n'){
+            UNGETCH(c);
+            return -2;
+        }
+        
+        if(base==16){
+            if(!isxdigit(c))
+                break;
+            
+            i<<=4;
+            
+            if(isdigit(c))
+                i+=c-'0';
+            else if(i>='a')
+                i+=0xa+c-'a';
+            else
+                i+=0xa+c-'a';
+            
+        }else if(base==10){
+            if(!isdigit(c))
+                break;
+            i*=10;
+            i+=c-'0';
+        }else{
+            if(c<'0' || c>'7')
+                break;
+            i<<=3;
+            i+=c-'0';
+        }
+    }
+    
+    if(max>=0)
+        UNGETCH(c);
 
-	return i;
+    return i;
 }
 
 
@@ -319,42 +319,42 @@
 
 static int scan_string(Token *tok, Tokenizer *tokz, bool escapes)
 {
-	STRING_DECL(s);
-	int c;
+    STRING_DECL(s);
+    int c;
 
-	while(1){	
-		c=GETCH();
-		
-		if(c=='"')
-			break;
-		
-		if(c=='\n'){
-			UNGETCH(c);
-			STRING_FREE(s);
-			return E_TOKZ_UNEXPECTED_EOL;
-		}
-		
-		if(c=='\\' && escapes){
-			c=scan_char_escape(tokz);
-			if(c==-2){
-				STRING_FREE(s);
-				return E_TOKZ_UNEXPECTED_EOL;
-			}
-		}
-		
-		if(c==EOF){
-			STRING_FREE(s);
-			return E_TOKZ_UNEXPECTED_EOF;
-		}
-		
-		STRING_APPEND(s, c);
-	}
-	
-	STRING_FINISH(s);
-	
-	TOK_SET_STRING(tok, s);
+    while(1){    
+        c=GETCH();
+        
+        if(c=='"')
+            break;
+        
+        if(c=='\n'){
+            UNGETCH(c);
+            STRING_FREE(s);
+            return E_TOKZ_UNEXPECTED_EOL;
+        }
+        
+        if(c=='\\' && escapes){
+            c=scan_char_escape(tokz);
+            if(c==-2){
+                STRING_FREE(s);
+                return E_TOKZ_UNEXPECTED_EOL;
+            }
+        }
+        
+        if(c==EOF){
+            STRING_FREE(s);
+            return E_TOKZ_UNEXPECTED_EOF;
+        }
+        
+        STRING_APPEND(s, c);
+    }
+    
+    STRING_FINISH(s);
+    
+    TOK_SET_STRING(tok, s);
 
-	return 0;
+    return 0;
 }
 
 
@@ -363,34 +363,34 @@
 
 static int scan_char(Token *tok, Tokenizer *tokz)
 {
-	int c, c2;
-	
-	c=GETCH();
-	
-	if(c==EOF)
-		return E_TOKZ_UNEXPECTED_EOF;
-	
-	if(c=='\n')
-		return E_TOKZ_UNEXPECTED_EOL;
+    int c, c2;
+    
+    c=GETCH();
+    
+    if(c==EOF)
+        return E_TOKZ_UNEXPECTED_EOF;
+    
+    if(c=='\n')
+        return E_TOKZ_UNEXPECTED_EOL;
 
-	if(c=='\\'){
-		c=scan_char_escape(tokz);	
-		
-		if(c==EOF)
-			return E_TOKZ_UNEXPECTED_EOF;
-		
-		if(c==-2)
-			return E_TOKZ_UNEXPECTED_EOL;
-	}
-	
-	c2=GETCH();
-	
-	if(c2!='\'')
-		return E_TOKZ_MULTICHAR;
-	
-	TOK_SET_CHAR(tok, c);
-	
-	return 0;
+    if(c=='\\'){
+        c=scan_char_escape(tokz);    
+        
+        if(c==EOF)
+            return E_TOKZ_UNEXPECTED_EOF;
+        
+        if(c==-2)
+            return E_TOKZ_UNEXPECTED_EOL;
+    }
+    
+    c2=GETCH();
+    
+    if(c2!='\'')
+        return E_TOKZ_MULTICHAR;
+    
+    TOK_SET_CHAR(tok, c);
+    
+    return 0;
 }
 
 
@@ -402,20 +402,20 @@
 
 static int scan_identifier(Token *tok, Tokenizer *tokz, int c)
 {
-	STRING_DECL(s);
-	
-	do{
-		STRING_APPEND(s, c);
-		c=GETCH();
-	}while(isalnum(c) || c=='_' || c=='$');
-	
-	UNGETCH(c);
-	
-	STRING_FINISH(s);
-	
-	TOK_SET_IDENT(tok, s);
+    STRING_DECL(s);
+    
+    do{
+        STRING_APPEND(s, c);
+        c=GETCH();
+    }while(isalnum(c) || c=='_' || c=='$');
+    
+    UNGETCH(c);
+    
+    STRING_FINISH(s);
+    
+    TOK_SET_IDENT(tok, s);
 
-	return 0;
+    return 0;
 }
 
 #define NP_SIMPLE_IMPL
@@ -425,29 +425,29 @@
 
 static int scan_number(Token *tok, Tokenizer *tokz, int c)
 {
-	NPNum num=NUM_INIT;
-	int e;
-	
-	if((e=parse_number(&num, tokz, c)))
-		return e;
-	
-	if(num.type==NPNUM_INT){
-		long l;
-		if((e=num_to_long(&l, &num, TRUE)))
-			return e;
-	
-		TOK_SET_LONG(tok, l);
-	}else if(num.type==NPNUM_FLOAT){
-  		double d;
-  		if((e=num_to_double(&d, &num)))
-	  		return e;
-			
-		TOK_SET_DOUBLE(tok, d);
-	}else{
-		return E_TOKZ_NUMFMT;
-	}
+    NPNum num=NUM_INIT;
+    int e;
+    
+    if((e=parse_number(&num, tokz, c)))
+        return e;
+    
+    if(num.type==NPNUM_INT){
+        long l;
+        if((e=num_to_long(&l, &num, TRUE)))
+            return e;
+    
+        TOK_SET_LONG(tok, l);
+    }else if(num.type==NPNUM_FLOAT){
+          double d;
+          if((e=num_to_double(&d, &num)))
+              return e;
+            
+        TOK_SET_DOUBLE(tok, d);
+    }else{
+        return E_TOKZ_NUMFMT;
+    }
 
-	return 0;
+    return 0;
 }
 
 
@@ -455,100 +455,100 @@
 
 
 static uchar op_map[]={
-	0x00,		/* ________ 0-7     */
-	0x00,		/* ________ 8-15    */
-	0x00,		/* ________ 16-23   */
-	0x00,		/* ________ 24-31   */
-	0x62,		/* _!___%&_ 32-39   */
-	0xff,		/* ()*+,-./ 40-47   */
-	0x00,		/* ________ 48-55   */
-	0xfc,		/* __:;<=>? 56-63   */
-	0x01,		/* @_______ 64-71   */
-	0x00,		/* ________ 72-79   */
-	0x00,		/* ________ 80-87   */
-	0x78,		/* ___[_]^_ 88-95   */
-	0x00,		/* ________ 96-103  */
-	0x00,		/* ________ 104-111 */
-	0x00,		/* ________ 112-119 */
-	0x38		/* ___{|}__ 120-127 */
+    0x00,        /* ________ 0-7     */
+    0x00,        /* ________ 8-15    */
+    0x00,        /* ________ 16-23   */
+    0x00,        /* ________ 24-31   */
+    0x62,        /* _!___%&_ 32-39   */
+    0xff,        /* ()*+,-./ 40-47   */
+    0x00,        /* ________ 48-55   */
+    0xfc,        /* __:;<=>? 56-63   */
+    0x01,        /* @_______ 64-71   */
+    0x00,        /* ________ 72-79   */
+    0x00,        /* ________ 80-87   */
+    0x78,        /* ___[_]^_ 88-95   */
+    0x00,        /* ________ 96-103  */
+    0x00,        /* ________ 104-111 */
+    0x00,        /* ________ 112-119 */
+    0x38        /* ___{|}__ 120-127 */
 };
 
 
 static bool map_isset(uchar *map, uint ch)
 {
-	if(ch>127)
-		return FALSE;
+    if(ch>127)
+        return FALSE;
 
-	return map[ch>>3]&(1<<(ch&7));
+    return map[ch>>3]&(1<<(ch&7));
 }
 
 
 static bool is_opch(uint ch)
 {
-	return map_isset(op_map, ch);
+    return map_isset(op_map, ch);
 }
 
 
 static int scan_op(Token *tok, Tokenizer *tokz,  int c)
 {
-	int c2;
-	int op=-1;
-	
-	/* Quickly check it is an operator character */
-	if(!is_opch(c))
-		return E_TOKZ_INVALID_CHAR;
+    int c2;
+    int op=-1;
+    
+    /* Quickly check it is an operator character */
+    if(!is_opch(c))
+        return E_TOKZ_INVALID_CHAR;
 
-	switch(c){
-	case '+':
-	case '-':
-	case '*':
-/*	case '/':	 Checked elsewhere */
-	case '%':
-	case '^':
-	case '!':
-	case '=':
-	case '<':
-	case '>':
-		c2=GETCH();
-		if(c2=='='){
-			op=c|(c2<<8);
-		}else if(c2==c && (c2!='%' && c2!='!' && c2!='*')){
-			if(c=='<' || c=='>'){
-				int c3=GETCH();
-				if(c3=='='){
-					op=c|(c2<<8)|(c3<<16);
-				}else{
-					UNGETCH(c3);
-					op=c|(c2<<8);
-				}
-			}else{
-				op=c|(c2<<8);
-			}
-		}else{
-			UNGETCH(c2);
-			op=c;
-		}
-		break;
-		
-	/* It is already known that it is a operator so these are not needed
-	case ':':
-	case '~':
-	case '?':
-	case '.':
-	case ';';
-	case '{':
-	case '}':
-	case '@':		
-	case '|':
-	case '&':
-	*/
-	default:
-		op=c;
-	}
-	
-	TOK_SET_OP(tok, op);
+    switch(c){
+    case '+':
+    case '-':
+    case '*':
+/*    case '/':     Checked elsewhere */
+    case '%':
+    case '^':
+    case '!':
+    case '=':
+    case '<':
+    case '>':
+        c2=GETCH();
+        if(c2=='='){
+            op=c|(c2<<8);
+        }else if(c2==c && (c2!='%' && c2!='!' && c2!='*')){
+            if(c=='<' || c=='>'){
+                int c3=GETCH();
+                if(c3=='='){
+                    op=c|(c2<<8)|(c3<<16);
+                }else{
+                    UNGETCH(c3);
+                    op=c|(c2<<8);
+                }
+            }else{
+                op=c|(c2<<8);
+            }
+        }else{
+            UNGETCH(c2);
+            op=c;
+        }
+        break;
+        
+    /* It is already known that it is a operator so these are not needed
+    case ':':
+    case '~':
+    case '?':
+    case '.':
+    case ';';
+    case '{':
+    case '}':
+    case '@':        
+    case '|':
+    case '&':
+    */
+    default:
+        op=c;
+    }
+    
+    TOK_SET_OP(tok, op);
 
-	return 0;
+    return 0;
 }
 
 
@@ -557,156 +557,156 @@
 
 void tokz_warn(const Tokenizer *tokz, int line, const char *fmt, ...)
 {
-	va_list args;
-	
-	va_start(args, fmt);
-	
-	if(tokz!=NULL)
-		warn_obj_line_v(tokz->name, line, fmt, args);
-	else
-		warn(fmt, args);
-	
-	va_end(args);
+    va_list args;
+    
+    va_start(args, fmt);
+    
+    if(tokz!=NULL)
+        warn_obj_line_v(tokz->name, line, fmt, args);
+    else
+        warn(fmt, args);
+    
+    va_end(args);
 }
 
 
 void tokz_warn_error(const Tokenizer *tokz, int line, int e)
 {
-	if(e==E_TOKZ_UNEXPECTED_EOF)
-		line=0;
-	
-	if(e<0)
-		tokz_warn(tokz, line, "%s", strerror(-e));
-	else
-		tokz_warn(tokz, line, "%s", TR(errors[e]));
+    if(e==E_TOKZ_UNEXPECTED_EOF)
+        line=0;
+    
+    if(e<0)
+        tokz_warn(tokz, line, "%s", strerror(-e));
+    else
+        tokz_warn(tokz, line, "%s", TR(errors[e]));
 }
 
 
 bool tokz_get_token(Tokenizer *tokz, Token *tok)
 {
-	int c, c2, e;
-	
-	if (!(tokz->flags&TOKZ_READ_FROM_BUFFER))
-	assert(tokz->file!=NULL);
-	
-	tok_free(tok);
-	
-	if(!TOK_IS_INVALID(&(tokz->ungettok))){
-		*tok=tokz->ungettok;
-		tokz->ungettok.type=TOK_INVALID;
-		return TRUE;
-	}
+    int c, c2, e;
+    
+    if (!(tokz->flags&TOKZ_READ_FROM_BUFFER))
+    assert(tokz->file!=NULL);
+    
+    tok_free(tok);
+    
+    if(!TOK_IS_INVALID(&(tokz->ungettok))){
+        *tok=tokz->ungettok;
+        tokz->ungettok.type=TOK_INVALID;
+        return TRUE;
+    }
 
-	while(1){
-	
-		e=0;
-		
-		do{
-			c=GETCH();
-		}while(c!='\n' && c!=EOF && isspace(c));
-	
-		tok->line=tokz->line;
-	
-		switch(c){
-		case EOF:
-			TOK_SET_OP(tok, OP_EOF);
-			return TRUE;
-			
-		case '\n':
-			INC_LINE();
-			
-			if(tokz->flags&TOKZ_IGNORE_NEXTLINE)
-				continue;
-			
-			TOK_SET_OP(tok, OP_NEXTLINE);
-			
-			return TRUE;
-			
-		case '\\':
-			do{
-				c=GETCH();
-				if(c==EOF){
-					TOK_SET_OP(tok, OP_EOF);
-					return FALSE;
-				}
-				if(!isspace(c) && e==0){
-					e=E_TOKZ_EOL_EXPECTED;
-					tokz_warn_error(tokz, tokz->line, e);
-					if(!(tokz->flags&TOKZ_ERROR_TOLERANT))
-						return FALSE;
-				}
-			}while(c!='\n');
-			
-			INC_LINE();
-			continue;
+    while(1){
+    
+        e=0;
+        
+        do{
+            c=GETCH();
+        }while(c!='\n' && c!=EOF && isspace(c));
+    
+        tok->line=tokz->line;
+    
+        switch(c){
+        case EOF:
+            TOK_SET_OP(tok, OP_EOF);
+            return TRUE;
+            
+        case '\n':
+            INC_LINE();
+            
+            if(tokz->flags&TOKZ_IGNORE_NEXTLINE)
+                continue;
+            
+            TOK_SET_OP(tok, OP_NEXTLINE);
+            
+            return TRUE;
+            
+        case '\\':
+            do{
+                c=GETCH();
+                if(c==EOF){
+                    TOK_SET_OP(tok, OP_EOF);
+                    return FALSE;
+                }
+                if(!isspace(c) && e==0){
+                    e=E_TOKZ_EOL_EXPECTED;
+                    tokz_warn_error(tokz, tokz->line, e);
+                    if(!(tokz->flags&TOKZ_ERROR_TOLERANT))
+                        return FALSE;
+                }
+            }while(c!='\n');
+            
+            INC_LINE();
+            continue;
 
-		case '#':
-			if(tokz->flags&TOKZ_READ_COMMENTS){
-				e=scan_line_comment(tok, tokz);
-				break;
-			}else if((e=skip_line_comment(tokz))){
-				break;
-			}
-			
-			continue;
-			
-		case '/':
-			c2=GETCH();
-			
-			if(c2=='='){
-				TOK_SET_OP(tok, OP_AS_DIV);
-				return TRUE;
-			}
-			
-			if(c2!='*'){
-				UNGETCH(c2);
-				TOK_SET_OP(tok, OP_DIV);
-				return TRUE;
-			}
-			
-			if(tokz->flags&TOKZ_READ_COMMENTS){
-				e=scan_c_comment(tok, tokz);
-				break;
-			}else if((e=skip_c_comment(tokz))){
-				break;
-			}
-			
-			continue;
-			
-		case '\"':
-			e=scan_string(tok, tokz, TRUE);
-			break;
+        case '#':
+            if(tokz->flags&TOKZ_READ_COMMENTS){
+                e=scan_line_comment(tok, tokz);
+                break;
+            }else if((e=skip_line_comment(tokz))){
+                break;
+            }
+            
+            continue;
+            
+        case '/':
+            c2=GETCH();
+            
+            if(c2=='='){
+                TOK_SET_OP(tok, OP_AS_DIV);
+                return TRUE;
+            }
+            
+            if(c2!='*'){
+                UNGETCH(c2);
+                TOK_SET_OP(tok, OP_DIV);
+                return TRUE;
+            }
+            
+            if(tokz->flags&TOKZ_READ_COMMENTS){
+                e=scan_c_comment(tok, tokz);
+                break;
+            }else if((e=skip_c_comment(tokz))){
+                break;
+            }
+            
+            continue;
+            
+        case '\"':
+            e=scan_string(tok, tokz, TRUE);
+            break;
 
-		case '\'':
-			e=scan_char(tok, tokz);
-			break;
+        case '\'':
+            e=scan_char(tok, tokz);
+            break;
 
-		default: 
-			if(('0'<=c && c<='9') || c=='-' || c=='+'){
-				e=scan_number(tok, tokz, c);
-				break;
-			}
+        default: 
+            if(('0'<=c && c<='9') || c=='-' || c=='+'){
+                e=scan_number(tok, tokz, c);
+                break;
+            }
 
-		 	if(START_IDENT(c))
-				e=scan_identifier(tok, tokz, c);
-			else
-				e=scan_op(tok, tokz, c);
-		}
-		
-		if(!e)
-			return TRUE;
-		
-		tokz_warn_error(tokz, tokz->line, e);
-		return FALSE;
-	}
+             if(START_IDENT(c))
+                e=scan_identifier(tok, tokz, c);
+            else
+                e=scan_op(tok, tokz, c);
+        }
+        
+        if(!e)
+            return TRUE;
+        
+        tokz_warn_error(tokz, tokz->line, e);
+        return FALSE;
+    }
 }
 
 
 void tokz_unget_token(Tokenizer *tokz, Token *tok)
 {
-	tok_free(&(tokz->ungettok));	
-	tokz->ungettok=*tok;
-	tok->type=TOK_INVALID;
+    tok_free(&(tokz->ungettok));    
+    tokz->ungettok=*tok;
+    tok->type=TOK_INVALID;
 }
 
 
@@ -716,160 +716,160 @@
 
 static bool do_tokz_pushf(Tokenizer *tokz)
 {
-	Tokenizer_FInfo *finfo;
-	
-	finfo=REALLOC_N(tokz->filestack, Tokenizer_FInfo,
-					tokz->filestack_n, tokz->filestack_n+1);
-	
-	if(finfo==NULL)
-		return FALSE;
+    Tokenizer_FInfo *finfo;
+    
+    finfo=REALLOC_N(tokz->filestack, Tokenizer_FInfo,
+                    tokz->filestack_n, tokz->filestack_n+1);
+    
+    if(finfo==NULL)
+        return FALSE;
 
-	tokz->filestack=finfo;
-	finfo=&(finfo[tokz->filestack_n++]);
-	
-	finfo->file=tokz->file;
-	finfo->name=tokz->name;
-	finfo->line=tokz->line;
-	finfo->ungetc=tokz->ungetc;
-	finfo->ungettok=tokz->ungettok;
-	
-	return TRUE;
+    tokz->filestack=finfo;
+    finfo=&(finfo[tokz->filestack_n++]);
+    
+    finfo->file=tokz->file;
+    finfo->name=tokz->name;
+    finfo->line=tokz->line;
+    finfo->ungetc=tokz->ungetc;
+    finfo->ungettok=tokz->ungettok;
+    
+    return TRUE;
 }
 
 
 bool tokz_pushf_file(Tokenizer *tokz, FILE *file, const char *fname)
 {
-	char *fname_copy=NULL;
-	
-	if(file==NULL)
-		return FALSE;
+    char *fname_copy=NULL;
+    
+    if(file==NULL)
+        return FALSE;
 
-	if(fname!=NULL){
-		fname_copy=scopy(fname);
-		if(fname_copy==NULL){
-			warn_err();
-			return FALSE;
-		}
-	}
-	
-	if(tokz->file!=NULL){
-		if(!do_tokz_pushf(tokz)){
-			warn_err();
-			if(fname_copy!=NULL)
-				free(fname_copy);
-			return FALSE;
-		}
-	}
-	
-	tokz->file=file;
-	tokz->name=fname_copy;
-	tokz->line=1;
-	tokz->ungetc=-1;	
-	tokz->ungettok.type=TOK_INVALID;
-	
-	return TRUE;
+    if(fname!=NULL){
+        fname_copy=scopy(fname);
+        if(fname_copy==NULL){
+            warn_err();
+            return FALSE;
+        }
+    }
+    
+    if(tokz->file!=NULL){
+        if(!do_tokz_pushf(tokz)){
+            warn_err();
+            if(fname_copy!=NULL)
+                free(fname_copy);
+            return FALSE;
+        }
+    }
+    
+    tokz->file=file;
+    tokz->name=fname_copy;
+    tokz->line=1;
+    tokz->ungetc=-1;    
+    tokz->ungettok.type=TOK_INVALID;
+    
+    return TRUE;
 }
 
 
 bool tokz_pushf(Tokenizer *tokz, const char *fname)
 {
-	FILE *file;
-	
-	file=fopen(fname, "r");
-	
-	if(file==NULL){
-		warn_err_obj(fname);
-		return FALSE;
-	}
-	
-	if(!tokz_pushf_file(tokz, file, fname)){
-		fclose(file);
-		return FALSE;
-	}
+    FILE *file;
+    
+    file=fopen(fname, "r");
+    
+    if(file==NULL){
+        warn_err_obj(fname);
+        return FALSE;
+    }
+    
+    if(!tokz_pushf_file(tokz, file, fname)){
+        fclose(file);
+        return FALSE;
+    }
 
-	return TRUE;
+    return TRUE;
 }
 
 
-			   
+               
 static Tokenizer *tokz_create()
 {
-	Tokenizer*tokz;
-	
-	tokz=ALLOC(Tokenizer);
-	
-	if(tokz==NULL){
-		warn_err();
-		return NULL;
-	}
-	
-	tokz->file=NULL;
-	tokz->name=NULL;
-	tokz->line=1;
-	tokz->ungetc=-1;	
-	tokz->ungettok.type=TOK_INVALID;
-	tokz->flags=0;
-	tokz->optstack=NULL;
-	tokz->nest_lvl=0;
-	tokz->filestack_n=0;
-	tokz->filestack=NULL;
-	tokz->buffer.data=0;
-	tokz->buffer.len=0;
-	tokz->buffer.pos=0;
-	
-	return tokz;
+    Tokenizer*tokz;
+    
+    tokz=ALLOC(Tokenizer);
+    
+    if(tokz==NULL){
+        warn_err();
+        return NULL;
+    }
+    
+    tokz->file=NULL;
+    tokz->name=NULL;
+    tokz->line=1;
+    tokz->ungetc=-1;    
+    tokz->ungettok.type=TOK_INVALID;
+    tokz->flags=0;
+    tokz->optstack=NULL;
+    tokz->nest_lvl=0;
+    tokz->filestack_n=0;
+    tokz->filestack=NULL;
+    tokz->buffer.data=0;
+    tokz->buffer.len=0;
+    tokz->buffer.pos=0;
+    
+    return tokz;
 }
 
-	
+    
 Tokenizer *tokz_open(const char *fname)
 { 
-	Tokenizer *tokz;
-	
-	tokz=tokz_create();
-	
-	if(!tokz_pushf(tokz, fname)){
-		free(tokz);
-		return NULL;
-	}
-	
-	return tokz;
+    Tokenizer *tokz;
+    
+    tokz=tokz_create();
+    
+    if(!tokz_pushf(tokz, fname)){
+        free(tokz);
+        return NULL;
+    }
+    
+    return tokz;
 }
 
 
 Tokenizer *tokz_open_file(FILE *file, const char *fname)
 {
-	Tokenizer *tokz;
-	
-	tokz=tokz_create();
-	
-	if(!tokz_pushf_file(tokz, file, fname)){
-		free(tokz);
-		return NULL;
-	}
-	
-	return tokz;
+    Tokenizer *tokz;
+    
+    tokz=tokz_create();
+    
+    if(!tokz_pushf_file(tokz, file, fname)){
+        free(tokz);
+        return NULL;
+    }
+    
+    return tokz;
 }
 
 Tokenizer *tokz_prepare_buffer(char *buffer, int len)
 {
-	Tokenizer *tokz;
-	char old=0;
+    Tokenizer *tokz;
+    char old=0;
 
-	tokz=tokz_create();
-	if(len>0){
-		old=buffer[len-1];
-		buffer[len-1]='\0';
-	}
+    tokz=tokz_create();
+    if(len>0){
+        old=buffer[len-1];
+        buffer[len-1]='\0';
+    }
 
-	tokz->flags|=TOKZ_READ_FROM_BUFFER;
-	tokz->buffer.data=scopy(buffer);
-	tokz->buffer.len=(len>0 ? (uint)len : strlen(tokz->buffer.data));
-	tokz->buffer.pos=0;
+    tokz->flags|=TOKZ_READ_FROM_BUFFER;
+    tokz->buffer.data=scopy(buffer);
+    tokz->buffer.len=(len>0 ? (uint)len : strlen(tokz->buffer.data));
+    tokz->buffer.pos=0;
 
-	if(old>0)
-		buffer[len-1]=old;
+    if(old>0)
+        buffer[len-1]=old;
 
-	return tokz;
+    return tokz;
 }
 
 /*
@@ -878,58 +878,58 @@
 
 static bool do_tokz_popf(Tokenizer *tokz, bool shrink)
 {
-	Tokenizer_FInfo *finfo;
-	
-	if(tokz->filestack_n<=0)
-		return FALSE;
+    Tokenizer_FInfo *finfo;
+    
+    if(tokz->filestack_n<=0)
+        return FALSE;
 
-	if(tokz->file!=NULL)
-		fclose(tokz->file);
-	if(tokz->name!=NULL)
-		free(tokz->name);
-	
-	finfo=&(tokz->filestack[--tokz->filestack_n]);
-	
-	tokz->file=finfo->file;
-	tokz->name=finfo->name;
-	tokz->line=finfo->line;
-	tokz->ungetc=finfo->ungetc;
-	tokz->ungettok=finfo->ungettok;
-	
-	if(tokz->filestack_n==0){
-		free(tokz->filestack);
-		tokz->filestack=NULL;
-	}else if(shrink){
-		finfo=REALLOC_N(tokz->filestack, Tokenizer_FInfo,
-						tokz->filestack_n+1, tokz->filestack_n);
-		if(finfo==NULL)
-			warn_err();
-		else
-			tokz->filestack=finfo;
-	}
-	
-	return TRUE;
+    if(tokz->file!=NULL)
+        fclose(tokz->file);
+    if(tokz->name!=NULL)
+        free(tokz->name);
+    
+    finfo=&(tokz->filestack[--tokz->filestack_n]);
+    
+    tokz->file=finfo->file;
+    tokz->name=finfo->name;
+    tokz->line=finfo->line;
+    tokz->ungetc=finfo->ungetc;
+    tokz->ungettok=finfo->ungettok;
+    
+    if(tokz->filestack_n==0){
+        free(tokz->filestack);
+        tokz->filestack=NULL;
+    }else if(shrink){
+        finfo=REALLOC_N(tokz->filestack, Tokenizer_FInfo,
+                        tokz->filestack_n+1, tokz->filestack_n);
+        if(finfo==NULL)
+            warn_err();
+        else
+            tokz->filestack=finfo;
+    }
+    
+    return TRUE;
 }
 
 
 bool tokz_popf(Tokenizer *tokz)
 {
-	return do_tokz_popf(tokz, TRUE);
+    return do_tokz_popf(tokz, TRUE);
 }
-	
+    
 
 void tokz_close(Tokenizer *tokz)
 {
-	while(tokz->filestack_n>0)
-		do_tokz_popf(tokz, FALSE);
-		  
-	if(tokz->file!=NULL)
-		fclose(tokz->file);
-	if(tokz->name!=NULL)
-		free(tokz->name);
-	tok_free(&(tokz->ungettok));
-	
-	free(tokz);
+    while(tokz->filestack_n>0)
+        do_tokz_popf(tokz, FALSE);
+          
+    if(tokz->file!=NULL)
+        fclose(tokz->file);
+    if(tokz->name!=NULL)
+        free(tokz->name);
+    tok_free(&(tokz->ungettok));
+    
+    free(tokz);
 }
 
 
@@ -939,19 +939,19 @@
 
 void tok_free(Token *tok)
 {
-	if(TOK_IS_STRING(tok) || TOK_IS_IDENT(tok) || TOK_IS_COMMENT(tok)){
-		if(TOK_STRING_VAL(tok)!=NULL)
-			free(TOK_STRING_VAL(tok));
-	}
-	
-	tok->type=TOK_INVALID;
+    if(TOK_IS_STRING(tok) || TOK_IS_IDENT(tok) || TOK_IS_COMMENT(tok)){
+        if(TOK_STRING_VAL(tok)!=NULL)
+            free(TOK_STRING_VAL(tok));
+    }
+    
+    tok->type=TOK_INVALID;
 }
 
 
 void tok_init(Token *tok)
 {
-	static Token dummy=TOK_INIT;
-	
-	memcpy(tok, &dummy, sizeof(*tok));
+    static Token dummy=TOK_INIT;
+    
+    memcpy(tok, &dummy, sizeof(*tok));
 }
 

mercurial