1
# Note: this file probably wants to be in some Perl6::CompilerGuts namespace.
3
our sub SETUP_NAMED_ENUM($name, $values) {
4
# For now, just install EnumMap under the main name.
5
my @full_ns = Perl6::Grammar::parse_name($name);
6
my ($shortname, @base_ns) = @full_ns;
7
my $enumeration-object = (class {
8
method WHAT { $enumeration-object }
9
method enums { $values }
11
multi method roll($num = 1) { $values.roll($num) }
12
multi method pick($num = 1) { $values.pick($num) }
13
method ACCEPTS($topic) { $topic eqv any $values.values }
14
method invert() { $values.invert }
16
pir::set_hll_global__vPSP(@base_ns, $shortname, $enumeration-object);
18
for $values.kv -> $key, $value {
19
my $enum-object = $value but role {
20
method WHAT { $enumeration-object }
21
method perl { $name ~ '::' ~ $key }
22
method Str { $name ~ '::' ~ $key }
23
method Stringy { $key }
25
method value { $value }
26
method pair { $key => $value }
27
method kv { $key, $value }
28
method defined { True }
30
pir::set_hll_global__vPSP(@full_ns, $key, $enum-object);
31
pir::set_hll_global__vPSP(@base_ns, $key, $enum-object);