package Pugs::AST::Expression;
use strict;
use warnings;
use Data::Dumper;
sub term {
{ term => $_[1]{'term'}->() ,}
}
sub operator {
my $self = shift;
my $match = shift;
# die "not a match" unless ref($match) eq 'Pugs::Runtime::Match';
my %h = %$match;
my %opt = @_;
#print "capture ", Dumper($match) if $opt{'fixity'} eq 'circumfix';
for ( keys %h ) {
$h{$_} = $h{$_}->();
}
my @a = @$match;
if ( @a ) {
$a = shift @a;
for ( @$a ) {
$_ = $self->operator( $_ );
${$_}{fixity} = $opt{fixity};
}
$h{list} = $a;
delete $opt{fixity};
}
$h{$_} = $opt{$_} for keys %opt;
return \%h;
}
1;