Red.git | lib/Red/AST/ | Infix.rakumod
use Red::AST::Operator;
use Red::AST::Unary;
#| Base role to infix operators
unit role Red::AST::Infix does Red::AST::Operator;
has Red::AST $.left is required;
has Red::AST $.right is required;
has Bool $.bind-left = False;
has Bool $.bind-right = False;
#method gist { "$!left.gist() $.op $!right.gist()" }
proto method new($left, $right, |) {*}
multi method new($left, $right, Bool() :$bind-left = False, Bool() :$bind-right = False, Str() :$cast!) {
::?CLASS.new:
$left ~~ ::("Red::Column") ?? $left.cast($cast) !! $left,
$right ~~ ::("Red::Column") ?? $right.cast($cast) !! $right,
:$bind-left,
:$bind-right
}
multi method new($left, $right, Bool :$bind-left = False, Bool :$bind-right = False) {
::?CLASS.Mu::new: :$left, :$right, :$bind-left, :$bind-right
}
method args { $!left, $!right }
method not { Red::AST::Not.new: self }
method find-column-name { ($_ with $.left.find-column-name), ($_ with $.right.find-column-name) }