]> Shamusworld >> Repos - rmac/blobdiff - expr.c
Fix RMACPATH
[rmac] / expr.c
diff --git a/expr.c b/expr.c
index 3a23e6e3cf68d4949ef1372ca98da1defecac7f6..dc0e22bf90b88485ee2872d3dccdc7d35ac4313d 100644 (file)
--- a/expr.c
+++ b/expr.c
@@ -169,7 +169,6 @@ int expr1(void)
                case CR_FILESIZE:
                        if (*tok++ != STRING)
                                return error("^^FILESIZE expects filename inside string");
-
                        *evalTokenBuffer.u32++ = CONST;
                        // @@copypasted from d_incbin, maybe factor this out somehow?
                        // Attempt to open the include file in the current directory, then (if that
@@ -180,20 +179,20 @@ int expr1(void)
 
                        if ((fd = open(string[*tok], _OPEN_INC)) < 0)
                        {
-                               for(i=0; nthpath("RMACPATH", i, buf1)!= 0; i++)
+                               for(i=0; nthpath("RMACPATH", i, buf1)!=0; i++)
                                {
                                        fd = strlen(buf1);
-                                       
+
                                        // Append path char if necessary
                                        if ((fd > 0) && (buf1[fd - 1] != SLASHCHAR))
                                                strcat(buf1, SLASHSTRING);
-                                       
+
                                        strcat(buf1, string[*tok]);
-                                       
+
                                        if ((fd = open(buf1, _OPEN_INC)) >= 0)
                                                goto allright;
                                }
-                               
+
                                return error("cannot open: \"%s\"", string[tok[1]]);
                        }
 
@@ -417,7 +416,7 @@ int expr(TOKEN * otk, uint64_t * a_value, WORD * a_attr, SYM ** a_esym)
                {
                        *evalTokenBuffer.u32++ = CONST;
                        *evalTokenBuffer.u64++ = *a_value = (*tok - KW_R0);
-                       *a_attr = ABS | DEFINED;
+                       *a_attr = ABS | DEFINED | RISCREG;
 
                        if (a_esym != NULL)
                                *a_esym = NULL;
@@ -522,19 +521,19 @@ be converted from a linked list into an array).
                        symbolNum++;
 #endif
 
-                       if (symbol->sattr & DEFINED)
-                               *a_value = symbol->svalue;
-                       else
-                               *a_value = 0;
+                       *a_value = (symbol->sattr & DEFINED ? symbol->svalue : 0);
+                       *a_attr = (WORD)(symbol->sattr & ~GLOBAL);
 
 /*
 All that extra crap that was put into the svalue when doing the equr stuff is
 thrown away right here. What the hell is it for?
 */
                        if (symbol->sattre & EQUATEDREG)
+                       {
                                *a_value &= 0x1F;
-
-                       *a_attr = (WORD)(symbol->sattr & ~GLOBAL);
+                               *a_attr |= RISCREG; // Mark it as a register, 'cause it is
+                               *a_esym = symbol;
+                       }
 
                        if ((symbol->sattr & (GLOBAL | DEFINED)) == GLOBAL
                                && a_esym != NULL)