* because it would compute msg_typedef at compile time when
* the flag debug_typedef is always false
*)
-let msg_typedef s =
+let msg_typedef s n =
incr Stat.nTypedefInfer;
msg_gen (!Flag_parsing_c.debug_typedef)
is_known_typdef
(fun s ->
- pr2_cpp ("TYPEDEF: promoting: " ^ s)
+ (*pr2_cpp (Printf.sprintf "TYPEDEF: promoting(%d): %s" n s)*)
+ pr2_cpp (Printf.sprintf "TYPEDEF: promoting: %s" s)
)
s
match (next, before) with
+ (* c++ hacks *)
+ (* yy xx( and in function *)
+ | TOPar i1::_, TIdent(s,i2)::TypedefIdent _::_
+ when !Flag.c_plus_plus && (LP.current_context () = (LP.InFunction)) ->
+ pr2_cpp("constructed_object: " ^s);
+ TOParCplusplusInit i1
+ | TypedefIdent(s,i)::TOPar i1::_,_
+ when !Flag.c_plus_plus && (LP.current_context () = (LP.InFunction)) ->
+ TIdent(s,i)
+
(*-------------------------------------------------------------*)
(* typedef inference, parse_typedef_fix3 *)
(*-------------------------------------------------------------*)
LP.disable_typedef();
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 1; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx yy *)
->
(* && not_annot s2 BUT lead to false positive*)
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 2; LP.add_typedef_root s;
TypedefIdent (s, i1)
| (TIdent (s, i1)::Tinline i2::_ , _) when not_struct_enum before
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 3; LP.add_typedef_root s;
TypedefIdent (s, i1)
when not_struct_enum before && (LP.current_context() =*= LP.InParameter)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 4; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx* [,)] *)
(* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 5; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 6; LP.add_typedef_root s;
TypedefIdent (s, i1)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 7; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx const *)
(* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 8; LP.add_typedef_root s;
TypedefIdent (s, i1)
->
(* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 9; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* ( const xx) *)
| (TIdent (s, i1)::TCPar _::_, (Tconst _ | Tvolatile _|Trestrict _)::TOPar _::_) when
ok_typedef s ->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 10; LP.add_typedef_root s;
TypedefIdent (s, i1)
when not_struct_enum before
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 11; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* [(,] xx [ AND parameterdeclaration *)
when (LP.current_context() =*= LP.InParameter)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 12; LP.add_typedef_root s;
TypedefIdent (s, i1)
(*------------------------------------------------------------*)
(Tregister _|Tstatic _ |Tvolatile _|Tconst _|Trestrict _)::_) when
pointer ptr && ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 13; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* TODO xx * yy ; AND in start of compound element *)
&& pointer ptr && ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 14; LP.add_typedef_root s;
TypedefIdent (s, i1)
when not_struct_enum before && pointer ptr &&
(LP.is_top_or_struct (LP.current_context ()))
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 15; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx * yy , AND in Toplevel *)
&& ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 16; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx * yy ( AND in Toplevel *)
&& (LP.is_top_or_struct (LP.current_context ()))
&& ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 17; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx * yy [ *)
(LP.is_top_or_struct (LP.current_context ()))
&& ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 18; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* u16: 10; in struct *)
when (LP.is_top_or_struct (LP.current_context ()))
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 19; LP.add_typedef_root s;
TypedefIdent (s, i1)
(take_safe 1 !passed_tok <> [Tenum]))
&&
!LP._lexer_hint = Some LP.Toplevel ->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 20; LP.add_typedef_root s;
TypedefIdent s
*)
when not_struct_enum before
&& ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 21; LP.add_typedef_root s;
TypedefIdent (s, i1)
when not_struct_enum before && (LP.current_context () =*= LP.InParameter)
&& ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 22; LP.add_typedef_root s;
TypedefIdent (s, i1)
(TOBrace _| TPtVirg _)::_) when not_struct_enum before
&& ok_typedef s & pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 23; LP.add_typedef_root s;
msg_maybe_dangereous_typedef s;
TypedefIdent (s, i1)
(TOBrace _| TPtVirg _)::_) when
ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 24; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* struct user_info_t sometimes *)
&& ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 25; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx ** yy *) (* wrong ? *)
(* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 26; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx *** yy *)
&& ok_typedef s
(* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 27; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* xx ** ) *)
(* && !LP._lexer_hint = Some LP.ParameterDeclaration *)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 28; LP.add_typedef_root s;
TypedefIdent (s, i1)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 29; LP.add_typedef_root s;
(*TOPar info*)
TypedefIdent (s, i1)
when not (TH.is_stuff_taking_parenthized x)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 30; LP.add_typedef_root s;
(* TOPar info *)
TypedefIdent (s, i1)
*)
(TOPar info)::(TEq _ |TEqEq _)::_)
when ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 31; LP.add_typedef_root s;
(* TOPar info *)
TypedefIdent (s, i1)
| (TIdent (s, i1)::ptr::TCPar _::TIdent (s2, i2)::_ , (TOPar info)::_)
when ok_typedef s && pointer ptr
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 32; LP.add_typedef_root s;
(*TOPar info*)
TypedefIdent (s,i1)
when (*s ==~ regexp_typedef && *) not (TH.is_stuff_taking_parenthized x)
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 33; LP.add_typedef_root s;
TypedefIdent (s, i1)
when not_struct_enum before
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 34; LP.add_typedef_root s;
TypedefIdent (s, i1)
(* x* ( *y )(params), function pointer 2 *)
when not_struct_enum before
&& ok_typedef s
->
- msg_typedef s; LP.add_typedef_root s;
+ msg_typedef s 35; LP.add_typedef_root s;
TypedefIdent (s, i1)