integrate change#3180 from mainline
authorGurusamy Sarathy <gsar@cpan.org>
Sun, 28 Mar 1999 08:43:47 +0000 (08:43 +0000)
committerGurusamy Sarathy <gsar@cpan.org>
Sun, 28 Mar 1999 08:43:47 +0000 (08:43 +0000)
fix bogus OPf_REF context for the BLOCK in C<grep BLOCK @foo>
(sometimes caused bizarreness in the BLOCK)

p4raw-link: @3180 on //depot/perl: fd3835b3e90ede5576a7ad392beef86bf933ce15

p4raw-id: //depot/maint-5.005/perl@3191
p4raw-branched: from //depot/perl@3190 'branch in' t/op/grep.t
p4raw-integrated: from //depot/perl@3190 'merge in' op.c (@3124..)
MANIFEST (@3149..)

MANIFEST
op.c
t/op/grep.t [new file with mode: 0755]

index fbd7c05..f42a832 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -929,6 +929,7 @@ t/op/fork.t         See if fork works
 t/op/glob.t            See if <*> works
 t/op/goto.t            See if goto works
 t/op/goto_xs.t         See if "goto &sub" works on XSUBs
+t/op/grep.t            See if grep() and map() work
 t/op/groups.t          See if $( works
 t/op/gv.t              See if typeglobs work
 t/op/hashwarn.t                See if warnings for bad hash assignments work
diff --git a/op.c b/op.c
index f360add..bf944a6 100644 (file)
--- a/op.c
+++ b/op.c
@@ -4015,7 +4015,7 @@ newAVREF(OP *o)
 OP *
 newGVREF(I32 type, OP *o)
 {
-    if (type == OP_MAPSTART)
+    if (type == OP_MAPSTART || type == OP_GREPSTART)
        return newUNOP(OP_NULL, 0, o);
     return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
 }
diff --git a/t/op/grep.t b/t/op/grep.t
new file mode 100755 (executable)
index 0000000..45d0e25
--- /dev/null
@@ -0,0 +1,31 @@
+#!./perl
+
+#
+# grep() and map() tests
+#
+
+print "1..3\n";
+
+$test = 1;
+
+sub ok {
+    my ($got,$expect) = @_;
+    print "# expected [$expect], got [$got]\nnot " if $got ne $expect;
+    print "ok $test\n";
+}
+
+{
+   my @lol = ([qw(a b c)], [], [qw(1 2 3)]);
+   my @mapped = map  {scalar @$_} @lol;
+   ok "@mapped", "3 0 3";
+   $test++;
+
+   my @grepped = grep {scalar @$_} @lol;
+   ok "@grepped", "$lol[0] $lol[2]";
+   $test++;
+
+   @grepped = grep { $_ } @mapped;
+   ok "@grepped", "3 3";
+   $test++;
+}
+