gnue / NEWT0

NewtonScript
http://gnue.github.io/NEWT0
34 stars 13 forks source link

Bugfix: Order of Execution can reverse func() arguments #24

Closed MatthiasWM closed 3 years ago

MatthiasWM commented 3 years ago

From b1b5f9e4ddb177d214769a9e4254aed994f7155a Mon Sep 17 00:00:00 2001 From: MatthiasWM git@matthiasm.com Date: Mon, 26 Apr 2021 20:10:12 +0200 Subject: [PATCH] Fixed bug when creating arguments in ByteCode.

The order of execution of the + operator is not guaranteed. When compiling optimized in VisualC, function arguments were reversed in their order.

---
 src/newt_core/NewtBC.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/newt_core/NewtBC.c b/src/newt_core/NewtBC.c
index e9ef2bf..e22968d 100755
--- a/src/newt_core/NewtBC.c
+++ b/src/newt_core/NewtBC.c
@@ -459,8 +459,9 @@ int16_t NBCMakeFnArgFrame(newtRefArg argFrame, nps_syntax_node_t * stree, nps_no
         switch (node->code)
         {
             case kNPSCommaList:
-                numArgs = NBCMakeFnArgFrame(argFrame, stree, node->op1, indefiniteP)
-                            + NBCMakeFnArgFrame(argFrame, stree, node->op2, indefiniteP);
+                // C and C++ do not guarantee an order of evaluation, so don't write 'numArgs = a + b;'
+                numArgs  = NBCMakeFnArgFrame(argFrame, stree, node->op1, indefiniteP);
+                numArgs += NBCMakeFnArgFrame(argFrame, stree, node->op2, indefiniteP);
                 break;

             case kNPSArg:
@@ -2464,8 +2465,8 @@ int16_t NBCCountNumArgs(nps_syntax_node_t * stree, nps_node_t r)
         switch (node->code)
         {
             case kNPSCommaList:
-                numArgs = NBCCountNumArgs(stree, node->op1)
-                            + NBCCountNumArgs(stree, node->op2);
+                numArgs  = NBCCountNumArgs(stree, node->op1);
+                numArgs += NBCCountNumArgs(stree, node->op2);
                 break;
         }
     }
-- 

2.29.1.windows.1

gnue commented 3 years ago

I applied your patch. 13c310776ee0bdc218dfde2b74d259098e4d0443

MatthiasWM commented 3 years ago

Thank you very much :-)