ref: d571d1e0f46cacbc2867bd25779b745f0744fb2b
parent: 5ae4a720c0f1a1b07cbb3236903a08b71fe33e00
	author: Roberto E. Vargas Caballero <k0ga@shike2.com>
	date: Fri Jul  5 04:36:09 EDT 2013
	
Remove type variable in spec This variable is only a copy of the type field of ctype struct, so it can be replaced by it.
--- a/decl.c
+++ b/decl.c
@@ -76,10 +76,10 @@
struct ctype *
spec(void)
 {- unsigned char sign, type;
+ unsigned char sign;
register struct ctype *tp = NULL;
-	for (type = sign = 0; ; next()) {+	for (sign = 0; ; next()) { 		switch (yytoken) {case TYPEDEF: case EXTERN: case STATIC: case AUTO:
case REGISTER: case CONST: case VOLATILE:
@@ -90,13 +90,13 @@
 				error("duplicated '%s'", yytext);if (sign)
 				error("both 'signed' and 'unsigned' in declaration specifiers");-			switch (type) {+ if (!tp)
+ tp = newctype();
+			switch (tp->type) {case FLOAT: case DOUBLE: case LDOUBLE: case BOOL:
goto invalid_sign;
}
- if (!tp)
- tp = newctype();
- if ((type = sign = yytoken) == UNSIGNED)
+ if ((sign = yytoken) == UNSIGNED)
tp->c_unsigned = 1;
break;
case FLOAT: case DOUBLE: case BOOL:
@@ -104,15 +104,14 @@
goto invalid_sign;
case VOID: case CHAR: case SHORT: case INT: case LONG:
tp = btype(tp, yytoken);
- type = tp->type;
break;
case STRUCT: /* TODO */
case UNION: /* TODO */
case ENUM: /* TODO */
 		case IDEN: {- struct symbol *sym;
+ struct symbol *sym = find(yytext, NS_TYPEDEF);
-			if ((sym = find(yytext, NS_TYPEDEF)) && !type) {+			if (sym && (!tp || !tp->type)) {register unsigned char tok = ahead();
 				if (tok != ';' && tok != ',')  {--
⑨