diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-10-25 21:40:16 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-10-25 21:40:16 +0300 |
commit | 24e562f07cb9c6d70f49eeb9a74ffba8101ba834 (patch) | |
tree | 24ed74f7ff9f6eb8dbb866e09bd9d4d23d0b39e8 /builtin.c | |
parent | e56b6eabe183ed5fa1352ef0f5f49fb6d894578c (diff) | |
parent | 8231da563c810ce210ce309ee1a022bad22a1e13 (diff) | |
download | egawk-24e562f07cb9c6d70f49eeb9a74ffba8101ba834.tar.gz egawk-24e562f07cb9c6d70f49eeb9a74ffba8101ba834.tar.bz2 egawk-24e562f07cb9c6d70f49eeb9a74ffba8101ba834.zip |
Merge branch 'master' into feature/nocopy
Diffstat (limited to 'builtin.c')
-rw-r--r-- | builtin.c | 35 |
1 files changed, 19 insertions, 16 deletions
@@ -3333,11 +3333,13 @@ do_lshift(int nargs) if ((fixtype(s2)->flags & NUMBER) == 0) lintwarn(_("lshift: received non-numeric second argument")); } + val = force_number(s1)->numbr; shift = force_number(s2)->numbr; + if (val < 0 || shift < 0) + fatal(_("lshift(%f, %f): negative values are not allowed"), val, shift); + if (do_lint) { - if (val < 0 || shift < 0) - lintwarn(_("lshift(%f, %f): negative values will give strange results"), val, shift); if (double_to_int(val) != val || double_to_int(shift) != shift) lintwarn(_("lshift(%f, %f): fractional values will be truncated"), val, shift); if (shift >= sizeof(uintmax_t) * CHAR_BIT) @@ -3370,11 +3372,13 @@ do_rshift(int nargs) if ((fixtype(s2)->flags & NUMBER) == 0) lintwarn(_("rshift: received non-numeric second argument")); } + val = force_number(s1)->numbr; shift = force_number(s2)->numbr; + if (val < 0 || shift < 0) + fatal(_("rshift(%f, %f): negative values are not allowed"), val, shift); + if (do_lint) { - if (val < 0 || shift < 0) - lintwarn(_("rshift(%f, %f): negative values will give strange results"), val, shift); if (double_to_int(val) != val || double_to_int(shift) != shift) lintwarn(_("rshift(%f, %f): fractional values will be truncated"), val, shift); if (shift >= sizeof(uintmax_t) * CHAR_BIT) @@ -3411,8 +3415,8 @@ do_and(int nargs) lintwarn(_("and: argument %d is non-numeric"), i); val = force_number(s1)->numbr; - if (do_lint && val < 0) - lintwarn(_("and: argument %d negative value %g will give strange results"), i, val); + if (val < 0) + fatal(_("and: argument %d negative value %g is not allowed"), i, val); uval = (uintmax_t) val; res &= uval; @@ -3443,8 +3447,8 @@ do_or(int nargs) lintwarn(_("or: argument %d is non-numeric"), i); val = force_number(s1)->numbr; - if (do_lint && val < 0) - lintwarn(_("or: argument %d negative value %g will give strange results"), i, val); + if (val < 0) + fatal(_("or: argument %d negative value %g is not allowed"), i, val); uval = (uintmax_t) val; res |= uval; @@ -3475,8 +3479,8 @@ do_xor(int nargs) lintwarn(_("xor: argument %d is non-numeric"), i); val = force_number(s1)->numbr; - if (do_lint && val < 0) - lintwarn(_("xor: argument %d negative value %g will give strange results"), i, val); + if (val < 0) + fatal(_("xor: argument %d negative value %g is not allowed"), i, val); uval = (uintmax_t) val; if (i == 1) @@ -3505,12 +3509,11 @@ do_compl(int nargs) d = force_number(tmp)->numbr; DEREF(tmp); - if (do_lint) { - if (d < 0) - lintwarn(_("compl(%f): negative value will give strange results"), d); - if (double_to_int(d) != d) - lintwarn(_("compl(%f): fractional value will be truncated"), d); - } + if (d < 0) + fatal(_("compl(%f): negative value is not allowed"), d); + + if (do_lint && double_to_int(d) != d) + lintwarn(_("compl(%f): fractional value will be truncated"), d); uval = (uintmax_t) d; uval = ~ uval; |