From 7bfaebc05f6a58d605c75e030da319f9e48f93e1 Mon Sep 17 00:00:00 2001 From: Joscha Date: Mon, 21 Nov 2022 13:07:10 +0100 Subject: [PATCH] Desugar function calls with table constructor --- src/desugar/call.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/desugar/call.rs b/src/desugar/call.rs index 7dff8a8..b78c77f 100644 --- a/src/desugar/call.rs +++ b/src/desugar/call.rs @@ -1,3 +1,5 @@ +use chumsky::Span; + use crate::ast::{Call, Expr, Lit, Space}; use crate::span::HasSpan; @@ -54,13 +56,28 @@ impl Call { constr, span, } => { - let new = Expr::Call(Self::Constr { - expr, + let (expr, desugared) = expr.desugar(); + if desugared { + let new = Expr::Call(Self::Constr { + expr: Box::new(expr), + s0, + constr, + span, + }); + return (new, true); + } + + let arg = Expr::TableConstr(constr); + let arg_span = arg.span(); + let new = Expr::Call(Self::Arg { + expr: Box::new(expr), s0, - constr, + s1: Space::empty(arg_span.at_start()), + arg: Box::new(arg), + s2: Space::empty(arg_span.at_end()), span, }); - (new, false) // TODO Implement + (new, true) } } }