diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2019-02-08 17:28:04 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2019-02-08 17:28:04 +0200 |
commit | b64ca53d3f65ea7d51afa977e9d4bed808f494f7 (patch) | |
tree | ec7e7d1b184c25b716a4a49844fad3cf41cc36e7 /src | |
parent | b0cc5efa1a1c8145981846cfa8e80cc67d12ebf6 (diff) | |
download | cflow-b64ca53d3f65ea7d51afa977e9d4bed808f494f7.tar.gz cflow-b64ca53d3f65ea7d51afa977e9d4bed808f494f7.tar.bz2 |
Fix https://savannah.gnu.org/bugs/index.php?47110
* src/parser.c (expression): Fix parsing of type casts.
* tests/memberof.at: New test case.
* tests/testsuite.at: Add new test.
* tests/Makefile.am: Add new test.
Diffstat (limited to 'src')
-rw-r--r-- | src/parser.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/parser.c b/src/parser.c index 2b173c2..391fe33 100644 --- a/src/parser.c +++ b/src/parser.c | |||
@@ -605,9 +605,17 @@ expression() | |||
605 | parens_lev++; | 605 | parens_lev++; |
606 | } else { | 606 | } else { |
607 | reference(name, line); | 607 | reference(name, line); |
608 | |||
609 | /* MEMBER_OF can be preceded by a closing paren, as in | ||
610 | (*a)->b | ||
611 | */ | ||
612 | while (parens_lev > 0 && tok.type == ')') { | ||
613 | parens_lev--; | ||
614 | nexttoken(); | ||
615 | } | ||
616 | |||
608 | if (tok.type == MEMBER_OF) { | 617 | if (tok.type == MEMBER_OF) { |
609 | while (tok.type == MEMBER_OF) | 618 | nexttoken(); |
610 | nexttoken(); | ||
611 | } else { | 619 | } else { |
612 | putback(); | 620 | putback(); |
613 | } | 621 | } |
@@ -615,7 +623,7 @@ expression() | |||
615 | break; | 623 | break; |
616 | case '(': | 624 | case '(': |
617 | /* maybe typecast */ | 625 | /* maybe typecast */ |
618 | if (nexttoken() == TYPE) | 626 | if (nexttoken() == TYPE || tok.type == STRUCT) |
619 | skip_to(')'); | 627 | skip_to(')'); |
620 | else { | 628 | else { |
621 | putback(); | 629 | putback(); |
@@ -625,6 +633,9 @@ expression() | |||
625 | case ')': | 633 | case ')': |
626 | parens_lev--; | 634 | parens_lev--; |
627 | break; | 635 | break; |
636 | case MEMBER_OF: | ||
637 | nexttoken(); | ||
638 | break; | ||
628 | } | 639 | } |
629 | nexttoken(); | 640 | nexttoken(); |
630 | } | 641 | } |