From 225b35c9070f94cf79c90c33ffcee84b281f894d Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 8 Aug 2018 17:11:54 +0100 Subject: 43261: Fix unary minus with base. Apply unary minus to a complete lexical constant rather than the first component that comes along. --- ChangeLog | 5 +++++ Src/math.c | 15 +++++++++++++-- Test/C01arith.ztst | 4 ++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7a4cb05a2..28f70f48a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2018-08-08 Peter Stephenson + + * 43261: Src/math.c, Test/C01arith.ztst: Apply unary minus to + entire lexical constant, so base doesn't get treated as negative. + 2018-08-07 Peter Stephenson * Anton Shestakov: 43254: Completion/Unix/Command/_hg: Remove hg diff --git a/Src/math.c b/Src/math.c index 4b7ecf0ab..b08e05cb4 100644 --- a/Src/math.c +++ b/Src/math.c @@ -640,8 +640,19 @@ zzlex(void) } if (unary) { if (idigit(*ptr) || *ptr == '.') { - ptr--; - return lexconstant(); + int ctype = lexconstant(); + if (ctype == NUM) + { + if (yyval.type == MN_FLOAT) + { + yyval.u.d = -yyval.u.d; + } + else + { + yyval.u.l = -yyval.u.l; + } + } + return ctype; } else return UMINUS; } else diff --git a/Test/C01arith.ztst b/Test/C01arith.ztst index 77a46ebd5..f1364ab36 100644 --- a/Test/C01arith.ztst +++ b/Test/C01arith.ztst @@ -467,3 +467,7 @@ >6 >4 ?(eval):6: bad math expression: lvalue required + + print $(( -2#101-16#f )) +0: Unary minus doesn't apply to base but to number as a whole. +>-20 -- cgit 1.4.1