Shared_ast.RenamingSourcetype config = {reserved : string list;Use for keywords and built-ins
*)sanitize_varname : string -> string;Typically String.to_snake_case
*)skip_constant_binders : bool;See Bindlib.Renaming
constant_binder_name : string option;See Bindlib.Renaming
}val unbind_in :
context ->
('e, 'b) Bindlib.binder ->
('e, _) Catala_utils.Mark.ed Var.t * 'b * contextval unmbind_in :
context ->
('e, 'b) Bindlib.mbinder ->
('e, _) Catala_utils.Mark.ed Var.t Array.t * 'b * contextval set_rewriters :
?scopes:
(Shared_ast__.Definitions.ScopeName.t ->
Shared_ast__.Definitions.ScopeName.t) ->
?topdefs:
(Shared_ast__.Definitions.TopdefName.t ->
Shared_ast__.Definitions.TopdefName.t) ->
?structs:
(Shared_ast__.Definitions.StructName.t ->
Shared_ast__.Definitions.StructName.t) ->
?fields:
(Shared_ast__.Definitions.StructField.t ->
Shared_ast__.Definitions.StructField.t) ->
?enums:
(Shared_ast__.Definitions.EnumName.t ->
Shared_ast__.Definitions.EnumName.t) ->
?constrs:
(Shared_ast__.Definitions.EnumConstructor.t ->
Shared_ast__.Definitions.EnumConstructor.t) ->
context ->
contextval typ :
context ->
Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
Shared_ast__.Definitions.naked_typ Catala_utils.Mark.posval expr :
context ->
(('a Shared_ast__.Definitions.any, 'a Shared_ast__.Definitions.any, 'm)
Shared_ast__.Definitions.base_gexpr,
'm Shared_ast__.Definitions.mark)
Catala_utils.Mark.ed ->
(('a, 'a, 'm) Shared_ast__.Definitions.base_gexpr Bindlib.box,
'm Shared_ast__.Definitions.mark)
Catala_utils.Mark.edDisambiguates all variable names in e, and renames structs, fields, enums and constrs according to the given context configuration
val code_items :
context ->
(Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos) ->
(((_ Shared_ast__.Definitions.any, _ Shared_ast__.Definitions.any, 'm)
Shared_ast__.Definitions.base_gexpr,
'm Shared_ast__.Definitions.mark)
Catala_utils.Mark.ed as 'e,
(((_ Shared_ast__.Definitions.any, _ Shared_ast__.Definitions.any, 'm)
Shared_ast__.Definitions.base_gexpr,
'm Shared_ast__.Definitions.mark)
Catala_utils.Mark.ed as 'e)
Shared_ast__.Definitions.code_item,
(Shared_ast__.Definitions.code_export_kind
* (((_ Shared_ast__.Definitions.any, _ Shared_ast__.Definitions.any, 'm)
Shared_ast__.Definitions.base_gexpr,
'm Shared_ast__.Definitions.mark)
Catala_utils.Mark.ed as 'e))
list)
Shared_ast__.Definitions.bound_list ->
('e,
'e Shared_ast__.Definitions.code_item,
(Shared_ast__.Definitions.code_export_kind * 'e) list)
Shared_ast__.Definitions.bound_list
* contextEnclosing of a polymorphic renaming function, to be used by apply
val program :
reserved:string list ->
skip_constant_binders:bool ->
constant_binder_name:string option ->
namespaced_fields:bool ->
namespaced_constrs:bool ->
prefix_module:bool ->
modnames_conflict:bool ->
?f_var:(string -> string) ->
?f_struct:(string -> string) ->
?f_field:(string -> string) ->
?f_enum:(string -> string) ->
?f_constr:(string -> string) ->
unit ->
tRenames all idents (variables, types, struct and enum names, fields and constructors) to dispel ambiguities in the target language. Names in reserved, typically keywords and built-ins, will be avoided ; the meaning of the following three flags is described in Bindlib.Renaming.
if namespaced_fields (resp. _constrs) is true, then struct fields (resp. enum constructors) can reuse names from other fields/constructors or other idents.
if prefix_module is true, the qualifying module name is inserted within the ident string, separated with a . dot. This happens before sanitization.
if modnames_conflict is true, module names can conflict with type names, constructors and fields, and they will be avoided when renaming those.
The f_* optional arguments sanitize the different kinds of ids. The default is what is used for OCaml: project to ASCII, capitalise structs, enums (both modules in the backend) and constructors, lowercase fields, and rewrite variables to snake case.
In the returned program, it is safe to directly use `Bindlib.name_of` on variables for printing. The same is true for `StructName.get_info` etc.