Skip to content

Commit 57fdd58

Browse files
author
casse
committed
Added GNU_INLINE.
Added support for unamed fields. Added support for volatile typedef.
1 parent 8880846 commit 57fdd58

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

frontc/cparser.mly

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ let version = "Cparser V3.0b 10.9.99 Hugues Cass
3838
let parse_error _ =
3939
Clexer.display_error "Syntax error" (Parsing.symbol_start ()) (Parsing.symbol_end ())
4040
41+
(*let fatal _ =
42+
Clexer.display_error "fatal error" (Parsing.symbol_start ()) (Parsing.symbol_end
43+
())*)
44+
4145
4246
(*
4347
** Type analysis
@@ -192,7 +196,7 @@ let set_eline (file, line) expr =
192196
%token <string * int> IF ELSE
193197

194198
/* GNU attributes */
195-
%token ATTRIBUTE EXTENSION
199+
%token ATTRIBUTE EXTENSION INLINE
196200

197201
/* operator precedence */
198202
%nonassoc IF
@@ -363,13 +367,19 @@ global_proto:
363367
PROTO _
364368
| OLD_PROTO _ ->
365369
(fst $1, snd $1, $2, NOTHING)
366-
| _ -> assert false}
370+
| _ -> begin (*fatal();*) assert false end}
367371
;
368372
old_proto:
369373
global_dec opt_gcc_attributes
370374
{match (snd $1) with
371375
OLD_PROTO _ -> (fst $1, snd $1, $2, NOTHING)
372-
| _ -> assert false}
376+
(*| PROTO (typ, [], ell) -> fst $1, OLD_PROTO (typ, [], ell), $2, NOTHING*)
377+
| _ -> begin
378+
(*fatal();
379+
Cprint.print_type (fun _ -> ()) (snd $1);
380+
print_string ("[" ^ !Cprint.line ^ "]");*)
381+
assert false
382+
end }
373383
;
374384

375385

@@ -520,6 +530,8 @@ typedef_type:
520530
{apply_mods (snd $1) ((fst $1), NO_STORAGE)}
521531
| CONST typedef_sub
522532
{apply_mods (BASE_CONST::(snd $2)) ((fst $2), NO_STORAGE)}
533+
| VOLATILE typedef_sub
534+
{apply_mods (BASE_VOLATILE::(snd $2)) ((fst $2), NO_STORAGE)}
523535
;
524536
typedef_sub:
525537
NAMED_TYPE {(NAMED_TYPE $1, [])}
@@ -579,12 +591,12 @@ field:
579591
field_type field_defs SEMICOLON {set_name_group $1 (List.rev $2)}
580592
;
581593
field_type:
582-
field_mod_list_opt field_qual
583-
{apply_mods (snd $2) (apply_mods $1 ((fst $2), NO_STORAGE))}
584-
| field_mod_list_opt comp_type field_mod_list_opt
585-
{apply_mods $3 (apply_mods $1 ($2, NO_STORAGE))}
594+
field_mod_list_opt field_qual
595+
{apply_mods (snd $2) (apply_mods $1 ((fst $2), NO_STORAGE))}
596+
| field_mod_list_opt comp_type field_mod_list_opt
597+
{apply_mods $3 (apply_mods $1 ($2, NO_STORAGE))}
586598
| field_mod_list_opt NAMED_TYPE field_mod_list_opt
587-
{apply_mods $3 (apply_mods $1 (NAMED_TYPE $2, NO_STORAGE))}
599+
{apply_mods $3 (apply_mods $1 (NAMED_TYPE $2, NO_STORAGE))}
588600
;
589601
field_mod_list_opt:
590602
/* empty */ {[]}
@@ -612,7 +624,9 @@ field_def:
612624
field_dec {(fst $1, snd $1, [], NOTHING)}
613625
;
614626
field_dec:
615-
IDENT
627+
/* emtpy */
628+
{("", NO_TYPE)}
629+
| IDENT
616630
{($1, NO_TYPE)}
617631
| NAMED_TYPE
618632
{($1, NO_TYPE)}
@@ -1090,6 +1104,8 @@ gcc_attribute:
10901104
{ $1 }*/
10911105
| EXTENSION
10921106
{ [GNU_EXTENSION] }
1107+
| INLINE
1108+
{ [GNU_INLINE] }
10931109
;
10941110

10951111
opt_gnu_args:

0 commit comments

Comments
 (0)