X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FClass%2FImmutable%2FTrait.pm;h=79f5c02b76f4ba14075d5aaf5fd8f821e5e51cc6;hb=d5d2fbb799207b6da4a57072e42fe3617d9f91b0;hp=0c8a50528955553b977cd11f12a781c071fa5ce4;hpb=78f6e9c6a73ff3dd985a1cebaafd0b81e543beb8;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Class/Immutable/Trait.pm b/lib/Class/MOP/Class/Immutable/Trait.pm index 0c8a505..79f5c02 100644 --- a/lib/Class/MOP/Class/Immutable/Trait.pm +++ b/lib/Class/MOP/Class/Immutable/Trait.pm @@ -8,18 +8,18 @@ use MRO::Compat; use Carp 'confess'; use Scalar::Util 'blessed', 'weaken'; -our $VERSION = '0.88'; +our $VERSION = '1.07'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; # the original class of the metaclass instance -sub get_mutable_metaclass_name { $_[0]{__immutable}{original_class} } - -sub immutable_options { %{ $_[0]{__immutable}{options} } } +sub _get_mutable_metaclass_name { $_[0]{__immutable}{original_class} } sub is_mutable { 0 } sub is_immutable { 1 } +sub _immutable_metaclass { ref $_[1] } + sub superclasses { my $orig = shift; my $self = shift; @@ -28,15 +28,14 @@ sub superclasses { } sub _immutable_cannot_call { - Carp::confess "This method cannot be called on an immutable instance"; + my $name = shift; + Carp::confess "The '$name' method cannot be called on an immutable instance"; } -sub add_method { _immutable_cannot_call() } -sub alias_method { _immutable_cannot_call() } -sub remove_method { _immutable_cannot_call() } -sub add_attribute { _immutable_cannot_call() } -sub remove_attribute { _immutable_cannot_call() } -sub remove_package_symbol { _immutable_cannot_call() } +for my $name (qw/add_method alias_method remove_method add_attribute remove_attribute remove_package_symbol/) { + no strict 'refs'; + *{__PACKAGE__."::$name"} = sub { _immutable_cannot_call($name) }; +} sub class_precedence_list { my $orig = shift; @@ -75,10 +74,10 @@ sub get_meta_instance { $self->{__immutable}{get_meta_instance} ||= $self->$orig; } -sub get_method_map { +sub _get_method_map { my $orig = shift; my $self = shift; - $self->{__immutable}{get_method_map} ||= $self->$orig; + $self->{__immutable}{_get_method_map} ||= $self->$orig; } sub add_package_symbol {