Skip to content

Commit ede9033

Browse files
committed
Make the param_info return type into a struct, and rename the function
fixup! Add HIR FnDecl for #[splat]
1 parent 8a1dfe1 commit ede9033

1 file changed

Lines changed: 27 additions & 16 deletions

File tree

compiler/rustc_ast_lowering/src/delegation.rs

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,19 @@ enum AttrAdditionKind {
8181
Inherit { factory: fn(Span, &hir::Attribute) -> hir::Attribute },
8282
}
8383

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

8699
static ATTRS_ADDITIONS: &[AttrAdditionInfo] = &[
@@ -141,27 +154,20 @@ impl<'hir> LoweringContext<'_, 'hir> {
141154

142155
let is_method = self.is_method(sig_id, span);
143156

144-
let (param_count, c_variadic, splatted) = self.param_count(sig_id);
157+
let param_info = self.param_info(sig_id);
145158

146159
let mut generics =
147160
self.uplift_delegation_generics(delegation, sig_id, item_id, is_method);
148161

149162
let body_id = self.lower_delegation_body(
150163
delegation,
151164
is_method,
152-
param_count,
165+
param_info.param_count,
153166
&mut generics,
154167
span,
155168
);
156169

157-
let decl = self.lower_delegation_decl(
158-
sig_id,
159-
param_count,
160-
c_variadic,
161-
splatted,
162-
span,
163-
&generics,
164-
);
170+
let decl = self.lower_delegation_decl(sig_id, param_info, span, &generics);
165171

166172
let sig = self.lower_delegation_sig(sig_id, decl, span);
167173
let ident = self.lower_ident(delegation.ident);
@@ -275,21 +281,26 @@ impl<'hir> LoweringContext<'_, 'hir> {
275281
self.get_partial_res(node_id).and_then(|r| r.expect_full_res().opt_def_id())
276282
}
277283

278-
// Function parameter count, including C variadic `...` and `#[splat]` if present.
279-
fn param_count(&self, def_id: DefId) -> (usize, bool /*c_variadic*/, Option<u16> /*splatted*/) {
284+
/// Returns function parameter info, including C variadic `...` and `#[splat]` if present.
285+
fn param_info(&self, def_id: DefId) -> ParamInfo {
280286
let sig = self.tcx.fn_sig(def_id).skip_binder().skip_binder();
281-
(sig.inputs().len() + usize::from(sig.c_variadic()), sig.c_variadic(), sig.splatted())
287+
288+
ParamInfo {
289+
param_count: sig.inputs().len() + usize::from(sig.c_variadic()),
290+
c_variadic: sig.c_variadic(),
291+
splatted: sig.splatted(),
292+
}
282293
}
283294

284295
fn lower_delegation_decl(
285296
&mut self,
286297
sig_id: DefId,
287-
param_count: usize,
288-
c_variadic: bool,
289-
splatted: Option<u16>,
298+
param_info: ParamInfo,
290299
span: Span,
291300
generics: &GenericsGenerationResults<'hir>,
292301
) -> &'hir hir::FnDecl<'hir> {
302+
let ParamInfo { param_count, c_variadic, splatted } = param_info;
303+
293304
// The last parameter in C variadic functions is skipped in the signature,
294305
// like during regular lowering.
295306
let decl_param_count = param_count - c_variadic as usize;

0 commit comments

Comments
 (0)