@@ -166,12 +166,11 @@ fn get_name(variant: EnumVariantId, ctx: &mut ConstEvalCtx<'_>) -> String {
166
166
pub fn eval_const (
167
167
expr_id : ExprId ,
168
168
ctx : & mut ConstEvalCtx < ' _ > ,
169
- variant : Option < EnumVariantId > ,
170
169
) -> Result < ComputedExpr , ConstEvalError > {
171
170
let expr = & ctx. exprs [ expr_id] ;
172
171
match expr {
173
- Expr :: Missing => match variant {
174
- Some ( variant) => {
172
+ Expr :: Missing => match ctx . owner {
173
+ DefWithBodyId :: VariantId ( variant) => {
175
174
let prev_idx: u32 = variant. local_id . into_raw ( ) . into ( ) ;
176
175
let prev_idx = prev_idx. checked_sub ( 1 ) . map ( |idx| Idx :: from_raw ( RawIdx :: from ( idx) ) ) ;
177
176
let value = match prev_idx {
@@ -198,7 +197,7 @@ pub fn eval_const(
198
197
Expr :: Literal ( l) => Ok ( ComputedExpr :: Literal ( l. clone ( ) ) ) ,
199
198
& Expr :: UnaryOp { expr, op } => {
200
199
let ty = & ctx. expr_ty ( expr) ;
201
- let ev = eval_const ( expr, ctx, None ) ?;
200
+ let ev = eval_const ( expr, ctx) ?;
202
201
match op {
203
202
hir_def:: expr:: UnaryOp :: Deref => Err ( ConstEvalError :: NotSupported ( "deref" ) ) ,
204
203
hir_def:: expr:: UnaryOp :: Not => {
@@ -254,8 +253,8 @@ pub fn eval_const(
254
253
}
255
254
& Expr :: BinaryOp { lhs, rhs, op } => {
256
255
let ty = & ctx. expr_ty ( lhs) ;
257
- let lhs = eval_const ( lhs, ctx, None ) ?;
258
- let rhs = eval_const ( rhs, ctx, None ) ?;
256
+ let lhs = eval_const ( lhs, ctx) ?;
257
+ let rhs = eval_const ( rhs, ctx) ?;
259
258
let op = op. ok_or ( ConstEvalError :: IncompleteExpr ) ?;
260
259
let v1 = match lhs {
261
260
ComputedExpr :: Literal ( Literal :: Int ( v, _) ) => v,
@@ -316,7 +315,7 @@ pub fn eval_const(
316
315
}
317
316
} ;
318
317
let value = match initializer {
319
- Some ( x) => eval_const ( x, ctx, None ) ?,
318
+ Some ( x) => eval_const ( x, ctx) ?,
320
319
None => continue ,
321
320
} ;
322
321
if !prev_values. contains_key ( & pat_id) {
@@ -332,7 +331,7 @@ pub fn eval_const(
332
331
}
333
332
}
334
333
let r = match tail {
335
- & Some ( x) => eval_const ( x, ctx, None ) ,
334
+ & Some ( x) => eval_const ( x, ctx) ,
336
335
None => Ok ( ComputedExpr :: Tuple ( Box :: new ( [ ] ) ) ) ,
337
336
} ;
338
337
// clean up local data, so caller will receive the exact map that passed to us
@@ -390,7 +389,7 @@ pub fn eval_const(
390
389
_ => Err ( ConstEvalError :: NotSupported ( "path that are not const or local" ) ) ,
391
390
}
392
391
}
393
- & Expr :: Cast { expr, .. } => match eval_const ( expr, ctx, None ) ? {
392
+ & Expr :: Cast { expr, .. } => match eval_const ( expr, ctx) ? {
394
393
ComputedExpr :: Enum ( _, _, lit) => Ok ( ComputedExpr :: Literal ( lit) ) ,
395
394
_ => Err ( ConstEvalError :: NotSupported ( "Can't cast these types" ) ) ,
396
395
} ,
@@ -489,7 +488,6 @@ pub(crate) fn const_eval_query(
489
488
local_data : HashMap :: default ( ) ,
490
489
infer,
491
490
} ,
492
- None ,
493
491
) ;
494
492
result
495
493
}
@@ -511,7 +509,6 @@ pub(crate) fn const_eval_query_variant(
511
509
local_data : HashMap :: default ( ) ,
512
510
infer,
513
511
} ,
514
- Some ( variant_id) ,
515
512
)
516
513
}
517
514
@@ -538,7 +535,7 @@ pub(crate) fn eval_to_const<'a>(
538
535
local_data : HashMap :: default ( ) ,
539
536
infer : & ctx. result ,
540
537
} ;
541
- let computed_expr = eval_const ( expr, & mut ctx, None ) ;
538
+ let computed_expr = eval_const ( expr, & mut ctx) ;
542
539
let const_scalar = match computed_expr {
543
540
Ok ( ComputedExpr :: Literal ( literal) ) => literal. into ( ) ,
544
541
_ => ConstScalar :: Unknown ,
0 commit comments