Add AST -> MIR for typecasting
This commit is contained in:
		
							parent
							
								
									c4ab4ac0b3
								
							
						
					
					
						commit
						3378f556ec
					
				| @ -256,7 +256,9 @@ impl ast::Expression { | ||||
|                     Box::new(expr.process(module_id)), | ||||
|                 ), | ||||
|             }, | ||||
|             ast::ExpressionKind::CastTo(expression, _) => todo!(), | ||||
|             ast::ExpressionKind::CastTo(expression, ty) => { | ||||
|                 mir::ExprKind::CastTo(Box::new(expression.process(module_id)), ty.0.clone().into()) | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         mir::Expression(kind, self.1.as_meta(module_id)) | ||||
|  | ||||
| @ -1028,6 +1028,7 @@ impl mir::Expression { | ||||
|                     } | ||||
|                 }) | ||||
|             } | ||||
|             mir::ExprKind::CastTo(expression, type_kind) => todo!(), | ||||
|         }; | ||||
|         if let Some(value) = &value { | ||||
|             value.instr().maybe_location(&mut scope.block, location); | ||||
|  | ||||
| @ -211,6 +211,7 @@ impl Display for ExprKind { | ||||
|             ExprKind::Borrow(var_ref, false) => write!(f, "&{}", var_ref), | ||||
|             ExprKind::Borrow(var_ref, true) => write!(f, "&mut {}", var_ref), | ||||
|             ExprKind::Deref(var_ref) => write!(f, "*{}", var_ref), | ||||
|             ExprKind::CastTo(expression, type_kind) => write!(f, "{} as {}", expression, type_kind), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -319,6 +319,13 @@ impl Expression { | ||||
|                     _ => Err(ReturnTypeOther::DerefNonBorrow(var.2)), | ||||
|                 } | ||||
|             } | ||||
|             CastTo(expr, type_kind) => match expr.return_type(refs) { | ||||
|                 Ok(ret_type) => match ret_type { | ||||
|                     (ReturnKind::Hard, ty) => Ok((ReturnKind::Hard, ty)), | ||||
|                     _ => Ok((ReturnKind::Soft, type_kind.clone())), | ||||
|                 }, | ||||
|                 Err(_) => Ok((ReturnKind::Soft, type_kind.clone())), | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -336,6 +343,7 @@ impl Expression { | ||||
|             ExprKind::BinOp(_, _, _) => None, | ||||
|             ExprKind::FunctionCall(_) => None, | ||||
|             ExprKind::If(_) => None, | ||||
|             ExprKind::CastTo(expression, _) => expression.backing_var(), | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -363,6 +371,7 @@ impl Expression { | ||||
|             ExprKind::Block(_) => None, | ||||
|             ExprKind::Borrow(_, _) => None, | ||||
|             ExprKind::Deref(_) => None, | ||||
|             ExprKind::CastTo(expression, _) => expression.num_value(), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -254,6 +254,7 @@ pub enum ExprKind { | ||||
|     Block(Block), | ||||
|     Borrow(NamedVariableRef, bool), | ||||
|     Deref(NamedVariableRef), | ||||
|     CastTo(Box<Expression>, TypeKind), | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
|  | ||||
| @ -712,6 +712,7 @@ impl Expression { | ||||
| 
 | ||||
|                 Ok(*inner) | ||||
|             } | ||||
|             ExprKind::CastTo(expression, type_kind) => todo!(), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -397,6 +397,7 @@ impl Expression { | ||||
|                     _ => Err(ErrorKind::AttemptedDerefNonBorrow(var.1.clone())), | ||||
|                 } | ||||
|             } | ||||
|             ExprKind::CastTo(expression, type_kind) => todo!(), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user