Shared_ast.Renaming
val default_config : config
val unbind_in :
context ->
('e, 'b) Bindlib.binder ->
('e, _) Catala_utils.Mark.ed Var.t * 'b * context
val unmbind_in :
context ->
('e, 'b) Bindlib.mbinder ->
('e, _) Catala_utils.Mark.ed Var.t Stdlib.Array.t * 'b * context
val 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 ->
context
val typ :
context ->
Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos ->
Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos
val 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.ed
Disambiguates all variable names in e
, and renames structs, fields, enums and constrs according to the given context configuration
val scope_name :
context ->
Shared_ast__.Definitions.ScopeName.t ->
Shared_ast__.Definitions.ScopeName.t
val topdef_name :
context ->
Shared_ast__.Definitions.TopdefName.t ->
Shared_ast__.Definitions.TopdefName.t
val struct_name :
context ->
Shared_ast__.Definitions.StructName.t ->
Shared_ast__.Definitions.StructName.t
val enum_name :
context ->
Shared_ast__.Definitions.EnumName.t ->
Shared_ast__.Definitions.EnumName.t
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.code_item_list ->
'e Shared_ast__.Definitions.code_item_list * context
val program :
reserved:string list ->
skip_constant_binders:bool ->
constant_binder_name:string option ->
namespaced_fields:bool ->
namespaced_constrs:bool ->
prefix_module:bool ->
?f_var:(string -> string) ->
?f_struct:(string -> string) ->
?f_field:(string -> string) ->
?f_enum:(string -> string) ->
?f_constr:(string -> string) ->
unit ->
t
Renames 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.
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.
val default : t
Basic defaults for minimal renaming, without any reserved keywords, intended for printing intermediate ASTs