about summary refs log tree commit diff
path: root/src/tools/rust-analyzer/crates/parser
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2024-09-05 15:06:37 +0200
committerLukas Wirth <lukastw97@gmail.com>2024-09-05 15:08:16 +0200
commit20e9c8d110d6259b8086c2ffd6268d0dd072a2ab (patch)
treee1f4c66446dabc0d1e2f04d8035079fcb07c9640 /src/tools/rust-analyzer/crates/parser
parent72980c417cb59c33d5814fd69eb958fb90363f26 (diff)
asm! parsing and lowering fixes
Diffstat (limited to 'src/tools/rust-analyzer/crates/parser')
-rw-r--r--src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs4
-rw-r--r--src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/asm_expr.rast16
2 files changed, 13 insertions, 7 deletions
diff --git a/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs b/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs
index 39ca26fc508..a1a3e947092 100644
--- a/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs
+++ b/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs
@@ -361,16 +361,20 @@ fn parse_asm_expr(p: &mut Parser<'_>, m: Marker) -> Option<CompletedMarker> {
         if p.eat(T![in]) || p.eat_contextual_kw(T![out]) || p.eat_contextual_kw(T![lateout]) {
             dir_spec.complete(p, ASM_DIR_SPEC);
             parse_reg(p);
+            let op_expr = p.start();
             expr(p);
+            op_expr.complete(p, ASM_OPERAND_EXPR);
             op.complete(p, ASM_REG_OPERAND);
             op_n.complete(p, ASM_OPERAND_NAMED);
         } else if p.eat_contextual_kw(T![inout]) || p.eat_contextual_kw(T![inlateout]) {
             dir_spec.complete(p, ASM_DIR_SPEC);
             parse_reg(p);
+            let op_expr = p.start();
             expr(p);
             if p.eat(T![=>]) {
                 expr(p);
             }
+            op_expr.complete(p, ASM_OPERAND_EXPR);
             op.complete(p, ASM_REG_OPERAND);
             op_n.complete(p, ASM_OPERAND_NAMED);
         } else if p.eat_contextual_kw(T![label]) {
diff --git a/src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/asm_expr.rast b/src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/asm_expr.rast
index 4afa9daf590..f0213d0b5e3 100644
--- a/src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/asm_expr.rast
+++ b/src/tools/rust-analyzer/crates/parser/test_data/parser/inline/ok/asm_expr.rast
@@ -50,11 +50,12 @@ SOURCE_FILE
                     IDENT "reg"
                 R_PAREN ")"
                 WHITESPACE " "
-                PATH_EXPR
-                  PATH
-                    PATH_SEGMENT
-                      NAME_REF
-                        IDENT "x"
+                ASM_OPERAND_EXPR
+                  PATH_EXPR
+                    PATH
+                      PATH_SEGMENT
+                        NAME_REF
+                          IDENT "x"
             COMMA ","
             WHITESPACE "\n        "
             ASM_OPERAND_NAMED
@@ -72,8 +73,9 @@ SOURCE_FILE
                     IDENT "reg"
                 R_PAREN ")"
                 WHITESPACE " "
-                UNDERSCORE_EXPR
-                  UNDERSCORE "_"
+                ASM_OPERAND_EXPR
+                  UNDERSCORE_EXPR
+                    UNDERSCORE "_"
             COMMA ","
             WHITESPACE "\n    "
             R_PAREN ")"