'use strict';
module.exports = {
func_dialect : $ => prec.right(choice(
// operation ::= `func.call_indirect` $callee `(`
// $callee_operands `)` attr-dict
// `:` type($callee)
// operation ::= `func.call` $callee `(` $operands `)`
// attr-dict
// `:` functional-type($operands, results)
seq(choice('func.call', 'call', 'func.call_indirect',
'call_indirect'),
field('callee', $.symbol_ref_id),
field('operands', $._value_use_list_parens),
field('attributes', optional($.attribute)),
field('return', $._function_type_annotation)),
// operation ::= `func.constant` attr-dict $value `:`
// type(results)
seq(choice('func.constant', 'constant'),
field('attributes', optional($.attribute)),
field('value', $.symbol_ref_id),
field('return', $._function_type_annotation)),
seq('func.func', $._op_func),
seq(choice('func.return', 'return'),
field('attributes', optional($.attribute)),
field('results', optional($._value_use_type_list)))))
}