From 46dacb9537159b5562c020cdc1adf0d32fa381b1 Mon Sep 17 00:00:00 2001 From: pmichaud Date: Tue, 26 Jun 2012 23:38:10 -0500 Subject: [PATCH] Refactor determination of reduction type for base operator. --- src/Perl6/Actions.pm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Perl6/Actions.pm b/src/Perl6/Actions.pm index f4f31390eec..a5cd1e15413 100644 --- a/src/Perl6/Actions.pm +++ b/src/Perl6/Actions.pm @@ -4074,6 +4074,15 @@ class Perl6::Actions is HLL::Actions { } } + sub baseop_reduce($/) { + my $reduce := 'left'; + if $ eq 'right' + || $ eq 'list' { $reduce := $; } + elsif $ eq 'm=' { $reduce := 'chain'; } + elsif $ eq 'xor' { $reduce := 'xor'; } + $reduce; + } + method infixish($/) { if $ { my $base := $; @@ -4124,11 +4133,7 @@ class Perl6::Actions is HLL::Actions { ?? $base.ast[0] !! PAST::Var.new(:name("&infix:<" ~ $base ~ ">"), :scope); - my $metaop := '&METAOP_REDUCE_LEFT'; - if $base eq 'right' { $metaop := '&METAOP_REDUCE_RIGHT' } - elsif $base eq 'list' { $metaop := '&METAOP_REDUCE_LIST' } - elsif $base eq 'm=' { $metaop := '&METAOP_REDUCE_CHAIN' } - elsif $base eq 'xor' { $metaop := '&METAOP_REDUCE_XOR' } + my $metaop := '&METAOP_REDUCE_' ~ nqp::uc(baseop_reduce($base)); my $metapast := PAST::Op.new( :pasttype, :name($metaop), $basepast); if $ { my $tri := $*W.add_constant('Int', 'int', 1);