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