diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1998-04-08 00:14:13 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1998-04-08 00:14:13 +0000 |
commit | ba3eb2af450c2577c20a691fb686a5e02955c48b (patch) | |
tree | a8cf1145dc0c922547f90f92d9c444715752d512 /op.c | |
parent | 00dc2f4f23da07658d2634f904ac3a098aaa4153 (diff) | |
parent | 8c9208bc5764dada175aceff9d0b1938978d7db6 (diff) | |
download | perl-ba3eb2af450c2577c20a691fb686a5e02955c48b.tar.gz |
[asperl] integrate mainline changes
p4raw-id: //depot/asperl@884
Diffstat (limited to 'op.c')
-rw-r--r-- | op.c | 29 |
1 files changed, 28 insertions, 1 deletions
@@ -3336,7 +3336,7 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block) goto done; } /* ahem, death to those who redefine active sort subs */ - if (curstack == sortstack && sortcop == CvSTART(cv)) + if (curstackinfo->si_type == SI_SORT && sortcop == CvSTART(cv)) croak("Can't redefine active sort subroutine %s", name); const_sv = cv_const_sv(cv); if (const_sv || dowarn && !(CvGV(cv) && GvSTASH(CvGV(cv)) @@ -3522,6 +3522,33 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block) return cv; } +void +newCONSTSUB(HV *stash, char *name, SV *sv) +{ + dTHR; + U32 oldhints = hints; + HV *old_cop_stash = curcop->cop_stash; + HV *old_curstash = curstash; + line_t oldline = curcop->cop_line; + curcop->cop_line = copline; + + hints &= ~HINT_BLOCK_SCOPE; + if(stash) + curstash = curcop->cop_stash = stash; + + newSUB( + start_subparse(FALSE, 0), + newSVOP(OP_CONST, 0, newSVpv(name,0)), + newSVOP(OP_CONST, 0, &sv_no), /* SvPV(&sv_no) == "" -- GMB */ + newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) + ); + + hints = oldhints; + curcop->cop_stash = old_cop_stash; + curstash = old_curstash; + curcop->cop_line = oldline; +} + CV * newXS(char *name, void (*subaddr) (CPERLproto_ CV *), char *filename) { |