* src/SDCCast.h (struct ast),
authorepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 22 Oct 2004 04:02:03 +0000 (04:02 +0000)
committerepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 22 Oct 2004 04:02:03 +0000 (04:02 +0000)
* src/SDCCast.c (reverseParms, copyAst): fixed bug #1040577

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3548 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCast.c
src/SDCCast.h

index e1a5733ceca4835ffb98006a30f5551b81aec559..b0b11456d3776923a2ab240bcc428a1051008f49 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-22 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
+
+       * src/SDCCast.h (struct ast),
+       * src/SDCCast.c (reverseParms, copyAst): fixed bug #1040577
+
 2004-10-20 Borut Razem <borut.razem AT siol.net>
 
        * support/scripts/sdcc.nsi: added include/pic16/*.h to the setup
index 2ba8dd0e7bf929b6c13f4e86b699aedbd824457e..f8bb4fc1105ecbe7bd4e07d54b7632253addbab1 100644 (file)
@@ -218,6 +218,7 @@ copyAst (ast * src)
   dest->lineno = src->lineno;
   dest->level = src->level;
   dest->funcName = src->funcName;
+  dest->reversed = src->reversed;
 
   if (src->ftype)
     dest->etype = getSpec (dest->ftype = copyLinkChain (src->ftype));
@@ -630,11 +631,12 @@ reverseParms (ast * ptree)
     return;
 
   /* top down if we find a nonParm tree then quit */
-  if (ptree->type == EX_OP && ptree->opval.op == PARAM)
+  if (ptree->type == EX_OP && ptree->opval.op == PARAM && !ptree->reversed)
     {
       ttree = ptree->left;
       ptree->left = ptree->right;
       ptree->right = ttree;
+      ptree->reversed = 1;
       reverseParms (ptree->left);
       reverseParms (ptree->right);
     }
index 8cc1a4e12e34e0f92b7796eb7608dfa88cf7e2ab..9e8ac52631d8cc26728331d56915f26ed89ebf08 100644 (file)
@@ -49,6 +49,7 @@ typedef struct ast
     unsigned rvalue:1;
     unsigned lvalue:1;
     unsigned initMode:1;
+    unsigned reversed:1;
     int level;                 /* level for expr */
     int block;                 /* block number   */
     int seqPoint;              /* sequence point */