summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2001-10-23 22:19:34 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2001-10-23 22:19:34 +0000
commit8eb28a70b2ec19f2782a68fd1ccf1a9a24131140 (patch)
treeb40b94c2d1463ffec28bfe7922341a83d6489d19
parent944630198f0165148571b6785f76ff7d16cad1a8 (diff)
downloadperl-8eb28a70b2ec19f2782a68fd1ccf1a9a24131140.tar.gz
Negation and Unicode: sort of solves 20010303.010,
except not quite like reported in the Subject (Perl_warner is still utf8-ignorant). p4raw-id: //depot/perl@12614
-rw-r--r--pp.c21
-rw-r--r--t/lib/warnings/sv8
2 files changed, 22 insertions, 7 deletions
diff --git a/pp.c b/pp.c
index a0729e972a..c182e9a347 100644
--- a/pp.c
+++ b/pp.c
@@ -2157,15 +2157,22 @@ PP(pp_negate)
sv_setsv(TARG, sv);
*SvPV_force(TARG, len) = *s == '-' ? '+' : '-';
}
- else if (DO_UTF8(sv) && UTF8_IS_START(*s) && isIDFIRST_utf8((U8*)s)) {
- sv_setpvn(TARG, "-", 1);
- sv_catsv(TARG, sv);
+ else if (DO_UTF8(sv)) {
+ SvIV_please(sv);
+ if (SvIOK(sv))
+ goto oops_its_an_int;
+ if (SvNOK(sv))
+ sv_setnv(TARG, -SvNV(sv));
+ else {
+ sv_setpvn(TARG, "-", 1);
+ sv_catsv(TARG, sv);
+ }
}
else {
- SvIV_please(sv);
- if (SvIOK(sv))
- goto oops_its_an_int;
- sv_setnv(TARG, -SvNV(sv));
+ SvIV_please(sv);
+ if (SvIOK(sv))
+ goto oops_its_an_int;
+ sv_setnv(TARG, -SvNV(sv));
}
SETTARG;
}
diff --git a/t/lib/warnings/sv b/t/lib/warnings/sv
index 9af58c25e0..29bef82e09 100644
--- a/t/lib/warnings/sv
+++ b/t/lib/warnings/sv
@@ -326,3 +326,11 @@ no warnings 'numeric' ;
$a = "\x{100}\x{200}" * 42;
EXPECT
Argument "\x{100}\x{200}" isn't numeric in multiplication (*) at - line 3.
+########
+# sv.c
+use warnings 'numeric' ;
+$a = "\x{100}\x{200}"; $a = -$a;
+no warnings 'numeric' ;
+$a = "\x{100}\x{200}"; $a = -$a;
+EXPECT
+Argument "\x{100}\x{200}" isn't numeric in negation (-) at - line 3.