Use @CARP_NOT instead of %Carp::Internal
gfx [Fri, 26 Feb 2010 06:24:07 +0000 (15:24 +0900)]
lib/Mouse/Meta/Attribute.pm
xs-src/MouseUtil.xs

index a66fb32..10a9450 100644 (file)
@@ -44,6 +44,8 @@ my %valid_options = map { $_ => undef } (
   'curries',
 );
 
+our @CARP_NOT = qw(Mouse::Meta::Class);
+
 sub new {
     my $class = shift;
     my $name  = shift;
@@ -76,10 +78,9 @@ sub new {
 
     # (3) bad options found
     if(@bad){
-        @bad = sort @bad;
-        local $Carp::Internal{'Mouse'}              = 1;
-        local $Carp::Internal{'Mouse::Meta::Class'} = 1;
-        Carp::carp("Found unknown argument(s) passed to '$name' attribute constructor in '$class': @bad");
+        Carp::carp(
+            "Found unknown argument(s) passed to '$name' attribute constructor in '$class': "
+            . Mouse::Util::english_list(@bad));
     }
 
     my $self = bless $args, $class;
index 8704d89..d8e3f4c 100644 (file)
@@ -108,8 +108,12 @@ mouse_throw_error(SV* const metaobject, SV* const data /* not used */, const cha
         PUSHs(metaobject);
         mPUSHs(message);
 
-        mPUSHs(newSVpvs("depth"));
-        mPUSHi(-1);
+        if(data){ /* extra arg, might be useful for debugging */
+            mPUSHs(newSVpsv("data"));
+            PUSHs(data);
+            mPUSHs(newSVpvs("depth"));
+            mPUSHi(-1);
+        }
 
         PUTBACK;