Move ::Meta::Module::namespace into XS
gfx [Sat, 24 Oct 2009 08:16:46 +0000 (17:16 +0900)]
lib/Mouse/Meta/Module.pm
lib/Mouse/PurePerl.pm
xs-src/Mouse.xs

index 9f2c7f8..383f51d 100755 (executable)
@@ -38,9 +38,10 @@ sub get_metaclass_by_name       { $METAS{$_[0]}         }
 #sub does_metaclass_exist        { defined $METAS{$_[0]} }
 #sub remove_metaclass_by_name    { delete $METAS{$_[0]}  }
 
-
 sub name;
 
+sub namespace;
+
 # The followings are Class::MOP specific methods
 
 #sub version   { no strict 'refs'; ${shift->name.'::VERSION'}   }
@@ -66,12 +67,6 @@ sub get_attribute     {        $_[0]->{attributes}->{$_[1]} }
 sub get_attribute_list{ keys %{$_[0]->{attributes}}         }
 sub remove_attribute  { delete $_[0]->{attributes}->{$_[1]} }
 
-sub namespace{
-    my $name = $_[0]->{package};
-    no strict 'refs';
-    return \%{ $name . '::' };
-}
-
 sub add_method {
     my($self, $name, $code) = @_;
 
index 23f7520..ea59be6 100644 (file)
@@ -71,6 +71,12 @@ package
 
 sub name { $_[0]->{package} }
 
+sub namespace{
+    my $name = $_[0]->{package};
+    no strict 'refs';
+    return \%{ $name . '::' };
+}
+
 package
     Mouse::Meta::Class;
 
index d5e7842..4a00765 100644 (file)
@@ -40,6 +40,19 @@ BOOT:
     INSTALL_SIMPLE_READER_WITH_KEY(Module, _method_map, methods);
     INSTALL_SIMPLE_READER_WITH_KEY(Module, _attribute_map, attributes);
 
+HV*
+namespace(HV* self)
+CODE:
+{
+    SV** svp = hv_fetchs(self, "package", FALSE);
+    if(!(svp && SvOK(*svp))){
+        croak("No package name");
+    }
+    RETVAL = gv_stashsv(*svp, GV_ADDMULTI);
+}
+OUTPUT:
+    RETVAL
+
 MODULE = Mouse  PACKAGE = Mouse::Meta::Class
 
 BOOT: