Module Cir_types

Data representation

Representations are parametric in the type 'f of field values, as well as the type 'r of record memory.

type 'f field_reference = {
  1. field_ref : 'f field;
  2. field_ref_loc : Cobol_common.Srcloc.TYPES.srcloc;
}

General-purpose reference to a data field; comes with a source location.

and 'f field =
  1. | Constant_field of 'f immutable_field
  2. | Field_in_memory of {
    1. field : 'f resolved_field;
    2. field_info : 'f field_definition_info;
    }
    (*

    A field for which we can compute the location in the record.

    *)

Manipulated COBOL fields may either be constant or lie in memory.

and 'f immutable_field = 'f

We directly map immutable fields with their value representation.

and 'f field_definition_info = {
  1. field_definition : Cobol_data.Types.field_definition Cobol_common.Srcloc.TYPES.with_loc;
  2. field_initial_value : 'f immutable_field option;
}

A field in memory is addressable and may have an initial value. It always comes from a definition in a COBOL source.

and 'f resolved_field =
  1. | Fixed_field of 'f
  2. | Table_field of 'f resolved_table_cell

Resolved fields may either be fixed, or require access to already known indexing data.

and 'f resolved_table_cell = {
  1. cell_first_field : 'f resolved_field;
  2. cell_index_field : 'f field_reference;
  3. cell_index_max : int;
  4. cell_stride : int;
}
and 'r record_handle = {
  1. record_memory : 'r;
  2. record_definition : Cobol_data.Types.record;
}

Handle for record memory: associates a memory with its definition.

val pp_field_reference : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f field_reference -> Ppx_deriving_runtime.unit
val show_field_reference : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f field_reference -> Ppx_deriving_runtime.string
val pp_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f field -> Ppx_deriving_runtime.unit
val show_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f field -> Ppx_deriving_runtime.string
val pp_immutable_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f immutable_field -> Ppx_deriving_runtime.unit
val show_immutable_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f immutable_field -> Ppx_deriving_runtime.string
val pp_field_definition_info : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f field_definition_info -> Ppx_deriving_runtime.unit
val show_field_definition_info : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f field_definition_info -> Ppx_deriving_runtime.string
val pp_resolved_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f resolved_field -> Ppx_deriving_runtime.unit
val show_resolved_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f resolved_field -> Ppx_deriving_runtime.string
val pp_resolved_table_cell : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f resolved_table_cell -> Ppx_deriving_runtime.unit
val show_resolved_table_cell : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f resolved_table_cell -> Ppx_deriving_runtime.string
val pp_record_handle : 'r. (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'r record_handle -> Ppx_deriving_runtime.unit
val show_record_handle : 'r. (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> 'r record_handle -> Ppx_deriving_runtime.string

Module representation

In addition to the type variables above, the type of modules is parametric in the type 'm of module memory.

module FIELDS_MAP = Cobol_unit.Resolver_map
type 'f fields_map = 'f field_access FIELDS_MAP.t

Named fields are always associated with fields that lie in memory (immutable fields typically come from literals in source programs).

and 'f field_access = {
  1. access_field : 'f fixed_mutable_field;
  2. access_ranges : 'f access_range list;
}
and 'f fixed_mutable_field = {
  1. fixed_field : 'f;
  2. fixed_field_info : 'f field_definition_info;
}

A field that is at a fixed location in a record.

and 'f access_range =
  1. | Fixed_range of {
    1. max : int;
    }
  2. | Depending_range of {
    1. min : int;
    2. max : int;
    3. odo_field : 'f fixed_mutable_field;
    }
val show_fields_map : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f fields_map -> Ppx_deriving_runtime.string
val pp_field_access : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f field_access -> Ppx_deriving_runtime.unit
val show_field_access : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f field_access -> Ppx_deriving_runtime.string
val pp_fixed_mutable_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f fixed_mutable_field -> Ppx_deriving_runtime.unit
val show_fixed_mutable_field : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f fixed_mutable_field -> Ppx_deriving_runtime.string
val pp_access_range : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f access_range -> Ppx_deriving_runtime.unit
val show_access_range : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f access_range -> Ppx_deriving_runtime.string
type 'f data_reference = {
  1. data_field : 'f field;
  2. data_ref_loc : Cobol_common.Srcloc.TYPES.srcloc;
  3. data_refmod : 'f refmod option;
}

General-purpose reference to data, based on a given field, with optional reference modification.

and 'f refmod = {
  1. refmod_left : 'f field_reference;
  2. refmod_length : 'f field_reference option;
}
val pp_data_reference : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f data_reference -> Ppx_deriving_runtime.unit
val show_data_reference : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f data_reference -> Ppx_deriving_runtime.string
val pp_refmod : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f refmod -> Ppx_deriving_runtime.unit
val show_refmod : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f refmod -> Ppx_deriving_runtime.string
type 'f condition = bool * 'f field_reference * 'f field_reference
val pp_condition : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f condition -> Ppx_deriving_runtime.unit
val show_condition : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f condition -> Ppx_deriving_runtime.string
val pp_fields_map : (Ppx_deriving_runtime.Format.formatter -> 'a -> Ppx_deriving_runtime.unit) -> 'a field_access FIELDS_MAP.resolver_map Pretty.printer
type ('f, 'r) data = {
  1. map : 'f fields_map;
  2. working_storage : ('f, 'r) memory_storage;
  3. local_storage : ('f, 'r) memory_storage;
}

Structure that gathers elements from the DATA DIVISION of a module.

and ('f, 'r) memory_storage = {
  1. storage_records : 'r record_handle list;
  2. storage_fields : 'f field_access list;
}
val pp_data : 'f 'r. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> ('f, 'r) data -> Ppx_deriving_runtime.unit
val show_data : 'f 'r. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> ('f, 'r) data -> Ppx_deriving_runtime.string
val pp_memory_storage : 'f 'r. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> ('f, 'r) memory_storage -> Ppx_deriving_runtime.unit
val show_memory_storage : 'f 'r. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> ('f, 'r) memory_storage -> Ppx_deriving_runtime.string
type 'f statement =
  1. | IR_display of {
    1. data_refs : 'f data_reference array;
    2. advancing : bool;
    }
  2. | IR_stop of {
    1. optional_status : 'f data_reference option;
    }
  3. | IR_conditional of {
    1. condition : 'f condition;
    2. then_branch : 'f code_block;
    3. else_branch : 'f code_block;
    }

High-level statements for the PROCEDURE DIVISION.

and 'f code_block = 'f statement Cobol_common.Srcloc.TYPES.with_loc list

A block of code that is amenable to interpretation; for now, only a list of statements.

val pp_statement : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f statement -> Ppx_deriving_runtime.unit
val show_statement : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f statement -> Ppx_deriving_runtime.string
val pp_code_block : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> 'f code_block -> Ppx_deriving_runtime.unit
val show_code_block : 'f. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> 'f code_block -> Ppx_deriving_runtime.string
type ('f, 'r, 'm) module_handle = {
  1. module_memory : 'm;
  2. module_unit : Cobol_unit.Types.t;
  3. module_data : ('f, 'r) data;
  4. module_proc : 'f code_block;
}
val pp_module_handle : 'f 'r 'm. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'm -> Ppx_deriving_runtime.unit) -> Ppx_deriving_runtime.Format.formatter -> ('f, 'r, 'm) module_handle -> Ppx_deriving_runtime.unit
val show_module_handle : 'f 'r 'm. (Ppx_deriving_runtime.Format.formatter -> 'f -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'r -> Ppx_deriving_runtime.unit) -> (Ppx_deriving_runtime.Format.formatter -> 'm -> Ppx_deriving_runtime.unit) -> ('f, 'r, 'm) module_handle -> Ppx_deriving_runtime.string