* src/SDCCast.c (reverseParms): fixed bug #1040577 (part 2)
authorepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 22 Oct 2004 17:20:11 +0000 (17:20 +0000)
committerepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 22 Oct 2004 17:20:11 +0000 (17:20 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3555 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCast.c

index c3cd1e871f123e9cefb7b944fd5f0aacdd23d835..3b805b5793a04de721a46883dd7c63bf2e82e88e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-10-22 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
+
+       * src/SDCCast.c (reverseParms): fixed bug #1040577 (part 2)
+
 2004-10-22 Frieder Ferlemann <Frieder.Ferlemann AT web.de>
 
        * device/lib/ser_ir_cts_rts.c: integer promotion caused a call to the
@@ -11,7 +15,7 @@
 2004-10-22 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
 
        * src/SDCCast.h (struct ast),
-       * src/SDCCast.c (reverseParms, copyAst): fixed bug #1040577
+       * src/SDCCast.c (reverseParms, copyAst): fixed bug #1040577 (part 1)
 
 2004-10-20 Borut Razem <borut.razem AT siol.net>
 
index f8bb4fc1105ecbe7bd4e07d54b7632253addbab1..1339b3bab210c2dbe937bd016ba8cff24cd63602 100644 (file)
@@ -633,6 +633,19 @@ reverseParms (ast * ptree)
   /* top down if we find a nonParm tree then quit */
   if (ptree->type == EX_OP && ptree->opval.op == PARAM && !ptree->reversed)
     {
+      /* The various functions expect the parameter tree to be right heavy. */
+      /* Rotate the tree to be left heavy so that after reversal it is */
+      /* right heavy again. */
+      while ((ttree = ptree->right) && ttree->type == EX_OP &&
+             ttree->opval.op == PARAM)
+        {
+          ptree->right = ttree->right;
+          ttree->right = ttree->left;
+          ttree->left = ptree->left;
+          ptree->left = ttree;
+        }
+    
+      /* Now reverse */
       ttree = ptree->left;
       ptree->left = ptree->right;
       ptree->right = ttree;