stop using a package global for enums, just close over it
[gitmo/Moose.git] / lib / Moose / Meta / TypeConstraint / Enum.pm
index 65b7753..2a7a5ad 100644 (file)
@@ -13,19 +13,13 @@ __PACKAGE__->meta->add_attribute('values' => (
     accessor => 'values',
 ));
 
-our %ENUMS;
-
 my $inliner = sub {
     my $self = shift;
     my $val  = shift;
 
-    my $name = $self->name();
-    $ENUMS{$name} ||= { map { $_ => 1 } @{ $self->values() } };
-
     return 'defined(' . $val . ') '
              . '&& !ref(' . $val . ') '
-             . '&& $' . __PACKAGE__ . '::ENUMS{' . B::perlstring($name) . '}'
-                 . '{' . $val . '}';
+             . '&& $enums{' . $val . '}';
 };
 
 sub new {
@@ -52,6 +46,7 @@ sub new {
 
     my %values = map { $_ => 1 } @{ $args{values} };
     $args{constraint} = sub { $values{ $_[0] } };
+    $args{inline_environment} = { '%enums' => \%values };
 
     my $self = $class->_new(\%args);