applied needful parts of suggested patch
Vishal Bhatia [Tue, 23 Mar 1999 16:21:43 +0000 (08:21 -0800)]
Message-ID: <OOOKJGFMLFLHBAAA@my-dejanews.com>
Subject: [PATCH 5.005_56] pp_formline correction

p4raw-id: //depot/perl@3168

ext/B/B/Bblock.pm
ext/B/B/CC.pm

index a54431b..cb007ff 100644 (file)
@@ -97,6 +97,12 @@ sub B::CONDOP::mark_if_leader {
     mark_leader($op->false);
 }
 
+sub B::LISTOP::mark_if_leader {
+    my $op = shift;
+    mark_leader($op->first);
+    mark_leader($op->next);
+}
+
 sub B::PMOP::mark_if_leader {
     my $op = shift;
     if ($op->ppaddr ne "pp_pushre") {
index f6f4f0f..2430c51 100644 (file)
@@ -877,7 +877,7 @@ sub pp_sassign {
            } elsif ($type == T_DOUBLE) {
                $dst->set_double("SvNV(sv)");
            } else {
-               runtime("SvSetSV($dst->{sv}, sv);");
+               runtime("SvSetMagicSV($dst->{sv}, sv);");
                $dst->invalidate;
            }
        }
@@ -946,14 +946,13 @@ sub pp_entersub {
 sub pp_formline {
     my $op = shift;
     my $ppname = $op->ppaddr;
-    write_label($op);
     write_back_lexicals() unless $skip_lexicals{$ppname};
     write_back_stack() unless $skip_stack{$ppname};
     my $sym=doop($op);
     # See comment in pp_grepwhile to see why!
     $init->add("((LISTOP*)$sym)->op_first = $sym;");    
-    runtime("if  (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){");
-    runtime( sprintf("goto %s;",label($op)));
+    runtime("if (PL_op == ((LISTOP*)($sym))->op_first){");
+    runtime( sprintf("goto %s;",label($op->first)));
     runtime("}");
     return $op->next;
 }