Allow wider expressions for when self is not taken as borrow
This commit is contained in:
		
							parent
							
								
									3adb745576
								
							
						
					
					
						commit
						1e094eeea0
					
				| @ -614,24 +614,36 @@ impl Expression { | |||||||
|                                 first_param.1, |                                 first_param.1, | ||||||
|                             ) |                             ) | ||||||
|                             .resolve_ref(type_refs.types); |                             .resolve_ref(type_refs.types); | ||||||
|                         let backing_var = first_param.backing_var().expect("todo").1.clone(); |                         let backing_var = first_param.backing_var(); | ||||||
| 
 |                         let is_mutable = if let Some(backing_var) = first_param.backing_var() { | ||||||
|                         if let TypeKind::Borrow(inner, _) = type_kind { |                             if let Some((mutable, _)) = type_refs.find_var(&backing_var.1) { | ||||||
|                             if let TypeKind::Borrow(..) = *inner.clone() { |                                 mutable | ||||||
|                                 *type_kind = type_kind.unroll_borrow(); |                             } else { | ||||||
|                                 let ExprKind::Borrow(val, _) = &first_param.0 else { |                                 return Err(ErrorKind::VariableNotDefined(backing_var.1.clone())); | ||||||
|                                     panic!() |  | ||||||
|                                 }; |  | ||||||
|                                 *first_param = *val.clone(); |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         if let Some((mutable, _)) = type_refs.find_var(&backing_var) { |  | ||||||
|                             if !mutable { |  | ||||||
|                                 first_param.remove_borrow_mutability(); |  | ||||||
|                             } |                             } | ||||||
|                         } else { |                         } else { | ||||||
|                             return Err(ErrorKind::VariableNotDefined(backing_var)); |                             false | ||||||
|  |                         }; | ||||||
|  | 
 | ||||||
|  |                         if backing_var.is_some() { | ||||||
|  |                             if let TypeKind::Borrow(inner, _) = type_kind { | ||||||
|  |                                 if let TypeKind::Borrow(..) = *inner.clone() { | ||||||
|  |                                     *type_kind = type_kind.unroll_borrow(); | ||||||
|  |                                     let ExprKind::Borrow(val, _) = &first_param.0 else { | ||||||
|  |                                         panic!() | ||||||
|  |                                     }; | ||||||
|  |                                     *first_param = *val.clone(); | ||||||
|  |                                 } | ||||||
|  |                             } | ||||||
|  |                         } else { | ||||||
|  |                             let ExprKind::Borrow(val, _) = &first_param.0 else { | ||||||
|  |                                 panic!() | ||||||
|  |                             }; | ||||||
|  |                             *first_param = *val.clone(); | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  |                         if !is_mutable { | ||||||
|  |                             first_param.remove_borrow_mutability(); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user