Start working on if-expression hands being expressions
This commit is contained in:
		
							parent
							
								
									5c5c9c5f7b
								
							
						
					
					
						commit
						29d790e583
					
				| @ -115,8 +115,8 @@ pub struct FunctionCallExpression(pub String, pub Vec<Expression>, pub TokenRang | |||||||
| #[derive(Debug, Clone)] | #[derive(Debug, Clone)] | ||||||
| pub struct IfExpression( | pub struct IfExpression( | ||||||
|     pub Expression, |     pub Expression, | ||||||
|     pub Block, |     pub Expression, | ||||||
|     pub Option<Block>, |     pub Option<Expression>, | ||||||
|     #[allow(dead_code)] pub TokenRange, |     #[allow(dead_code)] pub TokenRange, | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3,8 +3,8 @@ use std::path::PathBuf; | |||||||
| use crate::{ | use crate::{ | ||||||
|     ast::{self}, |     ast::{self}, | ||||||
|     mir::{ |     mir::{ | ||||||
|         self, ModuleMap, NamedVariableRef, SourceModuleId, StmtKind, StructField, StructType, |         self, CustomTypeKey, ModuleMap, NamedVariableRef, SourceModuleId, StmtKind, StructField, | ||||||
|         CustomTypeKey, |         StructType, | ||||||
|     }, |     }, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -205,13 +205,17 @@ impl ast::Expression { | |||||||
|             } |             } | ||||||
|             ast::ExpressionKind::IfExpr(if_expression) => { |             ast::ExpressionKind::IfExpr(if_expression) => { | ||||||
|                 let cond = if_expression.0.process(module_id); |                 let cond = if_expression.0.process(module_id); | ||||||
|                 let then_block = if_expression.1.into_mir(module_id); |                 let then_block = if_expression.1.process(module_id); | ||||||
|                 let else_block = if let Some(el) = &if_expression.2 { |                 let else_block = if let Some(el) = &if_expression.2 { | ||||||
|                     Some(el.into_mir(module_id)) |                     Some(el.process(module_id)) | ||||||
|                 } else { |                 } else { | ||||||
|                     None |                     None | ||||||
|                 }; |                 }; | ||||||
|                 mir::ExprKind::If(mir::IfExpression(Box::new(cond), then_block, else_block)) |                 mir::ExprKind::If(mir::IfExpression( | ||||||
|  |                     Box::new(cond), | ||||||
|  |                     Box::new(then_block), | ||||||
|  |                     Box::new(else_block), | ||||||
|  |                 )) | ||||||
|             } |             } | ||||||
|             ast::ExpressionKind::Array(expressions) => { |             ast::ExpressionKind::Array(expressions) => { | ||||||
|                 mir::ExprKind::Array(expressions.iter().map(|e| e.process(module_id)).collect()) |                 mir::ExprKind::Array(expressions.iter().map(|e| e.process(module_id)).collect()) | ||||||
|  | |||||||
| @ -240,7 +240,7 @@ impl Display for IfExpression { | |||||||
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||||
|         write!(f, "if {} ", self.0)?; |         write!(f, "if {} ", self.0)?; | ||||||
|         Display::fmt(&self.1, f)?; |         Display::fmt(&self.1, f)?; | ||||||
|         if let Some(e) = &self.2 { |         if let Some(e) = *self.2 { | ||||||
|             Display::fmt(&e, f)?; |             Display::fmt(&e, f)?; | ||||||
|         } |         } | ||||||
|         Ok(()) |         Ok(()) | ||||||
|  | |||||||
| @ -267,7 +267,11 @@ pub struct Expression(pub ExprKind, pub Metadata); | |||||||
| 
 | 
 | ||||||
| /// Condition, Then, Else
 | /// Condition, Then, Else
 | ||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| pub struct IfExpression(pub Box<Expression>, pub Block, pub Option<Block>); | pub struct IfExpression( | ||||||
|  |     pub Box<Expression>, | ||||||
|  |     pub Box<Expression>, | ||||||
|  |     pub Box<Option<Expression>>, | ||||||
|  | ); | ||||||
| 
 | 
 | ||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| pub struct FunctionCall { | pub struct FunctionCall { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user