diff --git a/src/parser/actions.pm b/src/parser/actions.pm index 6fc836107db..60fae823495 100644 --- a/src/parser/actions.pm +++ b/src/parser/actions.pm @@ -1062,9 +1062,21 @@ method type_constraint($/) { if $ { $past := $.ast; } - else { + elsif $ { $past := make_anon_subtype($.ast); } + else { + my $value := $.ast; + $past := PAST::Op.new( + :name('infix:,'), + PAST::Op.new( + :pasttype('callmethod'), + :name('WHAT'), + $value + ), + make_anon_subtype($value) + ); + } make $past; } diff --git a/src/parser/grammar.pg b/src/parser/grammar.pg index 80e16f35059..bb9543ba2e0 100644 --- a/src/parser/grammar.pg +++ b/src/parser/grammar.pg @@ -502,9 +502,9 @@ rule type_declarator { {*} } -# XXX STD.pm also has value in here? rule type_constraint { [ + | | | where