]> git.vpit.fr Git - perl/modules/indirect.git/commitdiff
Fix "meth meth" not being correctly reported
authorVincent Pit <vince@profvince.com>
Wed, 8 Jul 2009 14:07:24 +0000 (16:07 +0200)
committerVincent Pit <vince@profvince.com>
Wed, 8 Jul 2009 14:07:24 +0000 (16:07 +0200)
indirect.xs
t/20-good.t
t/21-bad.t

index 01b4a77ab3494923b1b1297b39a662f9c3029744..12e83d5c92ad1fe3b3c7265655371165cb69491d 100644 (file)
@@ -604,6 +604,16 @@ done:
 
 /* ... ck_entersub ......................................................... */
 
+STATIC int indirect_is_indirect(const indirect_op_info_t *moi, const indirect_op_info_t *ooi) {
+ if (moi->pos > ooi->pos)
+  return 0;
+
+ if (moi->pos == ooi->pos)
+  return moi->len == ooi->len && !memcmp(moi->buf, ooi->buf, moi->len);
+
+ return 1;
+}
+
 STATIC OP *(*indirect_old_ck_entersub)(pTHX_ OP *) = 0;
 
 STATIC OP *indirect_ck_entersub(pTHX_ OP *o) {
@@ -651,7 +661,7 @@ STATIC OP *indirect_ck_entersub(pTHX_ OP *o) {
   if (!(ooi && ooi->pos))
    goto done;
 
-  if (moi->pos < ooi->pos) {
+  if (indirect_is_indirect(moi, ooi)) {
    SV *file;
    dSP;
 
index d428d1fdf600d79f0ea08d7d9c12f93ab5fe33d5..88d80603cbae021567a929cbc75fb85206526595 100644 (file)
@@ -9,7 +9,7 @@ package main;
 use strict;
 use warnings;
 
-use Test::More tests => 52 * 4;
+use Test::More tests => 56 * 4;
 
 my ($obj, $pkg, $cb, $x, @a);
 our $y;
@@ -86,6 +86,14 @@ $obj = Hlagh   ->
   ,    bar     
                =>        $obj       );
 ####
+$obj = new->new;
+####
+$obj = new->new; # new new
+####
+$obj = new->newnew;
+####
+$obj = newnew->new;
+####
 $obj = Hlagh->$cb;
 ####
 $obj = Hlagh->$cb();
index 3b9985f21729d0c0cf766d70a3b91f68cdb26020..1d2fab9342529662108d811d04f89aab7b1f52d7 100644 (file)
@@ -9,7 +9,7 @@ package main;
 use strict;
 use warnings;
 
-use Test::More tests => 50 * 6 + 2;
+use Test::More tests => 52 * 6 + 2;
 
 my ($obj, $x);
 our ($y, $bloop);
@@ -17,9 +17,9 @@ our ($y, $bloop);
 sub expect {
  my ($pkg) = @_;
  qr/^warn:Indirect\s+call\s+of\s+method\s+
-     "(?:new|meh|$pkg$pkg)"
+     "(?:new|meh|feh|$pkg$pkg)"
      \s+on\s+object\s+
-     "(?:$pkg|newnew|\$(?:[xyz_\$]|(?:sploosh::)?sploosh|(?:main::)?bloop))"
+     "(?:$pkg|newnew|feh|\$(?:[xyz_\$]|(?:sploosh::)?sploosh|(?:main::)?bloop))"
      \s+at\s+\(eval\s+\d+\)\s+line\s+\d+
    /x
 }
@@ -196,6 +196,10 @@ $obj = new newnew;
 ####
 $obj = new newnew; # new newnew
 ####
+$obj = feh feh;
+####
+$obj = feh feh; # feh feh
+####
 new Hlagh (meh $x)
 ####
 Hlagh->new(meh $x)