text: (*
   * Copyright (c) 2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the "hack" directory of this source tree.
   *
   *)
  
  type t = {
    tco_experimental_features: SSet.t;
    tco_migration_flags: SSet.t;
    tco_dynamic_view: bool;
    tco_num_local_workers: int option;
    tco_parallel_type_checking_threshold: int;
    tco_defer_class_declaration_threshold: int option;
    tco_max_times_to_defer_type_checking: int option;
    tco_prefetch_deferred_files: bool;
    tco_remote_type_check_threshold: int option;
    tco_remote_type_check: bool;
    tco_remote_worker_key: string option;
    tco_remote_check_id: string option;
    tco_remote_max_batch_size: int;
    tco_remote_min_batch_size: int;
    tco_num_remote_workers: int;
    so_remote_version_specifier: string option;
    so_remote_worker_vfs_checkout_threshold: int;
    so_naming_sqlite_path: string option;
    po_auto_namespace_map: (string * string) list;
    po_codegen: bool;
    po_deregister_php_stdlib: bool;
    po_disallow_toplevel_requires: bool;
    po_disable_nontoplevel_declarations: bool;
    po_disable_static_closures: bool;
    po_allow_goto: bool;
    po_allow_unstable_features: bool;
    tco_log_inference_constraints: bool;
    tco_disallow_array_typehint: bool;
    tco_disallow_array_literal: bool;
    tco_language_feature_logging: bool;
    tco_unsafe_rx: bool;
    tco_disallow_scrutinee_case_value_type_mismatch: bool;
    tco_timeout: int;
    tco_disallow_invalid_arraykey: bool;
    tco_disallow_byref_dynamic_calls: bool;
    tco_disallow_byref_calls: bool;
    allowed_fixme_codes_strict: ISet.t;
    allowed_fixme_codes_partial: ISet.t;
    codes_not_raised_partial: ISet.t;
    log_levels: int SMap.t;
    po_disable_lval_as_an_expression: bool;
    tco_shallow_class_decl: bool;
    po_rust_parser_errors: bool;
    profile_type_check_duration_threshold: float;
    profile_type_check_twice: bool;
    profile_owner: string option;
    profile_desc: string;
    tco_like_type_hints: bool;
    tco_union_intersection_type_hints: bool;
    tco_coeffects: bool;
    tco_like_casts: bool;
    tco_simple_pessimize: float;
    tco_complex_coercion: bool;
    tco_disable_partially_abstract_typeconsts: bool;
    error_codes_treated_strictly: ISet.t;
    tco_check_xhp_attribute: bool;
    tco_check_redundant_generics: bool;
    tco_disallow_unresolved_type_variables: bool;
    tco_disallow_trait_reuse: bool;
    tco_disallow_invalid_arraykey_constraint: bool;
    po_enable_class_level_where_clauses: bool;
    po_disable_legacy_soft_typehints: bool;
    po_allowed_decl_fixme_codes: ISet.t;
    po_allow_new_attribute_syntax: bool;
    tco_global_inference: bool;
    tco_gi_reinfer_types: string list;
    tco_ordered_solving: bool;
    tco_const_static_props: bool;
    po_disable_legacy_attribute_syntax: bool;
    tco_const_attribute: bool;
    po_const_default_func_args: bool;
    po_const_default_lambda_args: bool;
    po_disallow_silence: bool;
    po_abstract_static_props: bool;
    po_disable_unset_class_const: bool;
    po_parser_errors_only: bool;
    tco_check_attribute_locations: bool;
    glean_service: string;
    glean_hostname: string;
    glean_port: int;
    glean_reponame: string;
    symbol_write_root_path: string;
    symbol_write_hhi_path: string;
    symbol_write_ignore_paths: string list;
    symbol_write_index_paths: string list;
    symbol_write_include_hhi: bool;
    po_disallow_func_ptrs_in_constants: bool;
    tco_error_php_lambdas: bool;
    tco_disallow_discarded_nullable_awaitables: bool;
    po_enable_xhp_class_modifier: bool;
    po_disable_xhp_element_mangling: bool;
    po_disable_xhp_children_declarations: bool;
    po_enable_first_class_function_pointers: bool;
    po_enable_enum_classes: bool;
    po_disable_modes: bool;
    po_disable_hh_ignore_error: bool;
    po_disable_array: bool;
    po_disable_array_typehint: bool;
    tco_enable_systemlib_annotations: bool;
    tco_higher_kinded_types: bool;
    tco_method_call_inference: bool;
    tco_report_pos_from_reason: bool;
    tco_typecheck_sample_rate: float;
  }
  [@@deriving eq, show]
  
  let tco_experimental_isarray = "is_array"
  
  (**
   * Insist on instantiations for all generic types, even in non-strict files
   *)
  let tco_experimental_generics_arity = "generics_arity"
  
  (**
   * Forbid casting nullable values, since they have unexpected semantics. For
   * example, casting `null` to an int results in `0`, which may or may not be
   * what you were expecting.
   *)
  let tco_experimental_forbid_nullable_cast = "forbid_nullable_cast"
  
  (*
  * Disallow static memoized functions in non-final classes
  *)
  
  let tco_experimental_disallow_static_memoized = "disallow_static_memoized"
  
  (*
   * Allows parsing of coroutine functions/suspend operator
   *)
  let tco_experimental_coroutines = "coroutines"
  
  (**
   * Prevent type param names from shadowing class names
   *)
  let tco_experimental_type_param_shadowing = "type_param_shadowing"
  
  (**
   * Enable abstract const type with default syntax, i.e.
   * abstract const type T as num = int;
   *)
  let tco_experimental_abstract_type_const_with_default =
    "abstract_type_const_with_default"
  
  let tco_experimental_all =
    SSet.empty
    |> List.fold_right
         SSet.add
         [
           tco_experimental_isarray;
           tco_experimental_generics_arity;
           tco_experimental_forbid_nullable_cast;
           tco_experimental_coroutines;
           tco_experimental_disallow_static_memoized;
           tco_experimental_abstract_type_const_with_default;
         ]
  
  let tco_migration_flags_all =
    SSet.empty |> List.fold_right SSet.add ["array_cast"]
  
  let default =
    {
      (* Default all features for testing. Actual options are set by reading
    * from hhconfig, which defaults to empty. *)
      tco_experimental_features = tco_experimental_all;
      tco_migration_flags = SSet.empty;
      tco_dynamic_view = false;
      tco_num_local_workers = None;
      tco_parallel_type_checking_threshold = 10;
      tco_defer_class_declaration_threshold = None;
      tco_max_times_to_defer_type_checking = None;
      tco_prefetch_deferred_files = false;
      tco_remote_type_check_threshold = None;
      tco_remote_type_check = true;
      tco_remote_worker_key = None;
      tco_remote_check_id = None;
      tco_remote_max_batch_size = 8_000;
      tco_remote_min_batch_size = 5_000;
      tco_num_remote_workers = 4;
      so_remote_version_specifier = None;
      so_remote_worker_vfs_checkout_threshold = 10000;
      so_naming_sqlite_path = None;
      po_auto_namespace_map = [];
      po_codegen = false;
      po_disallow_toplevel_requires = false;
      po_deregister_php_stdlib = false;
      po_disable_nontoplevel_declarations = false;
      po_disable_static_closures = true;
      po_allow_goto = false;
      po_allow_unstable_features = false;
      tco_log_inference_constraints = false;
      tco_disallow_array_typehint = false;
      tco_disallow_array_literal = false;
      tco_language_feature_logging = false;
      tco_unsafe_rx = true;
      tco_disallow_scrutinee_case_value_type_mismatch = false;
      tco_timeout = 0;
      tco_disallow_invalid_arraykey = true;
      tco_disallow_byref_dynamic_calls = false;
      tco_disallow_byref_calls = true;
      allowed_fixme_codes_strict = ISet.empty;
      allowed_fixme_codes_partial = ISet.empty;
      codes_not_raised_partial = ISet.empty;
      log_levels = SMap.empty;
      po_disable_lval_as_an_expression = true;
      tco_shallow_class_decl = false;
      po_rust_parser_errors = false;
      profile_type_check_duration_threshold = 0.05;
      profile_type_check_twice = false;
      profile_owner = None;
      profile_desc = "";
      tco_like_type_hints = false;
      tco_union_intersection_type_hints = false;
      tco_coeffects = false;
      tco_like_casts = false;
      tco_simple_pessimize = 0.0;
      tco_complex_coercion = false;
      tco_disable_partially_abstract_typeconsts = false;
      error_codes_treated_strictly = ISet.of_list [];
      tco_check_xhp_attribute = false;
      tco_check_redundant_generics = false;
      tco_disallow_unresolved_type_variables = false;
      tco_disallow_trait_reuse = false;
      tco_disallow_invalid_arraykey_constraint = false;
      po_enable_class_level_where_clauses = false;
      po_disable_legacy_soft_typehints = true;
      po_allowed_decl_fixme_codes = ISet.of_list [];
      po_allow_new_attribute_syntax = false;
      tco_global_inference = false;
      tco_gi_reinfer_types = [];
      tco_ordered_solving = false;
      tco_const_static_props = false;
      po_disable_legacy_attribute_syntax = false;
      tco_const_attribute = false;
      po_const_default_func_args = false;
      po_const_default_lambda_args = false;
      po_disallow_silence = false;
      po_abstract_static_props = false;
      po_disable_unset_class_const = false;
      po_parser_errors_only = false;
      tco_check_attribute_locations = true;
      glean_service = "";
      glean_hostname = "";
      glean_port = 0;
      glean_reponame = "www.autocomplete";
      symbol_write_root_path = "www";
      symbol_write_hhi_path = "hhi";
      symbol_write_ignore_paths = [];
      symbol_write_index_paths = [];
      symbol_write_include_hhi = true;
      po_disallow_func_ptrs_in_constants = false;
      tco_error_php_lambdas = false;
      tco_disallow_discarded_nullable_awaitables = false;
      po_enable_xhp_class_modifier = true;
      po_disable_xhp_element_mangling = true;
      po_disable_xhp_children_declarations = true;
      po_enable_first_class_function_pointers = false;
      po_enable_enum_classes = false;
      po_disable_modes = false;
      po_disable_hh_ignore_error = false;
      po_disable_array = true;
      po_disable_array_typehint = true;
      tco_enable_systemlib_annotations = false;
      tco_higher_kinded_types = false;
      tco_method_call_inference = false;
      tco_report_pos_from_reason = false;
      tco_typecheck_sample_rate = 1.0;
    }
  
  let make
      ?(po_deregister_php_stdlib = default.po_deregister_php_stdlib)
      ?(po_disallow_toplevel_requires = default.po_disallow_toplevel_requires)
      ?(po_disable_nontoplevel_declarations =
        default.po_disable_nontoplevel_declarations)
      ?(po_disable_static_closures = default.po_disable_static_closures)
      ?(po_allow_goto = default.po_allow_goto)
      ?(tco_log_inference_constraints = default.tco_log_inference_constraints)
      ?(tco_experimental_features = default.tco_experimental_features)
      ?(tco_migration_flags = default.tco_migration_flags)
      ?(tco_dynamic_view = default.tco_dynamic_view)
      ?tco_num_local_workers
      ?(tco_parallel_type_checking_threshold =
        default.tco_parallel_type_checking_threshold)
      ?tco_defer_class_declaration_threshold
      ?tco_max_times_to_defer_type_checking
      ?(tco_prefetch_deferred_files = default.tco_prefetch_deferred_files)
      ?tco_remote_type_check_threshold
      ?(tco_remote_type_check = default.tco_remote_type_check)
      ?tco_remote_worker_key
      ?tco_remote_check_id
      ?(tco_remote_max_batch_size = default.tco_remote_max_batch_size)
      ?(tco_remote_min_batch_size = default.tco_remote_min_batch_size)
      ?(tco_num_remote_workers = default.tco_num_remote_workers)
      ?so_remote_version_specifier
      ?(so_remote_worker_vfs_checkout_threshold =
        default.so_remote_worker_vfs_checkout_threshold)
      ?so_naming_sqlite_path
      ?(po_auto_namespace_map = default.po_auto_namespace_map)
      ?(tco_disallow_array_typehint = default.tco_disallow_array_typehint)
      ?(tco_disallow_array_literal = default.tco_disallow_array_literal)
      ?(tco_language_feature_logging = default.tco_language_feature_logging)
      ?(tco_unsafe_rx = default.tco_unsafe_rx)
      ?(tco_disallow_scrutinee_case_value_type_mismatch =
        default.tco_disallow_scrutinee_case_value_type_mismatch)
      ?(tco_timeout = default.tco_timeout)
      ?(tco_disallow_invalid_arraykey = default.tco_disallow_invalid_arraykey)
      ?(tco_disallow_byref_dynamic_calls =
        default.tco_disallow_byref_dynamic_calls)
      ?(tco_disallow_byref_calls = default.tco_disallow_byref_calls)
      ?(allowed_fixme_codes_strict = default.allowed_fixme_codes_strict)
      ?(allowed_fixme_codes_partial = default.allowed_fixme_codes_partial)
      ?(codes_not_raised_partial = default.codes_not_raised_partial)
      ?(log_levels = default.log_levels)
      ?(po_disable_lval_as_an_expression =
        default.po_disable_lval_as_an_expression)
      ?(tco_shallow_class_decl = default.tco_shallow_class_decl)
      ?(po_rust_parser_errors = default.po_rust_parser_errors)
      ?(profile_type_check_duration_threshold =
        default.profile_type_check_duration_threshold)
      ?(profile_type_check_twice = default.profile_type_check_twice)
      ?profile_owner
      ?(profile_desc = default.profile_desc)
      ?(tco_like_type_hints = default.tco_like_type_hints)
      ?(tco_union_intersection_type_hints =
        default.tco_union_intersection_type_hints)
      ?(tco_coeffects = default.tco_coeffects)
      ?(tco_like_casts = default.tco_like_casts)
      ?(tco_simple_pessimize = default.tco_simple_pessimize)
      ?(tco_complex_coercion = default.tco_complex_coercion)
      ?(tco_disable_partially_abstract_typeconsts =
        default.tco_disable_partially_abstract_typeconsts)
      ?(error_codes_treated_strictly = default.error_codes_treated_strictly)
      ?(tco_check_xhp_attribute = default.tco_check_xhp_attribute)
      ?(tco_check_redundant_generics = default.tco_check_redundant_generics)
      ?(tco_disallow_unresolved_type_variables =
        default.tco_disallow_unresolved_type_variables)
      ?(tco_disallow_trait_reuse = default.tco_disallow_trait_reuse)
      ?(tco_disallow_invalid_arraykey_constraint =
        default.tco_disallow_invalid_arraykey_constraint)
      ?(po_enable_class_level_where_clauses =
        default.po_enable_class_level_where_clauses)
      ?(po_disable_legacy_soft_typehints =
        default.po_disable_legacy_soft_typehints)
      ?(po_allowed_decl_fixme_codes = default.po_allowed_decl_fixme_codes)
      ?(po_allow_new_attribute_syntax = default.po_allow_new_attribute_syntax)
      ?(tco_global_inference = default.tco_global_inference)
      ?(tco_gi_reinfer_types = default.tco_gi_reinfer_types)
      ?(tco_ordered_solving = default.tco_ordered_solving)
      ?(tco_const_static_props = default.tco_const_static_props)
      ?(po_disable_legacy_attribute_syntax =
        default.po_disable_legacy_attribute_syntax)
      ?(tco_const_attribute = default.tco_const_attribute)
      ?(po_const_default_func_args = default.po_const_default_func_args)
      ?(po_const_default_lambda_args = default.po_const_default_lambda_args)
      ?(po_disallow_silence = default.po_disallow_silence)
      ?(po_abstract_static_props = default.po_abstract_static_props)
      ?(po_disable_unset_class_const = default.po_disable_unset_class_const)
      ?(po_parser_errors_only = default.po_parser_errors_only)
      ?(tco_check_attribute_locations = default.tco_check_attribute_locations)
      ?(glean_service = default.glean_service)
      ?(glean_hostname = default.glean_hostname)
      ?(glean_port = default.glean_port)
      ?(glean_reponame = default.glean_reponame)
      ?(symbol_write_root_path = default.symbol_write_root_path)
      ?(symbol_write_hhi_path = default.symbol_write_hhi_path)
      ?(symbol_write_ignore_paths = default.symbol_write_ignore_paths)
      ?(symbol_write_index_paths = default.symbol_write_index_paths)
      ?(symbol_write_include_hhi = default.symbol_write_include_hhi)
      ?(po_disallow_func_ptrs_in_constants =
        default.po_disallow_func_ptrs_in_constants)
      ?(tco_error_php_lambdas = default.tco_error_php_lambdas)
      ?(tco_disallow_discarded_nullable_awaitables =
        default.tco_disallow_discarded_nullable_awaitables)
      ?(po_enable_xhp_class_modifier = default.po_enable_xhp_class_modifier)
      ?(po_disable_xhp_element_mangling = default.po_disable_xhp_element_mangling)
      ?(po_disable_xhp_children_declarations =
        default.po_disable_xhp_children_declarations)
      ?(po_enable_first_class_function_pointers =
        default.po_enable_first_class_function_pointers)
      ?(po_enable_enum_classes = default.po_enable_enum_classes)
      ?(po_disable_modes = default.po_disable_modes)
      ?(po_disable_hh_ignore_error = default.po_disable_hh_ignore_error)
      ?(po_disable_array = default.po_disable_array)
      ?(po_disable_array_typehint = default.po_disable_array_typehint)
      ?(po_allow_unstable_features = default.po_allow_unstable_features)
      ?(tco_enable_systemlib_annotations =
        default.tco_enable_systemlib_annotations)
      ?(tco_higher_kinded_types = default.tco_higher_kinded_types)
      ?(tco_method_call_inference = default.tco_method_call_inference)
      ?(tco_report_pos_from_reason = default.tco_report_pos_from_reason)
      ?(tco_typecheck_sample_rate = default.tco_typecheck_sample_rate)
      () =
    {
      tco_experimental_features;
      tco_migration_flags;
      tco_dynamic_view;
      tco_num_local_workers;
      tco_parallel_type_checking_threshold;
      tco_defer_class_declaration_threshold;
      tco_max_times_to_defer_type_checking;
      tco_prefetch_deferred_files;
      tco_remote_type_check_threshold;
      tco_remote_type_check;
      tco_remote_worker_key;
      tco_remote_check_id;
      tco_remote_max_batch_size;
      tco_remote_min_batch_size;
      tco_num_remote_workers;
      so_remote_version_specifier;
      so_remote_worker_vfs_checkout_threshold;
      so_naming_sqlite_path;
      po_auto_namespace_map;
      po_codegen = false;
      allowed_fixme_codes_strict;
      allowed_fixme_codes_partial;
      codes_not_raised_partial;
      po_deregister_php_stdlib;
      po_disallow_toplevel_requires;
      po_disable_nontoplevel_declarations;
      po_disable_static_closures;
      po_allow_goto;
      po_allow_unstable_features;
      tco_log_inference_constraints;
      tco_disallow_array_typehint;
      tco_disallow_array_literal;
      tco_language_feature_logging;
      tco_unsafe_rx;
      tco_disallow_scrutinee_case_value_type_mismatch;
      tco_timeout;
      tco_disallow_invalid_arraykey;
      tco_disallow_byref_dynamic_calls;
      tco_disallow_byref_calls;
      log_levels;
      po_disable_lval_as_an_expression;
      tco_shallow_class_decl;
      po_rust_parser_errors;
      profile_type_check_duration_threshold;
      profile_type_check_twice;
      profile_owner;
      profile_desc;
      tco_like_type_hints;
      tco_union_intersection_type_hints;
      tco_coeffects;
      tco_like_casts;
      tco_simple_pessimize;
      tco_complex_coercion;
      tco_disable_partially_abstract_typeconsts;
      error_codes_treated_strictly;
      tco_check_xhp_attribute;
      tco_check_redundant_generics;
      tco_disallow_unresolved_type_variables;
      tco_disallow_trait_reuse;
      tco_disallow_invalid_arraykey_constraint;
      po_enable_class_level_where_clauses;
      po_disable_legacy_soft_typehints;
      po_allowed_decl_fixme_codes;
      po_allow_new_attribute_syntax;
      tco_global_inference;
      tco_gi_reinfer_types;
      tco_ordered_solving;
      tco_const_static_props;
      po_disable_legacy_attribute_syntax;
      tco_const_attribute;
      po_const_default_func_args;
      po_const_default_lambda_args;
      po_disallow_silence;
      po_abstract_static_props;
      po_disable_unset_class_const;
      po_parser_errors_only;
      tco_check_attribute_locations;
      glean_service;
      glean_hostname;
      glean_port;
      glean_reponame;
      symbol_write_root_path;
      symbol_write_hhi_path;
      symbol_write_ignore_paths;
      symbol_write_index_paths;
      symbol_write_include_hhi;
      po_disallow_func_ptrs_in_constants;
      tco_error_php_lambdas;
      tco_disallow_discarded_nullable_awaitables;
      po_enable_xhp_class_modifier;
      po_disable_xhp_element_mangling;
      po_disable_xhp_children_declarations;
      po_enable_first_class_function_pointers;
      po_enable_enum_classes;
      po_disable_modes;
      po_disable_hh_ignore_error;
      po_disable_array;
      po_disable_array_typehint;
      tco_enable_systemlib_annotations;
      tco_higher_kinded_types;
      tco_method_call_inference;
      tco_report_pos_from_reason;
      tco_typecheck_sample_rate;
    }
  
  let tco_experimental_feature_enabled t s =
    SSet.mem s t.tco_experimental_features
  
  let tco_migration_flag_enabled t s = SSet.mem s t.tco_migration_flags
  
  let tco_dynamic_view t = t.tco_dynamic_view
  
  let tco_num_local_workers t = t.tco_num_local_workers
  
  let tco_parallel_type_checking_threshold t =
    t.tco_parallel_type_checking_threshold
  
  let tco_defer_class_declaration_threshold t =
    t.tco_defer_class_declaration_threshold
  
  let tco_max_times_to_defer_type_checking t =
    t.tco_max_times_to_defer_type_checking
  
  let tco_prefetch_deferred_files t = t.tco_prefetch_deferred_files
  
  let tco_remote_type_check_threshold t = t.tco_remote_type_check_threshold
  
  let tco_remote_type_check t = t.tco_remote_type_check
  
  let tco_remote_worker_key t = t.tco_remote_worker_key
  
  let tco_remote_check_id t = t.tco_remote_check_id
  
  let tco_remote_max_batch_size t = t.tco_remote_max_batch_size
  
  let tco_remote_min_batch_size t = t.tco_remote_min_batch_size
  
  let tco_num_remote_workers t = t.tco_num_remote_workers
  
  let so_remote_version_specifier t = t.so_remote_version_specifier
  
  let so_remote_worker_vfs_checkout_threshold t =
    t.so_remote_worker_vfs_checkout_threshold
  
  let so_naming_sqlite_path t = t.so_naming_sqlite_path
  
  let po_auto_namespace_map t = t.po_auto_namespace_map
  
  let po_deregister_php_stdlib t = t.po_deregister_php_stdlib
  
  let po_disable_nontoplevel_declarations t =
    t.po_disable_nontoplevel_declarations
  
  let po_disable_static_closures t = t.po_disable_static_closures
  
  let po_allow_goto t = t.po_allow_goto
  
  let tco_log_inference_constraints t = t.tco_log_inference_constraints
  
  let po_codegen t = t.po_codegen
  
  let po_disallow_toplevel_requires t = t.po_disallow_toplevel_requires
  
  let tco_disallow_array_typehint t = t.tco_disallow_array_typehint
  
  let tco_disallow_array_literal t = t.tco_disallow_array_literal
  
  let tco_language_feature_logging t = t.tco_language_feature_logging
  
  let tco_unsafe_rx t = t.tco_unsafe_rx
  
  let tco_disallow_scrutinee_case_value_type_mismatch t =
    t.tco_disallow_scrutinee_case_value_type_mismatch
  
  let tco_timeout t = t.tco_timeout
  
  let tco_disallow_invalid_arraykey t = t.tco_disallow_invalid_arraykey
  
  let tco_disallow_invalid_arraykey_constraint t =
    t.tco_disallow_invalid_arraykey_constraint
  
  let tco_disallow_byref_dynamic_calls t = t.tco_disallow_byref_dynamic_calls
  
  let tco_disallow_byref_calls t = t.tco_disallow_byref_calls
  
  let allowed_fixme_codes_strict t = t.allowed_fixme_codes_strict
  
  let allowed_fixme_codes_partial t = t.allowed_fixme_codes_partial
  
  let codes_not_raised_partial t = t.codes_not_raised_partial
  
  let log_levels t = t.log_levels
  
  let po_disable_lval_as_an_expression t = t.po_disable_lval_as_an_expression
  
  let tco_shallow_class_decl t = t.tco_shallow_class_decl
  
  let po_rust_parser_errors t = t.po_rust_parser_errors
  
  let profile_type_check_duration_threshold t =
    t.profile_type_check_duration_threshold
  
  let profile_type_check_twice t = t.profile_type_check_twice
  
  let profile_owner t = t.profile_owner
  
  let profile_desc t = t.profile_desc
  
  let tco_like_type_hints t = t.tco_like_type_hints
  
  let tco_union_intersection_type_hints t = t.tco_union_intersection_type_hints
  
  let coeffects t = t.tco_coeffects
  
  let set_coeffects t = { t with tco_coeffects = true }
  
  let tco_like_casts t = t.tco_like_casts
  
  let tco_simple_pessimize t = t.tco_simple_pessimize
  
  let tco_complex_coercion t = t.tco_complex_coercion
  
  let tco_disable_partially_abstract_typeconsts t =
    t.tco_disable_partially_abstract_typeconsts
  
  let error_codes_treated_strictly t = t.error_codes_treated_strictly
  
  let tco_check_xhp_attribute t = t.tco_check_xhp_attribute
  
  let tco_check_redundant_generics t = t.tco_check_redundant_generics
  
  let tco_disallow_unresolved_type_variables t =
    t.tco_disallow_unresolved_type_variables
  
  let tco_disallow_trait_reuse t = t.tco_disallow_trait_reuse
  
  let po_enable_class_level_where_clauses t =
    t.po_enable_class_level_where_clauses
  
  let po_disable_legacy_soft_typehints t = t.po_disable_legacy_soft_typehints
  
  let po_allowed_decl_fixme_codes t = t.po_allowed_decl_fixme_codes
  
  let po_allow_new_attribute_syntax t = t.po_allow_new_attribute_syntax
  
  let po_allow_unstable_features t = t.po_allow_unstable_features
  
  let tco_global_inference t = t.tco_global_inference
  
  let tco_gi_reinfer_types t = t.tco_gi_reinfer_types
  
  let tco_ordered_solving t = t.tco_ordered_solving
  
  let tco_const_static_props t = t.tco_const_static_props
  
  let po_disable_legacy_attribute_syntax t = t.po_disable_legacy_attribute_syntax
  
  let tco_const_attribute t = t.tco_const_attribute
  
  let po_const_default_func_args t = t.po_const_default_func_args
  
  let po_const_default_lambda_args t = t.po_const_default_lambda_args
  
  let po_disallow_silence t = t.po_disallow_silence
  
  let po_abstract_static_props t = t.po_abstract_static_props
  
  let po_disable_unset_class_const t = t.po_disable_unset_class_const
  
  let tco_check_attribute_locations t = t.tco_check_attribute_locations
  
  let glean_service t = t.glean_service
  
  let glean_hostname t = t.glean_hostname
  
  let glean_port t = t.glean_port
  
  let glean_reponame t = t.glean_reponame
  
  let symbol_write_root_path t = t.symbol_write_root_path
  
  let symbol_write_hhi_path t = t.symbol_write_hhi_path
  
  let symbol_write_ignore_paths t = t.symbol_write_ignore_paths
  
  let symbol_write_index_paths t = t.symbol_write_index_paths
  
  let symbol_write_include_hhi t = t.symbol_write_include_hhi
  
  let set_global_inference t = { t with tco_global_inference = true }
  
  let set_ordered_solving t b = { t with tco_ordered_solving = b }
  
  let po_parser_errors_only t = t.po_parser_errors_only
  
  let po_disallow_func_ptrs_in_constants t = t.po_disallow_func_ptrs_in_constants
  
  let tco_error_php_lambdas t = t.tco_error_php_lambdas
  
  let tco_disallow_discarded_nullable_awaitables t =
    t.tco_disallow_discarded_nullable_awaitables
  
  let po_enable_xhp_class_modifier t = t.po_enable_xhp_class_modifier
  
  let po_disable_xhp_element_mangling t = t.po_disable_xhp_element_mangling
  
  let po_disable_xhp_children_declarations t =
    t.po_disable_xhp_children_declarations
  
  let po_enable_first_class_function_pointers t =
    t.po_enable_first_class_function_pointers
  
  let po_enable_enum_classes t = t.po_enable_enum_classes
  
  let po_disable_modes t = t.po_disable_modes
  
  let po_disable_hh_ignore_error t = t.po_disable_hh_ignore_error
  
  let po_disable_array t = t.po_disable_array
  
  let po_disable_array_typehint t = t.po_disable_array_typehint
  
  let tco_enable_systemlib_annotations t = t.tco_enable_systemlib_annotations
  
  let tco_higher_kinded_types t = t.tco_higher_kinded_types
  
  let tco_method_call_inference t = t.tco_method_call_inference
  
  let tco_report_pos_from_reason t = t.tco_report_pos_from_reason
  
  let tco_typecheck_sample_rate t = t.tco_typecheck_sample_rate
  