return FALSE;
}
- if (sv_isobject(sv)) {
+ if (SvROK(sv) && SvOBJECT(SvRV(sv))) {
classname = sv_ref(NULL,SvRV(sv),TRUE);
} else {
classname = sv;
works out the package name and subroutine name from C<cv>, and then calls
C<croak()>. Hence if C<cv> is C<&ouch::awk>, it would call C<croak> as:
- Perl_croak(aTHX_ "Usage: %"SVf"::%"SVf"(%s)", "ouch" "awk", "eee_yow");
+ Perl_croak(aTHX_ "Usage: %"SVf"::%"SVf"(%s)", "ouch" "awk",
+ "eee_yow");
=cut
*/
if (items > 1)
croak_xs_usage(cv, "sv");
- ST(0) = sv_2mortal(newSViv(NATIVE_TO_UNI(uv)));
+ ST(0) = sv_2mortal(newSVuv(NATIVE_TO_UNI(uv)));
XSRETURN(1);
}
if (items > 1)
croak_xs_usage(cv, "sv");
- ST(0) = sv_2mortal(newSViv(UNI_TO_NATIVE(uv)));
+ ST(0) = sv_2mortal(newSVuv(UNI_TO_NATIVE(uv)));
XSRETURN(1);
}
}
else if (items == 2) {
if (SvTRUE(ST(1))) {
-#ifdef PERL_OLD_COPY_ON_WRITE
- if (SvIsCOW(sv)) sv_force_normal(sv);
-#endif
SvFLAGS(sv) |= SVf_READONLY;
XSRETURN_YES;
}
sv = SvRV(svz);
-#ifdef PERL_OLD_COPY_ON_WRITE
- if (SvIsCOW(sv)) sv_force_normal(sv);
-#endif
SvREADONLY_on(sv);
if (SvTYPE(sv) == SVt_PVAV && AvFILLp(sv) != -1) {
/* for constant.pm; nobody else should be calling this
* The code is mostly just cargo-culted from Memoize::Lift */
OP *pushop, *argop;
+ OP *parent;
SV* prototype = newSVpvs("$");
PERL_UNUSED_ARG(protosv);
assert(entersubop->op_type == OP_ENTERSUB);
entersubop = ck_entersub_args_proto(entersubop, namegv, prototype);
+ parent = entersubop;
SvREFCNT_dec(prototype);
pushop = cUNOPx(entersubop)->op_first;
- if (! pushop->op_sibling) {
+ if (! OpHAS_SIBLING(pushop)) {
+ parent = pushop;
pushop = cUNOPx(pushop)->op_first;
}
- argop = pushop->op_sibling;
+ argop = OpSIBLING(pushop);
/* Carry on without doing the optimization if it is not something we're
* expecting, so continues to work */
if ( ! argop
- || ! argop->op_sibling
- || argop->op_sibling->op_sibling
+ || ! OpHAS_SIBLING(argop)
+ || OpHAS_SIBLING(OpSIBLING(argop))
) {
return entersubop;
}
- pushop->op_sibling = argop->op_sibling;
- argop->op_sibling = NULL;
- argop->op_lastsib = 1;
+ /* cut argop from the subtree */
+ (void)op_sibling_splice(parent, pushop, 1, NULL);
op_free(entersubop);
return argop;
}
/*
- * Local variables:
- * c-indentation-style: bsd
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- *
* ex: set ts=8 sts=4 sw=4 et:
*/