diff --git a/hercules_ir/src/parse.rs b/hercules_ir/src/parse.rs index 3a47f8ea698196e8740af3d440c4d8239cd6893d..5e4b12178d1782df47d2e5d36abffdb568311799 100644 --- a/hercules_ir/src/parse.rs +++ b/hercules_ir/src/parse.rs @@ -978,20 +978,17 @@ fn parse_constant<'a>( Type::UnsignedInteger64 => parse_unsigned_integer64(ir_text)?, Type::Float32 => parse_float32(ir_text)?, Type::Float64 => parse_float64(ir_text)?, - Type::Product(ref tys) => parse_product_constant( - ir_text, - context.borrow_mut().get_type_id(ty.clone()), - tys, - context, - )?, - Type::Summation(ref tys) => parse_summation_constant( - ir_text, - context.borrow_mut().get_type_id(ty.clone()), - tys, - context, - )?, + Type::Product(ref tys) => { + let prod_ty = context.borrow_mut().get_type_id(ty.clone()); + parse_product_constant(ir_text, prod_ty, tys, context)? + } + Type::Summation(ref tys) => { + let sum_ty = context.borrow_mut().get_type_id(ty.clone()); + parse_summation_constant(ir_text, sum_ty, tys, context)? + } Type::Array(_, _) => { - parse_array_constant(ir_text, context.borrow_mut().get_type_id(ty.clone()))? + let array_ty = context.borrow_mut().get_type_id(ty.clone()); + parse_array_constant(ir_text, array_ty)? } }; Ok((ir_text, constant)) @@ -1094,11 +1091,8 @@ fn parse_product_constant<'a>( ir_text = nom::character::complete::char(',')(ir_text)?.0; } ir_text = nom::character::complete::multispace0(ir_text)?.0; - let (ir_text_tmp, id) = parse_constant_id( - ir_text, - context.borrow().reverse_type_map.get(ty).unwrap().clone(), - context, - )?; + let ty = context.borrow().reverse_type_map.get(ty).unwrap().clone(); + let (ir_text_tmp, id) = parse_constant_id(ir_text, ty, context)?; subconstants.push(id); ir_text = ir_text_tmp; } @@ -1127,16 +1121,13 @@ fn parse_summation_constant<'a>( let ir_text = nom::character::complete::multispace0(ir_text)?.0; let ir_text = nom::character::complete::char(',')(ir_text)?.0; let ir_text = nom::character::complete::multispace0(ir_text)?.0; - let (ir_text, id) = parse_constant_id( - ir_text, - context - .borrow() - .reverse_type_map - .get(&tys[variant as usize]) - .unwrap() - .clone(), - context, - )?; + let ty = context + .borrow() + .reverse_type_map + .get(&tys[variant as usize]) + .unwrap() + .clone(); + let (ir_text, id) = parse_constant_id(ir_text, ty, context)?; let ir_text = nom::character::complete::multispace0(ir_text)?.0; let ir_text = nom::character::complete::char(')')(ir_text)?.0; Ok((ir_text, Constant::Summation(sum_ty, variant, id))) diff --git a/hercules_samples/ccp/src/ccp.hir b/hercules_samples/ccp/src/ccp.hir index 25b7379e19f488c2d5ecf8cb377161758c62bb98..b8e939942be05f75d85411f05016ed3484ed1bf0 100644 --- a/hercules_samples/ccp/src/ccp.hir +++ b/hercules_samples/ccp/src/ccp.hir @@ -1,4 +1,5 @@ fn tricky(x: i32) -> i32 + not_used = constant(prod(u64, u64), prod(0, 0)) one = constant(i32, 1) two = constant(i32, 2) loop = region(start, if2_true)