flitter/lang_cpp/parsing/pp_token.mli
Joey Yakimowich-Payne fa600b98f7 Add poc files
2018-05-26 10:55:38 +09:00

59 lines
1.8 KiB
OCaml

(* Expanding or extracting macros, at the token level *)
(* the either is to differentialte macro-variables from macro-functions *)
type define_body = (unit,string list) Common.either * Parser_cpp.token list
(* TODO
(* corresponds to what is in the yacfe configuration file (e.g. standard.h) *)
type define_def = string * define_param * define_body
and define_param =
| NoParam
| Params of string list
and define_body =
| DefineBody of Parser_c.token list
| DefineHint of parsinghack_hint
(* strongly corresponds to the TMacroXxx in the grammar and lexer and the
* MacroXxx in the ast.
*)
and parsinghack_hint =
| HintIterator
| HintDeclarator
| HintMacroString
| HintMacroStatement
| HintAttribute
| HintMacroIdentBuilder
*)
(* extracting define_def, e.g. from a standard.h; assume have called
* fix_tokens_define before to have the TDefEol *)
val extract_macros:
Parser_cpp.token list -> (string, define_body) Common.assoc
(* TODO
val string_of_define_def: define_def -> string
*)
(* used internally *)
(* This function work by side effect and may generate new tokens
* in the new_tokens_before field of the token_extended in the
* paren_grouped list. So don't forget to recall
* Token_views_c.rebuild_tokens_extented after this call, as well
* as probably insert_virtual_positions as new tokens
* are generated.
*
* note: it does not do some fixpoint, so the generated code may also
* contain some macros names.
*)
val apply_macro_defs:
(*
msg_apply_known_macro:(string -> unit) ->
msg_apply_known_macro_hint:(string -> unit) ->
?evaluate_concatop:bool ->
?inplace_when_single:bool ->
*)
(string, define_body (* define_def *)) Hashtbl.t ->
Token_views_cpp.paren_grouped list -> unit