@@ -38,6 +38,10 @@ let version = "Cparser V3.0b 10.9.99 Hugues Cass
3838let 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;
368372old_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;
524536typedef_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;
581593field_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;
589601field_mod_list_opt :
590602 /* empty */ {[]}
@@ -612,7 +624,9 @@ field_def:
612624 field_dec {(fst $1, snd $1, [], NOTHING)}
613625;
614626field_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
10951111opt_gnu_args :
0 commit comments