* when the new sub scope will be created in call_sv. */
#if SU_HAS_PERL(5, 10, 0)
- if (dieing)
+ if (dieing) {
if (cxstack_ix < cxstack_max)
++cxstack_ix;
else
cxstack_ix = Perl_cxinc(aTHX);
+ }
#endif
call_sv(ud->cb, G_VOID);
if (SvTYPE(sv) >= SVt_PVGV) {
gv = (GV *) sv;
- if (!val) { /* local *x; */
+ if (!val || !SvROK(val)) { /* local *x; or local *x = $val; */
t = SVt_PVGV;
- } else if (!SvROK(val)) { /* local *x = $val; */
- goto assign;
- } else { /* local *x = \$val; */
+ } else { /* local *x = \$val; */
t = SvTYPE(SvRV(val));
deref = 1;
}
ud, PL_savestack_ix,
PL_scopestack[PL_scopestack_ix]));
-assign:
if (val)
SvSetMagicSV((SV *) gv, val);
STMT_START { \
if (items > A) { \
SV *csv = ST(B); \
- if (SvOK(csv)) \
- cxix = SvIV(csv); \
+ if (!SvOK(csv)) \
+ goto default_cx; \
+ cxix = SvIV(csv); \
if (cxix < 0) \
cxix = 0; \
else if (cxix > cxstack_ix) \
cxix = cxstack_ix; \
} else { \
+default_cx: \
cxix = cxstack_ix; \
if (PL_DBsub) \
SU_SKIP_DB(cxix); \
#define SU_GET_LEVEL(A, B) \
STMT_START { \
+ level = 0; \
if (items > 0) { \
SV *lsv = ST(B); \
- if (SvOK(lsv)) \
+ if (SvOK(lsv)) { \
level = SvIV(lsv); \
- if (level < 0) \
- level = 0; \
- } else \
- level = 0; \
+ if (level < 0) \
+ level = 0; \
+ } \
+ } \
} STMT_END
XS(XS_Scope__Upper_unwind); /* prototype to pass -Wmissing-prototypes */
newXSproto("Scope::Upper::unwind", XS_Scope__Upper_unwind, file, NULL);
}
+#if SU_THREADSAFE
+
void
CLONE(...)
PROTOTYPE: DISABLE
CODE:
PERL_UNUSED_VAR(items);
-#if SU_THREADSAFE
MY_CXT_CLONE;
+
#endif /* SU_THREADSAFE */
SV *