Closed MatthiasWM closed 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
I applied your patch. 13c310776ee0bdc218dfde2b74d259098e4d0443
Thank you very much :-)
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.
2.29.1.windows.1