43261: Fix unary minus with base.

Apply unary minus to a complete lexical constant rather than the
first component that comes along.
This commit is contained in:
Peter Stephenson 2018-08-08 17:11:54 +01:00
parent bf8b611820
commit 225b35c907
3 changed files with 22 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2018-08-08 Peter Stephenson <p.stephenson@samsung.com>
* 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 <p.stephenson@samsung.com>
* Anton Shestakov: 43254: Completion/Unix/Command/_hg: Remove hg

View File

@ -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

View File

@ -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