diff --git a/src/args.rs b/src/args.rs index 2f8eef8..4b89235 100644 --- a/src/args.rs +++ b/src/args.rs @@ -202,6 +202,27 @@ pub(crate) fn eat_call_args>( } } } + TokenKind::Symbol(Symbol::OpenParen) => { + val.push(Token { kind, pos }); + let mut unclosed_parens = 0; + while let Some(tok) = toks.next() { + match &tok.kind { + TokenKind::Symbol(Symbol::OpenParen) => { + unclosed_parens += 1; + } + TokenKind::Symbol(Symbol::CloseParen) => { + if unclosed_parens <= 1 { + val.push(tok); + break; + } else { + unclosed_parens -= 1; + } + } + _ => {} + } + val.push(tok); + } + } TokenKind::Symbol(Symbol::CloseParen) => { if val.is_empty() { break; diff --git a/tests/functions.rs b/tests/functions.rs index 8b713b4..d49354b 100644 --- a/tests/functions.rs +++ b/tests/functions.rs @@ -23,6 +23,11 @@ test!( "@function a($a) {\n @return $a;\n}\n\nb {\ncolor: a(1);\n}\n", "b {\n color: 1;\n}\n" ); +test!( + function_call_as_arg, + "@function a($a) {\n @return $a;\n}\n\nb {\ncolor: a(a(2));\n}\n", + "b {\n color: 2;\n}\n" +); // test!( // return_no_semicolon, // "@function a() {\n @return 1\n}\n\nb {\ncolor: a();\n}\n",