Skip to content

Commit

Permalink
Need to thunk in things like sub foo(::T $x, T $y) { ... }. This gets…
Browse files Browse the repository at this point in the history
… all but one of type-capture.t passing (which only fails now due to lack of variable type checking).
  • Loading branch information
jnthn committed Jan 11, 2010
1 parent 4639926 commit cc5d534
Showing 1 changed file with 25 additions and 6 deletions.
31 changes: 25 additions & 6 deletions src/Perl6/Actions.pm
Expand Up @@ -1475,12 +1475,31 @@ method dec_number($/) {
}

method typename($/) {
my @name := Perl6::Grammar::parse_name($<longname>.Str);
my $past := PAST::Var.new(
:name(@name.pop),
:namespace(@name),
:scope('package')
);
my $past;
if is_lexical($<longname>.Str) {
# We need to build a thunk.
$past := PAST::Block.new(
PAST::Var.new( :name('$_'), :scope('parameter'), :isdecl(1) ),
PAST::Op.new( :pasttype('callmethod'), :name('ACCEPTS'),
PAST::Var.new( :name($<longname>.Str), :scope('lexical') ),
PAST::Var.new( :name('$_'), :scope('lexical') )
)
);
my $sig := Perl6::Compiler::Signature.new();
my $param := Perl6::Compiler::Parameter.new();
$param.var_name('$_');
$sig.add_parameter($param);
add_signature($past, $sig, 0);
$past := create_code_object($past, 'Block', 0, '');
}
else {
my @name := Perl6::Grammar::parse_name($<longname>.Str);
$past := PAST::Var.new(
:name(@name.pop),
:namespace(@name),
:scope('package')
);
}
make $past;
}

Expand Down

0 comments on commit cc5d534

Please sign in to comment.