]> git.sur5r.net Git - cc65/commitdiff
Clean-up
authorlaubzega <mileksmyk@gmail.com>
Wed, 26 Sep 2018 07:11:40 +0000 (00:11 -0700)
committerOliver Schmidt <ol.sc@web.de>
Tue, 2 Oct 2018 16:49:53 +0000 (18:49 +0200)
src/cc65/symentry.c
src/cc65/symtab.c

index 8091c4d265bc187d563d29a7215047ddae229454..f78c5da8047fe96e505f3bec7ddeaee63d2de1ce 100644 (file)
@@ -88,10 +88,8 @@ void FreeSymEntry (SymEntry* E)
     TypeFree (E->Type);
     xfree (E->AsmName);
 
-    if (E->Flags & SC_LABEL)
-    {
-        for (i = 0; i < CollCount (E->V.L.DefsOrRefs); i++)
-        {
+    if (E->Flags & SC_LABEL) {
+        for (i = 0; i < CollCount (E->V.L.DefsOrRefs); i++) {
             xfree (CollAt(E->V.L.DefsOrRefs, i));
         }
 
index c2edcb344b0e41f16e66f0db106518df2ecabb34..f7fb07f61dae2e9f542fa4015c63c2dad915d80c 100644 (file)
@@ -671,8 +671,8 @@ DefOrRef* AddDefOrRef(SymEntry* E, unsigned Flags)
     DOR->LocalsBlockNum = (long)CollLast (&CurrentFunc->LocalsBlockStack);
     DOR->Flags = Flags;
     DOR->StackPtr = StackPtr;
-    DOR->Depth = CollCount(&CurrentFunc->LocalsBlockStack);
-    DOR->LateSP_Label = GetLocalLabel();
+    DOR->Depth = CollCount (&CurrentFunc->LocalsBlockStack);
+    DOR->LateSP_Label = GetLocalLabel ();
 
     return DOR;
 }
@@ -695,30 +695,21 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags)
 
         NewDOR = AddDefOrRef (Entry, Flags);
 
-        /* Walk through all occurrences of the label so far and check
-           if any of them is in a region that would be risky to jump from/to
-           from the place where we are right now. */
+        /* Walk through all occurrences of the label so far and evaluate
+           their relationship with the one passed to the function. */
         for (i = 0; i < CollCount (Entry->V.L.DefsOrRefs); i++) {
             DOR = CollAt (Entry->V.L.DefsOrRefs, i);
-            /* We are only interested in label occurences of type opposite to
-             the one currently being added, i.e.  if we are processing the
-             definition, we will only check the gotos; if we are processing
-             a goto statement, we will only look for the label definition. */
-             /*
-            if (((DOR->Flags & SC_DEF) != (Flags & SC_DEF)) &&
-                (CollCount(&CurrentFunc->LocalsBlockStack) == DOR->Depth) &&
-                (DOR->LocalsBlockNum != (long)CollLast (&CurrentFunc->LocalsBlockStack)))
-                Error ("Goto from line %d to label \'%s\' can result in a "
-                    "trashed stack", Flags & SC_DEF ? DOR->Line : GetCurrentLine (), Name);
-            */
+
             if((DOR->Flags & SC_DEF) && (Flags & SC_REF)) {
                 /* We're processing a goto and here is its destination label.
-                 This means the difference between SP values is also known, so
-                 we simply emit SP adjustment code. */
-                 if(StackPtr != DOR->StackPtr)
-                    g_space(StackPtr - DOR->StackPtr);
-
-                if (CollCount(&CurrentFunc->LocalsBlockStack) <= DOR->Depth &&
+                   This means the difference between SP values is already known,
+                   so we simply emit the SP adjustment code. */
+                if(StackPtr != DOR->StackPtr)
+                    g_space (StackPtr - DOR->StackPtr);
+
+                /* Are we jumping into same or deeper nesting region? That's risky,
+                   so let's emit a warning. */
+                if (CollCount (&CurrentFunc->LocalsBlockStack) <= DOR->Depth &&
                     DOR->LocalsBlockNum != (long)CollLast (&CurrentFunc->LocalsBlockStack)) {
                     Warning ("Goto from line %d to label \'%s\' can result in a "
                         "trashed stack", DOR->Line, Name);
@@ -727,11 +718,13 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags)
 
             if((DOR->Flags & SC_REF) && (Flags & SC_DEF)) {
                 /* We're processing a label, let's update all gotos encountered
-                so far */
-                g_defdatalabel(DOR->LateSP_Label);
-                g_defdata(CF_CONST | CF_INT, StackPtr - DOR->StackPtr, 0);
+                   so far */
+                g_defdatalabel (DOR->LateSP_Label);
+                g_defdata (CF_CONST | CF_INT, StackPtr - DOR->StackPtr, 0);
 
-                if (CollCount(&CurrentFunc->LocalsBlockStack) >= DOR->Depth &&
+                /* Are we jumping into same or deeper nesting region? That's risky,
+                   so let's emit a warning. */
+                if (CollCount (&CurrentFunc->LocalsBlockStack) >= DOR->Depth &&
                     DOR->LocalsBlockNum != (long)CollLast (&CurrentFunc->LocalsBlockStack)) {
                     Warning ("Goto from line %d to label \'%s\' can result in a "
                         "trashed stack", DOR->Line, Name);
@@ -764,7 +757,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags)
 
     /* We are processing a goto, but the label has not yet been defined */
     if (!SymIsDef (Entry) && (Flags & SC_REF)) {
-        g_lateadjustSP(NewDOR->LateSP_Label);
+        g_lateadjustSP (NewDOR->LateSP_Label);
     }
 
     /* Return the entry */