On Mon, 2020-05-04 at 11:17 +0200, Julia Lawall wrote: > > On Mon, 4 May 2020, Jaskaran Singh wrote: > > > On Sun, 2020-05-03 at 21:23 +0200, Julia Lawall wrote: > > > On Tue, 28 Apr 2020, Jaskaran Singh wrote: > > > > > > > To add Cast attributes to the C AST, pass attributes from the > > > > type_name > > > > rule of the C parser. > > > > > > I'm not sure what you mean by "pass". Normally, one passes > > > something > > > to > > > something else, but it's not clear what the something else is. > > > > > > > The something else would be the cast_expr rule (and basically any > > other > > rule that uses the type_name rule). > > > > I guess a better way to say it would be "return the attributes from > > the > > type_name rule as well" > > This seems fine, thanks! > > In this patch there are a lot of places where the information is just > discarded. Will it be used in the future? >
We could add support for those attributes as well (ex. typeof, sizeof, etc.). This patch only adds support for cast attributes though. Cheers, Jaskaran. > julia > > > (or if there is a specific term for it in > > parser-terminology, then that). > > > > Cheers, > > Jaskaran. > > > > > > Signed-off-by: Jaskaran Singh <[email protected]> > > > > --- > > > > ocaml/coccilib.mli | 3 ++- > > > > parsing_c/parse_c.ml | 4 +++- > > > > parsing_c/parser_c.mly | 16 ++++++++-------- > > > > 3 files changed, 13 insertions(+), 10 deletions(-) > > > > > > > > diff --git a/ocaml/coccilib.mli b/ocaml/coccilib.mli > > > > index 0e807c9a..a305d616 100644 > > > > --- a/ocaml/coccilib.mli > > > > +++ b/ocaml/coccilib.mli > > > > @@ -791,7 +791,8 @@ module Parser_c : > > > > (Lexing.lexbuf -> token) -> Lexing.lexbuf -> > > > > Ast_c.statement > > > > val expr : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> > > > > Ast_c.expression > > > > val type_name : > > > > - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> > > > > Ast_c.fullType > > > > + (Lexing.lexbuf -> token) -> Lexing.lexbuf -> > > > > + Ast_c.attribute list * Ast_c.fullType > > > > end > > > > module Lexer_c : > > > > sig > > > > diff --git a/parsing_c/parse_c.ml b/parsing_c/parse_c.ml > > > > index 0d3a189a..5f8d5e2d 100644 > > > > --- a/parsing_c/parse_c.ml > > > > +++ b/parsing_c/parse_c.ml > > > > @@ -370,7 +370,9 @@ let parse_gen ~cpp ~tos parsefunc s = > > > > result > > > > > > > > (* Please DO NOT remove this code, even though most of it is > > > > not > > > > used *) > > > > -let type_of_string = parse_gen ~cpp:false ~tos:true > > > > Parser_c.type_name > > > > +let type_of_string s = > > > > + let typname = parse_gen ~cpp:false ~tos:true > > > > Parser_c.type_name > > > > s in > > > > + Common.snd typname > > > > let statement_of_string = parse_gen ~cpp:false ~tos:false > > > > Parser_c.statement > > > > let expression_of_string = parse_gen ~cpp:false ~tos:false > > > > Parser_c.expr > > > > let cpp_expression_of_string = parse_gen ~cpp:true ~tos:false > > > > Parser_c.expr > > > > diff --git a/parsing_c/parser_c.mly b/parsing_c/parser_c.mly > > > > index aedde179..0abcc9b0 100644 > > > > --- a/parsing_c/parser_c.mly > > > > +++ b/parsing_c/parser_c.mly > > > > @@ -665,7 +665,7 @@ let postfakeInfo pii = > > > > > > > > %type <Ast_c.statement> statement > > > > %type <Ast_c.expression> expr > > > > -%type <Ast_c.fullType> type_name > > > > +%type <Ast_c.attribute list * Ast_c.fullType> type_name > > > > > > > > %% > > > > /*(*********************************************************** > > > > **** > > > > **********)*/ > > > > @@ -818,7 +818,7 @@ arith_expr: > > > > > > > > cast_expr: > > > > | unary_expr { $1 } > > > > - | topar2 type_name tcpar2 cast_expr { mk_e(Cast ($2, $4)) > > > > [$1;$3] > > > > } > > > > + | topar2 type_name tcpar2 cast_expr { mk_e(Cast (snd $2, $4)) > > > > [$1;$3] } > > > > /* > > > > It could be useful to have the following, but there is no > > > > place > > > > for the > > > > attribute in the AST. > > > > @@ -831,7 +831,7 @@ unary_expr: > > > > | TDec unary_expr { mk_e(Infix ($2, > > > > Dec)) [$1] > > > > } > > > > | unary_op cast_expr { mk_e(Unary ($2, fst $1)) > > > > [snd > > > > $1] } > > > > | Tsizeof unary_expr { mk_e(SizeOfExpr > > > > ($2)) [$1] > > > > } > > > > - | Tsizeof topar2 type_name tcpar2 { mk_e(SizeOfType > > > > ($3)) [$1;$2;$4] } > > > > + | Tsizeof topar2 type_name tcpar2 { mk_e(SizeOfType (snd > > > > $3)) [$1;$2;$4] } > > > > > > There could be less white space in front of the [ > > > > > > julia > > > > > > > | Tnew new_argument { mk_e(New (None, > > > > $2)) [$1] > > > > } > > > > | Tnew TOPar argument_list_ne TCPar new_argument { mk_e(New > > > > (Some > > > > $3, $5)) [$1; $2; $4] } > > > > | Tdelete cast_expr { mk_e(Delete(false, > > > > $2)) [$1] > > > > } > > > > @@ -897,9 +897,9 @@ postfix_expr: > > > > > > > > /*(* gccext: also called compound literals *)*/ > > > > | topar2 type_name tcpar2 TOBrace TCBrace > > > > - { mk_e(Constructor ($2, (InitList [], [$4;$5]))) [$1;$3] > > > > } > > > > + { mk_e(Constructor (snd $2, (InitList [], [$4;$5]))) > > > > [$1;$3] > > > > } > > > > | topar2 type_name tcpar2 TOBrace initialize_list > > > > gcc_comma_opt_struct TCBrace > > > > - { mk_e(Constructor ($2, (InitList (List.rev $5),[$4;$7] @ > > > > $6))) [$1;$3] } > > > > + { mk_e(Constructor (snd $2, (InitList (List.rev > > > > $5),[$4;$7] @ > > > > $6))) [$1;$3] } > > > > > > > > > > > > primary_expr: > > > > @@ -1298,7 +1298,7 @@ type_spec2: > > > > Right3 (TypeName (name, Ast_c.noTypedefDef())),[] } > > > > > > > > | Ttypeof TOPar assign_expr TCPar { Right3 (TypeOfExpr ($3)), > > > > [$1;$2;$4] } > > > > - | Ttypeof TOPar type_name TCPar { Right3 (TypeOfType ($3)), > > > > [$1;$2;$4] } > > > > + | Ttypeof TOPar type_name TCPar { Right3 (TypeOfType (snd > > > > $3)), > > > > [$1;$2;$4] } > > > > > > > > /*(*----------------------------*)*/ > > > > /*(* workarounds *)*/ > > > > @@ -1531,12 +1531,12 @@ type_qualif_list: > > > > type_name: > > > > | spec_qualif_list > > > > { let (attrs, ds) = $1 in > > > > - let (returnType, _) = fixDeclSpecForDecl ds in > > > > returnType } > > > > + let (returnType, _) = fixDeclSpecForDecl ds in (attrs, > > > > returnType) } > > > > | spec_qualif_list abstract_declaratort > > > > { let (attrs1, ds) = $1 in > > > > let (attrs2, fn) = $2 in > > > > let (returnType, _) = fixDeclSpecForDecl ds in > > > > - fn returnType } > > > > + (attrs1@attrs2, fn returnType) } > > > > > > > > > > > > > > > > -- > > > > 2.21.1 > > > > > > > > _______________________________________________ Cocci mailing list [email protected] https://systeme.lip6.fr/mailman/listinfo/cocci
