С текущими ночными моделями можно использовать rustc::middle::const_eval_partial(..)
, чтобы получить Result<ConstVal, _>
. Однако, что ConstVal
является Tuple { node: NodeId }
для значений кортежа. Как я могу получить содержимое этого кортежа?Как получить кортеж из ConstVal?
Пример кода (здесь минимальный пух для использования в качестве компилятора плагина):
use rustc::lint::*;
use syntax::ptr::P;
use rustc_front::hir::*;
use rustc::middle::const_eval::ConstVal::Tuple;
use rustc::middle::const_eval::eval_const_expr_partial;
use rustc::middle::const_eval::EvalHint::ExprTypeChecked;
declare_lint! { pub TEST_LINT, Warn, "Just a test, ignore this" }
#[derive(Copy,Clone)]
pub struct TestLint;
impl LintPass for TestLint {
fn get_lints(&self) -> LintArray {
lint_array!TEST_LINT)
}
}
impl LateLintPass for BitMask {
fn check_expr(&mut self, cx: &LateContext, e: &Expr) {
let res = eval_const_expr_partial(cx.tcx, expr, ExprTypeChecked, None);
if let Ok(Tuple(node_id))) = res {
// ... how to get the parts of the tuple?
}
}
}