- Return pointer to non-const for getExecutionEngine
- compiler-research/CppInterOp#547 (merged)
- Support NixOS paths in
DetectResourceDir - Remove
nameparam usage fromLookupConstructors
I have added many new predicates and transformations, each of them being needed to implement my features so far in jank. I have tried to follow the existing naming conventions and logical placement for each.
- Move
TemplateArgInfohigher up (needed for later commits) - Add
AlignmentOffor scopes - Add
GetAlignmentOfTypefor types - Add
IsImplicitlyConvertiblefor types - Add
GetPointerTypeto go fromTtoT* - Add
GetTypeWithoutCv - Add
IsTemplateSpecializationOf - Add
IsConstructible - Add
IsVoid - Add
GetLValueReferenceType - Add
IsIntegral - Add
GetCommonType - Add
LookupMethods - Add
BestMemberOverloadFunctionMatch - Add static member fn call support to
make_narg_call - Add
InstantiateTemplateoverload for specializations - Improve array support
- Add
IsTriviallyDestructible - Add
IsStaticDatamember - Add
GetTypeWithConst - Add LLVM 21 support
- Consider all base types for named lookup
- Add enum size, alignment, and wrapper support
- Add function pointer access and call support
- Add function type helpers
- Add function template support to
GetTypeFromScope - Add base support to
LookupMethods - Return function pointers from GetTypeFromScope
- Render full type name in field decl wrapper
- Improve robustness of specialization instantiation
- Print fully qualified name for field decl types
- Support more types for template instantiation
- Add
IsClassTemplate - Add class template support for GetTypeFromScope
- Make template instantiation more robust
- Do full ADL/friend lookup in
GetOperator - Remove
InstantiateClass - Ignore access diagnostics in
LookupMethods - Add support for calling variadic functions
- Add array support to
GetPointeeType - Allow customizing the code model
Some functions behaved in surprising ways and I have opted to fix them rather than create a new function which behaves less surprisingly. I recommend every one of these gets merged, since I think they lead to cleaner API design, but they're separated since they are breaking changes.
- Change
GetNonReferenceTypeto return input type if it's not a reference - Patch
IsBuiltinto only return if the type is builtin - Patch
make_narg_ctor_with_returnto use less indirection and not dynamically allocate - Patch
make_narg_call_with_returnto requireretfor non-void functions- https://github.com/jank-lang/CppInterOp/commit/40469ec9400139dfb383ee3082e174e46c711e5a
- Related: Add
inline,gnu::always_inline, andgnu::nonnullto fn wrapper
- Add function templates in
GetFunctionsUsingName - Use custom names for generated helpers
Finally, all of this comes together with the addition of AotCall and its associated code.
This is what allows jank to AOT compile C++ alongside its own LLVM IR and merge the modules
together. Doing this required parameterizing each of the existing wrapper generators so
they could work with with JitCall and AotCall.
- Add
AotCallparallel toJitCall, along withMakeAotCallable - Add
MakeBuiltinConstructorAotCallable- https://github.com/jank-lang/CppInterOp/commit/5f201a79a74b237ebbddb3203b18b104adc5fb76
- The existing ctor support is only for user-defined types
- Add
MakeAggregateInitializationAotCallable - Add
MakeBuiltinOperatorAotCallable- https://github.com/jank-lang/CppInterOp/commit/a2951c6a568d5b832110294b285a7ffad2c20789
- The existing operator support is only for user-defined operators
- Add assignment operator return support for these
- Add reference support
- Add array/array reference support
- Hacky: Add
IsAggregateConstructible
- Change dtor syntax to match bdwgc's finalizer