package catala

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module Shared_ast.RenamingSource

Sourcetype config = {
  1. reserved : string list;
    (*

    Use for keywords and built-ins

    *)
  2. sanitize_varname : string -> string;
    (*

    Typically String.to_snake_case

    *)
  3. skip_constant_binders : bool;
    (*

    See Bindlib.Renaming

    *)
  4. constant_binder_name : string option;
    (*

    See Bindlib.Renaming

    *)
}
Sourcetype context
Sourceval default_config : config
Sourceval get_ctx : config -> context
Sourceval unbind_in : context -> ('e, 'b) Bindlib.binder -> ('e, _) Catala_utils.Mark.ed Var.t * 'b * context
Sourceval unmbind_in : context -> ('e, 'b) Bindlib.mbinder -> ('e, _) Catala_utils.Mark.ed Var.t Array.t * 'b * context
Sourceval new_id : context -> string -> string * context
Sourceval new_var_id : context -> string -> string * context
Sourceval reserve_name : context -> string -> context
Sourceval 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
Sourceval typ : context -> Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos -> Shared_ast__.Definitions.naked_typ Catala_utils.Mark.pos
Sourceval 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

Sourceval scope_name : context -> Shared_ast__.Definitions.ScopeName.t -> Shared_ast__.Definitions.ScopeName.t
Sourceval topdef_name : context -> Shared_ast__.Definitions.TopdefName.t -> Shared_ast__.Definitions.TopdefName.t
Sourceval struct_name : context -> Shared_ast__.Definitions.StructName.t -> Shared_ast__.Definitions.StructName.t
Sourceval enum_name : context -> Shared_ast__.Definitions.EnumName.t -> Shared_ast__.Definitions.EnumName.t
Sourceval 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 * context
Sourcetype t

Enclosing of a polymorphic renaming function, to be used by apply

Sourceval apply : t -> 'e Shared_ast__.Definitions.program -> 'e Shared_ast__.Definitions.program * context
Sourceval 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 -> 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.

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.

Sourceval default : t

Basic defaults for minimal renaming, without any reserved keywords, intended for printing intermediate ASTs