Add parsing for associated function calls
This commit is contained in:
		
							parent
							
								
									a253c032d8
								
							
						
					
					
						commit
						5eef265652
					
				| @ -91,6 +91,7 @@ pub enum ExpressionKind { | |||||||
|     Accessed(Box<Expression>, String), |     Accessed(Box<Expression>, String), | ||||||
|     Binop(BinaryOperator, Box<Expression>, Box<Expression>), |     Binop(BinaryOperator, Box<Expression>, Box<Expression>), | ||||||
|     FunctionCall(Box<FunctionCallExpression>), |     FunctionCall(Box<FunctionCallExpression>), | ||||||
|  |     AssociatedFunctionCall(Type, Box<FunctionCallExpression>), | ||||||
|     BlockExpr(Box<Block>), |     BlockExpr(Box<Block>), | ||||||
|     IfExpr(Box<IfExpression>), |     IfExpr(Box<IfExpression>), | ||||||
|     StructExpression(StructExpression), |     StructExpression(StructExpression), | ||||||
|  | |||||||
| @ -167,6 +167,18 @@ fn specific_int_lit(value: u128, stream: &mut TokenStream) -> Result<Expression, | |||||||
|     )) |     )) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub struct AssociatedFunctionCall(Type, FunctionCallExpression); | ||||||
|  | 
 | ||||||
|  | impl Parse for AssociatedFunctionCall { | ||||||
|  |     fn parse(mut stream: TokenStream) -> Result<Self, Error> { | ||||||
|  |         let ty = stream.parse()?; | ||||||
|  |         stream.expect(Token::Colon)?; | ||||||
|  |         stream.expect(Token::Colon)?; | ||||||
|  |         Ok(AssociatedFunctionCall(ty, stream.parse()?)) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| pub struct PrimaryExpression(Expression); | pub struct PrimaryExpression(Expression); | ||||||
| 
 | 
 | ||||||
| @ -200,6 +212,11 @@ impl Parse for PrimaryExpression { | |||||||
|                 Kind::UnaryOperation(unary, Box::new(stream.parse()?)), |                 Kind::UnaryOperation(unary, Box::new(stream.parse()?)), | ||||||
|                 stream.get_range().unwrap(), |                 stream.get_range().unwrap(), | ||||||
|             ) |             ) | ||||||
|  |         } else if let Ok(assoc_function) = stream.parse::<AssociatedFunctionCall>() { | ||||||
|  |             Expression( | ||||||
|  |                 Kind::AssociatedFunctionCall(assoc_function.0, Box::new(assoc_function.1)), | ||||||
|  |                 stream.get_range().unwrap(), | ||||||
|  |             ) | ||||||
|         } else if let Some(token) = stream.peek() { |         } else if let Some(token) = stream.peek() { | ||||||
|             match &token { |             match &token { | ||||||
|                 Token::Identifier(v) => { |                 Token::Identifier(v) => { | ||||||
|  | |||||||
| @ -404,6 +404,7 @@ impl ast::Expression { | |||||||
|                     .map(|e| e.process(module_id)) |                     .map(|e| e.process(module_id)) | ||||||
|                     .collect(), |                     .collect(), | ||||||
|             ), |             ), | ||||||
|  |             ast::ExpressionKind::AssociatedFunctionCall(_, function_call_expression) => todo!(), | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         mir::Expression(kind, self.1.as_meta(module_id)) |         mir::Expression(kind, self.1.as_meta(module_id)) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user