'use strict'; module.exports = { cf_dialect : $ => prec.right(choice( // operation ::= `cf.assert` $arg `,` $msg attr-dict seq('cf.assert', field('argument', $.value_use), ',', field('message', $.string_literal), field('attributes', optional($.attribute))), // operation ::= `cf.br` $dest (`(` $destOperands^ `:` // type($destOperands) `)`)? attr-dict seq('cf.br', field('successor', $.successor), field('attributes', optional($.attribute))), // operation ::= `cf.cond_br` $condition `,` // $trueDest(`(` $trueDestOperands ^ `:` // type($trueDestOperands)`)`)? `,` // $falseDest(`(` $falseDestOperands ^ `:` // type($falseDestOperands)`)`)? attr-dict seq('cf.cond_br', field('condition', $.value_use), ',', field('trueblk', $.successor), ',', field('falseblk', $.successor), field('attributes', optional($.attribute))), // operation ::= `cf.switch` $flag `:` type($flag) `,` `[` `\n` // custom(ref(type($flag)),$defaultDestination, // $defaultOperands, // type($defaultOperands), // $case_values, // $caseDestinations, // $caseOperands, // type($caseOperands)) // `]` // attr-dict seq('cf.switch', field('flag', $._value_use_and_type), ',', '[', $.cf_case_label, $.successor, repeat(seq(',', $.cf_case_label, $.successor)), ']', field('attributes', optional($.attribute))), )), cf_case_label : $ => seq(choice($.integer_literal, token('default')), ':') }