Skip to content

Commit

Permalink
feat: add gnu inline asm syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
benjaminBrownlee committed Jun 10, 2023
1 parent 0906255 commit 7688778
Show file tree
Hide file tree
Showing 5 changed files with 54,160 additions and 50,716 deletions.
52 changes: 52 additions & 0 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,7 @@ module.exports = grammar({
$.concatenated_string,
$.char_literal,
$.parenthesized_expression,
$.gnu_asm_expression,
),

comma_expression: $ => seq(
Expand Down Expand Up @@ -889,6 +890,57 @@ module.exports = grammar({
field('arguments', $.argument_list),
)),

gnu_asm_expression: $ => prec(PREC.CALL, seq(
choice("asm", "__asm__"),
repeat($.gnu_asm_qualifier),
"(",
field('assembly_code', choice($.string_literal, $.concatenated_string)),
optional(seq(
field('output_operands', $.gnu_asm_operand_list),
optional(seq(
field('input_operands', $.gnu_asm_operand_list),
optional(seq(
field('clobbers', $.gnu_asm_clobber_list),
optional(field('goto_labels', $.gnu_asm_goto_list))
)),
)),
)),
")",
)),

gnu_asm_qualifier: _ => choice(
"volatile",
"inline",
"goto",
),

gnu_asm_operand_list: $ => seq(
":",
commaSep(field("operand", $.gnu_asm_operand)),
),

gnu_asm_operand: $ => seq(
optional(seq(
"[",
field('symbol', $.identifier),
"]",
)),
field('constraint', $.string_literal),
"(",
field('value', $.identifier),
")",
),

gnu_asm_clobber_list: $ => seq(
":",
commaSep(field('register', $.string_literal)),
),

gnu_asm_goto_list: $ => seq(
":",
commaSep(field('label', $.identifier)),
),

argument_list: $ => seq('(', commaSep($._expression), ')'),

field_expression: $ => seq(
Expand Down
Loading

0 comments on commit 7688778

Please sign in to comment.