From: Jaskaran Singh <jaskaransingh7654321@gmail.com> To: cocci@systeme.lip6.fr Cc: linux-kernel-mentees@lists.linuxfoundation.org Subject: [Cocci] [PATCH v3 01/32] parsing_c: parser: Pass attribute list from type_name Date: Fri, 29 May 2020 17:36:31 +0530 [thread overview] Message-ID: <20200529120703.31145-2-jaskaransingh7654321@gmail.com> (raw) In-Reply-To: <20200529120703.31145-1-jaskaransingh7654321@gmail.com> To add Cast attributes to the C AST, pass attributes from the type_name rule of the C parser. Signed-off-by: Jaskaran Singh <jaskaransingh7654321@gmail.com> --- ocaml/coccilib.mli | 3 ++- parsing_c/parse_c.ml | 4 +++- parsing_c/parser_c.mly | 24 ++++++++++++++++-------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/ocaml/coccilib.mli b/ocaml/coccilib.mli index 747cc9ce..30cb1a08 100644 --- a/ocaml/coccilib.mli +++ b/ocaml/coccilib.mli @@ -792,7 +792,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 ef4482f5..5574cb11 100644 --- a/parsing_c/parse_c.ml +++ b/parsing_c/parse_c.ml @@ -374,7 +374,9 @@ let parse_gen ~cpp ~tos parsefunc infos 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 None +let type_of_string s = + let typname = parse_gen ~cpp:false ~tos:true Parser_c.type_name None s in + Common.snd typname let statement_of_string = parse_gen ~cpp:false ~tos:false Parser_c.statement None let expression_of_string = parse_gen ~cpp:false ~tos:false Parser_c.expr None 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 b7e74506..1630ed77 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,11 @@ 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 + { let ret = mk_e(SizeOfType (snd $3)) [$1;$2;$4] in + match (fst $3) with (* warn about dropped attributes *) + [] -> ret + | _ -> warning "attributes found in sizeof(...), dropping" ret } | 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 +901,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 +1302,11 @@ 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 + { let ret = Right3 (TypeOfType (snd $3)), [$1;$2;$4] in + match (fst $3) with (* warn about dropped attributes *) + [] -> ret + | _ -> warning "attributes found in typeof(...), dropping" ret } /*(*----------------------------*)*/ /*(* workarounds *)*/ @@ -1532,12 +1540,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 Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci
WARNING: multiple messages have this Message-ID (diff)
From: Jaskaran Singh <jaskaransingh7654321@gmail.com> To: cocci@systeme.lip6.fr Cc: julia.lawall@inria.fr, jaskaransingh7654321@gmail.com, linux-kernel-mentees@lists.linuxfoundation.org Subject: [Linux-kernel-mentees] [PATCH v3 01/32] parsing_c: parser: Pass attribute list from type_name Date: Fri, 29 May 2020 17:36:31 +0530 [thread overview] Message-ID: <20200529120703.31145-2-jaskaransingh7654321@gmail.com> (raw) In-Reply-To: <20200529120703.31145-1-jaskaransingh7654321@gmail.com> To add Cast attributes to the C AST, pass attributes from the type_name rule of the C parser. Signed-off-by: Jaskaran Singh <jaskaransingh7654321@gmail.com> --- ocaml/coccilib.mli | 3 ++- parsing_c/parse_c.ml | 4 +++- parsing_c/parser_c.mly | 24 ++++++++++++++++-------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/ocaml/coccilib.mli b/ocaml/coccilib.mli index 747cc9ce..30cb1a08 100644 --- a/ocaml/coccilib.mli +++ b/ocaml/coccilib.mli @@ -792,7 +792,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 ef4482f5..5574cb11 100644 --- a/parsing_c/parse_c.ml +++ b/parsing_c/parse_c.ml @@ -374,7 +374,9 @@ let parse_gen ~cpp ~tos parsefunc infos 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 None +let type_of_string s = + let typname = parse_gen ~cpp:false ~tos:true Parser_c.type_name None s in + Common.snd typname let statement_of_string = parse_gen ~cpp:false ~tos:false Parser_c.statement None let expression_of_string = parse_gen ~cpp:false ~tos:false Parser_c.expr None 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 b7e74506..1630ed77 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,11 @@ 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 + { let ret = mk_e(SizeOfType (snd $3)) [$1;$2;$4] in + match (fst $3) with (* warn about dropped attributes *) + [] -> ret + | _ -> warning "attributes found in sizeof(...), dropping" ret } | 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 +901,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 +1302,11 @@ 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 + { let ret = Right3 (TypeOfType (snd $3)), [$1;$2;$4] in + match (fst $3) with (* warn about dropped attributes *) + [] -> ret + | _ -> warning "attributes found in typeof(...), dropping" ret } /*(*----------------------------*)*/ /*(* workarounds *)*/ @@ -1532,12 +1540,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 _______________________________________________ Linux-kernel-mentees mailing list Linux-kernel-mentees@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
next prev parent reply other threads:[~2020-05-29 12:08 UTC|newest] Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-05-29 12:06 [Cocci] [PATCH v3 00/32] cocci: Add cast attributes to C and SmPL ASTs Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` Jaskaran Singh [this message] 2020-05-29 12:06 ` [Linux-kernel-mentees] [PATCH v3 01/32] parsing_c: parser: Pass attribute list from type_name Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 02/32] parsing_cocci: ast0_cocci: Add cast attributes Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 03/32] parsing_cocci: parser: Parse " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 04/32] parsing_cocci: visitor_ast0: Visit " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 05/32] parsing_cocci: unparse_ast0: Reflect " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 06/32] parsing_cocci: index: Reflect Cast attributes Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 07/32] parsing_cocci: iso_pattern: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 08/32] parsing_cocci: type_infer: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 09/32] parsing_cocci: arity: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 10/32] parsing_cocci: check_meta: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 11/32] parsing_cocci: compute_lines: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 12/32] parsing_cocci: context_neg: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 13/32] parsing_cocci: single_statement: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 14/32] parsing_cocci: ast_cocci: Add cast attributes Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 15/32] parsing_cocci: visitor_ast: Visit " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 16/32] parsing_cocci: pretty_print_cocci: Print " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 17/32] parsing_cocci: ast0toast: Reflect Cast attributes Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 18/32] parsing_cocci: disjdistr: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 19/32] parsing_cocci: unify_ast: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 20/32] parsing_c: ast_c: Add " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 21/32] parsing_c: parser: Parse " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 22/32] parsing_c: pretty_print_c: Reflect " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 23/32] parsing_c: type_annoter_c: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-06-06 13:53 ` [Cocci] [PATCH v4 " Jaskaran Singh 2020-06-06 13:53 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-06-06 14:01 ` [Cocci] " Julia Lawall 2020-06-06 14:01 ` [Linux-kernel-mentees] " Julia Lawall 2020-05-29 12:06 ` [Cocci] [PATCH v3 24/32] parsing_c: unparse_cocci: " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 25/32] parsing_c: visitor_c: Visit " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 26/32] engine: check_exhaustive_pattern: Reflect " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 27/32] engine: cocci_vs_c: Match " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 28/32] ocaml: coccilib: Reflect " Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:06 ` [Cocci] [PATCH v3 29/32] tools: spgen: Reflect Cast attrs Jaskaran Singh 2020-05-29 12:06 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:07 ` [Cocci] [PATCH v3 30/32] tests: Add test case to check cast attribute allminus Jaskaran Singh 2020-05-29 12:07 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:07 ` [Cocci] [PATCH v3 31/32] tests: Add test case to remove cast attributes Jaskaran Singh 2020-05-29 12:07 ` [Linux-kernel-mentees] " Jaskaran Singh 2020-05-29 12:07 ` [Cocci] [PATCH v3 32/32] tests: Add test case to detect " Jaskaran Singh 2020-05-29 12:07 ` [Linux-kernel-mentees] " Jaskaran Singh
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200529120703.31145-2-jaskaransingh7654321@gmail.com \ --to=jaskaransingh7654321@gmail.com \ --cc=cocci@systeme.lip6.fr \ --cc=linux-kernel-mentees@lists.linuxfoundation.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.