]> Shamusworld >> Repos - rmac/blobdiff - expr.c
Initial commit for 68020/30/40/60/68881/68882/68851 support.
[rmac] / expr.c
diff --git a/expr.c b/expr.c
index b7bf4b1a95b1237a244a8ae12ff619255b4cdaa1..01868e8a0b17ecc1c222bd0cdd73ebd557f81228 100644 (file)
--- a/expr.c
+++ b/expr.c
@@ -77,14 +77,13 @@ static VALUE str_value(char * p)
 //
 void InitExpression(void)
 {
-       int i;
-       char * p;
-
        // Initialize token-class table (all set to END)
-       for(i=0; i<256; i++)
+       for(int i=0; i<256; i++)
                tokenClass[i] = END;
 
-       for(i=0, p=itokcl; *p!=1; p++)
+       int i = 0;
+
+       for(char * p=itokcl; *p!=1; p++)
        {
                if (*p == 0)
                        i++;
@@ -288,6 +287,20 @@ int expr2(void)
                *evalTokenBuffer++ = (orgactive ? orgaddr : pcloc);
                // '*' takes attributes of current section, not ABS!
                *evalTokenBuffer++ = cursect | DEFINED;
+               break;
+    case '{':
+               if (expr0() != OK)                          // Eat up first parameter (register or immediate)
+                       return ERROR;
+
+               if (*tok++ != ':')                          // Demand a ':' there
+                       return error("missing colon ':'");
+                
+               if (expr0() != OK)                          // Eat up second parameter (register or immediate)
+                       return ERROR;
+                
+               if (*tok++ != '}')
+                       return error("missing close bracket '}'");
+
                break;
        default:
                return error("bad expression");
@@ -465,17 +478,12 @@ thrown away right here. What the hell is it for?
 //
 int evexpr(TOKEN * tk, VALUE * a_value, WORD * a_attr, SYM ** a_esym)
 {
-       WORD * sattr;
-       VALUE * sval;
        WORD attr;
        SYM * sy;
-       SYM * esym;
-       WORD sym_seg;
-
-       sval = evstk;                                                   // (Empty) initial stack
-       sattr = evattr;
-       esym = NULL;                                                    // No external symbol involved
-       sym_seg = 0;
+       VALUE * sval = evstk;                                   // (Empty) initial stack
+       WORD * sattr = evattr;
+       SYM * esym = NULL;                                              // No external symbol involved
+       WORD sym_seg = 0;
 
        while (*tk != ENDEXPR)
        {
@@ -745,7 +753,7 @@ printf("EVEXPR (-): sym1 = %X, sym2 = %X\n", attr, sattr[1]);
        // sym_seg added in 1.0.16 to solve a problem with forward symbols in
        // expressions where absolute values also existed. The absolutes were
        // overiding the symbol segments and not being included :(
-       //*a_attr = *sattr | sym_seg;                                        // Copy value + attrib
+       //*a_attr = *sattr | sym_seg;           // Copy value + attrib
 
        *a_attr = *sattr;                                               // Copy value + attrib
        *a_value = *sval;