aboutsummaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-10-25 21:40:16 +0300
committerArnold D. Robbins <arnold@skeeve.com>2016-10-25 21:40:16 +0300
commit24e562f07cb9c6d70f49eeb9a74ffba8101ba834 (patch)
tree24ed74f7ff9f6eb8dbb866e09bd9d4d23d0b39e8 /builtin.c
parente56b6eabe183ed5fa1352ef0f5f49fb6d894578c (diff)
parent8231da563c810ce210ce309ee1a022bad22a1e13 (diff)
downloadegawk-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.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/builtin.c b/builtin.c
index 3696ab10..380e38fe 100644
--- a/builtin.c
+++ b/builtin.c
@@ -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;