use v6-alpha;

use Test;

=kwid

= DESCRIPTION

This file tests a parse failure between expressions
and list quotes <>:

The C<< <3 >> is seen as the start of a list that
extends into the commented line. The expression
should be parsed as restricted to the one C<ok()>
line of course.

The following expressions also contend for the
same problem:

Two-way comparison:

  1 < EXPR > 2

Hash access:

  HASHEXPR<KEY>

= TODO

Add relevant Sxx and/or Axx references, that
describe the conflicting cases.

=cut

plan 13;

# L<S02/"Literals">
# L<S03/"Chained comparisons">

my $s = join 'a', <x y z>;
is($s, "xayaz", 'list context <list>');

my $s = join |<< <a x y z>;
is($s, "xayaz", 'listop |<< <list>', :todo<bug>);

my $x = try { [1,2,3].join<a b c> };
ok($!, '.join<abc> parses but semantic error');
is($x, try { [1,2,3].join()<a b c> }, '.join()<a b c> not treated as argument');

my @y = try { {:a<1>, :b(2)}<a b c> };
is(@y, [1,2,undef], '{...}<a b c> is hash subscript');

eval '{:a<1>, :b(2)} <a b c>';
ok($!, '{...} <...> parsefail');

ok((1 | 3) < 3, '(...) < 3 no parsefail');

eval '(1 | 3)<3';
ok($!, '()<3 parsefail', :todo<bug>);

eval 'print < 3';
ok($!, 'print < 3 parsefail');

my $z = eval 'reverse<1 2 3>';
ok($!, 'reverse<1 2 3> parsefail', :todo<bug>);

eval ':foo <1 2 3>';
ok($!, ':foo <1 2 3> parsefail');

my $r = eval ':foo <3';
is($r, Bool::True, ':foo <3 is comparison');

my $p = eval ':foo<1 2 3>';
is($p, ~('foo' => (1,2,3)), ':foo<1 2 3> is pair of list');
