]> git.sur5r.net Git - cc65/blobdiff - src/cc65/symentry.h
Add support for computed gotos
[cc65] / src / cc65 / symentry.h
index 2c22f99a0ab4da56623f6f15542b703035c736d3..62bf0b0e769597caad90af871ec1c01c46ef4380 100644 (file)
@@ -58,6 +58,7 @@
 
 struct Segments;
 struct LiteralPool;
+struct CodeEntry;
 
 
 
@@ -98,20 +99,26 @@ struct LiteralPool;
 
 #define SC_HAVEATTR     0x10000U        /* Symbol has attributes */
 
+#define SC_GOTO         0x20000U
+#define SC_SPADJUSTMENT 0x40000U
+#define SC_GOTO_IND     0x80000U        /* Indirect goto */
 
 
-/* Symbol table entry */
 
-typedef struct DefOrRef DefOrRef;
 
+/* Label definition or reference */
+typedef struct DefOrRef DefOrRef;
 struct DefOrRef {
     unsigned            Line;
-    long                LocalsBlockNum;
+    long                LocalsBlockId;
     unsigned            Flags;
+    int                 StackPtr;
+    unsigned            Depth;
+    unsigned            LateSP_Label;
 };
 
+/* Symbol table entry */
 typedef struct SymEntry SymEntry;
-
 struct SymEntry {
     SymEntry*                   NextHash; /* Next entry in hash list */
     SymEntry*                   PrevSym;  /* Previous symbol in dl list */
@@ -133,8 +140,12 @@ struct SymEntry {
         struct {
             unsigned            Label;
             Collection          *DefsOrRefs;
+            struct CodeEntry    *IndJumpFrom;
         } L;
 
+        /* Value of SP adjustment needed after forward 'goto' */
+        unsigned short      SPAdjustment;
+
         /* Register bank offset and offset of the saved copy on stack for
         ** register variables.
         */