Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Start VMArrayHOW, expose it in the grammar.
  • Loading branch information
arnsholt committed Feb 28, 2013
1 parent c2910e2 commit c54039f
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/Perl6/Actions.pm
Expand Up @@ -1465,6 +1465,7 @@ class Perl6::Actions is HLL::Actions does STDActions {
method package_declarator:sym<role>($/) { make $<package_def>.ast; }
method package_declarator:sym<knowhow>($/) { make $<package_def>.ast; }
method package_declarator:sym<native>($/) { make $<package_def>.ast; }
method package_declarator:sym<vmarray>($/) { make $<package_def>.ast; }

method package_declarator:sym<trusts>($/) {
$*W.apply_trait($/, '&trait_mod:<trusts>', $*PACKAGE, $<typename>.ast);
Expand Down
5 changes: 5 additions & 0 deletions src/Perl6/Grammar.pm
Expand Up @@ -1679,6 +1679,11 @@ grammar Perl6::Grammar is HLL::Grammar does STD {
:my $*PKGDECL := 'native';
<sym> <.end_keyword> <package_def>
}
token package_declarator:sym<vmarray> {
:my $*OUTERPACKAGE := $*PACKAGE;
:my $*PKGDECL := 'vmarray';
<sym> <.end_keyword> <package_def>
}
token package_declarator:sym<slang> {
:my $*OUTERPACKAGE := $*PACKAGE;
:my $*PKGDECL := 'slang';
Expand Down
2 changes: 2 additions & 0 deletions src/Perl6/Metamodel/BOOTSTRAP.pm
Expand Up @@ -829,6 +829,7 @@ BEGIN {
Perl6::Metamodel::PackageHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::ModuleHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::NativeHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::VMArrayHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::ClassHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::GrammarHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::ParametricRoleHOW.set_stash_type(Stash, EnumMap);
Expand Down Expand Up @@ -1043,6 +1044,7 @@ Perl6::Metamodel::ClassHOW.set_invoke_forwarder(
Perl6::Metamodel::PackageHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::ModuleHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::NativeHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::VMArrayHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::ClassHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::GrammarHOW.set_stash_type(Stash, EnumMap);
Perl6::Metamodel::ParametricRoleHOW.set_stash_type(Stash, EnumMap);
Expand Down
1 change: 1 addition & 0 deletions src/Perl6/Metamodel/EXPORTHOW.pm
Expand Up @@ -14,4 +14,5 @@ my module EXPORTHOW {
($?PACKAGE.WHO)<native> := Perl6::Metamodel::NativeHOW;
($?PACKAGE.WHO)<subset> := Perl6::Metamodel::SubsetHOW;
($?PACKAGE.WHO)<enum> := Perl6::Metamodel::EnumHOW;
($?PACKAGE.WHO)<vmarray> := Perl6::Metamodel::VMArrayHOW;
}
35 changes: 35 additions & 0 deletions src/Perl6/Metamodel/VMArrayHOW.pm
@@ -0,0 +1,35 @@
class Perl6::Metamodel::VMArrayHOW
does Perl6::Metamodel::Naming
does Perl6::Metamodel::Versioning
does Perl6::Metamodel::Stashing
does Perl6::Metamodel::MethodContainer
does Perl6::Metamodel::PrivateMethodContainer
{
has $!element-type;
has $!composed;

method new(*%named) {
nqp::findmethod(NQPMu, 'BUILDALL')(nqp::create(self), |%named)
}

method new_type(:$name = '<anon>', :$ver, :$auth) {
my $metaclass := self.new();
my $obj := pir::repr_type_object_for__PPS($metaclass, 'VMArray');
self.add_stash($obj);
$metaclass.set_name($obj, $name);
$metaclass.set_ver($obj, $ver) if $ver;
$metaclass.set_auth($obj, $auth) if $auth;
$obj
}

method compose($obj) {
if !$!composed && $!element-type {
nqp::composetype($obj, hash(array => hash(type => $!element-type)));
$!composed := 1;
}
}

method parametrize($obj, $type) {
$!element-type := $type;
}
}
1 change: 1 addition & 0 deletions src/core/EXPORTHOW.pm
Expand Up @@ -14,4 +14,5 @@ my module EXPORTHOW {
nqp::bindkey($?PACKAGE.WHO, 'native', Perl6::Metamodel::NativeHOW);
nqp::bindkey($?PACKAGE.WHO, 'subset', Perl6::Metamodel::SubsetHOW);
nqp::bindkey($?PACKAGE.WHO, 'enum', Perl6::Metamodel::EnumHOW);
nqp::bindkey($?PACKAGE.WHO, 'vmarray', Perl6::Metamodel::VMArrayHOW);
}
1 change: 1 addition & 0 deletions src/core/you_are_here.pm
Expand Up @@ -11,6 +11,7 @@ BEGIN {
Perl6::Metamodel::ParametricRoleGroupHOW.HOW.reparent(Perl6::Metamodel::ParametricRoleGroupHOW, Any);
Perl6::Metamodel::ParametricRoleHOW.HOW.reparent(Perl6::Metamodel::ParametricRoleHOW, Any);
Perl6::Metamodel::SubsetHOW.HOW.reparent(Perl6::Metamodel::SubsetHOW, Any);
Perl6::Metamodel::VMArrayHOW.HOW.reparent(Perl6::Metamodel::VMArrayHOW, Any);
Perl6::Metamodel::GrammarHOW.HOW.compose(Perl6::Metamodel::GrammarHOW);
}

Expand Down
1 change: 1 addition & 0 deletions tools/build/Makefile.in
Expand Up @@ -138,6 +138,7 @@ METAMODEL_SOURCES = \
src/Perl6/Metamodel/NativeHOW.pm \
src/Perl6/Metamodel/SubsetHOW.pm \
src/Perl6/Metamodel/EnumHOW.pm \
src/Perl6/Metamodel/VMArrayHOW.pm \
src/Perl6/Metamodel/ContainerDescriptor.pm \
src/Perl6/Metamodel/StaticLexPad.pm \
src/Perl6/Metamodel/Dispatchers.pm \
Expand Down

0 comments on commit c54039f

Please sign in to comment.