mirror of
https://github.com/linux-msm/qmic.git
synced 2024-11-23 09:44:06 +08:00
parser: introduce qmi_package_parse()
Rename parse_package() to be qmi_package_parse(), and have it assign the qmi_package pointer internally rather returning it. This makes the function name match the pattern used for all other production rules. The one caller of qmi_package_parse() assumes the package name has been specified. When parsing has completed, check to ensure the package is specified, and only allow it to be specified once. Signed-off-by: Alex Elder <elder@linaro.org> Message-Id: <20211001232338.769309-26-elder@linaro.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
61f6fe9d1c
commit
83931b750f
13
parser.c
13
parser.c
@ -315,13 +315,16 @@ static void token_expect(enum token_id token_id, struct token *tok)
|
||||
}
|
||||
}
|
||||
|
||||
static const char *parse_package()
|
||||
static void qmi_package_parse(void)
|
||||
{
|
||||
struct token tok;
|
||||
|
||||
token_expect(TOK_ID, &tok);
|
||||
token_expect(';', NULL);
|
||||
return tok.str;
|
||||
|
||||
if (qmi_package)
|
||||
yyerror("package may only be specified once");
|
||||
qmi_package = tok.str;
|
||||
}
|
||||
|
||||
static void qmi_const_parse()
|
||||
@ -482,7 +485,7 @@ void qmi_parse(void)
|
||||
token_init();
|
||||
while (!token_accept(TOK_EOF, NULL)) {
|
||||
if (token_accept(TOK_PACKAGE, NULL)) {
|
||||
qmi_package = parse_package();
|
||||
qmi_package_parse();
|
||||
} else if (token_accept(TOK_CONST, NULL)) {
|
||||
qmi_const_parse();
|
||||
} else if (token_accept(TOK_STRUCT, NULL)) {
|
||||
@ -495,4 +498,8 @@ void qmi_parse(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The package name must have been specified */
|
||||
if (!qmi_package)
|
||||
yyerror("package not specified");
|
||||
}
|
||||
|
16
tests/no_package.qmi
Normal file
16
tests/no_package.qmi
Normal file
@ -0,0 +1,16 @@
|
||||
struct qmi_result {
|
||||
u16 result;
|
||||
u16 error;
|
||||
};
|
||||
|
||||
request test_request {
|
||||
required u8 test_number = 0x12;
|
||||
} = 0x23;
|
||||
|
||||
response test_response {
|
||||
required qmi_result r = 2;
|
||||
} = 043;
|
||||
|
||||
indication test_indication {
|
||||
optional u64 value = 0x99;
|
||||
} = 0x7;
|
19
tests/two_packages.qmi
Normal file
19
tests/two_packages.qmi
Normal file
@ -0,0 +1,19 @@
|
||||
package test;
|
||||
package test2;
|
||||
|
||||
struct qmi_result {
|
||||
u16 result;
|
||||
u16 error;
|
||||
};
|
||||
|
||||
request test_request {
|
||||
required u8 test_number = 0x12;
|
||||
} = 0x23;
|
||||
|
||||
response test_response {
|
||||
required qmi_result r = 2;
|
||||
} = 043;
|
||||
|
||||
indication test_indication {
|
||||
optional u64 value = 0x99;
|
||||
} = 0x7;
|
Loading…
Reference in New Issue
Block a user