Make splice invoke set magic
authorFlorian Ragwitz <rafl@debian.org>
Fri, 15 Oct 2010 17:34:52 +0000 (19:34 +0200)
committerFlorian Ragwitz <rafl@debian.org>
Fri, 15 Oct 2010 17:34:52 +0000 (19:34 +0200)
pp.c
t/op/splice.t

index a1558de..b777f39 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -5347,6 +5347,10 @@ PP(pp_splice)
            *MARK = &PL_sv_undef;
        Safefree(tmparyval);
     }
+
+    if (SvMAGICAL(ary))
+       mg_set(MUTABLE_SV(ary));
+
     SP = MARK;
     RETURN;
 }
index 1ffcb49..93718a1 100644 (file)
@@ -1,6 +1,6 @@
 #!./perl
 
-print "1..18\n";
+print "1..20\n";
 
 @a = (1..10);
 
@@ -82,3 +82,13 @@ print "ok 17\n";
 splice( @a, 1, 2, $a[1], $a[1] );
 print "not " unless j(@a) eq j(1,2,2);
 print "ok 18\n";
+
+# splice should invoke get magic
+
+print "not " if Foo->isa('Bar');
+print "ok 19\n";
+
+splice @Foo::ISA, 0, 0, 'Bar';
+
+print "not " if !Foo->isa('Bar');
+print "ok 20\n";