shithub: scc

Download patch

ref: b6d551944bd495bb30ba7345f5ab77ccca14c295
parent: 6f28085c2d0113db59693fdf30fe1d1e855635f9
author: Roberto E. Vargas Caballero <[email protected]>
date: Mon Mar 31 15:37:40 EDT 2014

Add plus() in lex.c

We have minus, so it is logical to have plus().

--- a/lex.c
+++ b/lex.c
@@ -182,6 +182,7 @@
 	register int c = getc(yyin);
 
 	yybuf[1] = c;
+	yybuf[2] = '\0';
 	switch (c) {
 	case '-': return DEC;
 	case '>': return INDIR;
@@ -194,6 +195,23 @@
 }
 
 static uint8_t
+plus(void)
+{
+	register int c = getc(yyin);
+
+	yybuf[1] = c;
+	yybuf[2] = '\0';
+	switch (c) {
+	case '+': return INC;
+	case '=': return ADD_EQ;
+	default:
+		yybuf[1] = '\0';
+		ungetc(c, yyin);
+		return '+';
+	}
+}
+
+static uint8_t
 relational(uint8_t op, uint8_t equal, uint8_t shift, uint8_t assig)
 {
 	register int c = getc(yyin);
@@ -220,7 +238,6 @@
 	switch (c) {
 	case '<': return relational('<', LE, SHL, SHL_EQ);
 	case '>': return relational('>', GE, SHR, SHR_EQ);
-	case '+': return follow('+', INC, follow('=', ADD_EQ, '+'));
 	case '=': return follow('=', EQ, '=');
 	case '^': return follow('=', XOR_EQ, '^');
 	case '*': return follow('=', MUL_EQ, '*');
@@ -229,6 +246,7 @@
 	case '&': return follow('=', AND_EQ, AND);
 	case '|': return follow('=', OR_EQ, OR);
 	case '-': return minus();
+	case '+': return plus();
 	default: return c;
 	}
 }