1: OP_PADSV
op_targ = 1
op_ppaddr = Perl_pp_padsv
op_next = 2
2: OP_PADSV
op_targ = 2
op_ppaddr = Perl_pp_padsv
op_next = 3
3: OP_CONST
op_sv = [an SV holding the value 3]
op_ppaddr = Perl_pp_const
op_next = 4
4: OP_MULTIPLY
op_ppaddr = Perl_pp_multiply
op_next = 5
5: OP_ADD
op_ppaddr = Perl_pp_add
op_next = 6
####
OP * Perl_pp_padsv {
*PL_stack_sp++ = PL_curpad[PL_op->op_targ];
return PL_op->op_next;
}
OP * Perl_pp_const {
*PL_stack_sp++ = PL_op->op_sv;
return PL_op->op_next;
}
OP * Perl_pp_multiply {
SV *s1 = *--PL_stack_sp;
SV *s2 = *--PL_stack_sp;
SV *s3 = (a new or reused SV of some description);
SvIVX(s3) = SvIVX(s1) * SvIVX(s2);
*PL_stack_sp++ = s3;
return PL_op->op_next;
}
OP * Perl_pp_add {
SV *s1 = *--PL_stack_sp;
SV *s2 = *--PL_stack_sp;
SV *s3 = (a new or reused SV of some description);
SvIVX(s3) = SvIVX(s1) + SvIVX(s2);
*PL_stack_sp++ = s3;
return PL_op->op_next;
}
####
Perl_runops_standard {
PL_op = ...;
while (PL_op) {
PL_op = PL_op->op_ppaddr();
}
}
####
PL_op = Perl_pp_padsv(PL_op);
PL_op = Perl_pp_padsv(PL_op);
PL_op = Perl_pp_const(PL_op);
PL_op = Perl_pp_multiply(PL_op);
PL_op = Perl_pp_add(PL_op);