commit bb043d47fd80b8aafdacb217ce4f48677c587df1
Author:     Roberto E. Vargas Caballero <[email protected]>
AuthorDate: Tue May 31 08:30:36 2016 +0200
Commit:     Roberto E. Vargas Caballero <[email protected]>
CommitDate: Tue May 31 08:41:17 2016 +0200

    [cc2] Simplify code.c:addr()
    
    This function can be called with multiple different arguments, and
    we where dealing the different symbols like different cases, but it
    was the same case because we only had to use the storage class
    already stored in the symbol by parser.c:vardecl().

diff --git a/cc2/code.c b/cc2/code.c
index 40be482..829a695 100644
--- a/cc2/code.c
+++ b/cc2/code.c
@@ -29,26 +29,31 @@ nextpc(void)
 static void
 addr(Node *np, Addr *addr)
 {
+       Symbol *sym;
+
        switch (np->op) {
        case OREG:
+               /* TODO:
+                * At this moment this op is used also for register variables
+                */
                addr->kind = SREG;
                addr->u.reg = np->u.reg;
                break;
        case OCONST:
-               addr->kind = OCONST;
+               addr->kind = SCONST;
+               /* TODO: Add support for more type of constants */
                addr->u.i = np->u.i;
                break;
+       case OTMP:
        case OLABEL:
-               addr->kind = SLABEL;
-               goto symbol;
        case OAUTO:
-               addr->kind = SAUTO;
-               goto symbol;
-       case OTMP:
-               addr->kind = STMP;;
-       symbol:
-               addr->u.sym = np->u.sym;
+       case OMEM:
+               sym = np->u.sym;
+               addr->kind = sym->kind;
+               addr->u.sym = sym;
                break;
+       default:
+               abort();
        }
 }
 

Reply via email to