r54927 - in /trunk/libmouse-perl: ./ caveats/ debian/ example/ lib/ lib/Mouse/ lib/Mouse/Meta/ lib/Mouse/Meta/Method/ lib/Mouse/Meta/Role/ lib/Mouse/Util/ t/800_with_external/ t/900_bug/ xs-src/

gregoa at users.alioth.debian.org gregoa at users.alioth.debian.org
Sun Mar 28 17:55:39 UTC 2010


Author: gregoa
Date: Sun Mar 28 17:55:30 2010
New Revision: 54927

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=54927
Log:
* New upstream release 0.51
* New upstream release 0.52.

Added:
    trunk/libmouse-perl/example/traits.pl
      - copied unchanged from r54926, branches/upstream/libmouse-perl/current/example/traits.pl
    trunk/libmouse-perl/t/900_bug/006_RT69939t
      - copied unchanged from r54926, branches/upstream/libmouse-perl/current/t/900_bug/006_RT69939t
Removed:
    trunk/libmouse-perl/caveats/
Modified:
    trunk/libmouse-perl/Changes
    trunk/libmouse-perl/MANIFEST
    trunk/libmouse-perl/META.yml
    trunk/libmouse-perl/Makefile.PL
    trunk/libmouse-perl/debian/changelog
    trunk/libmouse-perl/lib/Mouse.pm
    trunk/libmouse-perl/lib/Mouse/Exporter.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Attribute.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Class.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Method.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Method/Accessor.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Method/Constructor.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Method/Delegation.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Method/Destructor.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Module.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Role.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Role/Composite.pm
    trunk/libmouse-perl/lib/Mouse/Meta/Role/Method.pm
    trunk/libmouse-perl/lib/Mouse/Meta/TypeConstraint.pm
    trunk/libmouse-perl/lib/Mouse/Object.pm
    trunk/libmouse-perl/lib/Mouse/PurePerl.pm
    trunk/libmouse-perl/lib/Mouse/Role.pm
    trunk/libmouse-perl/lib/Mouse/Spec.pm
    trunk/libmouse-perl/lib/Mouse/Tiny.pod
    trunk/libmouse-perl/lib/Mouse/Util.pm
    trunk/libmouse-perl/lib/Mouse/Util/TypeConstraints.pm
    trunk/libmouse-perl/lib/Mouse/XS.pod
    trunk/libmouse-perl/mouse.h
    trunk/libmouse-perl/t/800_with_external/002-externals.t
    trunk/libmouse-perl/xs-src/Mouse.xs
    trunk/libmouse-perl/xs-src/MouseAccessor.xs
    trunk/libmouse-perl/xs-src/MouseTypeConstraints.xs
    trunk/libmouse-perl/xs-src/MouseUtil.xs

Modified: trunk/libmouse-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/Changes?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/Changes (original)
+++ trunk/libmouse-perl/Changes Sun Mar 28 17:55:30 2010
@@ -1,4 +1,9 @@
 Revision history for Mouse
+
+0.52 Sat Mar 27 15:38:52 2010
+    * Workaround Perl-RT#69939 (eval "use $module" in Perl_call_sv()
+     may cause segmentation faults,
+     http://rt.perl.org/rt3/Public/Bug/Display.html?id=69939)
 
 0.51 Mon Mar 15 15:25:58 2010
     SUMMARY

Modified: trunk/libmouse-perl/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/MANIFEST?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/MANIFEST (original)
+++ trunk/libmouse-perl/MANIFEST Sun Mar 28 17:55:30 2010
@@ -10,9 +10,9 @@
 benchmarks/type_constraints.pl
 benchmarks/vs_caf.pl
 benchmarks/vs_caf_w_destructors.pl
-caveats/RT69939.t
 Changes
 example/point.pl
+example/traits.pl
 example/warns.pl
 inc/Module/Install.pm
 inc/Module/Install/AuthorTests.pm
@@ -286,6 +286,7 @@
 t/900_bug/003_RT50421.t
 t/900_bug/004_RT54203.t
 t/900_bug/005_large_int.t
+t/900_bug/006_RT69939t
 t/990_deprecated/001-export_to_level.t
 t/990_deprecated/044-attribute-metaclass.t
 t/990_deprecated/047-attribute-metaclass-role.t

Modified: trunk/libmouse-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/META.yml?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/META.yml (original)
+++ trunk/libmouse-perl/META.yml Sun Mar 28 17:55:30 2010
@@ -8,6 +8,7 @@
   ExtUtils::ParseXS: 2.21
   Test::Exception: 0.29
   Test::More: 0.88
+  Test::Requires: 0.03
 configure_requires:
   Devel::PPPort: 3.19
   ExtUtils::MakeMaker: 6.42
@@ -31,4 +32,4 @@
 resources:
   license: http://dev.perl.org/licenses/
   repository: git://git.moose.perl.org/Mouse.git
-version: 0.51
+version: 0.52

Modified: trunk/libmouse-perl/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/Makefile.PL?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/Makefile.PL (original)
+++ trunk/libmouse-perl/Makefile.PL Sun Mar 28 17:55:30 2010
@@ -26,6 +26,7 @@
 
 test_requires 'Test::More'      => 0.88;
 test_requires 'Test::Exception' => 0.29;
+test_requires 'Test::Requires'  => 0.03;
 # test_requires 'Test::Output'    => 0.16; # too many dependencies!
 
 if($] < 5.010) {

Modified: trunk/libmouse-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/debian/changelog?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/debian/changelog (original)
+++ trunk/libmouse-perl/debian/changelog Sun Mar 28 17:55:30 2010
@@ -1,8 +1,12 @@
-libmouse-perl (0.51-1) UNRELEASED; urgency=low
-
-  * New upstream release
-
- -- Jonathan Yu <jawnsy at cpan.org>  Wed, 17 Mar 2010 17:38:48 -0400
+libmouse-perl (0.52-1) UNRELEASED; urgency=low
+
+  [ Jonathan Yu ]
+  * New upstream release 0.51
+
+  [ gregor herrmann ]
+  * New upstream release 0.52.
+
+ -- gregor herrmann <gregoa at debian.org>  Sun, 28 Mar 2010 19:54:24 +0200
 
 libmouse-perl (0.50-1) unstable; urgency=low
 

Modified: trunk/libmouse-perl/lib/Mouse.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse.pm (original)
+++ trunk/libmouse-perl/lib/Mouse.pm Sun Mar 28 17:55:30 2010
@@ -3,7 +3,7 @@
 
 use Mouse::Exporter; # enables strict and warnings
 
-our $VERSION = '0.51';
+our $VERSION = '0.52';
 
 use Carp         qw(confess);
 use Scalar::Util qw(blessed);
@@ -160,7 +160,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SYNOPSIS
 
@@ -400,22 +400,6 @@
 Please unimport Mouse (C<no Mouse>) so that if someone calls one of the
 keywords (such as L</extends>) it will break loudly instead breaking subtly.
 
-=head1 CAVEATS
-
-If you use Mouse::XS you might see a fatal error on callbacks
-which include C<eval 'BEGIN{ die }'>, which typically occurs in such code
-as C<eval 'use NotInstalledModule'>. This is not
-a bug in Mouse. In fact, it is a bug in Perl (RT #69939).
-
-To work around this problem, surround C<eval STRING> with C<eval BLOCK>:
-
-    sub callback {
-        # eval 'use NotInstalledModule';       # NG
-        eval{ eval 'use NotInstalledModule' }; # OK
-    }
-
-It seems ridiculous, but it works as you expected.
-
 =head1 SOURCE CODE ACCESS
 
 We have a public git repository:

Modified: trunk/libmouse-perl/lib/Mouse/Exporter.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Exporter.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Exporter.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Exporter.pm Sun Mar 28 17:55:30 2010
@@ -272,7 +272,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SYNOPSIS
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Attribute.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Attribute.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Attribute.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Attribute.pm Sun Mar 28 17:55:30 2010
@@ -401,7 +401,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 METHODS
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Class.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Class.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Class.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Class.pm Sun Mar 28 17:55:30 2010
@@ -486,7 +486,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 METHODS
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Method.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Method.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Method.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Method.pm Sun Mar 28 17:55:30 2010
@@ -54,7 +54,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Method/Accessor.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Method/Accessor.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Method/Accessor.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Method/Accessor.pm Sun Mar 28 17:55:30 2010
@@ -182,7 +182,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Method/Constructor.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Method/Constructor.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Method/Constructor.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Method/Constructor.pm Sun Mar 28 17:55:30 2010
@@ -235,7 +235,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Method/Delegation.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Method/Delegation.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Method/Delegation.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Method/Delegation.pm Sun Mar 28 17:55:30 2010
@@ -61,7 +61,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Method/Destructor.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Method/Destructor.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Method/Destructor.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Method/Destructor.pm Sun Mar 28 17:55:30 2010
@@ -55,7 +55,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Module.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Module.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Module.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Module.pm Sun Mar 28 17:55:30 2010
@@ -323,7 +323,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Role.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Role.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Role.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Role.pm Sun Mar 28 17:55:30 2010
@@ -312,7 +312,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Role/Composite.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Role/Composite.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Role/Composite.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Role/Composite.pm Sun Mar 28 17:55:30 2010
@@ -125,7 +125,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/Role/Method.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/Role/Method.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/Role/Method.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/Role/Method.pm Sun Mar 28 17:55:30 2010
@@ -23,7 +23,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Meta/TypeConstraint.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Meta/TypeConstraint.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Meta/TypeConstraint.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Meta/TypeConstraint.pm Sun Mar 28 17:55:30 2010
@@ -13,8 +13,6 @@
 
     fallback => 1;
 
-use Carp         ();
-
 sub new {
     my($class, %args) = @_;
 
@@ -30,7 +28,7 @@
     $check = $args{constraint};
 
     if(defined($check) && ref($check) ne 'CODE'){
-        Carp::confess("Constraint for $args{name} is not a CODE reference");
+        $class->throw_error("Constraint for $args{name} is not a CODE reference");
     }
 
     my $self = bless \%args, $class;
@@ -63,6 +61,8 @@
 sub message;
 sub has_coercion;
 
+sub check;
+
 sub type_parameter;
 sub __is_parameterized;
 
@@ -70,6 +70,7 @@
 sub _compiled_type_coercion;
 
 sub compile_type_constraint;
+
 
 sub _add_type_coercions{
     my $self = shift;
@@ -82,18 +83,18 @@
         my $action = $_[++$i];
 
         if(exists $has{$from}){
-            Carp::confess("A coercion action already exists for '$from'");
+            $self->throw_error("A coercion action already exists for '$from'");
         }
 
         my $type = Mouse::Util::TypeConstraints::find_or_parse_type_constraint($from)
-            or Carp::confess("Could not find the type constraint ($from) to coerce from");
+            or $self->throw_error("Could not find the type constraint ($from) to coerce from");
 
         push @{$coercions}, [ $type => $action ];
     }
 
     # compile
     if(exists $self->{type_constraints}){ # union type
-        Carp::confess("Cannot add additional type coercions to Union types");
+        $self->throw_error("Cannot add additional type coercions to Union types");
     }
     else{
         $self->_compile_type_coercion();
@@ -142,20 +143,15 @@
     return;
 }
 
-sub check {
-    my $self = shift;
-    return $self->_compiled_type_constraint->(@_);
-}
-
 sub coerce {
     my $self = shift;
 
     my $coercion = $self->_compiled_type_coercion;
     if(!$coercion){
-        Carp::confess("Cannot coerce without a type coercion");
-    }
-
-    return $_[0] if $self->_compiled_type_constraint->(@_);
+        $self->throw_error("Cannot coerce without a type coercion");
+    }
+
+    return $_[0] if $self->check(@_);
 
     return  $coercion->(@_);
 }
@@ -207,7 +203,7 @@
     $name ||= sprintf '%s[%s]', $self->name, $param->name;
 
     my $generator = $self->{constraint_generator}
-        || Carp::confess("The $name constraint cannot be used, because $param doesn't subtype from a parameterizable type");
+        || $self->throw_error("The $name constraint cannot be used, because $param doesn't subtype from a parameterizable type");
 
     return Mouse::Meta::TypeConstraint->new(
         name           => $name,
@@ -220,10 +216,15 @@
 sub assert_valid {
     my ($self, $value) = @_;
 
-    if(!$self->_compiled_type_constraint->($value)){
-        Carp::confess($self->get_message($value));
+    if(!$self->check($value)){
+        $self->throw_error($self->get_message($value));
     }
     return 1;
+}
+
+sub throw_error {
+    require Mouse::Meta::Module;
+    goto &Mouse::Meta::Module::throw_error;
 }
 
 1;
@@ -235,7 +236,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 DESCRIPTION
 

Modified: trunk/libmouse-perl/lib/Mouse/Object.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Object.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Object.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Object.pm Sun Mar 28 17:55:30 2010
@@ -17,7 +17,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 METHODS
 

Modified: trunk/libmouse-perl/lib/Mouse/PurePerl.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/PurePerl.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/PurePerl.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/PurePerl.pm Sun Mar 28 17:55:30 2010
@@ -617,6 +617,12 @@
     return;
 }
 
+sub check {
+    my $self = shift;
+    return $self->_compiled_type_constraint->(@_);
+}
+
+
 package Mouse::Object;
 
 sub BUILDARGS {
@@ -714,7 +720,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SEE ALSO
 

Modified: trunk/libmouse-perl/lib/Mouse/Role.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Role.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Role.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Role.pm Sun Mar 28 17:55:30 2010
@@ -1,7 +1,7 @@
 package Mouse::Role;
 use Mouse::Exporter; # enables strict and warnings
 
-our $VERSION = '0.51';
+our $VERSION = '0.52';
 
 use Carp         qw(confess);
 use Scalar::Util qw(blessed);
@@ -145,7 +145,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SYNOPSIS
 

Modified: trunk/libmouse-perl/lib/Mouse/Spec.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Spec.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Spec.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Spec.pm Sun Mar 28 17:55:30 2010
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-our $VERSION = '0.51';
+our $VERSION = '0.52';
 
 our $MouseVersion = $VERSION;
 our $MooseVersion = '0.93';
@@ -19,7 +19,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 SYNOPSIS
 

Modified: trunk/libmouse-perl/lib/Mouse/Tiny.pod
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Tiny.pod?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Tiny.pod (original)
+++ trunk/libmouse-perl/lib/Mouse/Tiny.pod Sun Mar 28 17:55:30 2010
@@ -5,7 +5,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 DESCRIPTION
 

Modified: trunk/libmouse-perl/lib/Mouse/Util.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Util.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Util.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Util.pm Sun Mar 28 17:55:30 2010
@@ -52,7 +52,7 @@
     # Because Mouse::Util is loaded first in all the Mouse sub-modules,
     # XS loader is placed here, not in Mouse.pm.
 
-    our $VERSION = '0.51';
+    our $VERSION = '0.52';
 
     my $xs = !(exists $INC{'Mouse/PurePerl.pm'} || $ENV{MOUSE_PUREPERL});
 
@@ -244,7 +244,6 @@
 }
 
 # taken from Class/MOP.pm
-my %is_class_loaded_cache;
 sub _try_load_one_class {
     my $class = shift;
 
@@ -253,7 +252,7 @@
         Carp::confess "Invalid class name ($display)";
     }
 
-    return undef if $is_class_loaded_cache{$class} ||= is_class_loaded($class);
+    return '' if is_class_loaded($class);
 
     $class  =~ s{::}{/}g;
     $class .= '.pm';
@@ -366,7 +365,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 IMPLEMENTATIONS FOR
 

Modified: trunk/libmouse-perl/lib/Mouse/Util/TypeConstraints.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/Util/TypeConstraints.pm?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/Util/TypeConstraints.pm (original)
+++ trunk/libmouse-perl/lib/Mouse/Util/TypeConstraints.pm Sun Mar 28 17:55:30 2010
@@ -406,7 +406,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head2 SYNOPSIS
 

Modified: trunk/libmouse-perl/lib/Mouse/XS.pod
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/lib/Mouse/XS.pod?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/lib/Mouse/XS.pod (original)
+++ trunk/libmouse-perl/lib/Mouse/XS.pod Sun Mar 28 17:55:30 2010
@@ -5,7 +5,7 @@
 
 =head1 VERSION
 
-This document describes Mouse version 0.51
+This document describes Mouse version 0.52
 
 =head1 DESCRIPTION
 

Modified: trunk/libmouse-perl/mouse.h
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/mouse.h?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/mouse.h (original)
+++ trunk/libmouse-perl/mouse.h Sun Mar 28 17:55:30 2010
@@ -69,6 +69,15 @@
 #else
     ;
 #endif
+
+/* workaround RT #69939 */
+I32
+mouse_call_sv_safe(pTHX_ SV*, I32);
+
+#define call_sv_safe(sv, flags)     mouse_call_sv_safe(aTHX_ sv, flags)
+#define call_method_safe(m, flags)  mouse_call_sv_safe(aTHX_ newSVpvn_flags(m, strlen(m), SVs_TEMP), flags | G_METHOD)
+#define call_method_safes(m, flags) mouse_call_sv_safe(aTHX_ newSVpvs_flags(m, SVs_TEMP),            flags | G_METHOD)
+
 
 #define is_class_loaded(sv) mouse_is_class_loaded(aTHX_ sv)
 bool mouse_is_class_loaded(pTHX_ SV*);

Modified: trunk/libmouse-perl/t/800_with_external/002-externals.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/t/800_with_external/002-externals.t?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/t/800_with_external/002-externals.t (original)
+++ trunk/libmouse-perl/t/800_with_external/002-externals.t Sun Mar 28 17:55:30 2010
@@ -15,6 +15,7 @@
 note("Testing user modules which depend on Mouse");
 
 $ENV{PERL_TEST_DM_LOG_DIR} = abs_path('.');
+delete $ENV{ANY_MOOSE}; # use Mouse by default
 
 my @modules = qw(
     MouseX::Types

Modified: trunk/libmouse-perl/xs-src/Mouse.xs
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/xs-src/Mouse.xs?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/xs-src/Mouse.xs (original)
+++ trunk/libmouse-perl/xs-src/Mouse.xs Sun Mar 28 17:55:30 2010
@@ -397,7 +397,7 @@
         PUSHs(args);
         PUTBACK;
 
-        call_sv(AvARRAY(buildall)[i], G_VOID);
+        call_sv_safe(AvARRAY(buildall)[i], G_VOID);
 
         /* discard a scalar which G_VOID returns */
         SPAGAIN;
@@ -513,6 +513,7 @@
     /*  *{$package . '::' . $name} -> *gv */
     gv = gv_fetchpv(form("%"SVf"::%"SVf, package, name), GV_ADDMULTI, SVt_PVCV);
     mouse_install_sub(aTHX_ gv, code_ref);
+    //CvMETHOD_on((CV*)SvRV(code_ref));
     (void)set_slot(methods, name, code); /* $self->{methods}{$name} = $code */
 }
 
@@ -651,9 +652,10 @@
         for(i = 0; i < items; i++){
             PUSHs(ST(i));
         }
-        //SP += items;
+
         PUTBACK;
-        call_method("BUILDARGS", G_SCALAR);
+        call_method_safes("BUILDARGS", G_SCALAR);
+
         SPAGAIN;
         args = POPs;
         PUTBACK;
@@ -715,21 +717,21 @@
 
     len      = AvFILLp(demolishall) + 1;
     if(len > 0){
-        GV* const statusvalue = gv_fetchpvs("?", 0, SVt_PV);
-
-        if(statusvalue){ /* it can be NULL */
-            SAVESPTR(GvSV(statusvalue)); /* local $? */
-            GvSV(statusvalue) = sv_newmortal();
-        }
+        SV* const in_global_destruction = boolSV(PL_dirty);
+        SAVEI32(PL_statusvalue); /* local $? */
+        PL_statusvalue = 0;
+
         SAVESPTR(ERRSV); /* local $@ */
-        ERRSV = newSVpvs_flags("", SVs_TEMP);
+        ERRSV = sv_newmortal();
+
+        EXTEND(SP, 2);
 
         for(i = 0; i < len; i++){
             SPAGAIN;
 
             PUSHMARK(SP);
-            XPUSHs(object);
-            XPUSHs(boolSV(PL_dirty));
+            PUSHs(object);
+            PUSHs(in_global_destruction);
             PUTBACK;
 
             call_sv(AvARRAY(demolishall)[i], G_VOID | G_EVAL);

Modified: trunk/libmouse-perl/xs-src/MouseAccessor.xs
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/xs-src/MouseAccessor.xs?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/xs-src/MouseAccessor.xs (original)
+++ trunk/libmouse-perl/xs-src/MouseAccessor.xs Sun Mar 28 17:55:30 2010
@@ -156,7 +156,7 @@
         PUSHs(value);
 
         PUTBACK;
-        call_sv(trigger, G_VOID | G_DISCARD);
+        call_sv_safe(trigger, G_VOID | G_DISCARD);
         /* need not SPAGAIN */
 
         assert(SvTYPE(value) != SVTYPEMASK);

Modified: trunk/libmouse-perl/xs-src/MouseTypeConstraints.xs
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/xs-src/MouseTypeConstraints.xs?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/xs-src/MouseTypeConstraints.xs (original)
+++ trunk/libmouse-perl/xs-src/MouseTypeConstraints.xs Sun Mar 28 17:55:30 2010
@@ -117,7 +117,7 @@
     return LooksLikeNumber(sv);
 }
 
-int
+static int
 S_nv_is_integer(pTHX_ NV const nv) {
     if(nv == (NV)(IV)nv){
         return TRUE;
@@ -725,8 +725,7 @@
             SV* const tc = *av_fetch(types, i, TRUE);
             SV* const c  = get_slots(tc, "compiled_type_constraint");
             if(!(c && mouse_tc_CodeRef(aTHX_ NULL, c))){
-                sv_dump(self);
-                croak("'%"SVf"' has no compiled type constraint", self);
+                mouse_throw_error(self, c, "'%"SVf"' has no compiled type constraint", self);
             }
             av_push(union_checks, newSVsv(c));
         }
@@ -744,3 +743,16 @@
     (void)set_slots(self, "compiled_type_constraint", check);
 }
 
+bool
+check(SV* self, SV* sv)
+CODE:
+{
+    SV* const check = get_slots(self, "compiled_type_constraint");
+    if(!(check && mouse_tc_CodeRef(aTHX_ NULL, check))){
+        mouse_throw_error(self, check, "'%"SVf"' has no compiled type constraint", self);
+    }
+    RETVAL = mouse_tc_check(aTHX_ check, sv) ? TRUE : FALSE;
+}
+OUTPUT:
+    RETVAL
+

Modified: trunk/libmouse-perl/xs-src/MouseUtil.xs
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libmouse-perl/xs-src/MouseUtil.xs?rev=54927&op=diff
==============================================================================
--- trunk/libmouse-perl/xs-src/MouseUtil.xs (original)
+++ trunk/libmouse-perl/xs-src/MouseUtil.xs Sun Mar 28 17:55:30 2010
@@ -120,6 +120,28 @@
     }
 }
 
+/* workaround RT #69939 */
+I32
+mouse_call_sv_safe(pTHX_ SV* const sv, I32 const flags) {
+    assert( (flags & G_EVAL) == 0 );
+
+    if(!PL_in_eval) {
+        I32 count;
+        SAVESPTR(ERRSV);
+        ERRSV = sv_newmortal();
+
+        count = Perl_call_sv(aTHX_ sv, flags | G_EVAL);
+
+        if(sv_true(ERRSV)){
+            croak(NULL); /* rethrow */
+        }
+        return count;
+    }
+    else {
+        return Perl_call_sv(aTHX_ sv, flags);
+    }
+}
+
 void
 mouse_must_defined(pTHX_ SV* const value, const char* const name) {
     assert(value);
@@ -199,7 +221,7 @@
     XPUSHs(self);
     PUTBACK;
 
-    call_sv(method, G_SCALAR | G_METHOD);
+    call_sv_safe(method, G_SCALAR | G_METHOD);
 
     SPAGAIN;
     ret = POPs;
@@ -219,7 +241,7 @@
     PUSHs(arg1);
     PUTBACK;
 
-    call_sv(method, G_SCALAR | G_METHOD);
+    call_sv_safe(method, G_SCALAR | G_METHOD);
 
     SPAGAIN;
     ret = POPs;
@@ -350,7 +372,9 @@
     }
     {
         dMY_CXT;
-        if(MY_CXT.metas) croak("Cannot set metaclass storage more than once");
+        if(MY_CXT.metas && ckWARN(WARN_REDEFINE)){
+            Perl_warner(aTHX_ packWARN(WARN_REDEFINE), "Metaclass storage more than once");
+        }
         MY_CXT.metas = metas;
         SvREFCNT_inc_simple_void_NN(metas);
     }




More information about the Pkg-perl-cvs-commits mailing list