diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2019-03-29 17:23:52 +0100 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2019-03-29 17:23:52 +0100 |
| commit | 35705dee7eb10783280e0be92aedfc187e019dd2 (patch) | |
| tree | ce087c1461e548a2e67e96d358ac7de7633304b6 /src | |
| parent | 56842b2154c0c2dd243f64e864b9c6aee718a161 (diff) | |
| download | rust-35705dee7eb10783280e0be92aedfc187e019dd2.tar.gz rust-35705dee7eb10783280e0be92aedfc187e019dd2.zip | |
Use ExactSizeIterator + TrustedLen instead of num_cases arg for switch
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_codegen_llvm/builder.rs | 6 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/lib.rs | 1 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/lib.rs | 1 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/mir/block.rs | 1 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/traits/builder.rs | 4 |
5 files changed, 7 insertions, 6 deletions
diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs index fbeb978413a..123fda1e215 100644 --- a/src/librustc_codegen_llvm/builder.rs +++ b/src/librustc_codegen_llvm/builder.rs @@ -21,6 +21,7 @@ use rustc_codegen_ssa::mir::place::PlaceRef; use std::borrow::Cow; use std::ops::{Deref, Range}; use std::ptr; +use std::iter::TrustedLen; // All Builders must have an llfn associated with them #[must_use] @@ -169,11 +170,10 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { &mut self, v: &'ll Value, else_llbb: &'ll BasicBlock, - num_cases: usize, - cases: impl Iterator<Item = (u128, &'ll BasicBlock)>, + cases: impl ExactSizeIterator<Item = (u128, &'ll BasicBlock)> + TrustedLen, ) { let switch = unsafe { - llvm::LLVMBuildSwitch(self.llbuilder, v, else_llbb, num_cases as c_uint) + llvm::LLVMBuildSwitch(self.llbuilder, v, else_llbb, cases.len() as c_uint) }; for (on_val, dest) in cases { let on_val = self.const_uint_big(self.val_ty(v), on_val); diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index c95feafa29a..0aae6b46e3d 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -20,6 +20,7 @@ #![feature(concat_idents)] #![feature(link_args)] #![feature(static_nobundle)] +#![feature(trusted_len)] #![deny(rust_2018_idioms)] #![allow(explicit_outlives_requirements)] diff --git a/src/librustc_codegen_ssa/lib.rs b/src/librustc_codegen_ssa/lib.rs index fe9b88c85f0..1e898ced7a6 100644 --- a/src/librustc_codegen_ssa/lib.rs +++ b/src/librustc_codegen_ssa/lib.rs @@ -10,6 +10,7 @@ #![feature(try_blocks)] #![feature(in_band_lifetimes)] #![feature(nll)] +#![feature(trusted_len)] #![allow(unused_attributes)] #![allow(dead_code)] #![deny(rust_2018_idioms)] diff --git a/src/librustc_codegen_ssa/mir/block.rs b/src/librustc_codegen_ssa/mir/block.rs index 0ce97553bea..98da07a905e 100644 --- a/src/librustc_codegen_ssa/mir/block.rs +++ b/src/librustc_codegen_ssa/mir/block.rs @@ -217,7 +217,6 @@ impl<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { bx.switch( discr.immediate(), helper.llblock(self, *otherwise), - values.len(), values.iter().zip(targets).map(|(&value, target)| { (value, helper.llblock(self, *target)) }) diff --git a/src/librustc_codegen_ssa/traits/builder.rs b/src/librustc_codegen_ssa/traits/builder.rs index 3b0f047d974..48142fc9fa9 100644 --- a/src/librustc_codegen_ssa/traits/builder.rs +++ b/src/librustc_codegen_ssa/traits/builder.rs @@ -12,6 +12,7 @@ use crate::MemFlags; use rustc::ty::Ty; use rustc::ty::layout::{Align, Size}; use std::ops::Range; +use std::iter::TrustedLen; #[derive(Copy, Clone)] pub enum OverflowOp { @@ -49,8 +50,7 @@ pub trait BuilderMethods<'a, 'tcx: 'a>: &mut self, v: Self::Value, else_llbb: Self::BasicBlock, - num_cases: usize, - cases: impl Iterator<Item = (u128, Self::BasicBlock)>, + cases: impl ExactSizeIterator<Item = (u128, Self::BasicBlock)> + TrustedLen, ); fn invoke( &mut self, |
