From: David Mitchell Date: Fri, 6 Sep 2013 14:54:10 +0000 (+0100) Subject: pp_goto: document the different branches X-Git-Tag: upstream/5.20.0~1993 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7d1d69cb1e59690060fc6368ef3969a206c87c50;p=platform%2Fupstream%2Fperl.git pp_goto: document the different branches Te various different forms of goto (and dump) take different branches through this big function. Document which branches handle which variants. Also document the use of OPf_SPECIAL in OP_DUMP. --- diff --git a/op.h b/op.h index 038d908..08d46f9 100644 --- a/op.h +++ b/op.h @@ -143,6 +143,7 @@ Deprecated. Use C 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 d091e29..24a8cd6 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);