summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorVishal Bhatia <vishal@deja.com>1999-06-20 10:17:17 -0700
committerGurusamy Sarathy <gsar@cpan.org>1999-07-07 01:57:16 +0000
commitcd2dd2fd24b15028d265200a1345a2bbcef5a4d9 (patch)
tree59d618a78897dbb4d058b8e8dc0bf2bacbb5e7d5 /ext
parentf311e742d69bacf38a46d67254ccde1bc761a92a (diff)
downloadperl-cd2dd2fd24b15028d265200a1345a2bbcef5a4d9.tar.gz
Minor bug fix in pp_require
Message-ID: <AEBDBGKPMEAJAAAA@my-deja.com> p4raw-id: //depot/perl@3630
Diffstat (limited to 'ext')
-rw-r--r--ext/B/B/CC.pm18
1 files changed, 17 insertions, 1 deletions
diff --git a/ext/B/B/CC.pm b/ext/B/B/CC.pm
index eb67bcf7db..b909d44851 100644
--- a/ext/B/B/CC.pm
+++ b/ext/B/B/CC.pm
@@ -1105,6 +1105,7 @@ sub doeval {
write_back_stack();
my $sym = loadop($op);
my $ppaddr = $op->ppaddr;
+ #runtime(qq/printf("$ppaddr type eval\n");/);
runtime("PP_EVAL($ppaddr, ($sym)->op_next);");
$know_op = 1;
invalidate_lexicals(REGISTER|TEMPORARY);
@@ -1112,9 +1113,24 @@ sub doeval {
}
sub pp_entereval { doeval(@_) }
-sub pp_require { doeval(@_) }
sub pp_dofile { doeval(@_) }
+#pp_require is protected by pp_entertry, so no protection for it.
+sub pp_require {
+ my $op = shift;
+ $curcop->write_back;
+ write_back_lexicals(REGISTER|TEMPORARY);
+ write_back_stack();
+ my $sym = doop($op);
+ runtime("while (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){");
+ runtime("PL_op = (*PL_op->op_ppaddr)(ARGS);");
+ runtime("SPAGAIN;}");
+ $know_op = 1;
+ invalidate_lexicals(REGISTER|TEMPORARY);
+ return $op->next;
+}
+
+
sub pp_entertry {
my $op = shift;
$curcop->write_back;