Skip to content

Add type literal DSL#712

Merged
jeaye merged 23 commits intomainfrom
cpp/type
Mar 13, 2026
Merged

Add type literal DSL#712
jeaye merged 23 commits intomainfrom
cpp/type

Conversation

@jeaye
Copy link
Member

@jeaye jeaye commented Mar 13, 2026

This is documented in the jank book chapter, also added in this PR, here.

cpp/type test suite

  • ptr
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: reference type
    • pass: array type
    • pass: void type
    • pass: primitive type
    • pass: pointer type
    • pass: function type
  • lref
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: void type
    • fail: unrelated type
    • pass: primitive type
    • pass: pointer type
    • pass: rvalue ref type
  • rref
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: void type
    • fail: unrelated type
    • pass: primitive type
    • pass: pointer type
    • pass: lvalue ref type
  • const
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: reference type
    • pass: void type
    • pass: primitive type
    • pass: pointer type
  • volatile
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: reference type
    • pass: void type
    • pass: primitive type
    • pass: pointer type
  • signed
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: floating point
    • fail: void
    • pass: unsigned int
    • pass: int
    • pass: char
  • unsigned
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: floating point
    • fail: void
    • pass: signed int
    • pass: int
    • pass: char
  • short
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: floating point
    • fail: void
    • fail: long double
    • fail: char
    • fail: short
    • pass: long
    • pass: int
  • long
    • fail: zero args
    • fail: non-type arg
    • fail: two args
    • fail: void
    • fail: float
    • fail: long double type
    • fail: short
    • fail: char
    • pass: double
    • pass: long
    • pass: int
  • array
    • fail: zero args
    • fail: non-type arg
    • fail: non-int size arg
    • fail: three args
    • fail: reference type
    • fail: negative size
    • pass: unsized
    • pass: sized
    • pass: zero size
  • fn
    • fail: zero args
    • fail: non-type return arg
    • fail: non-sequence params arg
    • fail: non-type param in sequence
    • fail: void param type
    • pass: void return type, empty params
    • pass: non-void return type, non-empty params
  • member
    • fail: zero args
    • fail: non-type return arg
    • fail: non-symbol member arg
    • fail: three args
    • fail: missing member
    • fail: private member
    • fail: protected member
    • fail: non-type member
    • pass: valid member
    • pass: valid base member
  • member*
    • fail: zero args
    • fail: non-type return arg
    • fail: non-type member arg
    • fail: invocation with incorrect class type
    • pass: valid member
    • pass: valid base member
  • template
    • fail: insufficient template args
    • fail: too many template args
    • fail: non-type template args, when type is expected
    • fail: type template args, when non-type is expected
    • fail: substitution failure
    • pass: unpassed default args
    • pass: non-type args
    • pass: normal type args
    • pass: variadic type args

@jeaye jeaye requested a review from Copilot March 13, 2026 22:21
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a C++ type literal DSL (cpp/type) and migrates existing interop call sites/tests/docs to use the new type forms (keywords like (:* t), templates like (std.vector char), etc.), alongside updating the CppInterOp include paths and a few runtime/analyzer/codegen refinements.

Changes:

  • Introduces processor::analyze_type to resolve the new C++ type DSL and routes relevant analyzers through it (cpp/cast, cpp/unsafe-cast, cpp/unbox, cpp/new, catch types, etc.).
  • Updates C++ interop integration to use CppInterOp/* headers and adjusts interpreter type naming.
  • Adds/updates extensive cpp/type DSL tests and expands book documentation (including a new troubleshooting FAQ).

Reviewed changes

Copilot reviewed 190 out of 190 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
compiler+runtime/third-party/cppinterop Bumps cppinterop submodule to version that supports new DSL/integration.
compiler+runtime/test/jank/cpp/unsafe-cast/pass-same-type.jank Migrates unsafe-cast type args to DSL (int, (:* int)).
compiler+runtime/test/jank/cpp/unsafe-cast/pass-pointer-to-object-to-pointer-to-object.jank Migrates pointer types to DSL form.
compiler+runtime/test/jank/cpp/unsafe-cast/pass-pointer-to-object-to-pointer-to-function.jank Migrates type resolution away from cpp/-prefixed symbol where applicable and uses (:* ...).
compiler+runtime/test/jank/cpp/unsafe-cast/pass-pointer-to-function-to-pointer-to-object.jank Migrates pointer types / function pointer type usage to DSL.
compiler+runtime/test/jank/cpp/unsafe-cast/pass-int-to-pointer.jank Migrates intptr_t* / size_t casting to DSL.
compiler+runtime/test/jank/cpp/opaque-box/unbox/pass-round-trip.jank Migrates unbox target type to DSL pointer form.
compiler+runtime/test/jank/cpp/opaque-box/box/pass-reference.jank Migrates unbox target type to DSL pointer form.
compiler+runtime/test/jank/cpp/literal-type/volatile/pass-void.jank Adds passing test for :volatile type DSL.
compiler+runtime/test/jank/cpp/literal-type/volatile/pass-primitive.jank Adds passing test for :volatile primitive type DSL.
compiler+runtime/test/jank/cpp/literal-type/volatile/pass-pointer.jank Adds passing test for :volatile pointer type DSL.
compiler+runtime/test/jank/cpp/literal-type/volatile/pass-pointer-to-function.jank Adds passing test for :volatile pointer-to-function type DSL.
compiler+runtime/test/jank/cpp/literal-type/volatile/fail-zero-args.jank Adds failing test for invalid :volatile arity.
compiler+runtime/test/jank/cpp/literal-type/volatile/fail-two-args.jank Adds failing test for invalid :volatile arity.
compiler+runtime/test/jank/cpp/literal-type/volatile/fail-reference.jank Adds failing test for invalid :volatile reference usage.
compiler+runtime/test/jank/cpp/literal-type/volatile/fail-non-type-arg.jank Adds failing test for invalid :volatile argument type.
compiler+runtime/test/jank/cpp/literal-type/unsigned/pass-signed.jank Adds passing test for nested :unsigned/:signed resolution.
compiler+runtime/test/jank/cpp/literal-type/unsigned/pass-int.jank Adds passing test for :unsigned int.
compiler+runtime/test/jank/cpp/literal-type/unsigned/pass-char.jank Adds passing test for :unsigned char.
compiler+runtime/test/jank/cpp/literal-type/unsigned/fail-zero-args.jank Adds failing test for invalid :unsigned arity.
compiler+runtime/test/jank/cpp/literal-type/unsigned/fail-void.jank Adds failing test for invalid :unsigned void.
compiler+runtime/test/jank/cpp/literal-type/unsigned/fail-two-args.jank Adds failing test for invalid :unsigned arity.
compiler+runtime/test/jank/cpp/literal-type/unsigned/fail-non-type-arg.jank Adds failing test for invalid :unsigned argument type.
compiler+runtime/test/jank/cpp/literal-type/unsigned/fail-float.jank Adds failing test for invalid :unsigned float.
compiler+runtime/test/jank/cpp/literal-type/template/pass-variadic.jank Adds passing test for variadic template instantiation.
compiler+runtime/test/jank/cpp/literal-type/template/pass-type.jank Adds passing test for type template instantiation.
compiler+runtime/test/jank/cpp/literal-type/template/pass-non-type.jank Adds passing test for non-type template arg instantiation.
compiler+runtime/test/jank/cpp/literal-type/template/pass-default-args.jank Adds passing test for default template args instantiation.
compiler+runtime/test/jank/cpp/literal-type/template/fail-type-for-non-type.jank Adds failing test for template arg kind mismatch.
compiler+runtime/test/jank/cpp/literal-type/template/fail-substitution-failure.jank Adds failing test for SFINAE/substitution failure.
compiler+runtime/test/jank/cpp/literal-type/template/fail-non-type-for-type.jank Adds failing test for template arg kind mismatch.
compiler+runtime/test/jank/cpp/literal-type/template/fail-insufficient-args.jank Adds failing test for insufficient template args.
compiler+runtime/test/jank/cpp/literal-type/template/fail-extra-args.jank Adds failing test for too many template args.
compiler+runtime/test/jank/cpp/literal-type/symbol/skip-pointer-to-value.jank Removes legacy symbol-based literal-type test (replaced by DSL suite).
compiler+runtime/test/jank/cpp/literal-type/symbol/pass-pointer-to-string.jank Removes legacy symbol-based literal-type test (replaced by DSL suite).
compiler+runtime/test/jank/cpp/literal-type/symbol/pass-pointer-to-pointer-to-int.jank Removes legacy symbol-based literal-type test (replaced by DSL suite).
compiler+runtime/test/jank/cpp/literal-type/symbol/pass-pointer-to-int.jank Removes legacy symbol-based literal-type test (replaced by DSL suite).
compiler+runtime/test/jank/cpp/literal-type/symbol/fail-value-position.jank Removes legacy symbol-based literal-type failure test.
compiler+runtime/test/jank/cpp/literal-type/symbol/fail-unqualified.jank Removes legacy symbol-based literal-type failure test.
compiler+runtime/test/jank/cpp/literal-type/symbol/fail-pointer-to-function.jank Removes legacy symbol-based literal-type failure test.
compiler+runtime/test/jank/cpp/literal-type/string/skip-reference.jank Removes legacy string-literal type test (DSL supersedes string literal approach).
compiler+runtime/test/jank/cpp/literal-type/string/pass-template.jank Removes legacy string-literal type test (DSL supersedes string literal approach).
compiler+runtime/test/jank/cpp/literal-type/string/pass-pointer.jank Removes legacy string-literal type test (DSL supersedes string literal approach).
compiler+runtime/test/jank/cpp/literal-type/string/pass-int.jank Removes legacy string-literal type test (DSL supersedes string literal approach).
compiler+runtime/test/jank/cpp/literal-type/string/fail-unknown-type.jank Removes legacy string-literal type failure test (DSL routes errors differently).
compiler+runtime/test/jank/cpp/literal-type/string/fail-non-string-literal.jank Removes legacy string-literal type failure test.
compiler+runtime/test/jank/cpp/literal-type/string/fail-non-literal.jank Removes legacy string-literal type failure test.
compiler+runtime/test/jank/cpp/literal-type/string/fail-no-arg.jank Removes legacy string-literal type failure test.
compiler+runtime/test/jank/cpp/literal-type/string/fail-more-args.jank Removes legacy string-literal type failure test.
compiler+runtime/test/jank/cpp/literal-type/string/fail-invalid-substitution.jank Removes legacy string-literal type failure test.
compiler+runtime/test/jank/cpp/literal-type/string/fail-empty.jank Removes legacy string-literal type failure test.
compiler+runtime/test/jank/cpp/literal-type/signed/pass-unsigned.jank Adds passing test for nested :signed/:unsigned resolution.
compiler+runtime/test/jank/cpp/literal-type/signed/pass-int.jank Adds passing test for :signed int.
compiler+runtime/test/jank/cpp/literal-type/signed/pass-char.jank Adds passing test for :signed char.
compiler+runtime/test/jank/cpp/literal-type/signed/fail-zero-args.jank Adds failing test for invalid :signed arity.
compiler+runtime/test/jank/cpp/literal-type/signed/fail-void.jank Adds failing test for invalid :signed void.
compiler+runtime/test/jank/cpp/literal-type/signed/fail-two-args.jank Adds failing test for invalid :signed arity.
compiler+runtime/test/jank/cpp/literal-type/signed/fail-non-type-arg.jank Adds failing test for invalid :signed argument type.
compiler+runtime/test/jank/cpp/literal-type/signed/fail-float.jank Adds failing test for invalid :signed float.
compiler+runtime/test/jank/cpp/literal-type/short/pass-long.jank Adds passing test for :short modifier on :long int.
compiler+runtime/test/jank/cpp/literal-type/short/pass-int.jank Adds passing test for :short int.
compiler+runtime/test/jank/cpp/literal-type/short/fail-zero-args.jank Adds failing test for invalid :short arity.
compiler+runtime/test/jank/cpp/literal-type/short/fail-void.jank Adds failing test for invalid :short void.
compiler+runtime/test/jank/cpp/literal-type/short/fail-two-args.jank Adds failing test for invalid :short arity.
compiler+runtime/test/jank/cpp/literal-type/short/fail-short.jank Adds failing test for redundant :short application.
compiler+runtime/test/jank/cpp/literal-type/short/fail-non-type-arg.jank Adds failing test for invalid :short argument type.
compiler+runtime/test/jank/cpp/literal-type/short/fail-long-double.jank Adds failing test for invalid :short use on long double.
compiler+runtime/test/jank/cpp/literal-type/short/fail-float.jank Adds failing test for invalid :short float.
compiler+runtime/test/jank/cpp/literal-type/short/fail-char.jank Adds failing test for invalid :short char.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/pass-primitive.jank Adds passing test for :&& primitive reference.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/pass-pointer.jank Adds passing test for :&& pointer reference.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/pass-lvalue-ref.jank Adds passing test for :&& applied to lvalue ref type form.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/pass-convertible-type.jank Adds passing test for :&& with move conversion.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/fail-zero-args.jank Adds failing test for invalid :&& arity.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/fail-void.jank Adds failing test for invalid :&& void.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/fail-unrelated-type.jank Adds failing test for invalid conversion into :&& target type.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/fail-two-args.jank Adds failing test for invalid :&& arity.
compiler+runtime/test/jank/cpp/literal-type/rvalue-ref/fail-non-type-arg.jank Adds failing test for invalid :&& argument type.
compiler+runtime/test/jank/cpp/literal-type/ptr/pass-void.jank Adds passing test for pointer type DSL on void.
compiler+runtime/test/jank/cpp/literal-type/ptr/pass-primitive.jank Adds passing test for pointer type DSL on primitive.
compiler+runtime/test/jank/cpp/literal-type/ptr/pass-pointer.jank Adds passing test for nested pointer.
compiler+runtime/test/jank/cpp/literal-type/ptr/pass-function.jank Adds passing test for pointer to function type DSL.
compiler+runtime/test/jank/cpp/literal-type/ptr/pass-array.jank Adds passing test for pointer to array type DSL.
compiler+runtime/test/jank/cpp/literal-type/ptr/fail-zero-args.jank Adds failing test for invalid :* arity.
compiler+runtime/test/jank/cpp/literal-type/ptr/fail-two-args.jank Adds failing test for invalid :* arity.
compiler+runtime/test/jank/cpp/literal-type/ptr/fail-reference.jank Adds failing test for pointer to reference.
compiler+runtime/test/jank/cpp/literal-type/ptr/fail-non-type-arg.jank Adds failing test for invalid :* argument type.
compiler+runtime/test/jank/cpp/literal-type/member/pass-valid.jank Adds passing test for :member type extraction.
compiler+runtime/test/jank/cpp/literal-type/member/pass-valid-in-base.jank Adds passing test for :member lookup in base class.
compiler+runtime/test/jank/cpp/literal-type/member/fail-zero-args.jank Adds failing test for invalid :member arity.
compiler+runtime/test/jank/cpp/literal-type/member/fail-value-member.jank Adds failing test for :member where member is not a type.
compiler+runtime/test/jank/cpp/literal-type/member/fail-unknown-member.jank Adds failing test for missing member.
compiler+runtime/test/jank/cpp/literal-type/member/fail-three-args.jank Adds failing test for invalid :member arity.
compiler+runtime/test/jank/cpp/literal-type/member/fail-protected-member.jank Adds failing test for protected type member access.
compiler+runtime/test/jank/cpp/literal-type/member/fail-private-member.jank Adds failing test for private type member access.
compiler+runtime/test/jank/cpp/literal-type/member/fail-non-type-class.jank Adds failing test for invalid class argument.
compiler+runtime/test/jank/cpp/literal-type/member/fail-non-symbol-member.jank Adds failing test for invalid member name type.
compiler+runtime/test/jank/cpp/literal-type/member-ptr/pass-valid.jank Adds passing test for :member* pointer-to-member variable type.
compiler+runtime/test/jank/cpp/literal-type/member-ptr/pass-valid-base.jank Adds passing test for base member pointer lookup/usage.
compiler+runtime/test/jank/cpp/literal-type/member-ptr/fail-zero-args.jank Adds failing test for invalid :member* arity.
compiler+runtime/test/jank/cpp/literal-type/member-ptr/fail-non-type-class.jank Adds failing test for invalid class arg in :member*.
compiler+runtime/test/jank/cpp/literal-type/member-ptr/fail-mismatched-class.jank Adds failing test for invoking member-ptr with wrong class type.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/pass-rvalue-ref.jank Adds passing test for :& on rvalue ref type.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/pass-primitive.jank Adds passing test for :& primitive.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/pass-pointer.jank Adds passing test for :& pointer.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/fail-zero-args.jank Adds failing test for invalid :& arity.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/fail-void.jank Adds failing test for invalid :& void.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/fail-unrelated-type.jank Adds failing test for invalid :& type conversion.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/fail-two-args.jank Adds failing test for invalid :& arity.
compiler+runtime/test/jank/cpp/literal-type/lvalue-ref/fail-non-type-arg.jank Adds failing test for invalid :& argument type.
compiler+runtime/test/jank/cpp/literal-type/long/pass-long.jank Adds passing test for nested :long.
compiler+runtime/test/jank/cpp/literal-type/long/pass-int.jank Adds passing test for :long int.
compiler+runtime/test/jank/cpp/literal-type/long/pass-double.jank Adds passing test for :long double.
compiler+runtime/test/jank/cpp/literal-type/long/fail-zero-args.jank Adds failing test for invalid :long arity.
compiler+runtime/test/jank/cpp/literal-type/long/fail-void.jank Adds failing test for invalid :long void.
compiler+runtime/test/jank/cpp/literal-type/long/fail-two-args.jank Adds failing test for invalid :long arity.
compiler+runtime/test/jank/cpp/literal-type/long/fail-short.jank Adds failing test for :long applied to short type.
compiler+runtime/test/jank/cpp/literal-type/long/fail-non-type-arg.jank Adds failing test for invalid :long argument type.
compiler+runtime/test/jank/cpp/literal-type/long/fail-long-double.jank Adds failing test for redundant :long application.
compiler+runtime/test/jank/cpp/literal-type/long/fail-float.jank Adds failing test for invalid :long float.
compiler+runtime/test/jank/cpp/literal-type/long/fail-char.jank Adds failing test for invalid :long char.
compiler+runtime/test/jank/cpp/literal-type/fn/pass-void.jank Adds passing test for function type DSL.
compiler+runtime/test/jank/cpp/literal-type/fn/pass-non-void.jank Adds passing test for function type DSL with params.
compiler+runtime/test/jank/cpp/literal-type/fn/fail-zero-args.jank Adds failing test for invalid :fn arity.
compiler+runtime/test/jank/cpp/literal-type/fn/fail-void-param.jank Adds failing test for void parameter type.
compiler+runtime/test/jank/cpp/literal-type/fn/fail-non-type-return.jank Adds failing test for non-type return argument.
compiler+runtime/test/jank/cpp/literal-type/fn/fail-non-type-param.jank Adds failing test for non-type param argument.
compiler+runtime/test/jank/cpp/literal-type/fn/fail-non-seq-params.jank Adds failing test for params arg not being a sequence.
compiler+runtime/test/jank/cpp/literal-type/fn/fail-invalid-param-type.jank Adds failing test for invalid parameter type form.
compiler+runtime/test/jank/cpp/literal-type/const/pass-void.jank Adds passing test for :const type DSL.
compiler+runtime/test/jank/cpp/literal-type/const/pass-primitive.jank Adds passing test for :const primitive.
compiler+runtime/test/jank/cpp/literal-type/const/pass-pointer.jank Adds passing test for :const pointer.
compiler+runtime/test/jank/cpp/literal-type/const/fail-zero-args.jank Adds failing test for invalid :const arity.
compiler+runtime/test/jank/cpp/literal-type/const/fail-two-args.jank Adds failing test for invalid :const arity.
compiler+runtime/test/jank/cpp/literal-type/const/fail-reference.jank Adds failing test for invalid :const reference usage.
compiler+runtime/test/jank/cpp/literal-type/const/fail-non-type-arg.jank Adds failing test for invalid :const argument type.
compiler+runtime/test/jank/cpp/literal-type/array/pass-zero-sized.jank Adds passing test for sized array type DSL.
compiler+runtime/test/jank/cpp/literal-type/array/pass-unsized.jank Adds passing test for unsized array type DSL.
compiler+runtime/test/jank/cpp/literal-type/array/pass-sized.jank Adds passing test for sized array type DSL.
compiler+runtime/test/jank/cpp/literal-type/array/fail-zero-args.jank Adds failing test for invalid :array arity.
compiler+runtime/test/jank/cpp/literal-type/array/fail-three-args.jank Adds failing test for invalid :array arity.
compiler+runtime/test/jank/cpp/literal-type/array/fail-reference.jank Adds failing test for array-of-reference invalidity.
compiler+runtime/test/jank/cpp/literal-type/array/fail-non-type-arg.jank Adds failing test for invalid array element type arg.
compiler+runtime/test/jank/cpp/literal-type/array/fail-non-int-size.jank Adds failing test for invalid array size arg type.
compiler+runtime/test/jank/cpp/literal-type/array/fail-negative-size.jank Adds failing test for negative array size.
compiler+runtime/test/jank/cpp/constructor/complex/pass-shadowed-using.jank Adds constructor test exercising using base::base with shadowed ctor.
compiler+runtime/test/jank/cpp/constructor/complex/pass-literal-type.jank Migrates ctor type argument from string cpp/type to DSL.
compiler+runtime/test/jank/cpp/constructor/complex/pass-aggregate-with-bases.jank Adds aggregate initialization test with base classes.
compiler+runtime/test/jank/cpp/constructor/complex/pass-aggregate-multiple-conversions.jank Adjusts aggregate test to use string fields (test intent update).
compiler+runtime/test/jank/cpp/constructor/complex/fail-aggregate-narrowing.jank Adds failing test for narrowing in aggregate init.
compiler+runtime/test/jank/cpp/constructor/builtin/pass-literal-type.jank Migrates primitive ctor tests to DSL ((cpp/type int) etc.).
compiler+runtime/test/jank/cpp/constructor/builtin/fail-void.jank Adds failing test for constructing void.
compiler+runtime/test/jank/cpp/closure/pass-capture-opaque-box.jank Migrates unbox target type to DSL.
compiler+runtime/test/jank/cpp/cast/pass-pointer-to-void.jank Migrates cast target types to DSL pointer forms.
compiler+runtime/test/jank/cpp/cast/fail-unqualified-int.jank Removes legacy cast failure test (type resolution rules changed).
compiler+runtime/test/cpp/main.cpp Updates includes to CppInterOp/*.
compiler+runtime/test/cpp/jank/jit/processor.cpp Updates includes to CppInterOp/Compatibility.h.
compiler+runtime/src/jank/jank/nrepl/server/core.jank Migrates native types/unbox/cast usage to DSL forms.
compiler+runtime/src/jank/jank/nrepl/server/capture.jank Migrates FILE* and std.string cast usages to DSL forms.
compiler+runtime/src/jank/clojure/core.jank Migrates char const* cast usage to DSL (:* (:const char)).
compiler+runtime/src/cpp/main.cpp Updates includes to CppInterOp/*.
compiler+runtime/src/cpp/jank/util/clang.cpp Updates CppInterOp include and renames internal namespace for resource dir detection helper.
compiler+runtime/src/cpp/jank/runtime/sequence_range.cpp Adds make_sequence_range(object_ref) implementation used by analyzer utilities.
compiler+runtime/src/cpp/jank/runtime/context.cpp Updates interpreter includes to CppInterOp/*.
compiler+runtime/src/cpp/jank/jit/processor.cpp Updates interpreter includes/types and adjusts interpreter pointer type.
compiler+runtime/src/cpp/jank/evaluate.cpp Updates interpreter includes to CppInterOp/*.
compiler+runtime/src/cpp/jank/error/analyze.cpp Adds analyze_invalid_cpp_type_dsl error constructor.
compiler+runtime/src/cpp/jank/error.cpp Adds message for analyze_invalid_cpp_type_dsl.
compiler+runtime/src/cpp/jank/environment/check_health.cpp Updates compatibility include to CppInterOp/Compatibility.h.
compiler+runtime/src/cpp/jank/codegen/processor.cpp Adds pointer-to-member call codegen handling, aggregate init improvements, and several type handling adjustments.
compiler+runtime/src/cpp/jank/codegen/llvm_processor.cpp Updates includes to CppInterOp/*.
compiler+runtime/src/cpp/jank/c_api.cpp Updates compatibility include to CppInterOp/Compatibility.h.
compiler+runtime/src/cpp/jank/analyze/processor.cpp Introduces analyze_type to support type DSL and routes type positions through it; adds pointer-to-member invocation analysis.
compiler+runtime/src/cpp/jank/analyze/cpp_util.cpp Adds template instantiation helper w/ SFINAE trap, type helpers (base_type, char_type, is_constructible), and aggregate init member type discovery.
compiler+runtime/include/cpp/jank/runtime/sequence_range.hpp Adds object_ref overload decl and tweaks template signature.
compiler+runtime/include/cpp/jank/runtime/rtti.hpp Makes expect_object(object_ref) non-constexpr for startup perf.
compiler+runtime/include/cpp/jank/runtime/core/seq_ext.hpp Changes rest return type to object_ref.
compiler+runtime/include/cpp/jank/runtime/core/seq.hpp Simplifies second to rely on first(next(...)).
compiler+runtime/include/cpp/jank/jit/processor.hpp Renames interpreter namespace type to CppInternal::Interpreter.
compiler+runtime/include/cpp/jank/error/analyze.hpp Declares analyze_invalid_cpp_type_dsl.
compiler+runtime/include/cpp/jank/error.hpp Adds new error kind analyze_invalid_cpp_type_dsl and its string id.
compiler+runtime/include/cpp/jank/analyze/processor.hpp Declares processor::analyze_type.
compiler+runtime/include/cpp/jank/analyze/cpp_util.hpp Declares new util helpers (instantiate, base_type, char_type, is_constructible, aggregate init types).
compiler+runtime/CMakeLists.txt Adds new runtime source sequence_range.cpp to build.
book/src/troubleshooting/index.md Adds FAQ to troubleshooting chapter list.
book/src/troubleshooting/getting-help.md Adds note to check FAQ before asking for help.
book/src/troubleshooting/faq.md Adds new troubleshooting FAQ page.
book/src/cpp-interop/native-values.md Mentions template/member type syntax in docs.
book/src/cpp-interop/native-types.md Documents the new C++ type DSL comprehensively with examples.
book/src/SUMMARY.md Adds FAQ page to book sidebar and updates TODO list.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

}

source_type = Cpp::GetFunctionTypeFromPointerToMember(source_type, arg_type);
util::println("pointer to member fn type {}", cpp_util::get_qualified_type_name(source_type));
Comment on lines +4744 to +4749
return error::analyze_invalid_cpp_type(
util::format("Invalid C++ type form. There were {} args expected, but {} were provided.",
expected,
count),
object_source(seq),
latest_expansion(macro_expansions));
Comment on lines +5275 to +5278
jtl::string_builder sb;
sb(int_arg->data);
/* XXX: Safe, due to the GC. */
args.emplace_back(int_type.data, sb.release().c_str());
}

return Cpp::GetFunctionType(type, param_types);
;
Comment on lines +2989 to +2990
"static_cast<struct {}*>(static_cast<jank::runtime::obj::jit_"
"closure*>({}.data)->context) };",
@jeaye jeaye merged commit 9e4c514 into main Mar 13, 2026
18 checks passed
@jeaye jeaye deleted the cpp/type branch March 13, 2026 22:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants