summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--op.h1
-rw-r--r--pp_ctl.c6
2 files changed, 6 insertions, 1 deletions
diff --git a/op.h b/op.h
index 038d9084f6..08d46f97c3 100644
--- a/op.h
+++ b/op.h
@@ -143,6 +143,7 @@ Deprecated. Use C<GIMME_V> instead.
- After ck_glob, use Perl glob function
*/
/* On OP_PADRANGE, push @_ */
+ /* On OP_DUMP, has no label */
/* old names; don't use in new code, but don't break them, either */
#define OPf_LIST OPf_WANT_LIST
diff --git a/pp_ctl.c b/pp_ctl.c
index d091e29f0e..24a8cd6f05 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -2776,7 +2776,7 @@ S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstac
return 0;
}
-PP(pp_goto)
+PP(pp_goto) /* also pp_dump */
{
dVAR; dSP;
OP *retop = NULL;
@@ -2791,6 +2791,8 @@ PP(pp_goto)
static const char* const must_have_label = "goto must have label";
if (PL_op->op_flags & OPf_STACKED) {
+ /* goto EXPR or goto &foo */
+
SV * const sv = POPs;
SvGETMAGIC(sv);
@@ -2986,11 +2988,13 @@ PP(pp_goto)
}
}
else {
+ /* goto EXPR */
label = SvPV_nomg_const(sv, label_len);
label_flags = SvUTF8(sv);
}
}
else if (!(PL_op->op_flags & OPf_SPECIAL)) {
+ /* goto LABEL or dump LABEL */
label = cPVOP->op_pv;
label_flags = (cPVOP->op_private & OPpPV_IS_UTF8) ? SVf_UTF8 : 0;
label_len = strlen(label);