sig
  type code_selection_context
  val default_code_selection_context :
    Norm_context.norm_context ->
    Code_selection_context.code_selection_context
  val enter_statement_context :
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  val exit_statement_context :
    Code_selection_context.code_selection_context -> unit
  val enter_function_context :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cfname_arity ->
    Namespace_names.rqname array ->
    Code_selection_context.code_selection_context
  val exit_function_context :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cfname_arity -> unit
  val enter_closure_context :
    Code_selection_context.code_selection_context ->
    Namespace_names.rqname list ->
    Namespace_names.rqname list ->
    Code_selection_context.code_selection_context
  val exit_closure_context :
    Code_selection_context.code_selection_context -> unit
  val enter_prolog_context :
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  val exit_prolog_context :
    Code_selection_context.code_selection_context -> unit
  val enter_scope :
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  val exit_scope :
    bool ->
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  val restore_variables :
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  val get_in_remote_execute_operator :
    Code_selection_context.code_selection_context -> bool
  val set_in_remote_execute_operator :
    Code_selection_context.code_selection_context -> bool -> unit
  val store_annotation :
    Code_selection_context.code_selection_context ->
    Xquery_algebra_ast.free_variable_desc option ->
    Code_selection_context.code_selection_context
  val store_global_annotation :
    Code_selection_context.code_selection_context ->
    Xquery_algebra_ast.free_variable_desc option ->
    Code_selection_context.code_selection_context
  val retrieve_annotation :
    string ->
    Code_selection_context.code_selection_context ->
    Xquery_algebra_ast.free_variable_desc
  val retrieve_global_annotation :
    Code_selection_context.code_selection_context ->
    Xquery_algebra_ast.free_variable_desc
  val add_variable_to_current_context :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> Code_selection_context.code_selection_context
  val add_variable_with_ref :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname ->
    Variable_context_manager.variable_ref ->
    Code_selection_context.code_selection_context
  val get_variable_reference :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> Variable_context_manager.variable_ref
  val add_tuple_reference :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> Code_selection_context.code_selection_context
  val get_tuple_reference :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> Tuple_context_manager.tuple_ref
  val get_input_tuple_fields :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname list
  val cxschema_from_code_selection_context :
    Code_selection_context.code_selection_context ->
    Xquery_type_core_ast.cxschema
  val compile_context_from_code_selection_context :
    Code_selection_context.code_selection_context ->
    Logical_algebra_types.logical_compile_context
  val replace_compile_context_in_code_selection_context :
    Algebra_type.alg_compile_context ->
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  val annotated_compile_context_from_code_selection_context :
    Code_selection_context.code_selection_context ->
    Algebra_type.alg_compile_context
  val static_context_from_code_selection_context :
    Code_selection_context.code_selection_context ->
    Typing_context.static_context
  val code_type_context_from_code_selection_context :
    Code_selection_context.code_selection_context ->
    Code_typing_context.code_type_context
  val replace_code_type_context_in_code_selection_context :
    Code_typing_context.code_type_context ->
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  val add_external_variable_value :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname ->
    Physical_value.item list -> Code_selection_context.code_selection_context
  val declare_external_variable :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> Code_selection_context.code_selection_context
  val get_external_variable_fn_value :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname ->
    (unit -> Physical_value.item list) Pervasives.ref
  val add_imported_variable_context :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname ->
    Code_selection_context.code_selection_context -> unit
  val get_imported_variable_context :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> Code_selection_context.code_selection_context
  val add_imported_function_context :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cfname_arity ->
    Code_selection_context.code_selection_context -> unit
  val get_imported_function_context :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cfname_arity ->
    Code_selection_context.code_selection_context
  val build_current_insert_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> Physical_value.xml_value -> unit
  val build_current_assign_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname ->
    (unit -> Physical_value.xml_value) -> unit -> Physical_value.xml_value
  val build_current_retrieve_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cvname -> unit -> Physical_value.xml_value
  val build_retrieve_tuple_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.crname -> unit -> Physical_value.xml_value
  val build_retrieve_dom_tuple_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.crname -> unit -> Physical_value.dom_value
  val build_create_tuple_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.crname -> Physical_value.xml_value -> unit
  val build_create_tuple_code_unsafe :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.crname -> Physical_value.xml_value -> unit
  val build_create_dom_tuple_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.crname -> Physical_value.dom_value -> unit
  val build_create_dom_tuple_code_unsafe :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.crname -> Physical_value.dom_value -> unit
  type cs_function_code = {
    parameter_insertion_code : (Physical_value.xml_value -> unit) array;
    entrance_code : unit -> unit;
    exit_code : unit -> unit;
  }
  val build_function_code :
    Code_selection_context.code_selection_context ->
    Xquery_common_ast.cfname_arity ->
    Xquery_common_ast.cvname array -> Code_selection_context.cs_function_code
  val copy_code_selection_context :
    Code_selection_context.code_selection_context ->
    Code_selection_context.code_selection_context
  type code_selection_function =
      Code_selection_context.code_selection_context ->
      Algebra_type.algop_expr ->
      Code_selection_context.code_selection_context
  val create_new_name_index :
    Code_selection_context.code_selection_context ->
    Namespace_symbols.relem_symbol ->
    Code_selection_context.code_selection_context
  val get_name_index :
    Code_selection_context.code_selection_context ->
    Namespace_symbols.relem_symbol -> Physical_name_index.name_index option
  val get_name_index_handler :
    Code_selection_context.code_selection_context ->
    Namespace_symbols.relem_symbol ->
    Physical_name_index.name_index_handler option
  val get_all_name_indices :
    Code_selection_context.code_selection_context ->
    Physical_name_index.name_indices
  val get_all_name_indices_handler :
    Code_selection_context.code_selection_context ->
    Physical_name_index.name_indices_handler
end