* Remove unnecesary force flag in parse_pushword ()
authorpancake@flubox
Tue Nov 03 16:30:52 2009 +0100 (2009-11-03)
changeset 16fe53a2fb0174
parent 15 54e770a56345
child 17 c00ea651d838
* Remove unnecesary force flag in parse_pushword ()
* Fix a bug while parsing null strings and empty words
alt.h
parser.c
     1.1 --- a/alt.h	Tue Nov 03 16:14:36 2009 +0100
     1.2 +++ b/alt.h	Tue Nov 03 16:30:52 2009 +0100
     1.3 @@ -48,7 +48,6 @@
     1.4  typedef struct AltState {
     1.5  	AltMode mode;
     1.6  	int debug;
     1.7 -	//int word;
     1.8  	int line;
     1.9  	int level;
    1.10  	int levels[ALT_MAX_LEVEL];
     2.1 --- a/parser.c	Tue Nov 03 16:14:36 2009 +0100
     2.2 +++ b/parser.c	Tue Nov 03 16:30:52 2009 +0100
     2.3 @@ -11,8 +11,8 @@
     2.4  		ch=='|'||ch=='^'||ch=='/'||ch=='%'||ch=='*'||ch=='!'||ch=='<');
     2.5  }
     2.6  
     2.7 -void parse_pushword(AltState *st, int force) {
     2.8 -	if (!force && st->stridx == 0) // XXX CONFLICTIVE
     2.9 +void parse_pushword(AltState *st) {
    2.10 +	if (st->stridx == 0 && st->mode != MODE_STRING)
    2.11  		return;
    2.12  	st->str[st->stridx] = 0;
    2.13  	st->cb_word (st);
    2.14 @@ -54,7 +54,7 @@
    2.15  		case '[':
    2.16  		case '(':
    2.17  		case '{':
    2.18 -			parse_pushword (st, 1);
    2.19 +			parse_pushword (st);
    2.20  			st->cb_level (st, 1, ch);
    2.21  			switch(ch) {
    2.22  			case '{': st->levels[st->level] = '}'; break;
    2.23 @@ -68,7 +68,7 @@
    2.24  		case ']':
    2.25  		case ')':
    2.26  		case '}':
    2.27 -			parse_pushword (st, 0);
    2.28 +			parse_pushword (st);
    2.29  			st->level--;
    2.30  			if (st->level<0)
    2.31  				return st->cb_error (st, "Level underflow\n");
    2.32 @@ -86,7 +86,7 @@
    2.33  		//case '\'':
    2.34  		case '\t':
    2.35  		case '\r':
    2.36 -			parse_pushword (st, 0);
    2.37 +			parse_pushword (st);
    2.38  			break;
    2.39  		default:
    2.40  			if (st->lastchar == '/') {
    2.41 @@ -100,7 +100,7 @@
    2.42  				}
    2.43  			} else {
    2.44  				if (parse_is_operator (ch)) {
    2.45 -					parse_pushword (st, 0);
    2.46 +					parse_pushword (st);
    2.47  					st->mode = MODE_OPERATOR; // XXX dupped
    2.48  					return parse_char (st, ch);
    2.49  				} else parse_concatchar (st, ch);
    2.50 @@ -124,7 +124,7 @@
    2.51  		}
    2.52  		if (st->mode != MODE_OPERATOR || !parse_is_operator(ch)) {
    2.53  			st->mode = MODE_PARSE;
    2.54 -			parse_pushword (st, 0);
    2.55 +			parse_pushword (st);
    2.56  			// XXX: check if return here is ok
    2.57  			return parse_char (st, ch);
    2.58  		} else st->str[st->stridx++] = ch; //return parse_char (st, ch);
    2.59 @@ -153,7 +153,7 @@
    2.60  			st->str[st->stridx-1] = ch;
    2.61  			if (ch == '\\') ch = 0;
    2.62  		} else if (ch == st->endch) {
    2.63 -			parse_pushword (st, 0);
    2.64 +			parse_pushword (st);
    2.65  			st->mode = MODE_PARSE;
    2.66  		} else ret = parse_concatchar (st, ch);
    2.67  		break;