]> git.sur5r.net Git - cc65/commitdiff
Mark segments that are referenced in a .BANK statement.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 4 Jan 2012 22:15:47 +0000 (22:15 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 4 Jan 2012 22:15:47 +0000 (22:15 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5383 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/expr.c
src/ca65/segdef.h
src/ca65/segment.c
src/ca65/segment.h
src/common/segdefs.h [new file with mode: 0644]

index 3ee1ab47ed3d50ce9fd21bac5b6bc49d216769d2..b5af9dc4daececa903d7d7c96b26906f7686da26 100644 (file)
@@ -42,6 +42,7 @@
 #include "exprdefs.h"
 #include "print.h"
 #include "shift.h"
+#include "segdefs.h"
 #include "strbuf.h"
 #include "tgttrans.h"
 #include "version.h"
@@ -1839,10 +1840,16 @@ ExprNode* FinalizeExpr (ExprNode* Expr, const Collection* LineInfos)
                     LIError (LineInfos,
                              "Too many segment references in argument to .BANK");
                 } else {
+                    Segment* S;
+
                     FreeExpr (Expr->Left);
                     Expr->Op = EXPR_BANK;
                     Expr->Left = 0;
                     Expr->V.SecNum = ED.SecRef[0].Ref;
+
+                    /* Mark the segment */
+                    S = CollAt (&SegmentList, Expr->V.SecNum);
+                    S->Flags |= SEG_FLAG_BANKREF;
                 }
 
                 /* Cleanup */
index bea326ecda353e3d3487dbbb59d5acb70c7fa776..9fdbe1698752e8c89d9f8fa944b5402d7e0cb505 100644 (file)
@@ -78,7 +78,7 @@ SegDef* DupSegDef (const SegDef* D);
 
 
 
-/* End of segdefs.h */
+/* End of segdef.h */
 
 #endif
 
index 0411f4d6e93d9aaca317d0faca86f7a0cede791f..f1ade5f963c69dde0ccb3aba16aa2f8b25ef1708 100644 (file)
@@ -41,6 +41,7 @@
 #include "alignment.h"
 #include "coll.h"
 #include "mmodel.h"
+#include "segdefs.h"
 #include "segnames.h"
 #include "xmalloc.h"
 
@@ -107,6 +108,7 @@ static Segment* NewSegFromDef (SegDef* Def)
     S->Last      = 0;
     S->FragCount = 0;
     S->Num       = CollCount (&SegmentList);
+    S->Flags     = SEG_FLAG_NONE;
     S->Align     = 1;
     S->RelocMode = 1;
     S->PC        = 0;
@@ -408,7 +410,7 @@ void SegDone (void)
                } else {
 
                     /* Finalize the expression */
-                    F->V.Expr = FinalizeExpr (F->V.Expr, &F->LI);        
+                    F->V.Expr = FinalizeExpr (F->V.Expr, &F->LI);
 
                     /* Simplify the expression */
                     /* ### F->V.Expr = SimplifyExpr (F->V.Expr, &ED); */
index faa3c5289ea5c9a664e76d1edbbef3007801b4d8..77b269d62c083f0324efed19ab6a7598bf3e4490 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2011, Ullrich von Bassewitz                                      */
+/* (C) 1998-2012, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -62,6 +62,7 @@ struct Segment {
     Fragment*              Last;               /* Pointer to last fragment */
     unsigned long   FragCount;          /* Number of fragments */
     unsigned        Num;                       /* Segment number */
+    unsigned        Flags;              /* Segment flags */
     unsigned long   Align;                     /* Segment alignment */
     int             RelocMode;          /* Relocatable mode if OrgPerSeg */
     unsigned long   PC;                 /* PC if in relocatable mode */
diff --git a/src/common/segdefs.h b/src/common/segdefs.h
new file mode 100644 (file)
index 0000000..d12e601
--- /dev/null
@@ -0,0 +1,58 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                segdefs.h                                 */
+/*                                                                           */
+/*                     Constants and flags for segments                      */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2012,      Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#ifndef SEGDEFS_H
+#define SEGDEFS_H
+
+
+
+/*****************************************************************************/
+/*                                          Data                                    */
+/*****************************************************************************/
+
+
+
+/* Segment flags */
+#define SEG_FLAG_NONE           0x00
+#define SEG_FLAG_BANKREF        0x01    /* Segment is referenced by .BANK */
+
+
+
+/* End of segdefs.h */
+
+#endif
+
+
+