]> git.sur5r.net Git - cc65/commitdiff
Fixed problems with unnamed labels
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 17 Jul 2004 22:14:30 +0000 (22:14 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 17 Jul 2004 22:14:30 +0000 (22:14 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3160 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/ulabel.c

index c997d9b497655eaf0f3a29ad6a5b1ef6d0362c77..4a425e7b36cdcd0d534ff3adf4013af8da4b85b7 100644 (file)
@@ -113,7 +113,7 @@ ExprNode* ULabRef (int Which)
     if (Which > 0) {
        --Which;
     }
-    Index = (int) CollCount (&ULabList) + Which;
+    Index = (int) ULabDefCount + Which;
 
     /* We cannot have negative label indices */
     if (Index < 0) {
@@ -123,19 +123,27 @@ ExprNode* ULabRef (int Which)
        return GenCurrentPC();
     }
 
-    /* If the label does already exist, return it's value, otherwise create
-     * enough forward references, and return a label reference.
-     */
+    /* Check if the label exists. If not, generate enough forward labels. */
     if (Index < (int) CollCount (&ULabList)) {
+        /* The label exists, get it. */
        L = CollAtUnchecked (&ULabList, Index);
-        ++L->Ref;
-       return CloneExpr (L->Val);
     } else {
+        /* Generate new, undefined labels */
        while (Index >= (int) CollCount (&ULabList)) {
             L = NewULabel (0);
        }
-        ++L->Ref;
-       return GenULabelExpr (Index);
+    }
+
+    /* Mark the label as referenced */
+    ++L->Ref;
+
+    /* If the label is already defined, return its value, otherwise return
+     * just a reference.
+     */
+    if (L->Val) {
+        return CloneExpr (L->Val);
+    } else {
+        return GenULabelExpr (Index);
     }
 }