Skip to content

Commit e6663bb

Browse files
committed
Construct meta-object at compile time.
1 parent b40895c commit e6663bb

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/NQP/Grammar.pm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,26 @@ token package_declarator:sym<native> {
311311
}
312312

313313
rule package_def {
314+
:my $*PKGMETA; # The meta-object for this package.
315+
:my %*ATTR-CHECK; # Attribute names we must confirm exist.
316+
314317
<name>
315318
[ 'is' 'repr(' <repr=.quote_EXPR> ')' ]?
319+
320+
{
321+
# Construct meta-object for this package.
322+
my $mo := %*HOW{$*PKGDECL};
323+
my %args;
324+
%args<name> := ~$<name>;
325+
if $<repr> {
326+
%args<repr> := ~$<repr>[0];
327+
}
328+
if pir::can($mo, 'parametric') && $mo.parametric($mo) {
329+
%args<body_block> := -> $c { };
330+
}
331+
$*PKGMETA := $mo.new_type(|%args);
332+
}
333+
316334
[ 'is' <parent=.name> ]?
317335
[ 'does' <role=.name> ]*
318336
[

0 commit comments

Comments
 (0)