aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-21 18:09:17 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-25 23:19:12 +0200
commitab77399f33b800f0a1568e512e86df71dd70f566 (patch)
tree3c04b8be7632cd3ec6d12533e87e57482c8c640a
parenteb6779f6f62173672b533cfbbff59758f710fb4f (diff)
downloadsparse-ab77399f33b800f0a1568e512e86df71dd70f566.tar.gz
attribute: simplify parsing of attributes
In the loop doing the parsing of attributes, it's first checked if EOF is reached, then if the token is ';' but these tests are not needed since they're subsumed by the third one: checking if the token is an identifier. So, remove the tests for EOF and ';', and change the for-loop into a while-loop checking for TOKEN_IDENT. As a bonus, remove the local variable holding the identifier since it's there only for historical reasons. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--parse.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/parse.c b/parse.c
index cc5dbd52..b07237ee 100644
--- a/parse.c
+++ b/parse.c
@@ -1362,18 +1362,8 @@ static struct token *attribute_specifier(struct token *token, struct decl_state
token = expect(token, '(', "after attribute");
token = expect(token, '(', "after attribute");
- for (;;) {
- struct ident *attribute_name;
- struct symbol *attr;
-
- if (eof_token(token))
- break;
- if (match_op(token, ';'))
- break;
- if (token_type(token) != TOKEN_IDENT)
- break;
- attribute_name = token->ident;
- attr = lookup_keyword(attribute_name, NS_KEYWORD);
+ while (token_type(token) == TOKEN_IDENT) {
+ struct symbol *attr = lookup_keyword(token->ident, NS_KEYWORD);
if (attr && attr->op->attribute)
token = attr->op->attribute(token->next, attr, ctx);
else
@@ -1784,13 +1774,7 @@ static struct token *skip_attributes(struct token *token)
break;
token = expect(token->next, '(', "after attribute");
token = expect(token, '(', "after attribute");
- for (;;) {
- if (eof_token(token))
- break;
- if (match_op(token, ';'))
- break;
- if (token_type(token) != TOKEN_IDENT)
- break;
+ while (token_type(token) == TOKEN_IDENT) {
token = skip_attribute(token);
if (!match_op(token, ','))
break;