use get_or_add_package_symbol where appropriate
Jesse Luehrs [Wed, 22 Sep 2010 18:17:28 +0000 (13:17 -0500)]
Changes
lib/Class/MOP/Class.pm
lib/Class/MOP/Module.pm
lib/Class/MOP/Package.pm
t/010_self_introspection.t

diff --git a/Changes b/Changes
index 9fc1ab7..9fd2a46 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,10 @@
 Revision history for Perl extension Class-MOP.
 
+  [OTHER]
+
+  * Use get_or_add_package_symbol when we intend for it to autovivify, in
+    preparation for changes in Package::Stash. (doy)
+
 1.08 Mon, Sep 13, 2010
 
   [BUG FIXES]
index 2eb9312..67d903b 100644 (file)
@@ -763,7 +763,7 @@ sub get_all_attributes {
 sub superclasses {
     my $self     = shift;
 
-    my $isa = $self->get_package_symbol(
+    my $isa = $self->get_or_add_package_symbol(
         { sigil => '@', type => 'ARRAY', name => 'ISA' } );
 
     if (@_) {
index fb1b2b9..7a8b943 100644 (file)
@@ -33,12 +33,12 @@ sub _new {
 
 sub version {  
     my $self = shift;
-    ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'VERSION' })};
+    ${$self->get_or_add_package_symbol({ sigil => '$', type => 'SCALAR', name => 'VERSION' })};
 }
 
 sub authority {  
     my $self = shift;
-    ${$self->get_package_symbol({ sigil => '$', type => 'SCALAR', name => 'AUTHORITY' })};
+    ${$self->get_or_add_package_symbol({ sigil => '$', type => 'SCALAR', name => 'AUTHORITY' })};
 }
 
 sub identifier {
index fa60c6b..de027ae 100644 (file)
@@ -123,6 +123,11 @@ sub get_package_symbol {
     $self->_package_stash->get_package_symbol(@_);
 }
 
+sub get_or_add_package_symbol {
+    my $self = shift;
+    $self->_package_stash->get_or_add_package_symbol(@_);
+}
+
 sub remove_package_symbol {
     my $self = shift;
     $self->_package_stash->remove_package_symbol(@_);
@@ -191,6 +196,12 @@ Given a variable name, this method returns the variable as a reference
 or undef if it does not exist. The C<$variable_name> must contain a
 leading sigil.
 
+=item B<< $metapackage->get_or_add_package_symbol($variable_name) >>
+
+Given a variable name, this method returns the variable as a reference.
+If it does not exist, a default value will be generated if possible. The
+C<$variable_name> must contain a leading sigil.
+
 =item B<< $metapackage->has_package_symbol($variable_name) >>
 
 Returns true if there is a package variable defined for
index e5e1bed..daf602d 100644 (file)
@@ -31,7 +31,8 @@ my @class_mop_package_methods = qw(
     name
     namespace
 
-    add_package_symbol get_package_symbol has_package_symbol remove_package_symbol
+    add_package_symbol get_package_symbol has_package_symbol
+    remove_package_symbol get_or_add_package_symbol
     list_all_package_symbols get_all_package_symbols remove_package_glob
 
     _package_stash