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