HCoop
/
bpt
/
coccinelle.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
coccinelle release 1.0.0-rc2
[bpt/coccinelle.git]
/
parsing_cocci
/
lexer_cocci.mll
diff --git
a/parsing_cocci/lexer_cocci.mll
b/parsing_cocci/lexer_cocci.mll
index
0d4f55a
..
46fdde8
100644
(file)
--- a/
parsing_cocci/lexer_cocci.mll
+++ b/
parsing_cocci/lexer_cocci.mll
@@
-52,7
+52,7
@@
let get_current_line_type lexbuf =
if !line_start < 0 then 0 else lex_start - !line_start in
(*line_start := -1;*)
prev_plus := (c = D.PLUS) or (c = D.PLUSPLUS);
if !line_start < 0 then 0 else lex_start - !line_start in
(*line_start := -1;*)
prev_plus := (c = D.PLUS) or (c = D.PLUSPLUS);
- (c,l,ll,lex_start,preceeding_spaces,[],[],
Ast0.NoMetaPos
)
+ (c,l,ll,lex_start,preceeding_spaces,[],[],
[]
)
let current_line_started = ref false
let col_zero = ref true
let current_line_started = ref false
let col_zero = ref true
@@
-338,7
+338,7
@@
let init _ =
Hashtbl.replace metavariables (get_name name) fn);
Data.add_id_meta :=
(fun name constraints pure ->
Hashtbl.replace metavariables (get_name name) fn);
Data.add_id_meta :=
(fun name constraints pure ->
- let fn clt = TMetaId(name,constraints,pure,clt) in
+ let fn clt = TMetaId(name,constraints,
Ast.NoVal,
pure,clt) in
Hashtbl.replace metavariables (get_name name) fn);
Data.add_virt_id_meta_found :=
(fun name vl ->
Hashtbl.replace metavariables (get_name name) fn);
Data.add_virt_id_meta_found :=
(fun name vl ->
@@
-346,11
+346,11
@@
let init _ =
Hashtbl.replace metavariables name fn);
Data.add_virt_id_meta_not_found :=
(fun name pure ->
Hashtbl.replace metavariables name fn);
Data.add_virt_id_meta_not_found :=
(fun name pure ->
- let fn clt = TMetaId(name,Ast.IdNoConstraint,pure,clt) in
+ let fn clt = TMetaId(name,Ast.IdNoConstraint,
Ast.NoVal,
pure,clt) in
Hashtbl.replace metavariables (get_name name) fn);
Data.add_fresh_id_meta :=
Hashtbl.replace metavariables (get_name name) fn);
Data.add_fresh_id_meta :=
- (fun name ->
- let fn clt = TMetaId(name,Ast.IdNoConstraint,Ast0.Impure,clt) in
+ (fun name
seed
->
+ let fn clt = TMetaId(name,Ast.IdNoConstraint,
seed,
Ast0.Impure,clt) in
Hashtbl.replace metavariables (get_name name) fn);
Data.add_type_meta :=
(fun name pure ->
Hashtbl.replace metavariables (get_name name) fn);
Data.add_type_meta :=
(fun name pure ->
@@
-360,6
+360,10
@@
let init _ =
(fun name pure ->
let fn clt = TMetaInit(name,pure,clt) in
Hashtbl.replace metavariables (get_name name) fn);
(fun name pure ->
let fn clt = TMetaInit(name,pure,clt) in
Hashtbl.replace metavariables (get_name name) fn);
+ Data.add_initlist_meta :=
+ (function name -> function lenname -> function pure ->
+ let fn clt = TMetaInitList(name,lenname,pure,clt) in
+ Hashtbl.replace metavariables (get_name name) fn);
Data.add_param_meta :=
(function name -> function pure ->
let fn clt = TMetaParam(name,pure,clt) in
Data.add_param_meta :=
(function name -> function pure ->
let fn clt = TMetaParam(name,pure,clt) in
@@
-514,11
+518,15
@@
rule token = parse
| [' ' '\t' ]+ { start_line false; token lexbuf }
| [' ' '\t' ]+ { start_line false; token lexbuf }
- |
"//" [^ '\n']*
{
+ |
[' ' '\t' ]* (("//" [^ '\n']*) as after)
{
match !current_line_type with
(D.PLUS,_,_) | (D.PLUSPLUS,_,_) ->
match !current_line_type with
(D.PLUS,_,_) | (D.PLUSPLUS,_,_) ->
+ let str =
+ if !current_line_started
+ then (tok lexbuf)
+ else after in
start_line true;
start_line true;
- TPragma (Ast.Indent
(tok lexbuf)
, get_current_line_type lexbuf)
+ TPragma (Ast.Indent
str
, get_current_line_type lexbuf)
| _ -> start_line false; token lexbuf }
| "__attribute__" [' ' '\t']* "((" _* "))"
| _ -> start_line false; token lexbuf }
| "__attribute__" [' ' '\t']* "((" _* "))"
@@
-702,7
+710,7
@@
rule token = parse
TUndef
(lt,
check_var ident
TUndef
(lt,
check_var ident
- (arity,line,lline,offset+off,col+off,[],[],
Ast0.NoMetaPos
)) }
+ (arity,line,lline,offset+off,col+off,[],[],
[]
)) }
| (( ("#" [' ' '\t']* "define" [' ' '\t']+)) as def)
( (letter (letter |digit)*) as ident)
{ start_line true;
| (( ("#" [' ' '\t']* "define" [' ' '\t']+)) as def)
( (letter (letter |digit)*) as ident)
{ start_line true;
@@
-713,7
+721,7
@@
rule token = parse
TDefine
(lt,
check_var ident
TDefine
(lt,
check_var ident
- (arity,line,lline,offset+off,col+off,[],[],
Ast0.NoMetaPos
)) }
+ (arity,line,lline,offset+off,col+off,[],[],
[]
)) }
| (( ("#" [' ' '\t']* "define" [' ' '\t']+)) as def)
( (letter (letter | digit)*) as ident)
'('
| (( ("#" [' ' '\t']* "define" [' ' '\t']+)) as def)
( (letter (letter | digit)*) as ident)
'('
@@
-752,12
+760,16
@@
rule token = parse
{ start_line true; check_plus_linetype (tok lexbuf);
TPragma (Ast.Noindent(tok lexbuf), get_current_line_type lexbuf) }
| "/*"
{ start_line true; check_plus_linetype (tok lexbuf);
TPragma (Ast.Noindent(tok lexbuf), get_current_line_type lexbuf) }
| "/*"
- { start_line true; check_plus_linetype (tok lexbuf);
+ {
+ match !current_line_type with
+ (D.PLUS,_,_) | (D.PLUSPLUS,_,_) ->
+ start_line true;
(* second argument to TPragma is not quite right, because
it represents only the first token of the comment, but that
should be good enough *)
(* second argument to TPragma is not quite right, because
it represents only the first token of the comment, but that
should be good enough *)
- TPragma (Ast.Indent("/*"^(comment lexbuf)),
- get_current_line_type lexbuf) }
+ TPragma (Ast.Indent("/*"^(comment check_comment lexbuf)),
+ get_current_line_type lexbuf)
+ | _ -> let _ = comment (fun _ -> ()) lexbuf in token lexbuf }
| "---" [^'\n']*
{ (if !current_line_started
then lexerr "--- must be at the beginning of the line" "");
| "---" [^'\n']*
{ (if !current_line_started
then lexerr "--- must be at the beginning of the line" "");
@@
-838,27
+850,28
@@
and string = parse
}
| _ { lexerr "unrecognised symbol: " (tok lexbuf) }
}
| _ { lexerr "unrecognised symbol: " (tok lexbuf) }
-and comment = parse
+and comment
check_comment
= parse
| "*/" { let s = tok lexbuf in check_comment s; start_line true; s }
| ['\n' '\r' '\011' '\012']
{ let s = tok lexbuf in
(* even blank line should have a + *)
check_comment s;
| "*/" { let s = tok lexbuf in check_comment s; start_line true; s }
| ['\n' '\r' '\011' '\012']
{ let s = tok lexbuf in
(* even blank line should have a + *)
check_comment s;
- reset_line lexbuf; s ^ comment lexbuf }
+ reset_line lexbuf; s ^ comment
check_comment
lexbuf }
| "+" { pass_zero();
if !current_line_started
| "+" { pass_zero();
if !current_line_started
- then (start_line true; let s = tok lexbuf in s^(comment lexbuf))
- else (start_line true; comment lexbuf) }
+ then (start_line true;
+ let s = tok lexbuf in s^(comment check_comment lexbuf))
+ else (start_line true; comment check_comment lexbuf) }
(* noteopti: *)
| [^ '*']
{ let s = tok lexbuf in
(* noteopti: *)
| [^ '*']
{ let s = tok lexbuf in
- check_comment s; start_line true; s ^ comment lexbuf }
+ check_comment s; start_line true; s ^ comment
check_comment
lexbuf }
| [ '*']
{ let s = tok lexbuf in
| [ '*']
{ let s = tok lexbuf in
- check_comment s; start_line true; s ^ comment lexbuf }
+ check_comment s; start_line true; s ^ comment
check_comment
lexbuf }
| _
{ start_line true; let s = tok lexbuf in
Common.pr2 ("LEXER: unrecognised symbol in comment:"^s);
| _
{ start_line true; let s = tok lexbuf in
Common.pr2 ("LEXER: unrecognised symbol in comment:"^s);
- s ^ comment lexbuf
+ s ^ comment
check_comment
lexbuf
}
}