This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert "[MERGE] add+use PL_curstackinfo->si_cxsubix field" v5.31.4
authorMax Maischein <corion@corion.net>
Fri, 20 Sep 2019 21:00:04 +0000 (23:00 +0200)
committerMax Maischein <corion@corion.net>
Fri, 20 Sep 2019 21:00:04 +0000 (23:00 +0200)
This reverts commit d2cd363728088adada85312725ac9d96c29659be, reversing
changes made to 068b48acd4bdf9e7c69b87f4ba838bdff035053c.

This change breaks installing Test::Deep:

...
not ok 37 - Test 'isa eq' completed
ok 38 - Test 'isa eq' no premature diagnostication
...

19 files changed:
cop.h
embed.fnc
embed.h
ext/B/t/optree_concise.t
ext/B/t/optree_constants.t
ext/B/t/optree_misc.t
ext/B/t/optree_samples.t
ext/B/t/optree_sort.t
ext/B/t/optree_varinit.t
ext/Devel-Peek/t/Peek.t
inline.h
op.c
op.h
pod/perldelta.pod
pp_ctl.c
proto.h
scope.c
sv.c
t/perf/benchmarks

diff --git a/cop.h b/cop.h
index f9bf852..00396f0 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -585,7 +585,6 @@ C<*len>.  Upon return, C<*flags> will be set to either C<SVf_UTF8> or 0.
 /* subroutine context */
 struct block_sub {
     OP *       retop;  /* op to execute on exit from sub */
-    I32         old_cxsubix;  /* previous value of si_cxsubix */
     /* Above here is the same for sub, format and eval.  */
     PAD                *prevcomppad; /* the caller's PL_comppad */
     CV *       cv;
@@ -598,7 +597,6 @@ struct block_sub {
 /* format context */
 struct block_format {
     OP *       retop;  /* op to execute on exit from sub */
-    I32         old_cxsubix;  /* previous value of si_cxsubix */
     /* Above here is the same for sub, format and eval.  */
     PAD                *prevcomppad; /* the caller's PL_comppad */
     CV *       cv;
@@ -665,7 +663,6 @@ struct block_format {
 /* eval context */
 struct block_eval {
     OP *       retop;  /* op to execute on exit from eval */
-    I32         old_cxsubix;  /* previous value of si_cxsubix */
     /* Above here is the same for sub, format and eval.  */
     SV *       old_namesv;
     OP *       old_eval_root;
@@ -1029,7 +1026,6 @@ struct stackinfo {
     struct stackinfo * si_next;
     I32                        si_cxix;        /* current context index */
     I32                        si_cxmax;       /* maximum allocated index */
-    I32                        si_cxsubix;     /* topmost sub/eval/format */
     I32                        si_type;        /* type of runlevel */
     I32                        si_markoff;     /* offset where markstack begins for us.
                                         * currently used only with DEBUGGING,
@@ -1076,7 +1072,6 @@ typedef struct stackinfo PERL_SI;
        }                                                               \
        next->si_type = type;                                           \
        next->si_cxix = -1;                                             \
-       next->si_cxsubix = -1;                                          \
         PUSHSTACK_INIT_HWM(next);                                       \
        AvFILLp(next->si_stack) = 0;                                    \
        SWITCHSTACK(PL_curstack,next->si_stack);                        \
index 8c346c5..a3e5fb2 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -3517,7 +3517,6 @@ Apx       |void   |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
                 |U8 gimme|int filter
 
 #ifndef PERL_NO_INLINE_FUNCTIONS
-Aixp   |U8     |gimme_V         |
 Aixp   |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
 Aixp   |void   |cx_popblock|NN PERL_CONTEXT *cx
 Aixp   |void   |cx_topblock|NN PERL_CONTEXT *cx
diff --git a/embed.h b/embed.h
index 53dd870..f1c3f57 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define cx_pushsub(a,b,c,d)    Perl_cx_pushsub(aTHX_ a,b,c,d)
 #define cx_pushwhen(a)         Perl_cx_pushwhen(aTHX_ a)
 #define cx_topblock(a)         Perl_cx_topblock(aTHX_ a)
-#define gimme_V()              Perl_gimme_V(aTHX)
 #endif
 #if defined(DEBUGGING)
 #define pad_setsv(a,b)         Perl_pad_setsv(aTHX_ a,b)
index 86280ac..1e25947 100644 (file)
@@ -217,7 +217,7 @@ checkOptree ( name => 'cmdline invoke -basic works',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 # 7  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 6     <@> sort vK ->7
 # 3        <0> pushmark s ->4
@@ -225,7 +225,7 @@ checkOptree ( name => 'cmdline invoke -basic works',
 # 4           <#> gv[*a] s ->5
 EOT_EOT
 # 7  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 6     <@> sort vK ->7
 # 3        <0> pushmark s ->4
@@ -241,7 +241,7 @@ checkOptree ( name => 'cmdline invoke -exec works',
              bcopts => '-exec',
              strip_open_hints => 1,
              expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> pushmark s
 4  <#> gv[*a] s
@@ -249,7 +249,7 @@ checkOptree ( name => 'cmdline invoke -exec works',
 6  <@> sort vK
 7  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <$> gv(*a) s
@@ -290,7 +290,7 @@ checkOptree
       errs     => ['Useless use of sort in void context at -e line 1.'],
       strip_open_hints => 1,
       expect   => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 2 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <#> gv[*a] s
@@ -298,7 +298,7 @@ checkOptree
 # 6  <@> sort vK
 # 7  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 2 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <$> gv(*a) s
index 43afacc..a807316 100644 (file)
@@ -152,14 +152,14 @@ checkOptree ( name        => 'myyes() as coderef',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
 # 4        <$> const[SPECIAL sv_yes] s*/FOLD ->5
 EOT_EOT
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
@@ -176,14 +176,14 @@ checkOptree ( name        => 'myno() as coderef',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
 # 4        <$> const[SPECIAL sv_no] s*/FOLD ->5
 EOT_EOT
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
index 490abb3..f8ff3ce 100644 (file)
@@ -89,7 +89,7 @@ EONT_EONT
 
 my $t = <<'EOT_EOT';
 # 8  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 7     <2> sassign vKS/2 ->8
 # 5        <@> index[t2] sK/2 ->6
@@ -101,7 +101,7 @@ my $t = <<'EOT_EOT';
 EOT_EOT
 my $nt = <<'EONT_EONT';
 # 8  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 7     <2> sassign vKS/2 ->8
 # 5        <@> index[t1] sK/2 ->6
index 0a498a9..15b5799 100644 (file)
@@ -331,7 +331,7 @@ checkOptree ( name  => '-exec -e foreach (1..10) {print qq{foo $_}}',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 2 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <$> const[IV 1] s
@@ -350,7 +350,7 @@ checkOptree ( name  => '-exec -e foreach (1..10) {print qq{foo $_}}',
 # g  <2> leaveloop vK/2
 # h  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 2 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <$> const(IV 1) s
@@ -602,14 +602,14 @@ checkOptree ( name        => '-e use constant j => qq{junk}; print j',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 71 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <$> const[PV "junk"] s*/FOLD
 # 5  <@> print vK
 # 6  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 71 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <$> const(PV "junk") s*/FOLD
index 2c661f6..0b5897d 100644 (file)
@@ -46,7 +46,7 @@ checkOptree ( name => 'sort @a',
              bcopts => '-exec',
              strip_open_hints => 1,
              expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> pushmark s
 4  <#> gv[*a] s
@@ -54,7 +54,7 @@ checkOptree ( name => 'sort @a',
 6  <@> sort vK
 7  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <$> gv(*a) s
@@ -98,7 +98,7 @@ checkOptree ( name    => '@a = sort @a',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> pushmark s
 4  <0> pushmark s
@@ -107,7 +107,7 @@ checkOptree ( name  => '@a = sort @a',
 7  <@> sort lK/INPLACE
 8  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <0> pushmark s
@@ -155,7 +155,7 @@ checkOptree ( name  => '@a = sort @a; reverse @a',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> pushmark s
 4  <0> pushmark s
@@ -169,7 +169,7 @@ b  <1> rv2av[t7] lK/1
 c  <@> reverse[t8] vK/1
 d  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <0> pushmark s
@@ -219,7 +219,7 @@ checkOptree ( name  => 'my @a; @a = sort @a',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> padav[@a:1,2] vM/LVINTRO
 4  <;> nextstate(main 2 -e:1) v:>,<,%,{
@@ -229,7 +229,7 @@ checkOptree ( name  => 'my @a; @a = sort @a',
 8  <@> sort lK/INPLACE
 9  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> padav[@a:1,2] vM/LVINTRO
 # 4  <;> nextstate(main 2 -e:1) v:>,<,%,{
index 8312df0..5938048 100644 (file)
@@ -80,12 +80,12 @@ checkOptree ( name  => 'my $a',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 # 4  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 3     <0> padsv[$a:1,2] vM/LVINTRO ->4
 EOT_EOT
 # 4  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 3     <0> padsv[$a:1,2] vM/LVINTRO ->4
 EONT_EONT
@@ -96,13 +96,13 @@ checkOptree ( name  => 'our $a',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 3  <@> leave[1 ref] vKP/REFC ->(end)
-1     <0> enter ->2
+1     <0> enter ->2
 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 -     <1> rv2sv vK/OURINTR,1 ->3
 -        <#> gv[*a] s ->-
 EOT_EOT
 # 3  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # -     <1> rv2sv vK/OURINTR,1 ->3
 # -        <$> gv(*a) s ->-
@@ -115,13 +115,13 @@ checkOptree ( name        => 'local $c',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 4  <@> leave[1 ref] vKP/REFC ->(end)
-1     <0> enter ->2
+1     <0> enter ->2
 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 -     <1> ex-rv2sv vKM/LVINTRO,1 ->4
 3        <#> gvsv[*c] s/LVINTRO ->4
 EOT_EOT
 # 4  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # -     <1> ex-rv2sv vKM/LVINTRO,1 ->4
 # 3        <$> gvsv(*c) s/LVINTRO ->4
@@ -201,14 +201,14 @@ checkOptree ( name        => 'my $a=undef',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 6  <@> leave[1 ref] vKP/REFC ->(end)
-1     <0> enter ->2
+1     <0> enter ->2
 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 5     <2> sassign vKS/2 ->6
 3        <0> undef s ->4
 4        <0> padsv[$a:1,2] sRM*/LVINTRO ->5
 EOT_EOT
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 5     <2> sassign vKS/2 ->6
 # 3        <0> undef s ->4
@@ -222,7 +222,7 @@ checkOptree ( name  => 'our $a=undef',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 6  <@> leave[1 ref] vKP/REFC ->(end)
-1     <0> enter ->2
+1     <0> enter ->2
 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 5     <2> sassign vKS/2 ->6
 3        <0> undef s ->4
@@ -230,7 +230,7 @@ checkOptree ( name  => 'our $a=undef',
 4           <#> gvsv[*a] s/OURINTR ->5
 EOT_EOT
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 5     <2> sassign vKS/2 ->6
 # 3        <0> undef s ->4
@@ -246,7 +246,7 @@ checkOptree ( name  => 'local $c=undef',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 6  <@> leave[1 ref] vKP/REFC ->(end)
-1     <0> enter ->2
+1     <0> enter ->2
 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 5     <2> sassign vKS/2 ->6
 3        <0> undef s ->4
@@ -254,7 +254,7 @@ checkOptree ( name  => 'local $c=undef',
 4           <#> gvsv[*c] s/LVINTRO ->5
 EOT_EOT
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
 # 5     <2> sassign vKS/2 ->6
 # 3        <0> undef s ->4
@@ -323,14 +323,14 @@ checkOptree ( name        => 'my $a=()',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> stub sP
 4  <0> padsv[$a:1,2] sRM*/LVINTRO
 5  <2> sassign vKS/2
 6  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> stub sP
 # 4  <0> padsv[$a:1,2] sRM*/LVINTRO
@@ -344,14 +344,14 @@ checkOptree ( name        => 'our $a=()',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> stub sP
 4  <#> gvsv[*a] s/OURINTR
 5  <2> sassign vKS/2
 6  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> stub sP
 # 4  <$> gvsv(*a) s/OURINTR
@@ -366,14 +366,14 @@ checkOptree ( name        => 'local $c=()',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1  <0> enter v
+1  <0> enter 
 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 3  <0> stub sP
 4  <#> gvsv[*c] s/LVINTRO
 5  <2> sassign vKS/2
 6  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> stub sP
 # 4  <$> gvsv(*c) s/LVINTRO
@@ -387,14 +387,14 @@ checkOptree ( name        => 'my ($a,$b)=()',
              bcopts    => '-exec',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,range=2
 # 5  <2> aassign[t3] vKS
 # 6  <@> leave[1 ref] vKP/REFC
 EOT_EOT
-# 1  <0> enter v
+# 1  <0> enter 
 # 2  <;> nextstate(main 1 -e:1) v:>,<,%,{
 # 3  <0> pushmark s
 # 4  <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,range=2
index fbcda76..f3f781a 100644 (file)
@@ -1465,7 +1465,7 @@ dumpindent is 4 at -e line 1.
      REFCNT = 1
      |   
 2    +--enter OP(0xNNN) ===> 3 [nextstate 0xNNN]
-     |   FLAGS = (VOID,SLABBED,MORESIB)
+     |   FLAGS = (UNKNOWN,SLABBED,MORESIB)
      |   
 3    +--nextstate COP(0xNNN) ===> 4 [pushmark 0xNNN]
      |   FLAGS = (VOID,SLABBED,MORESIB)
index f52d4e5..aa4e7b8 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -2056,23 +2056,6 @@ Perl_sv_only_taint_gmagic(SV *sv)
 
 /* ------------------ cop.h ------------------------------------------- */
 
-/* implement GIMME_V() macro */
-
-PERL_STATIC_INLINE U8
-Perl_gimme_V(pTHX)
-{
-    I32 cxix;
-    U8  gimme = (PL_op->op_flags & OPf_WANT);
-
-    if (gimme)
-        return gimme;
-    cxix = PL_curstackinfo->si_cxsubix;
-    if (cxix < 0)
-        return G_VOID;
-    assert(cxstack[cxix].blk_gimme & G_WANT);
-    return (cxstack[cxix].blk_gimme & G_WANT);
-}
-
 
 /* Enter a block. Push a new base context and return its address. */
 
@@ -2151,8 +2134,6 @@ Perl_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, bool hasargs)
     PERL_ARGS_ASSERT_CX_PUSHSUB;
 
     PERL_DTRACE_PROBE_ENTRY(cv);
-    cx->blk_sub.old_cxsubix     = PL_curstackinfo->si_cxsubix;
-    PL_curstackinfo->si_cxsubix = cx - PL_curstackinfo->si_cxstack;
     cx->blk_sub.cv = cv;
     cx->blk_sub.olddepth = CvDEPTH(cv);
     cx->blk_sub.prevcomppad = PL_comppad;
@@ -2179,7 +2160,6 @@ Perl_cx_popsub_common(pTHX_ PERL_CONTEXT *cx)
     CvDEPTH(cv) = cx->blk_sub.olddepth;
     cx->blk_sub.cv = NULL;
     SvREFCNT_dec(cv);
-    PL_curstackinfo->si_cxsubix = cx->blk_sub.old_cxsubix;
 }
 
 
@@ -2226,8 +2206,6 @@ Perl_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv)
 {
     PERL_ARGS_ASSERT_CX_PUSHFORMAT;
 
-    cx->blk_format.old_cxsubix = PL_curstackinfo->si_cxsubix;
-    PL_curstackinfo->si_cxsubix= cx - PL_curstackinfo->si_cxstack;
     cx->blk_format.cv          = cv;
     cx->blk_format.retop       = retop;
     cx->blk_format.gv          = gv;
@@ -2261,7 +2239,6 @@ Perl_cx_popformat(pTHX_ PERL_CONTEXT *cx)
     cx->blk_format.cv = NULL;
     --CvDEPTH(cv);
     SvREFCNT_dec_NN(cv);
-    PL_curstackinfo->si_cxsubix = cx->blk_format.old_cxsubix;
 }
 
 
@@ -2270,8 +2247,6 @@ Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
 {
     PERL_ARGS_ASSERT_CX_PUSHEVAL;
 
-    cx->blk_eval.old_cxsubix   = PL_curstackinfo->si_cxsubix;
-    PL_curstackinfo->si_cxsubix= cx - PL_curstackinfo->si_cxstack;
     cx->blk_eval.retop         = retop;
     cx->blk_eval.old_namesv    = namesv;
     cx->blk_eval.old_eval_root = PL_eval_root;
@@ -2307,7 +2282,6 @@ Perl_cx_popeval(pTHX_ PERL_CONTEXT *cx)
         cx->blk_eval.old_namesv = NULL;
         SvREFCNT_dec_NN(sv);
     }
-    PL_curstackinfo->si_cxsubix = cx->blk_eval.old_cxsubix;
 }
 
 
diff --git a/op.c b/op.c
index 29486a5..944c57a 100644 (file)
--- a/op.c
+++ b/op.c
@@ -5455,8 +5455,7 @@ Perl_op_scope(pTHX_ OP *o)
     dVAR;
     if (o) {
        if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
-           o = op_prepend_elem(OP_LINESEQ,
-                    newOP(OP_ENTER, (o->op_flags & OPf_WANT)), o);
+           o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
             OpTYPE_set(o, OP_LEAVE);
        }
        else if (o->op_type == OP_LINESEQ) {
diff --git a/op.h b/op.h
index 89440a2..c494386 100644 (file)
--- a/op.h
+++ b/op.h
@@ -85,7 +85,7 @@ Deprecated.  Use C<GIMME_V> instead.
 =cut
 */
 
-#define GIMME_V                Perl_gimme_V(aTHX)
+#define GIMME_V                OP_GIMME(PL_op, block_gimme())
 
 /* Public flags */
 
index 0594af9..0b04894 100644 (file)
@@ -163,11 +163,7 @@ decode it as UTF-8.  [perl #133981]
 
 =item *
 
-Added the C<<PL_curstackinfo->si_cxsubix>> field. This records the stack
-index of the most recently pushed sub/format/eval context.  It is set and
-restored automatically by C<cx_pushsub()>, C<cx_popsub()> etc., but would
-need to be manually managed if you do any unusual manipulation of the
-context stack.
+XXX
 
 =back
 
index af95a9e..064bdc0 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
 #define RUN_PP_CATCHABLY(thispp) \
     STMT_START { if (CATCH_GET) return docatch(thispp); } STMT_END
 
-#define dopopto_cursub() \
-    (PL_curstackinfo->si_cxsubix >= 0        \
-        ? PL_curstackinfo->si_cxsubix        \
-        : dopoptosub_at(cxstack, cxstack_ix))
-
 #define dopoptosub(plop)       dopoptosub_at(cxstack, (plop))
 
 PP(pp_wantarray)
@@ -55,7 +50,7 @@ PP(pp_wantarray)
        if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
     }
     else {
-      cxix = dopopto_cursub();
+      cxix = dopoptosub(cxstack_ix);
       if (cxix < 0)
        RETPUSHUNDEF;
       cx = &cxstack[cxix];
@@ -1389,12 +1384,10 @@ Perl_dowantarray(pTHX)
     return (gimme == G_VOID) ? G_SCALAR : gimme;
 }
 
-/* note that this function has mostly been superseded by Perl_gimme_V */
-
 U8
 Perl_block_gimme(pTHX)
 {
-    const I32 cxix = dopopto_cursub();
+    const I32 cxix = dopoptosub(cxstack_ix);
     U8 gimme;
     if (cxix < 0)
        return G_VOID;
@@ -1409,7 +1402,7 @@ Perl_block_gimme(pTHX)
 I32
 Perl_is_lvalue_sub(pTHX)
 {
-    const I32 cxix = dopopto_cursub();
+    const I32 cxix = dopoptosub(cxstack_ix);
     assert(cxix >= 0);  /* We should only be called from inside subs */
 
     if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
@@ -1867,7 +1860,7 @@ frame for the sub call itself.
 const PERL_CONTEXT *
 Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
 {
-    I32 cxix = dopopto_cursub();
+    I32 cxix = dopoptosub(cxstack_ix);
     const PERL_CONTEXT *cx;
     const PERL_CONTEXT *ccstack = cxstack;
     const PERL_SI *top_si = PL_curstackinfo;
@@ -2469,7 +2462,7 @@ PP(pp_return)
 {
     dSP; dMARK;
     PERL_CONTEXT *cx;
-    const I32 cxix = dopopto_cursub();
+    const I32 cxix = dopoptosub(cxstack_ix);
 
     assert(cxstack_ix >= 0);
     if (cxix < cxstack_ix) {
@@ -2840,7 +2833,7 @@ PP(pp_goto)
                DIE(aTHX_ "Goto undefined subroutine");
            }
 
-           cxix = dopopto_cursub();
+           cxix = dopoptosub(cxstack_ix);
             if (cxix < 0) {
                 DIE(aTHX_ "Can't goto subroutine outside a subroutine");
             }
diff --git a/proto.h b/proto.h
index f351644..fe9b9a0 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -4868,10 +4868,6 @@ PERL_STATIC_INLINE void  Perl_cx_topblock(pTHX_ PERL_CONTEXT *cx);
 #define PERL_ARGS_ASSERT_CX_TOPBLOCK   \
        assert(cx)
 #endif
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE U8  Perl_gimme_V(pTHX);
-#define PERL_ARGS_ASSERT_GIMME_V
-#endif
 #endif
 #if !defined(PERL_NO_UTF16_FILTER)
 #  if defined(PERL_IN_TOKE_C)
diff --git a/scope.c b/scope.c
index c661644..9b1393c 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -82,7 +82,6 @@ Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems)
     si->si_next = 0;
     si->si_cxmax = cxitems - 1;
     si->si_cxix = -1;
-    si->si_cxsubix = -1;
     si->si_type = PERLSI_UNDEF;
     Newx(si->si_cxstack, cxitems, PERL_CONTEXT);
     /* Without any kind of initialising CX_PUSHSUBST()
diff --git a/sv.c b/sv.c
index 0b878a4..e088e5c 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -14690,7 +14690,6 @@ Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
 
     nsi->si_stack      = av_dup_inc(si->si_stack, param);
     nsi->si_cxix       = si->si_cxix;
-    nsi->si_cxsubix    = si->si_cxsubix;
     nsi->si_cxmax      = si->si_cxmax;
     nsi->si_cxstack    = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
     nsi->si_type       = si->si_type;
index 63eb62c..7795079 100644 (file)
         code    => '$x = f(1)',
     },
 
-    'call::sub::scalar' => {
-        desc    => 'sub called in scalar context',
-        setup   => 'my $x; my @a = 1..4; sub f { @a }',
-        code    => '$x = f()',
-    },
-
     'call::goto::empty' => {
         desc    => 'goto &funtion with no args or body',
         setup   => 'sub f { goto &g } sub g {}',