This is a live mirror of the Perl 5 development currently hosted at
https://github.com/perl/perl5
https://perl5.git.perl.org
/
perl5.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Eliminate Alpha warnings
[perl5.git]
/
av.c
diff --git
a/av.c
b/av.c
index
dfd25df
..
9e94805
100644
(file)
--- a/
av.c
+++ b/
av.c
@@
-1,6
+1,6
@@
/* av.c
*
/* av.c
*
- * Copyright (c) 1991-199
4
, Larry Wall
+ * Copyright (c) 1991-199
7
, Larry Wall
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
@@
-33,6
+33,9
@@
AV* av;
if (sv != &sv_undef)
(void)SvREFCNT_inc(sv);
}
if (sv != &sv_undef)
(void)SvREFCNT_inc(sv);
}
+ key = AvARRAY(av) - AvALLOC(av);
+ while (key)
+ AvALLOC(av)[--key] = &sv_undef;
AvREAL_on(av);
}
AvREAL_on(av);
}
@@
-153,12
+156,19
@@
I32 lval;
return av_store(av,key,sv);
}
if (AvARRAY(av)[key] == &sv_undef) {
return av_store(av,key,sv);
}
if (AvARRAY(av)[key] == &sv_undef) {
+ emptyness:
if (lval) {
sv = NEWSV(6,0);
return av_store(av,key,sv);
}
return 0;
}
if (lval) {
sv = NEWSV(6,0);
return av_store(av,key,sv);
}
return 0;
}
+ else if (AvREIFY(av)
+ && (!AvARRAY(av)[key] /* eg. @_ could have freed elts */
+ || SvTYPE(AvARRAY(av)[key]) == SVTYPEMASK)) {
+ AvARRAY(av)[key] = &sv_undef; /* 1/2 reify */
+ goto emptyness;
+ }
return &AvARRAY(av)[key];
}
return &AvARRAY(av)[key];
}
@@
-172,10
+182,13
@@
SV *val;
if (!av)
return 0;
if (!av)
return 0;
+ if (!val)
+ val = &sv_undef;
if (SvRMAGICAL(av)) {
if (mg_find((SV*)av,'P')) {
if (SvRMAGICAL(av)) {
if (mg_find((SV*)av,'P')) {
- mg_copy((SV*)av, val, 0, key);
+ if (val != &sv_undef)
+ mg_copy((SV*)av, val, 0, key);
return 0;
}
}
return 0;
}
}
@@
-185,14
+198,12
@@
SV *val;
if (key < 0)
return 0;
}
if (key < 0)
return 0;
}
- if (!val)
- val = &sv_undef;
-
+ if (SvREADONLY(av) && key >= AvFILL(av))
+ croak(no_modify);
+ if (!AvREAL(av) && AvREIFY(av))
+ av_reify(av);
if (key > AvMAX(av))
av_extend(av,key);
if (key > AvMAX(av))
av_extend(av,key);
- if (AvREIFY(av))
- av_reify(av);
-
ary = AvARRAY(av);
if (AvFILL(av) < key) {
if (!AvREAL(av)) {
ary = AvARRAY(av);
if (AvFILL(av) < key) {
if (!AvREAL(av)) {
@@
-327,10
+338,6
@@
register AV *av;
while (key)
SvREFCNT_dec(AvARRAY(av)[--key]);
}
while (key)
SvREFCNT_dec(AvARRAY(av)[--key]);
}
- if (key = AvARRAY(av) - AvALLOC(av)) {
- AvMAX(av) += key;
- SvPVX(av) = (char*)AvALLOC(av);
- }
Safefree(AvALLOC(av));
AvALLOC(av) = 0;
SvPVX(av) = 0;
Safefree(AvALLOC(av));
AvALLOC(av) = 0;
SvPVX(av) = 0;
@@
-359,6
+366,8
@@
register AV *av;
if (!av || AvFILL(av) < 0)
return &sv_undef;
if (!av || AvFILL(av) < 0)
return &sv_undef;
+ if (SvREADONLY(av))
+ croak(no_modify);
retval = AvARRAY(av)[AvFILL(av)];
AvARRAY(av)[AvFILL(av)--] = &sv_undef;
if (SvSMAGICAL(av))
retval = AvARRAY(av)[AvFILL(av)];
AvARRAY(av)[AvFILL(av)--] = &sv_undef;
if (SvSMAGICAL(av))
@@
-376,12
+385,10
@@
register I32 num;
if (!av || num <= 0)
return;
if (!av || num <= 0)
return;
- if (!AvREAL(av)) {
- if (AvREIFY(av))
- av_reify(av);
- else
- croak("Can't unshift");
- }
+ if (SvREADONLY(av))
+ croak(no_modify);
+ if (!AvREAL(av) && AvREIFY(av))
+ av_reify(av);
i = AvARRAY(av) - AvALLOC(av);
if (i) {
if (i > num)
i = AvARRAY(av) - AvALLOC(av);
if (i) {
if (i > num)
@@
-419,6
+426,8
@@
register AV *av;
if (!av || AvFILL(av) < 0)
return &sv_undef;
if (!av || AvFILL(av) < 0)
return &sv_undef;
+ if (SvREADONLY(av))
+ croak(no_modify);
retval = *AvARRAY(av);
if (AvREAL(av))
*AvARRAY(av) = &sv_undef;
retval = *AvARRAY(av);
if (AvREAL(av))
*AvARRAY(av) = &sv_undef;