object-introspection/types
Jake Hillion d71307cb43 oil: change std::stack reference to a std::function (#345)
Summary:

Previously on large types OIL would have problems with corrupting the `std::stack<exporter::inst::Inst>` that is passed to the processors. This change hides the implementation of the stack from the processors by wrapping the call to emplace in a `std::function` written by the non-generated code, which solves the test case I've seen for this crashing. It also allows us to easily change the stack implementation in future - I plan to change it to a `std::stack<T, std::vector<T>>` in a follow up.

Reviewed By: tyroguru

Differential Revision: D49273116
2023-09-14 16:57:45 +01:00
..
array_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
boost_bimap_type.toml TypeGraph: Update container TOML files to new format 2023-05-26 18:21:59 +01:00
caffe2_blob_type.toml TypeGraph: Update container TOML files to new format 2023-05-26 18:21:59 +01:00
cxx11_list_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
cxx11_string_type.toml oil v2 2023-08-23 15:59:53 +01:00
deque_list_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
f14_fast_map.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
f14_fast_set.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
f14_node_map.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
f14_node_set.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
f14_value_map.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
f14_value_set.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
f14_vector_map.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
f14_vector_set.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
fb_string_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
folly_iobuf_queue_type.toml Specify namespace for IOBuf in IOBufQueue function 2023-07-19 11:13:39 +01:00
folly_iobuf_type.toml Add missing namespace to folly::IOBuf container TOML 2023-06-29 11:59:07 +01:00
folly_optional_type.toml TypeGraph: Update container TOML files to new format 2023-05-26 18:21:59 +01:00
folly_small_heap_vector_map.toml TypeGraph: Update container TOML files to new format 2023-05-26 18:21:59 +01:00
list_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
map_seq_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
multi_map_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
multi_set_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
optional_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
pair_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
priority_queue_container_adapter_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
queue_container_adapter_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
README.md oil v2 2023-08-23 15:59:53 +01:00
ref_wrapper_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
repeated_field_type.toml TypeGraph: Update container TOML files to new format 2023-05-26 18:21:59 +01:00
repeated_ptr_field_type.toml TypeGraph: Update container TOML files to new format 2023-05-26 18:21:59 +01:00
seq_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
set_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
shrd_ptr_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
small_vec_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
sorted_vec_set_type.toml oil v2 2023-08-23 15:59:53 +01:00
stack_container_adapter_type.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
std_map_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
std_unordered_map_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
std_unordered_multimap_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
std_variant.toml static types: place in own header for testing 2023-06-30 12:54:02 +01:00
string_type.toml TypeGraph: Replace allocators with DummyAllocator 2023-05-31 15:49:37 +01:00
thrift_isset_type.toml oil v2 2023-08-23 15:59:53 +01:00
try_type.toml Fix JIT CodeGen for Try<> 2023-08-21 19:16:13 +02:00
uniq_ptr_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
unordered_multiset_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
unordered_set_type.toml oil: change std::stack reference to a std::function (#345) 2023-09-14 16:57:45 +01:00
weak_ptr_type.toml oil v2 2023-08-23 15:59:53 +01:00

Container Type Definition Format

This document describes the format of the container definition files contained in this directory.

info

  • type_name

    The fully-qualified name of the container type. This is used to match against the names of types contained in an executable's debug information.

  • header

    The name of the C++ header file in which this container is defined.

  • stub_template_params

    The indexes of template parameters which do not represent types stored within this container. These parameters will not be recursed into and measured by OI.

  • underlying_container_index

    Only used for container adapters. Points OI to the template parameter representing the underlying container to be measured.

codegen

  • decl

    C++ code for the declaration of a getSizeType function for this container.

  • func

    C++ code for the definition of a getSizeType function for this container.

  • processor.type

    The static type that will be filled in by this particular processor. Multiple processors are allowed and recommended.

  • processor.func

    C++ code for the function body of a function with this signature: void(result::Element& el, std::stack<Inst>& ins, ParsedData d) which is supplied with the data of the paired static type.

  • traversal_func

    C++ code for the function body of a function with this signature: static types::st::Unit<DB> getSizeType(const T& container, ST returnArg) where ST defines the combined static type of each supplied processor.

Changes introduced with Typed Data Segment

  • decl and func fields are ignored when using -ftyped-data-segment and the handler field is used instead.

## Changes introduced with TreeBuilder V2

  • decl, func, and handler fields are ignored when using -ftree-builder-v2. The TypeHandler is instead constructed from traversal_func and processor entries.

Changes introduced with TypeGraph

  • typeName and matcher fields have been merged into the single field type_name.
  • ns namespace definition is no longer required.
  • underlyingContainerIndex renamed to underlying_container_index
  • The options for measuring / stubbing / removing template parameters have been reworked:
    • By default all parameters are now measured. This includes the tail parameters in a variadic template.
    • There is one option to specify template parameters which should not be measured: stub_template_params. The type graph code will automatically determine what type of stubbing to apply to each parameter in this list.

Deprecated Options

  • ctype

    A reference to the enum ContainerTypeEnum in OI's source code. This is no longer required with Tree Builder v2.

  • handler

    C++ code for the definition of a TypeHandler class for this container. Now generated from traversal_func and processor entries.

  • numTemplateParams

    The first numTemplateParams template parameters for this container represent the types for the data we want to process. If this is not set, use all a container's template parameters. All of a container's parameters will still be enumerated and output in CodeGen, regardless of this setting.

  • allocatorIndex

    Index of a template parameter representing an allocator. It will be not be used when CodeGenning this container.

  • replaceTemplateParamIndex

    Indexes of template parameters to be stubbed out, i.e. replaced with dummy structs of a given size. Used for custom hashers and comparers.