Skip to content

Commit

Permalink
Give Perl6::Compiler::Signature a nicer constructor, to allow neater …
Browse files Browse the repository at this point in the history
…code in the actions etc.
  • Loading branch information
jnthn committed May 26, 2010
1 parent 4293e07 commit b0ec2da
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 9 deletions.
13 changes: 4 additions & 9 deletions src/Perl6/Actions.pm
Expand Up @@ -2994,10 +2994,9 @@ sub where_blockify($expr) {
$past := create_code_object($expr<past_block>, 'Block', 0, $lazy_name);
}
else {
my $sig := Perl6::Compiler::Signature.new();
my $param := Perl6::Compiler::Parameter.new();
$param.var_name('$_');
$sig.add_parameter($param);
my $sig := Perl6::Compiler::Signature.new($param);
$past := make_block_from($sig, PAST::Op.new(
:pasttype('call'), :name('&infix:<~~>'),
PAST::Var.new( :name('$_'), :scope('lexical') ),
Expand Down Expand Up @@ -3045,33 +3044,29 @@ sub whatever_curry($past) {
$past.shift; $past.shift;
$past.push(PAST::Var.new( :name('$x'), :scope('lexical') ));
$past.push(PAST::Var.new( :name('$y'), :scope('lexical') ));
my $sig := Perl6::Compiler::Signature.new();
my $param1 := Perl6::Compiler::Parameter.new();
$param1.var_name('$x');
$sig.add_parameter($param1);
my $param2 := Perl6::Compiler::Parameter.new();
$param2.var_name('$y');
$sig.add_parameter($param2);
my $sig := Perl6::Compiler::Signature.new($param1, $param2);
$past := make_block_from($sig, $past);
}
elsif +@($past) == 2 && $past[1] ~~ PAST::Op && $past[1].returns eq 'Whatever' {
# Curry right arg.
$past.pop;
$past.push(PAST::Var.new( :name('$y'), :scope('lexical') ));
my $sig := Perl6::Compiler::Signature.new();
my $param := Perl6::Compiler::Parameter.new();
$param.var_name('$y');
$sig.add_parameter($param);
my $sig := Perl6::Compiler::Signature.new($param);
$past := make_block_from($sig, $past);
}
elsif (+@($past) == 1 || +@($past) == 2) && $past[0] ~~ PAST::Op && $past[0].returns eq 'Whatever' {
# Curry left (or for unary, only) arg.
$past.shift;
$past.unshift(PAST::Var.new( :name('$x'), :scope('lexical') ));
my $sig := Perl6::Compiler::Signature.new();
my $param := Perl6::Compiler::Parameter.new();
$param.var_name('$x');
$sig.add_parameter($param);
my $sig := Perl6::Compiler::Signature.new($param);
$past := make_block_from($sig, $past);
}
}
Expand Down
8 changes: 8 additions & 0 deletions src/Perl6/Compiler/Signature.pm
Expand Up @@ -15,6 +15,14 @@ has $!entries;
has $!default_type;
has $!bind_target;

# Instantiates a Signature.
method new(*@params) {
my $new_sig := Q:PIR { %r = new ['Perl6';'Compiler';'Signature'] };
for @params {
$new_sig.add_parameter($_);
}
$new_sig
}
# Accessor for $!bind_target.
method bind_target($bind_target?) {
Expand Down

0 comments on commit b0ec2da

Please sign in to comment.