diff --git a/reid/src/ast/mod.rs b/reid/src/ast/mod.rs index 00cd535..4ad0281 100644 --- a/reid/src/ast/mod.rs +++ b/reid/src/ast/mod.rs @@ -91,6 +91,7 @@ pub enum ExpressionKind { Accessed(Box, String), Binop(BinaryOperator, Box, Box), FunctionCall(Box), + AssociatedFunctionCall(Type, Box), BlockExpr(Box), IfExpr(Box), StructExpression(StructExpression), diff --git a/reid/src/ast/parse.rs b/reid/src/ast/parse.rs index 15bc698..b96c44c 100644 --- a/reid/src/ast/parse.rs +++ b/reid/src/ast/parse.rs @@ -167,6 +167,18 @@ fn specific_int_lit(value: u128, stream: &mut TokenStream) -> Result Result { + let ty = stream.parse()?; + stream.expect(Token::Colon)?; + stream.expect(Token::Colon)?; + Ok(AssociatedFunctionCall(ty, stream.parse()?)) + } +} + #[derive(Debug)] pub struct PrimaryExpression(Expression); @@ -200,6 +212,11 @@ impl Parse for PrimaryExpression { Kind::UnaryOperation(unary, Box::new(stream.parse()?)), stream.get_range().unwrap(), ) + } else if let Ok(assoc_function) = stream.parse::() { + Expression( + Kind::AssociatedFunctionCall(assoc_function.0, Box::new(assoc_function.1)), + stream.get_range().unwrap(), + ) } else if let Some(token) = stream.peek() { match &token { Token::Identifier(v) => { diff --git a/reid/src/ast/process.rs b/reid/src/ast/process.rs index 353704a..3ad69d7 100644 --- a/reid/src/ast/process.rs +++ b/reid/src/ast/process.rs @@ -404,6 +404,7 @@ impl ast::Expression { .map(|e| e.process(module_id)) .collect(), ), + ast::ExpressionKind::AssociatedFunctionCall(_, function_call_expression) => todo!(), }; mir::Expression(kind, self.1.as_meta(module_id))