… | |
… | |
201 | EOF |
201 | EOF |
202 | |
202 | |
203 | out_next $op; |
203 | out_next $op; |
204 | } |
204 | } |
205 | |
205 | |
|
|
206 | sub op_aelemfast { |
|
|
207 | my ($op) = @_; |
|
|
208 | |
|
|
209 | my $targ = $op->targ; |
|
|
210 | my $private = $op->private; |
|
|
211 | |
|
|
212 | $source .= " {\n"; |
|
|
213 | |
|
|
214 | if ($op->flags & B::OPf_SPECIAL) { |
|
|
215 | $source .= " AV *av = (AV*)PAD_SV((PADOFFSET)$targ);\n"; |
|
|
216 | } else { |
|
|
217 | $source .= " AV *av = GvAV ((GV *)${$op->sv}L);\n"; |
|
|
218 | } |
|
|
219 | |
|
|
220 | if ($op->flags & B::OPf_MOD) { |
|
|
221 | $source .= " SV *sv = *av_fetch (av, $private, 1);\n"; |
|
|
222 | } else { |
|
|
223 | $source .= " SV **svp = av_fetch (av, $private, 0); SV *sv = svp ? *svp : &PL_sv_undef;\n"; |
|
|
224 | } |
|
|
225 | |
|
|
226 | if (!($op->flags & B::OPf_MOD)) { |
|
|
227 | $source .= " if (SvGMAGICAL (sv)) sv = sv_mortalcopy (sv);\n"; |
|
|
228 | } |
|
|
229 | |
|
|
230 | $source .= " dSP;\n"; |
|
|
231 | $source .= " XPUSHs (sv);\n"; |
|
|
232 | $source .= " PUTBACK;\n"; |
|
|
233 | $source .= " }\n"; |
|
|
234 | |
|
|
235 | out_next $op; |
|
|
236 | } |
|
|
237 | |
206 | # pattern const+ (or general push1) |
238 | # pattern const+ (or general push1) |
207 | # pattern pushmark return(?) |
239 | # pattern pushmark return(?) |
208 | # pattern pushmark gv rv2av pushmark padsv+o.ä. aassign |
240 | # pattern pushmark gv rv2av pushmark padsv+o.ä. aassign |
209 | |
241 | |
210 | # pattern const method_named |
242 | # pattern const method_named |