mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 21:23:56 +00:00
Handle evaluating constant index expression
This commit is contained in:
parent
2153abb412
commit
621767136e
1 changed files with 15 additions and 0 deletions
|
@ -268,6 +268,7 @@ impl<'c, 'cc> ConstEvalLateContext<'c, 'cc> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
ExprKind::Index(ref arr, ref index) => self.index(arr, index),
|
||||||
// TODO: add other expressions.
|
// TODO: add other expressions.
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
|
@ -345,6 +346,20 @@ impl<'c, 'cc> ConstEvalLateContext<'c, 'cc> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn index(&mut self, lhs: &'_ Expr<'_>, index: &'_ Expr<'_>) -> Option<Constant> {
|
||||||
|
let lhs = self.expr(lhs);
|
||||||
|
let index = self.expr(index);
|
||||||
|
|
||||||
|
match (lhs, index) {
|
||||||
|
(Some(Constant::Vec(vec)), Some(Constant::Int(index))) => match vec[index as usize] {
|
||||||
|
Constant::F32(x) => Some(Constant::F32(x)),
|
||||||
|
Constant::F64(x) => Some(Constant::F64(x)),
|
||||||
|
_ => None,
|
||||||
|
},
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A block can only yield a constant if it only has one constant expression.
|
/// A block can only yield a constant if it only has one constant expression.
|
||||||
fn block(&mut self, block: &Block<'_>) -> Option<Constant> {
|
fn block(&mut self, block: &Block<'_>) -> Option<Constant> {
|
||||||
if block.stmts.is_empty() {
|
if block.stmts.is_empty() {
|
||||||
|
|
Loading…
Reference in a new issue