]> git.sur5r.net Git - cc65/commitdiff
Add the label/equate bit to the exports and debug symbols
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 8 Sep 2001 21:08:20 +0000 (21:08 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 8 Sep 2001 21:08:20 +0000 (21:08 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@876 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/main.c
src/ca65/pseudo.c
src/ca65/symtab.c
src/ca65/symtab.h

index b029e2f0cc64b67255ec5102819d2143cf6c9f64..c86a3332a0c017827b59813dbcd60b1cc8989937 100644 (file)
@@ -181,7 +181,7 @@ static void DefineSymbol (const char* Def)
     }
 
     /* Define the symbol */
-    SymDef (SymName, LiteralExpr (Val), 0);
+    SymDef (SymName, LiteralExpr (Val), 0, 0);
 }
 
 
@@ -386,12 +386,12 @@ static void OneLine (void)
                /* Skip the '=' */
                NextTok ();
                /* Define the symbol with the expression following the '=' */
-               SymDef (Ident, Expression (), 0);
+               SymDef (Ident, Expression(), 0, 0);
                /* Don't allow anything after a symbol definition */
                Done = 1;
            } else {
                /* Define a label */
-               SymDef (Ident, CurrentPC (), IsZPSeg ());
+               SymDef (Ident, CurrentPC(), IsZPSeg(), 1);
                /* Skip the colon. If NoColonLabels is enabled, allow labels
                 * without a colon if there is no whitespace before the
                 * identifier.
index 801db02bad3365fe81bf43e162d6f2783958d947..6e815c87a3748f7b23b2389414ef57a6d61b1bb4 100644 (file)
@@ -1100,7 +1100,7 @@ static void DoProc (void)
 {
     if (Tok == TOK_IDENT) {
        /* The new scope has a name */
-       SymDef (SVal, CurrentPC (), IsZPSeg ());
+       SymDef (SVal, CurrentPC (), IsZPSeg (), 1);
        NextTok ();
     }
     SymEnterLevel ();
index 602f41f6be538028afd0926f60576acf8976e8c2..7af07dbfedeb847d14c62066126f01a27363a1f0 100644 (file)
@@ -66,6 +66,7 @@
 #define SF_GLOBAL      0x0010          /* Global symbol */
 #define SF_ZP                  0x0020          /* Declared as zeropage symbol */
 #define SF_ABS         0x0040          /* Declared as absolute symbol */
+#define SF_LABEL        0x0080          /* Used as a label */
 #define SF_INDEXED     0x0800          /* Index is valid */
 #define SF_CONST       0x1000          /* The symbol has a constant value */
 #define SF_MULTDEF             0x2000          /* Multiply defined symbol */
@@ -399,7 +400,7 @@ void SymLeaveLevel (void)
 
 
 
-void SymDef (const char* Name, ExprNode* Expr, int ZP)
+void SymDef (const char* Name, ExprNode* Expr, int ZP, int Label)
 /* Define a new symbol */
 {
     /* Do we have such a symbol? */
@@ -430,6 +431,9 @@ void SymDef (const char* Name, ExprNode* Expr, int ZP)
     if (ZP) {
        S->Flags |= SF_ZP;
     }
+    if (Label) {
+       S->Flags |= SF_LABEL;
+    }
 
     /* If the symbol is a ZP symbol, check if the value is in correct range */
     if (S->Flags & SF_ZP) {
@@ -1062,6 +1066,26 @@ void WriteImports (void)
 
 
 
+static unsigned char GetExprMask (SymEntry* S)
+/* Return the expression bits for the given symbol table entry */
+{
+    unsigned char ExprMask;
+
+    /* Check if the symbol is const */
+    ExprMask = (SymIsConst (S))? EXP_CONST : EXP_EXPR;
+
+    /* Add zeropage/abs bits */
+    ExprMask |= (S->Flags & SF_ZP)? EXP_ZP : EXP_ABS;
+
+    /* Add the label/equate bits */
+    ExprMask |= (S->Flags & SF_LABEL)? EXP_LABEL : EXP_EQUATE;
+
+    /* Return the mask */
+    return ExprMask;
+}
+
+
+
 void WriteExports (void)
 /* Write the exports list to the object file */
 {
@@ -1083,11 +1107,8 @@ void WriteExports (void)
            /* Finalize an associated expression if we have one */
            SymFinalize (S);
 
-           /* Check if the symbol is const */
-           ExprMask = (SymIsConst (S))? EXP_CONST : EXP_EXPR;
-
-           /* Add zeropage/abs bits */
-           ExprMask |= (S->Flags & SF_ZP)? EXP_ZP : EXP_ABS;
+           /* Get the expression bits */
+           ExprMask = GetExprMask (S);
 
            /* Count the number of ConDes types */
            for (Type = 0; Type < CD_TYPE_COUNT; ++Type) {
@@ -1104,7 +1125,7 @@ void WriteExports (void)
                for (Type = 0; Type < CD_TYPE_COUNT; ++Type) {
                    unsigned char Prio = S->ConDesPrio[Type];
                    if (Prio != CD_PRIO_NONE) {
-                       ObjWrite8 (CD_BUILD (Type, Prio));
+                       ObjWrite8 (CD_BUILD (Type, Prio));
                    }
                }
            }
@@ -1167,11 +1188,8 @@ void WriteDbgSyms (void)
                /* Finalize an associated expression if we have one */
                SymFinalize (S);
 
-               /* Check if the symbol is const */
-               ExprMask = (SymIsConst (S))? EXP_CONST : EXP_EXPR;
-
-               /* Add zeropage/abs bits */
-               ExprMask |= (S->Flags & SF_ZP)? EXP_ZP : EXP_ABS;
+               /* Get the expression bits */
+                       ExprMask = GetExprMask (S);
 
                /* Write the type */
                ObjWrite8 (ExprMask);
index f25b2e09e34d8995e82be943c17840cc84d840eb..642734274017754e5821dc7579fd2faa397c6c71 100644 (file)
@@ -49,7 +49,7 @@
 
 
 /*****************************************************************************/
-/*                                  Code                                    */
+/*                                  Code                                    */
 /*****************************************************************************/
 
 
@@ -60,7 +60,7 @@ void SymEnterLevel (void);
 void SymLeaveLevel (void);
 /* Leave the current lexical level */
 
-void SymDef (const char* Name, ExprNode* Expr, int ZP);
+void SymDef (const char* Name, ExprNode* Expr, int ZP, int Label);
 /* Define a new symbol */
 
 SymEntry* SymRef (const char* Name);