Skip to content

Commit d248472

Browse files
committed
Make the param_info return type into a struct, and rename the function
1 parent 4abb0aa commit d248472

1 file changed

Lines changed: 34 additions & 13 deletions

File tree

compiler/rustc_ast_lowering/src/delegation.rs

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,19 @@ enum AttrAdditionKind {
8484
Inherit { factory: fn(Span, &hir::Attribute) -> hir::Attribute },
8585
}
8686

87+
/// Summary info about function parameters.
88+
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
89+
struct ParamInfo {
90+
/// The number of function parameters, including any C variadic `...` parameter.
91+
pub param_count: usize,
92+
93+
/// Whether the function arguments end in a C variadic `...` parameter.
94+
pub c_variadic: bool,
95+
96+
/// The index of the splatted parameter, if any.
97+
pub splatted: Option<u16>,
98+
}
99+
87100
const PARENT_ID: hir::ItemLocalId = hir::ItemLocalId::ZERO;
88101

89102
static ATTRS_ADDITIONS: &[AttrAdditionInfo] = &[
@@ -199,23 +212,26 @@ impl<'hir> LoweringContext<'_, 'hir> {
199212

200213
let is_method = self.is_method(sig_id, span);
201214

202-
let (param_count, c_variadic, splatted) = self.param_count(sig_id);
215+
let param_info = self.param_info(sig_id);
203216

204-
if !self.check_block_soundness(delegation, sig_id, is_method, param_count) {
217+
if !self.check_block_soundness(delegation, sig_id, is_method, param_info.param_count) {
205218
return self.generate_delegation_error(span, delegation);
206219
}
207220

208221
let mut generics = self.uplift_delegation_generics(delegation, sig_id, is_method);
209222

210-
let (body_id, call_expr_id, unused_target_expr) =
211-
self.lower_delegation_body(delegation, sig_id, param_count, &mut generics, span);
223+
let (body_id, call_expr_id, unused_target_expr) = self.lower_delegation_body(
224+
delegation,
225+
sig_id,
226+
param_info.param_count,
227+
&mut generics,
228+
span,
229+
);
212230

213231
let decl = self.lower_delegation_decl(
214232
delegation.source,
215233
sig_id,
216-
param_count,
217-
c_variadic,
218-
splatted,
234+
param_info,
219235
span,
220236
&generics,
221237
delegation.id,
@@ -368,26 +384,31 @@ impl<'hir> LoweringContext<'_, 'hir> {
368384
self.get_partial_res(node_id).and_then(|r| r.expect_full_res().opt_def_id())
369385
}
370386

371-
// Function parameter count, including C variadic `...` and `#[splat]` if present.
372-
fn param_count(&self, def_id: DefId) -> (usize, bool /*c_variadic*/, Option<u16> /*splatted*/) {
387+
/// Returns function parameter info, including C variadic `...` and `#[splat]` if present.
388+
fn param_info(&self, def_id: DefId) -> ParamInfo {
373389
let sig = self.tcx.fn_sig(def_id).skip_binder().skip_binder();
390+
374391
// FIXME(splat): use `sig.splatted()` once FnSig has it
375-
(sig.inputs().len() + usize::from(sig.c_variadic()), sig.c_variadic(), None)
392+
ParamInfo {
393+
param_count: sig.inputs().len() + usize::from(sig.c_variadic()),
394+
c_variadic: sig.c_variadic(),
395+
splatted: None,
396+
}
376397
}
377398

378399
fn lower_delegation_decl(
379400
&mut self,
380401
source: DelegationSource,
381402
sig_id: DefId,
382-
param_count: usize,
383-
c_variadic: bool,
384-
splatted: Option<u16>,
403+
param_info: ParamInfo,
385404
span: Span,
386405
generics: &GenericsGenerationResults<'hir>,
387406
call_path_node_id: NodeId,
388407
call_expr_id: HirId,
389408
unused_target_expr: bool,
390409
) -> &'hir hir::FnDecl<'hir> {
410+
let ParamInfo { param_count, c_variadic, splatted } = param_info;
411+
391412
// The last parameter in C variadic functions is skipped in the signature,
392413
// like during regular lowering.
393414
let decl_param_count = param_count - c_variadic as usize;

0 commit comments

Comments
 (0)