Signature-Attribute-Alias

 view release on metacpan or  search on metacpan

lib/Signature/Attribute/Alias.xs  view on Meta::CPAN


  padentry = &(PAD_SVl(o->op_targ));
  save_clearsv(padentry);

  SV **svp = av_fetch(defav, ix, FALSE);
  *padentry = svp ? SvREFCNT_inc(*svp) : &PL_sv_undef;

  return o->op_next;
}

static void apply_Alias(pTHX_ struct XPSSignatureParamContext *ctx, SV *attrvalue, void **attrdata_ptr, void *funcdata)
{
  PADNAME *pn = PadnamelistARRAY(PL_comppad_name)[ctx->padix];
  if(PadnamePV(pn)[0] != '$')
    croak("Can only apply the :Alias attribute to scalar parameters");
  if(ctx->is_named)
    croak("Cannot apply the :Alias attribute to a named parameter");
}

static void post_defop_Alias(pTHX_ struct XPSSignatureParamContext *ctx, void *attrdata, void *funcdata)
{
  if(ctx->defop)
    croak("Cannot apply the :Alias attribute to a parameter with a defaulting expression");

  OP *varop = ctx->varop;
  assert(varop);
  assert((varop->op_private & OPpARGELEM_MASK) == OPpARGELEM_SV);
  assert(!(varop->op_flags & OPf_STACKED));

  varop->op_ppaddr = &pp_argelem_alias;



( run in 0.236 second using v1.01-cache-2.11-cpan-454fe037f31 )