ref: d1e3fef8d6f06929405d377a1cb39eca367da123
parent: 7d00111f794d7d658e9faeacdc136b2b28f80461
author: Roberto E. Vargas Caballero <[email protected]>
date: Tue Aug 21 18:28:05 EDT 2012
Reducing scope of variables in asign This helps to the compiler in order to generate a good code.
--- a/expr.c
+++ b/expr.c
@@ -298,28 +298,29 @@
static struct node *
assign(void)
{
- register unsigned char op;
- register struct node *np;
+ register struct node *np = cond();
- np = cond();
for (;;) {
+ register unsigned char op;
+
switch (yytoken) {
- case '=': op = OASSIGN; break;
- case MUL_EQ: op = OA_MUL; break;
- case DIV_EQ: op = OA_DIV; break;
- case MOD_EQ: op = OA_MOD; break;
- case ADD_EQ: op = OA_ADD; break;
- case SUB_EQ: op = OA_SUB; break;
- case SHL_EQ: op = OA_SHL; break;
- case SHR_EQ: op = OA_SHR; break;
- case AND_EQ: op = OA_AND; break;
- case XOR_EQ: op = OA_XOR; break;
- case OR_EQ: op = OA_OR; break;
- default: return np;
+ case '=': op = OASSIGN; break;
+ case MUL_EQ: op = OA_MUL; break;
+ case DIV_EQ: op = OA_DIV; break;
+ case MOD_EQ: op = OA_MOD; break;
+ case ADD_EQ: op = OA_ADD; break;
+ case SUB_EQ: op = OA_SUB; break;
+ case SHL_EQ: op = OA_SHL; break;
+ case SHR_EQ: op = OA_SHR; break;
+ case AND_EQ: op = OA_AND; break;
+ case XOR_EQ: op = OA_XOR; break;
+ case OR_EQ: op = OA_OR; break;
+ default: goto return_np;
}
next();
np = node2(op, np, assign());
}
+return_np:
return np;
}