]> git.sur5r.net Git - cc65/blobdiff - src/da65/infofile.c
Support for "virtual operands" of subroutines like this:
[cc65] / src / da65 / infofile.c
index e8ce66cf7b52a91e602c4b8d1d8226f7e3066819..3bfa15f51bbde17a8fdd010516d422731d393aaf 100644 (file)
@@ -59,6 +59,7 @@
 #include "opctable.h"
 #include "scanner.h"
 #include "segment.h"
+#include "handler.h"
 
 
 
@@ -380,6 +381,7 @@ static void LabelSection (void)
         {   "ADDR",     INFOTOK_ADDR    },
         {   "NAME",     INFOTOK_NAME    },
         {   "SIZE",     INFOTOK_SIZE    },
+        {   "VOPERAND", INFOTOK_VOPERAND },
     };
 
     /* Locals - initialize to avoid gcc warnings */
@@ -387,6 +389,7 @@ static void LabelSection (void)
     char* Comment = 0;
     long Value    = -1;
     long Size     = -1;
+    long VOperand = -1;
 
     /* Skip the token */
     InfoNextTok ();
@@ -448,6 +451,17 @@ static void LabelSection (void)
                 InfoNextTok ();
                 break;
 
+            case INFOTOK_VOPERAND:
+                InfoNextTok ();
+                if (VOperand >= 0) {
+                    InfoError ("VOperand already given");
+                }
+                InfoAssureInt ();
+                InfoRangeCheck (1, 0x10000);
+                VOperand = InfoIVal;
+                InfoNextTok ();
+                break;
+
             default:
                 Internal ("Unexpected token: %u", InfoTok);
         }
@@ -484,6 +498,9 @@ static void LabelSection (void)
     } else {
         AddExtLabelRange ((unsigned) Value, Name, Size);
     }
+    if (VOperand >= 0) {
+        SetSubroutineVOperand ((unsigned) Value, (unsigned) VOperand);
+    }
 
     /* Define the comment */
     if (Comment) {