cvsuser 04/11/22 02:46:41
Modified: classes perlint.pmc
Log:
fix 32549
Revision Changes Path
1.82 +9 -6 parrot/classes/perlint.pmc
Index: perlint.pmc
===================================================================
RCS file: /cvs/public/parrot/classes/perlint.pmc,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- perlint.pmc 20 Nov 2004 12:10:09 -0000 1.81
+++ perlint.pmc 22 Nov 2004 10:46:41 -0000 1.82
@@ -1,6 +1,6 @@
/*
Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
-$Id: perlint.pmc,v 1.81 2004/11/20 12:10:09 leo Exp $
+$Id: perlint.pmc,v 1.82 2004/11/22 10:46:41 leo Exp $
=head1 NAME
@@ -388,7 +388,7 @@
INTVAL a = PMC_int_val(SELF);
INTVAL b = PMC_int_val(value);
INTVAL c = a - b;
- if ((c^a) >= 0 || (c^b) >= 0)
+ if ((c^a) >= 0 || (c^~b) >= 0)
VTABLE_set_integer_native(INTERP, dest, c);
else
overflow(INTERP, SELF, b, dest, MMD_SUBTRACT_INT);
@@ -397,7 +397,7 @@
INTVAL a = PMC_int_val(SELF);
INTVAL b = PMC_int_val(value);
INTVAL c = a - b;
- if ((c^a) >= 0 || (c^b) >= 0)
+ if ((c^a) >= 0 || (c^~b) >= 0)
VTABLE_set_integer_native(INTERP, dest, c);
else
overflow(INTERP, SELF, b, dest, MMD_SUBTRACT_INT);
@@ -444,9 +444,12 @@
*/
void subtract_int (INTVAL value, PMC* dest) {
- VTABLE_set_integer_native(INTERP, dest,
- PMC_int_val(SELF) - value
- );
+ INTVAL a = PMC_int_val(SELF);
+ INTVAL c = a - b;
+ if ((c^a) >= 0 || (c^~b) >= 0)
+ VTABLE_set_integer_native(INTERP, dest, c);
+ else
+ overflow(INTERP, SELF, b, dest, MMD_SUBTRACT_INT);
}
/*