summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibCpp/Parser.cpp
diff options
context:
space:
mode:
authorAli Mohammad Pur <ali.mpfard@gmail.com>2021-07-28 06:04:51 +0430
committerAndreas Kling <kling@serenityos.org>2021-08-02 01:03:59 +0200
commit5f66874ea06e965c094a0679bee8634012e85739 (patch)
tree2ca88d0da92878b3ba1b222d39a22a5a9b6534e3 /Userland/Libraries/LibCpp/Parser.cpp
parentb3cbe1456969586994c0612f46a5ce9c55a41f25 (diff)
downloadserenity-5f66874ea06e965c094a0679bee8634012e85739.zip
LibCpp: Add support for parsing function types
This makes it work with types like `Function<T(U, V)>`.
Diffstat (limited to 'Userland/Libraries/LibCpp/Parser.cpp')
-rw-r--r--Userland/Libraries/LibCpp/Parser.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/Userland/Libraries/LibCpp/Parser.cpp b/Userland/Libraries/LibCpp/Parser.cpp
index d41bb415be..0279e8e83d 100644
--- a/Userland/Libraries/LibCpp/Parser.cpp
+++ b/Userland/Libraries/LibCpp/Parser.cpp
@@ -1255,7 +1255,19 @@ NonnullRefPtr<Type> Parser::parse_type(ASTNode& parent)
type = ref;
}
+ if (peek().type() == Token::Type::LeftParen) {
+ consume();
+ auto fn_type = create_ast_node<FunctionType>(parent, type->start(), position());
+ fn_type->set_return_type(*type);
+ type->set_parent(*fn_type);
+ if (auto parameters = parse_parameter_list(*type); parameters.has_value())
+ fn_type->set_parameters(parameters.release_value());
+ consume(Token::Type::RightParen);
+ type = fn_type;
+ }
+
type->set_end(position());
+
return type;
}