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;