[Linux-kernel-mentees] [PATCH v2 20/25] parsing_c: parser: Place parameter attributes in C AST
Jaskaran Singh
jaskaransingh7654321 at gmail.com
Thu May 28 12:24:22 UTC 2020
Parameter attributes are needed so as to not break the nocast test case
when attributes are fully supported. Add parameter attributes to the C
AST.
Signed-off-by: Jaskaran Singh <jaskaransingh7654321 at gmail.com>
---
parsing_c/parser_c.mly | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/parsing_c/parser_c.mly b/parsing_c/parser_c.mly
index 57528dfc..cd997aaa 100644
--- a/parsing_c/parser_c.mly
+++ b/parsing_c/parser_c.mly
@@ -857,7 +857,7 @@ new_argument:
{ let ty = addTypeD ($1,nullDecl) in
let ((returnType,hasreg), iihasreg) = fixDeclSpecForParam ty in
Right (ArgType { p_namei = None; p_type = returnType;
- p_register = hasreg, iihasreg;
+ p_register = hasreg, iihasreg; p_attr = [];
} )
}
| new_argument TOCro expr TCCro
@@ -1447,23 +1447,28 @@ parameter_decl2:
{ p_namei = Some name;
p_type = mk_ty NoType [];
p_register = (false, []);
+ p_attr = [];
}
}
| decl_spec declaratorp
{ LP.kr_impossible();
let ((returnType,hasreg),iihasreg) = fixDeclSpecForParam (snd $1) in
- let (name, ftyp) = $2 in
+ let attrs = (fst $1) @ (fst $2) in
+ let (name, ftyp) = snd $2 in
{ p_namei = Some (name);
p_type = ftyp returnType;
p_register = (hasreg, iihasreg);
+ p_attr = attrs;
}
}
| decl_spec abstract_declaratorp
{ LP.kr_impossible();
let ((returnType,hasreg), iihasreg) = fixDeclSpecForParam (snd $1) in
+ let attrs = (fst $1) @ (fst $2) in
{ p_namei = None;
p_type = (snd $2) returnType;
p_register = hasreg, iihasreg;
+ p_attr = attrs;
}
}
| decl_spec
@@ -1472,6 +1477,7 @@ parameter_decl2:
{ p_namei = None;
p_type = returnType;
p_register = hasreg, iihasreg;
+ p_attr = fst $1;
}
}
@@ -1484,11 +1490,11 @@ parameter_decl: parameter_decl2 { et "param" (); $1 }
declaratorp:
| declarator { let (attr,dec) = $1 in (* attr gets ignored *)
- LP.add_ident (str_of_name (fst dec)); dec }
+ LP.add_ident (str_of_name (fst dec)); attr, dec }
/*(* gccext: *)*/
| declarator attributes
{ let (attr,dec) = $1 in (* attr gets ignored *)
- LP.add_ident (str_of_name (fst dec)); dec }
+ LP.add_ident (str_of_name (fst dec)); attr, dec }
abstract_declaratorp:
| abstract_declarator { $1 }
--
2.21.1
More information about the Linux-kernel-mentees
mailing list