linux-kernel-mentees.lists.linuxfoundation.org archive mirror
 help / color / mirror / Atom feed
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 v2 01/32] parsing_c: parser: Pass attribute list from type_name
Date: Mon, 11 May 2020 15:36:44 +0530	[thread overview]
Message-ID: <20200511100715.19819-2-jaskaransingh7654321@gmail.com> (raw)
In-Reply-To: <20200511100715.19819-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 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..34d234d2 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 *)*/
@@ -1531,12 +1539,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

  reply	other threads:[~2020-05-11 10:07 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-11 10:06 [Linux-kernel-mentees] [PATCH v2 00/32] cocci: Add cast attributes to C and SmPL ASTs Jaskaran Singh
2020-05-11 10:06 ` Jaskaran Singh [this message]
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 02/32] parsing_cocci: ast0_cocci: Add cast attributes Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 03/32] parsing_cocci: parser: Parse " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 04/32] parsing_cocci: visitor_ast0: Visit " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 05/32] parsing_cocci: unparse_ast0: Reflect " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 06/32] parsing_cocci: index: Reflect Cast attributes Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 07/32] parsing_cocci: iso_pattern: " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 08/32] parsing_cocci: type_infer: " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 09/32] parsing_cocci: arity: " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 10/32] parsing_cocci: check_meta: " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 11/32] parsing_cocci: compute_lines: " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 12/32] parsing_cocci: context_neg: " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 13/32] parsing_cocci: single_statement: " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 14/32] parsing_cocci: ast_cocci: Add cast attributes Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 15/32] parsing_cocci: visitor_ast: Visit " Jaskaran Singh
2020-05-11 10:06 ` [Linux-kernel-mentees] [PATCH v2 16/32] parsing_cocci: pretty_print_cocci: Print " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 17/32] parsing_cocci: ast0toast: Reflect Cast attributes Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 18/32] parsing_cocci: disjdistr: " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 19/32] parsing_cocci: unify_ast: " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 20/32] parsing_c: ast_c: Add " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 21/32] parsing_c: parser: Parse " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 22/32] parsing_c: pretty_print_c: Reflect " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 23/32] parsing_c: type_annoter_c: " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 24/32] parsing_c: unparse_cocci: " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 25/32] parsing_c: visitor_c: Visit " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 26/32] engine: check_exhaustive_pattern: Reflect " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 27/32] engine: cocci_vs_c: Match " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 28/32] ocaml: coccilib: Reflect " Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 29/32] tools: spgen: Reflect Cast attrs Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 30/32] tests: Add test case to check cast attribute allminus Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 31/32] tests: Add test case to remove cast attributes Jaskaran Singh
2020-05-11 10:07 ` [Linux-kernel-mentees] [PATCH v2 32/32] tests: Add test case to detect " 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=20200511100715.19819-2-jaskaransingh7654321@gmail.com \
    --to=jaskaransingh7654321@gmail.com \
    --cc=cocci@systeme.lip6.fr \
    --cc=julia.lawall@inria.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).