Skip to content
Snippets Groups Projects
Unverified Commit 89a2f041 authored by Nora Abi Akar's avatar Nora Abi Akar Committed by GitHub
Browse files

Modcc: parse the unit of `FUNCTION` (#1361)

* add function unit parsing
* add unit tests
parent 2adcd65c
Branches
Tags
No related merge requests found
...@@ -973,6 +973,14 @@ symbol_ptr Parser::parse_function() { ...@@ -973,6 +973,14 @@ symbol_ptr Parser::parse_function() {
auto p = parse_prototype(); auto p = parse_prototype();
if (p == nullptr) return nullptr; if (p == nullptr) return nullptr;
// Functions may have a unit attached
if (token_.type == tok::lparen) {
unit_description();
if (status_ == lexerStatus::error) {
return {};
}
}
// check for opening left brace { // check for opening left brace {
if (!expect(tok::lbrace)) return nullptr; if (!expect(tok::lbrace)) return nullptr;
......
...@@ -205,6 +205,7 @@ TEST(Parser, net_receive) { ...@@ -205,6 +205,7 @@ TEST(Parser, net_receive) {
} }
TEST(Parser, function) { TEST(Parser, function) {
{
char str[] = char str[] =
"FUNCTION foo(x, y) {" "FUNCTION foo(x, y) {"
" LOCAL a\n" " LOCAL a\n"
...@@ -217,6 +218,34 @@ TEST(Parser, function) { ...@@ -217,6 +218,34 @@ TEST(Parser, function) {
std::unique_ptr<Symbol> sym; std::unique_ptr<Symbol> sym;
EXPECT_TRUE(check_parse(sym, &Parser::parse_function, str)); EXPECT_TRUE(check_parse(sym, &Parser::parse_function, str));
} }
{
char str[] =
"FUNCTION foo(x (mv), y (/mA)) {"
" foo = x * y\n"
"}";
std::unique_ptr<Symbol> sym;
EXPECT_TRUE(check_parse(sym, &Parser::parse_function, str));
}
{
char str[] =
"FUNCTION foo(x (mv), y (/mA)) (mv/mA) {"
" foo = x * y\n"
"}";
std::unique_ptr<Symbol> sym;
EXPECT_TRUE(check_parse(sym, &Parser::parse_function, str));
}
{
char str[] =
"FUNCTION foo(x (mv), y (/mA)) (mv-mA) {"
" foo = x * y\n"
"}";
std::unique_ptr<Symbol> sym;
EXPECT_FALSE(check_parse(sym, &Parser::parse_function, str));
}
}
TEST(Parser, parse_solve) { TEST(Parser, parse_solve) {
std::unique_ptr<SolveExpression> s; std::unique_ptr<SolveExpression> s;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment