Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 39 additions & 4 deletions cparser/Parser.vy
Original file line number Diff line number Diff line change
Expand Up @@ -649,8 +649,23 @@ direct_declarator:
| decl = direct_declarator LBRACK RBRACK
{ let 'Cabs.Name name typ attr loc := decl in
Cabs.Name name (Cabs.ARRAY typ [] None) attr loc }
(*| direct_declarator LBRACK ... STATIC ... RBRACK
| direct_declarator LBRACK STAR RBRACK*)
| decl = direct_declarator LBRACK STATIC quallst = type_qualifier_list
expr = assignment_expression RBRACK
{ let 'Cabs.Name name typ attr loc := decl in
Cabs.Name name (Cabs.ARRAY typ (rev' quallst) (Some (fst expr))) attr loc }
| decl = direct_declarator LBRACK STATIC expr = assignment_expression RBRACK
{ let 'Cabs.Name name typ attr loc := decl in
Cabs.Name name (Cabs.ARRAY typ [] (Some (fst expr))) attr loc }
| decl = direct_declarator LBRACK quallst = type_qualifier_list STATIC
expr = assignment_expression RBRACK
{ let 'Cabs.Name name typ attr loc := decl in
Cabs.Name name (Cabs.ARRAY typ (rev' quallst) (Some (fst expr))) attr loc }
| decl = direct_declarator LBRACK quallst = type_qualifier_list STAR RBRACK
{ let 'Cabs.Name name typ attr loc := decl in
Cabs.Name name (Cabs.ARRAY typ (rev' quallst) None) attr loc }
| decl = direct_declarator LBRACK STAR RBRACK
{ let 'Cabs.Name name typ attr loc := decl in
Cabs.Name name (Cabs.ARRAY typ [] None) attr loc }
| decl = direct_declarator LPAREN params = parameter_type_list RPAREN
{ let 'Cabs.Name name typ attr loc := decl in
Cabs.Name name (Cabs.PROTO typ params) attr loc }
Expand Down Expand Up @@ -739,8 +754,28 @@ direct_abstract_declarator:
{ Cabs.ARRAY typ [] None }
| LBRACK RBRACK
{ Cabs.ARRAY Cabs.JUSTBASE [] None }
(*| direct_abstract_declarator? LBRACK STAR RBRACK*)
(*| direct_abstract_declarator? LBRACK ... STATIC ... RBRACK*)
| typ = direct_abstract_declarator LBRACK STATIC cvspec = type_qualifier_list
expr = assignment_expression RBRACK
{ Cabs.ARRAY typ cvspec (Some (fst expr)) }
| LBRACK STATIC cvspec = type_qualifier_list expr = assignment_expression RBRACK
{ Cabs.ARRAY Cabs.JUSTBASE cvspec (Some (fst expr)) }
| typ = direct_abstract_declarator LBRACK STATIC expr = assignment_expression RBRACK
{ Cabs.ARRAY typ [] (Some (fst expr)) }
| LBRACK STATIC expr = assignment_expression RBRACK
{ Cabs.ARRAY Cabs.JUSTBASE [] (Some (fst expr)) }
| typ = direct_abstract_declarator LBRACK cvspec = type_qualifier_list STATIC
expr = assignment_expression RBRACK
{ Cabs.ARRAY typ cvspec (Some (fst expr)) }
| LBRACK cvspec = type_qualifier_list STATIC expr = assignment_expression RBRACK
{ Cabs.ARRAY Cabs.JUSTBASE cvspec (Some (fst expr)) }
| typ = direct_abstract_declarator LBRACK cvspec = type_qualifier_list STAR RBRACK
{ Cabs.ARRAY typ cvspec None }
| typ = direct_abstract_declarator LBRACK STAR RBRACK
{ Cabs.ARRAY typ [] None }
| LBRACK cvspec = type_qualifier_list STAR RBRACK
{ Cabs.ARRAY Cabs.JUSTBASE cvspec None }
| LBRACK STAR RBRACK
{ Cabs.ARRAY Cabs.JUSTBASE [] None }
| typ = direct_abstract_declarator LPAREN params = parameter_type_list RPAREN
{ Cabs.PROTO typ params }
| LPAREN params = parameter_type_list RPAREN
Expand Down
Loading
Loading