about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFolkert de Vries <folkert@folkertdev.nl>2025-04-30 01:06:38 +0200
committerFolkert de Vries <folkert@folkertdev.nl>2025-05-18 11:28:31 +0200
commit7ec06fc3b14933b1937f11ee028e2e8f245e7857 (patch)
tree79b63edd0bdcbb4d9eb2ab7ce38654f703af9f8d
parentde8e305ba8feae17e5bc1281647865dc3f1deadf (diff)
downloadrust-7ec06fc3b14933b1937f11ee028e2e8f245e7857.tar.gz
rust-7ec06fc3b14933b1937f11ee028e2e8f245e7857.zip
attempt to have rustfmt use the new logic
apparently it doesn't really use the asm parsing at present, so this may work?
-rw-r--r--compiler/rustc_builtin_macros/src/asm.rs25
-rw-r--r--src/tools/rustfmt/src/parse/macros/asm.rs9
2 files changed, 14 insertions, 20 deletions
diff --git a/compiler/rustc_builtin_macros/src/asm.rs b/compiler/rustc_builtin_macros/src/asm.rs
index be6f6b60136..8298b77f7b1 100644
--- a/compiler/rustc_builtin_macros/src/asm.rs
+++ b/compiler/rustc_builtin_macros/src/asm.rs
@@ -4,7 +4,7 @@ use rustc_ast::ptr::P;
 use rustc_ast::tokenstream::TokenStream;
 use rustc_ast::{AsmMacro, token};
 use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
-use rustc_errors::{DiagCtxtHandle, PResult};
+use rustc_errors::PResult;
 use rustc_expand::base::*;
 use rustc_index::bit_set::GrowableBitSet;
 use rustc_parse::exp;
@@ -33,7 +33,7 @@ pub enum RawAsmArgKind {
 }
 
 /// Validated assembly arguments, ready for macro expansion.
-pub struct AsmArgs {
+struct AsmArgs {
     pub templates: Vec<P<ast::Expr>>,
     pub operands: Vec<(ast::InlineAsmOperand, Span)>,
     named_args: FxIndexMap<Symbol, usize>,
@@ -261,26 +261,17 @@ fn parse_args<'a>(
     tts: TokenStream,
     asm_macro: AsmMacro,
 ) -> PResult<'a, AsmArgs> {
-    let mut p = ecx.new_parser_from_tts(tts);
-    parse_asm_args(&mut p, sp, asm_macro)
+    let raw_args = parse_raw_asm_args(&mut ecx.new_parser_from_tts(tts), sp, asm_macro)?;
+    validate_raw_asm_args(ecx, asm_macro, raw_args)
 }
 
-// public for use in rustfmt
-// FIXME: use `RawAsmArg` in the formatting code instead.
-pub fn parse_asm_args<'a>(
-    p: &mut Parser<'a>,
-    sp: Span,
-    asm_macro: AsmMacro,
-) -> PResult<'a, AsmArgs> {
-    let raw_args = parse_raw_asm_args(p, sp, asm_macro)?;
-    validate_raw_asm_args(p.dcx(), asm_macro, raw_args)
-}
-
-pub fn validate_raw_asm_args<'a>(
-    dcx: DiagCtxtHandle<'a>,
+fn validate_raw_asm_args<'a>(
+    ecx: &ExtCtxt<'a>,
     asm_macro: AsmMacro,
     raw_args: Vec<RawAsmArg>,
 ) -> PResult<'a, AsmArgs> {
+    let dcx = ecx.dcx();
+
     let mut args = AsmArgs {
         templates: vec![],
         operands: vec![],
diff --git a/src/tools/rustfmt/src/parse/macros/asm.rs b/src/tools/rustfmt/src/parse/macros/asm.rs
index 58c8d21bd7a..18e3386f4f1 100644
--- a/src/tools/rustfmt/src/parse/macros/asm.rs
+++ b/src/tools/rustfmt/src/parse/macros/asm.rs
@@ -1,11 +1,14 @@
 use rustc_ast::ast;
-use rustc_builtin_macros::asm::{AsmArgs, parse_asm_args};
+use rustc_builtin_macros::asm::{RawAsmArg, parse_raw_asm_args};
 
 use crate::rewrite::RewriteContext;
 
 #[allow(dead_code)]
-pub(crate) fn parse_asm(context: &RewriteContext<'_>, mac: &ast::MacCall) -> Option<AsmArgs> {
+pub(crate) fn parse_asm(
+    context: &RewriteContext<'_>,
+    mac: &ast::MacCall,
+) -> Option<Vec<RawAsmArg>> {
     let ts = mac.args.tokens.clone();
     let mut parser = super::build_parser(context, ts);
-    parse_asm_args(&mut parser, mac.span(), ast::AsmMacro::Asm).ok()
+    parse_raw_asm_args(&mut parser, mac.span(), ast::AsmMacro::Asm).ok()
 }