43 lines
2.1 KiB
JavaScript
43 lines
2.1 KiB
JavaScript
|
'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<SwitchOpCases>(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')), ':')
|
||
|
}
|