Skip to content

Commit 8e86a0e

Browse files
committed
rename to get rid of the 'raw' concept
1 parent 1305fcc commit 8e86a0e

File tree

2 files changed

+67
-69
lines changed
  • compiler/rustc_builtin_macros/src
  • src/tools/rustfmt/src/parse/macros

2 files changed

+67
-69
lines changed

compiler/rustc_builtin_macros/src/asm.rs

Lines changed: 64 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,20 @@ use crate::util::{ExprToSpannedString, expr_to_spanned_string};
2020

2121
/// An argument to one of the `asm!` macros. The argument is syntactically valid, but is otherwise
2222
/// not validated at all.
23-
pub struct RawAsmArg {
24-
pub kind: RawAsmArgKind,
23+
pub struct AsmArg {
24+
pub kind: AsmArgKind,
2525
pub span: Span,
2626
}
2727

28-
pub enum RawAsmArgKind {
28+
pub enum AsmArgKind {
2929
Template(P<ast::Expr>),
3030
Operand(Option<Symbol>, ast::InlineAsmOperand),
3131
Options(Vec<(Symbol, ast::InlineAsmOptions, Span, Span)>),
3232
ClobberAbi(Vec<(Symbol, Span)>),
3333
}
3434

3535
/// Validated assembly arguments, ready for macro expansion.
36-
struct AsmArgs {
36+
struct ValidatedAsmArgs {
3737
pub templates: Vec<P<ast::Expr>>,
3838
pub operands: Vec<(ast::InlineAsmOperand, Span)>,
3939
named_args: FxIndexMap<Symbol, usize>,
@@ -145,11 +145,11 @@ fn parse_asm_operand<'a>(
145145
}
146146

147147
// Public for rustfmt.
148-
pub fn parse_raw_asm_args<'a>(
148+
pub fn parse_asm_args<'a>(
149149
p: &mut Parser<'a>,
150150
sp: Span,
151151
asm_macro: AsmMacro,
152-
) -> PResult<'a, Vec<RawAsmArg>> {
152+
) -> PResult<'a, Vec<AsmArg>> {
153153
let dcx = p.dcx();
154154

155155
if p.token == token::Eof {
@@ -159,10 +159,7 @@ pub fn parse_raw_asm_args<'a>(
159159
let mut args = Vec::new();
160160

161161
let first_template = p.parse_expr()?;
162-
args.push(RawAsmArg {
163-
span: first_template.span,
164-
kind: RawAsmArgKind::Template(first_template),
165-
});
162+
args.push(AsmArg { span: first_template.span, kind: AsmArgKind::Template(first_template) });
166163

167164
let mut allow_templates = true;
168165

@@ -188,8 +185,8 @@ pub fn parse_raw_asm_args<'a>(
188185
if p.eat_keyword(exp!(ClobberAbi)) {
189186
allow_templates = false;
190187

191-
args.push(RawAsmArg {
192-
kind: RawAsmArgKind::ClobberAbi(parse_clobber_abi(p)?),
188+
args.push(AsmArg {
189+
kind: AsmArgKind::ClobberAbi(parse_clobber_abi(p)?),
193190
span: span_start.to(p.prev_token.span),
194191
});
195192

@@ -200,8 +197,8 @@ pub fn parse_raw_asm_args<'a>(
200197
if p.eat_keyword(exp!(Options)) {
201198
allow_templates = false;
202199

203-
args.push(RawAsmArg {
204-
kind: RawAsmArgKind::Options(parse_options(p, asm_macro)?),
200+
args.push(AsmArg {
201+
kind: AsmArgKind::Options(parse_options(p, asm_macro)?),
205202
span: span_start.to(p.prev_token.span),
206203
});
207204

@@ -222,9 +219,9 @@ pub fn parse_raw_asm_args<'a>(
222219
if let Some(op) = parse_asm_operand(p, asm_macro)? {
223220
allow_templates = false;
224221

225-
args.push(RawAsmArg {
222+
args.push(AsmArg {
226223
span: span_start.to(p.prev_token.span),
227-
kind: RawAsmArgKind::Operand(name, op),
224+
kind: AsmArgKind::Operand(name, op),
228225
});
229226
} else if allow_templates {
230227
let template = p.parse_expr()?;
@@ -246,7 +243,7 @@ pub fn parse_raw_asm_args<'a>(
246243
}
247244
}
248245

249-
args.push(RawAsmArg { span: template.span, kind: RawAsmArgKind::Template(template) });
246+
args.push(AsmArg { span: template.span, kind: AsmArgKind::Template(template) });
250247
} else {
251248
p.unexpected_any()?
252249
}
@@ -260,19 +257,19 @@ fn parse_args<'a>(
260257
sp: Span,
261258
tts: TokenStream,
262259
asm_macro: AsmMacro,
263-
) -> PResult<'a, AsmArgs> {
264-
let raw_args = parse_raw_asm_args(&mut ecx.new_parser_from_tts(tts), sp, asm_macro)?;
265-
validate_raw_asm_args(ecx, asm_macro, raw_args)
260+
) -> PResult<'a, ValidatedAsmArgs> {
261+
let args = parse_asm_args(&mut ecx.new_parser_from_tts(tts), sp, asm_macro)?;
262+
validate_asm_args(ecx, asm_macro, args)
266263
}
267264

268-
fn validate_raw_asm_args<'a>(
265+
fn validate_asm_args<'a>(
269266
ecx: &ExtCtxt<'a>,
270267
asm_macro: AsmMacro,
271-
raw_args: Vec<RawAsmArg>,
272-
) -> PResult<'a, AsmArgs> {
268+
args: Vec<AsmArg>,
269+
) -> PResult<'a, ValidatedAsmArgs> {
273270
let dcx = ecx.dcx();
274271

275-
let mut args = AsmArgs {
272+
let mut validated = ValidatedAsmArgs {
276273
templates: vec![],
277274
operands: vec![],
278275
named_args: Default::default(),
@@ -284,9 +281,9 @@ fn validate_raw_asm_args<'a>(
284281

285282
let mut allow_templates = true;
286283

287-
for arg in raw_args {
284+
for arg in args {
288285
match arg.kind {
289-
RawAsmArgKind::Template(template) => {
286+
AsmArgKind::Template(template) => {
290287
// The error for the first template is delayed.
291288
if !allow_templates {
292289
match template.kind {
@@ -306,15 +303,15 @@ fn validate_raw_asm_args<'a>(
306303
}
307304
}
308305

309-
args.templates.push(template);
306+
validated.templates.push(template);
310307
}
311-
RawAsmArgKind::Operand(name, op) => {
308+
AsmArgKind::Operand(name, op) => {
312309
allow_templates = false;
313310

314311
let explicit_reg = matches!(op.reg(), Some(ast::InlineAsmRegOrRegClass::Reg(_)));
315312
let span = arg.span;
316-
let slot = args.operands.len();
317-
args.operands.push((op, span));
313+
let slot = validated.operands.len();
314+
validated.operands.push((op, span));
318315

319316
// Validate the order of named, positional & explicit register operands and
320317
// clobber_abi/options. We do this at the end once we have the full span
@@ -324,25 +321,27 @@ fn validate_raw_asm_args<'a>(
324321
if name.is_some() {
325322
dcx.emit_err(errors::AsmExplicitRegisterName { span });
326323
}
327-
args.reg_args.insert(slot);
324+
validated.reg_args.insert(slot);
328325
} else if let Some(name) = name {
329-
if let Some(&prev) = args.named_args.get(&name) {
326+
if let Some(&prev) = validated.named_args.get(&name) {
330327
dcx.emit_err(errors::AsmDuplicateArg {
331328
span,
332329
name,
333-
prev: args.operands[prev].1,
330+
prev: validated.operands[prev].1,
334331
});
335332
continue;
336333
}
337-
args.named_args.insert(name, slot);
338-
} else if !args.named_args.is_empty() || !args.reg_args.is_empty() {
339-
let named = args.named_args.values().map(|p| args.operands[*p].1).collect();
340-
let explicit = args.reg_args.iter().map(|p| args.operands[p].1).collect();
334+
validated.named_args.insert(name, slot);
335+
} else if !validated.named_args.is_empty() || !validated.reg_args.is_empty() {
336+
let named =
337+
validated.named_args.values().map(|p| validated.operands[*p].1).collect();
338+
let explicit =
339+
validated.reg_args.iter().map(|p| validated.operands[p].1).collect();
341340

342341
dcx.emit_err(errors::AsmPositionalAfter { span, named, explicit });
343342
}
344343
}
345-
RawAsmArgKind::Options(new_options) => {
344+
AsmArgKind::Options(new_options) => {
346345
allow_templates = false;
347346

348347
for (symbol, option, span, full_span) in new_options {
@@ -354,53 +353,55 @@ fn validate_raw_asm_args<'a>(
354353
full_span,
355354
macro_name: asm_macro.macro_name(),
356355
});
357-
} else if args.options.contains(option) {
356+
} else if validated.options.contains(option) {
358357
// Tool-only output.
359358
dcx.emit_err(errors::AsmOptAlreadyprovided { span, symbol, full_span });
360359
} else {
361-
args.options |= option;
360+
validated.options |= option;
362361
}
363362
}
364363

365-
args.options_spans.push(arg.span);
364+
validated.options_spans.push(arg.span);
366365
}
367-
RawAsmArgKind::ClobberAbi(new_abis) => {
366+
AsmArgKind::ClobberAbi(new_abis) => {
368367
allow_templates = false;
369368

370369
match &new_abis[..] {
371370
// This should have errored above during parsing.
372371
[] => unreachable!(),
373-
[(abi, _span)] => args.clobber_abis.push((*abi, arg.span)),
374-
_ => args.clobber_abis.extend(new_abis),
372+
[(abi, _span)] => validated.clobber_abis.push((*abi, arg.span)),
373+
_ => validated.clobber_abis.extend(new_abis),
375374
}
376375
}
377376
}
378377
}
379378

380-
if args.options.contains(ast::InlineAsmOptions::NOMEM)
381-
&& args.options.contains(ast::InlineAsmOptions::READONLY)
379+
if validated.options.contains(ast::InlineAsmOptions::NOMEM)
380+
&& validated.options.contains(ast::InlineAsmOptions::READONLY)
382381
{
383-
let spans = args.options_spans.clone();
382+
let spans = validated.options_spans.clone();
384383
dcx.emit_err(errors::AsmMutuallyExclusive { spans, opt1: "nomem", opt2: "readonly" });
385384
}
386-
if args.options.contains(ast::InlineAsmOptions::PURE)
387-
&& args.options.contains(ast::InlineAsmOptions::NORETURN)
385+
if validated.options.contains(ast::InlineAsmOptions::PURE)
386+
&& validated.options.contains(ast::InlineAsmOptions::NORETURN)
388387
{
389-
let spans = args.options_spans.clone();
388+
let spans = validated.options_spans.clone();
390389
dcx.emit_err(errors::AsmMutuallyExclusive { spans, opt1: "pure", opt2: "noreturn" });
391390
}
392-
if args.options.contains(ast::InlineAsmOptions::PURE)
393-
&& !args.options.intersects(ast::InlineAsmOptions::NOMEM | ast::InlineAsmOptions::READONLY)
391+
if validated.options.contains(ast::InlineAsmOptions::PURE)
392+
&& !validated
393+
.options
394+
.intersects(ast::InlineAsmOptions::NOMEM | ast::InlineAsmOptions::READONLY)
394395
{
395-
let spans = args.options_spans.clone();
396+
let spans = validated.options_spans.clone();
396397
dcx.emit_err(errors::AsmPureCombine { spans });
397398
}
398399

399400
let mut have_real_output = false;
400401
let mut outputs_sp = vec![];
401402
let mut regclass_outputs = vec![];
402403
let mut labels_sp = vec![];
403-
for (op, op_sp) in &args.operands {
404+
for (op, op_sp) in &validated.operands {
404405
match op {
405406
ast::InlineAsmOperand::Out { reg, expr, .. }
406407
| ast::InlineAsmOperand::SplitInOut { reg, out_expr: expr, .. } => {
@@ -423,26 +424,26 @@ fn validate_raw_asm_args<'a>(
423424
_ => {}
424425
}
425426
}
426-
if args.options.contains(ast::InlineAsmOptions::PURE) && !have_real_output {
427-
dcx.emit_err(errors::AsmPureNoOutput { spans: args.options_spans.clone() });
427+
if validated.options.contains(ast::InlineAsmOptions::PURE) && !have_real_output {
428+
dcx.emit_err(errors::AsmPureNoOutput { spans: validated.options_spans.clone() });
428429
}
429-
if args.options.contains(ast::InlineAsmOptions::NORETURN)
430+
if validated.options.contains(ast::InlineAsmOptions::NORETURN)
430431
&& !outputs_sp.is_empty()
431432
&& labels_sp.is_empty()
432433
{
433434
let err = dcx.create_err(errors::AsmNoReturn { outputs_sp });
434435
// Bail out now since this is likely to confuse MIR
435436
return Err(err);
436437
}
437-
if args.options.contains(ast::InlineAsmOptions::MAY_UNWIND) && !labels_sp.is_empty() {
438+
if validated.options.contains(ast::InlineAsmOptions::MAY_UNWIND) && !labels_sp.is_empty() {
438439
dcx.emit_err(errors::AsmMayUnwind { labels_sp });
439440
}
440441

441-
if !args.clobber_abis.is_empty() {
442+
if !validated.clobber_abis.is_empty() {
442443
match asm_macro {
443444
AsmMacro::GlobalAsm | AsmMacro::NakedAsm => {
444445
let err = dcx.create_err(errors::AsmUnsupportedClobberAbi {
445-
spans: args.clobber_abis.iter().map(|(_, span)| *span).collect(),
446+
spans: validated.clobber_abis.iter().map(|(_, span)| *span).collect(),
446447
macro_name: asm_macro.macro_name(),
447448
});
448449

@@ -453,14 +454,14 @@ fn validate_raw_asm_args<'a>(
453454
if !regclass_outputs.is_empty() {
454455
dcx.emit_err(errors::AsmClobberNoReg {
455456
spans: regclass_outputs,
456-
clobbers: args.clobber_abis.iter().map(|(_, span)| *span).collect(),
457+
clobbers: validated.clobber_abis.iter().map(|(_, span)| *span).collect(),
457458
});
458459
}
459460
}
460461
}
461462
}
462463

463-
Ok(args)
464+
Ok(validated)
464465
}
465466

466467
fn parse_options<'a>(
@@ -566,7 +567,7 @@ fn parse_reg<'a>(p: &mut Parser<'a>) -> PResult<'a, ast::InlineAsmRegOrRegClass>
566567
fn expand_preparsed_asm(
567568
ecx: &mut ExtCtxt<'_>,
568569
asm_macro: AsmMacro,
569-
args: AsmArgs,
570+
args: ValidatedAsmArgs,
570571
) -> ExpandResult<Result<ast::InlineAsm, ErrorGuaranteed>, ()> {
571572
let mut template = vec![];
572573
// Register operands are implicitly used since they are not allowed to be
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
use rustc_ast::ast;
2-
use rustc_builtin_macros::asm::{RawAsmArg, parse_raw_asm_args};
2+
use rustc_builtin_macros::asm::{AsmArg, parse_asm_args};
33

44
use crate::rewrite::RewriteContext;
55

66
#[allow(dead_code)]
7-
pub(crate) fn parse_asm(
8-
context: &RewriteContext<'_>,
9-
mac: &ast::MacCall,
10-
) -> Option<Vec<RawAsmArg>> {
7+
pub(crate) fn parse_asm(context: &RewriteContext<'_>, mac: &ast::MacCall) -> Option<Vec<AsmArg>> {
118
let ts = mac.args.tokens.clone();
129
let mut parser = super::build_parser(context, ts);
13-
parse_raw_asm_args(&mut parser, mac.span(), ast::AsmMacro::Asm).ok()
10+
parse_asm_args(&mut parser, mac.span(), ast::AsmMacro::Asm).ok()
1411
}

0 commit comments

Comments
 (0)