]> git.sur5r.net Git - cc65/commitdiff
When changing the reference to a jump label, do also replace the string
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 5 Jun 2004 16:21:07 +0000 (16:21 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 5 Jun 2004 16:21:07 +0000 (16:21 +0000)
argument for the instruction with the name of the new jump label. This
allows CodeEntriesAreEqual to work in all cases, and therefore optimizations
based on this function will also work more effectively (or at all).

git-svn-id: svn://svn.cc65.org/cc65/trunk@3100 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/codeent.c
src/cc65/codeent.h
src/cc65/codelab.c

index a891aeb3d1f863e3f6ede8ff5fd838e42c54f6dd..e87311c307b6c780ace2f1da3cb58eba0207de33 100644 (file)
@@ -306,7 +306,7 @@ void CE_ReplaceOPC (CodeEntry* E, opc_t OPC)
 int CodeEntriesAreEqual (const CodeEntry* E1, const CodeEntry* E2)
 /* Check if both code entries are equal */
 {
-    return E1->OPC == E2->OPC && E1->AM == E2->AM && strcmp (E1->Arg, E2->Arg) == 0;
+    return (E1->OPC == E2->OPC && E1->AM == E2->AM && strcmp (E1->Arg, E2->Arg) == 0);
 }
 
 
@@ -336,6 +336,18 @@ void CE_MoveLabel (CodeLabel* L, CodeEntry* E)
 
 
 
+void CE_SetArg (CodeEntry* E, const char* Arg)
+/* Replace the argument by the new one. */
+{
+    /* Free the old argument */
+    FreeArg (E->Arg);
+
+    /* Assign the new one */
+    E->Arg = GetArgCopy (Arg);
+}
+
+
+
 void CE_SetNumArg (CodeEntry* E, long Num)
 /* Set a new numeric argument for the given code entry that must already
  * have a numeric argument.
@@ -357,11 +369,8 @@ void CE_SetNumArg (CodeEntry* E, long Num)
        Internal ("Invalid instruction size in CE_SetNumArg");
     }
 
-    /* Free the old argument */
-    FreeArg (E->Arg);
-
-    /* Assign the new one */
-    E->Arg = GetArgCopy (Buf);
+    /* Replace the argument by the new one */
+    CE_SetArg (E, Buf);
 
     /* Use the new numerical value */
     E->Num = Num;
index 81660287a53945accd55a94f27b9e85b9f9abc7e..2c42faf35ec7e8aa3757b0385f9d5a78f8bcf5c2 100644 (file)
@@ -157,7 +157,7 @@ INLINE int CE_HasMark (const CodeEntry* E)
 #else
 #  define CE_HasMark(E)        (((E)->Flags & CEF_USERMARK) != 0)
 #endif
-
+   
 #if defined(HAVE_INLINE)
 INLINE void CE_SetMark (CodeEntry* E)
 /* Set the CEF_USERMARK flag for the given entry */
@@ -178,6 +178,9 @@ INLINE void CE_ResetMark (CodeEntry* E)
 #  define CE_ResetMark(E)      ((E)->Flags &= ~CEF_USERMARK)
 #endif
 
+void CE_SetArg (CodeEntry* E, const char* Arg);
+/* Replace the argument by the new one. */
+
 void CE_SetNumArg (CodeEntry* E, long Num);
 /* Set a new numeric argument for the given code entry that must already
  * have a numeric argument.
index f4c14ea752ed038bbfaab45b67f6ab8f91803ae6..7fd66e7e29c279ecc212342eccd2fd471edf84df 100644 (file)
@@ -89,6 +89,9 @@ void CL_AddRef (CodeLabel* L, struct CodeEntry* E)
     /* The insn at E jumps to this label */
     E->JumpTo = L;
 
+    /* Replace the code entry argument with the name of the new label */
+    CE_SetArg (E, L->Name);
+
     /* Remember that in the label */
     CollAppend (&L->JumpFrom, E);
 }