object-introspection/tools
Jake Hillion 55989a9156 oilgen: migrate to source parsing (#421)
Summary:
oilgen: migrate to source parsing

Using debug information generated from partial source (that is, not the final
binary) has been insufficient to generally generate OIL code.

A particular example is pointers to templates:
```cpp
#include <oi/oi.h>
template <typename T>
struct Foo {
  T t;
};
template <typename T>
struct Bar {
  Foo<T>& f;
};
void foo(const Bar<int>& b) {
  oi::introspect(b);
}
```

The pointer/reference to `Foo<int>` appears in DWARF with
`DW_AT_declaration(true)` because it could be specialised before its usage.
However, with OIL, we are creating an implicit usage site in the
`oi::introspect` call that the compiler is unable to see.

This change reworks OILGen to work from a Clang command line rather than debug
information. We setup and run a compiler on the source, giving us access to an
AST and Semantic Analyser. We then:
- Find the `oi::introspect` template.
- Iterate through each of its callsites for their type.
- Run `ClangTypeParser::parse` on each type.
- Run codegen.
- Compile into an object file.

Having access to the semantic analyser allows us to forcefully complete a type,
as it would be if it was used in the initial code.


Test Plan:
hope

`buck2 run fbcode//mode/opt fbcode//object-introspection/oil/examples/compile-time:compile-time`

Reviewed By: tyroguru

Differential Revision: D51854477

Pulled By: JakeHillion
2023-12-19 13:26:25 -08:00
..
combine_configs.py Take list of pass-through types from config instead of hardcoding 2023-07-05 13:39:19 +01:00
config_gen.py Initial commit 2022-12-19 06:37:51 -08:00
inline_stats.py Initial commit 2022-12-19 06:37:51 -08:00
OILGen.cpp oilgen: migrate to source parsing (#421) 2023-12-19 13:26:25 -08:00
OIP.cpp clang-format: disable bin packing 2023-11-13 18:19:53 +00:00
OIRP.cpp clang-format: disable bin packing 2023-11-13 18:19:53 +00:00
OITB.cpp Make oitb actually log TB output (#415) 2023-11-20 13:24:28 +00:00