Skip to content

Commit

Permalink
implement "in" and "ni" operators.
Browse files Browse the repository at this point in the history
moritz++
  • Loading branch information
coke committed Aug 24, 2010
1 parent 799f0e7 commit f79d43a
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/Partcl/Grammar.pm
Expand Up @@ -124,6 +124,7 @@ INIT {
Partcl::Grammar.O(':prec<10>', '%compare_numeric');
Partcl::Grammar.O(':prec<09>', '%equality_numeric');
Partcl::Grammar.O(':prec<08>', '%equality_string');
Partcl::Grammar.O(':prec<07>', '%list_containment');
}

# The <.ws> rule only gets used in expressions.
Expand Down Expand Up @@ -173,6 +174,9 @@ token infix:sym«>=» { <sym> <O('%compare_numeric, :pirop<isge Inn>')> }
token infix:sym<==> { <sym> <O('%equality_numeric')> }
token infix:sym<!=> { <sym> <O('%equality_numeric, :pirop<isne Inn>')> }

token infix:sym<in> { <sym> <O('%list_containment')> }
token infix:sym<ni> { <sym> <O('%list_containment')> }

token infix:sym<eq> { <sym> <O('%equality_string, :pirop<iseq Iss>')> }
token infix:sym<ne> { <sym> <O('%equality_string, :pirop<isne Iss>')> }

Expand Down
18 changes: 18 additions & 0 deletions src/Partcl/Operators.pm
Expand Up @@ -10,4 +10,22 @@ sub &infix:<==>($a, $b) {

}

sub &infix:<ni>($check, @list) {
for @list -> $item {
if $item eq $check {
return 0;
}
}
return 1;
}

sub &infix:<in>($check, @list) {
for @list -> $item {
if $item eq $check {
return 1;
}
}
return 0;
}

# vim: expandtab shiftwidth=4 ft=perl6:
8 changes: 4 additions & 4 deletions t/cmd_expr.t
Expand Up @@ -555,10 +555,10 @@ is [expr {"2" < "10"}] 1 {string int < string int}

# list operators
set my_list {b c d f}
is [expr {"b" in $my_list}] 1 {in true} {TODO NQPRX}
is [expr {"e" in $my_list}] 0 {in false} {TODO NQPRX}
is [expr {"e" ni $my_list}] 1 {ni true} {TODO NQPRX}
is [expr {"b" ni $my_list}] 0 {ni false} {TODO NQPRX}
is [expr {"b" in $my_list}] 1 {in true}
is [expr {"e" in $my_list}] 0 {in false}
is [expr {"e" ni $my_list}] 1 {ni true}
is [expr {"b" ni $my_list}] 0 {ni false}

# regressions
is [expr {"[eval {set a "aok"}]" ne "bork"}] 1 {test_more.tcl regression}
Expand Down

0 comments on commit f79d43a

Please sign in to comment.