Skip to content

Commit

Permalink
Add support for callbacks to C++ (#766)
Browse files Browse the repository at this point in the history
* Add support for callbacks to C++

* Fix C++ errors, allow &str in callbacks

* Add tests, fix issue with structs in callbacks
Walter-Reactor authored Jan 22, 2025
1 parent a80a6a0 commit d7aeba0
Showing 106 changed files with 599 additions and 17 deletions.
5 changes: 5 additions & 0 deletions core/src/ast/types.rs
Original file line number Diff line number Diff line change
@@ -951,6 +951,11 @@ impl TypeName {
if let syn::PathArguments::AngleBracketed(type_args) =
&p.path.segments.last().unwrap().arguments
{
assert!(
type_args.args.len() > 1,
"Not enough arguments given to Result<T,E>. Are you using a non-std Result type?"
);

if let (syn::GenericArgument::Type(ok), syn::GenericArgument::Type(err)) =
(&type_args.args[0], &type_args.args[1])
{
9 changes: 7 additions & 2 deletions core/src/hir/lowering.rs
Original file line number Diff line number Diff line change
@@ -921,8 +921,13 @@ impl<'ast> LoweringContext<'ast> {
let hir_in_ty = self
.lower_out_type(in_ty, ltl, in_path, false, false)
.unwrap();
if hir_in_ty.lifetimes().next().is_some() {
self.errors.push(LoweringError::Other("Callback parameters can't be borrowed, and therefore can't have lifetimes".into()));

if !matches!(hir_in_ty, super::Type::Slice(super::Slice::Str(_, _)))
&& hir_in_ty.lifetimes().next().is_some()
{
self.errors.push(LoweringError::Other(
"Callback parameters can't be borrowed, and therefore can't have lifetimes".into(),
));
return Err(());
}
params.push(CallbackParam {
58 changes: 57 additions & 1 deletion example/cpp/include/diplomat_runtime.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/DataProvider.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/DataProvider.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/FixedDecimal.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/FixedDecimal.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/FixedDecimalFormatter.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/FixedDecimalFormatter.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/FixedDecimalFormatterOptions.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/FixedDecimalGroupingStrategy.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/Locale.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions example/cpp/include/icu4x/Locale.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions feature_tests/c/include/CallbackWrapper.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion feature_tests/cpp/Makefile
Original file line number Diff line number Diff line change
@@ -25,8 +25,12 @@ $(ALL_HEADERS):
./tests/attrs.out: ../../target/debug/libdiplomat_feature_tests.a $(ALL_HEADERS) ./tests/attrs.cpp
$(CXX) -std=c++17 ./tests/attrs.cpp ../../target/debug/libdiplomat_feature_tests.a -ldl -lpthread -lm -g -o ./tests/attrs.out

test: ./tests/structs.out ./tests/result.out ./tests/option.out ./tests/attrs.out
./tests/callback.out: ../../target/debug/libdiplomat_feature_tests.a $(ALL_HEADERS) ./tests/callback.cpp
$(CXX) -std=c++17 ./tests/callback.cpp ../../target/debug/libdiplomat_feature_tests.a -ldl -lpthread -lm -g -o ./tests/callback.out

test: ./tests/structs.out ./tests/result.out ./tests/option.out ./tests/attrs.out ./tests/callback.out
./tests/structs.out
./tests/result.out
./tests/option.out
./tests/attrs.out
./tests/callback.out
1 change: 1 addition & 0 deletions feature_tests/cpp/include/Bar.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions feature_tests/cpp/include/Bar.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions feature_tests/cpp/include/BorrowedFields.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion feature_tests/cpp/include/BorrowedFields.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions feature_tests/cpp/include/BorrowedFieldsReturning.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions feature_tests/cpp/include/BorrowedFieldsReturning.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions feature_tests/cpp/include/BorrowedFieldsWithBounds.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion feature_tests/cpp/include/BorrowedFieldsWithBounds.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 35 additions & 0 deletions feature_tests/cpp/include/CallbackTestingStruct.d.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 41 additions & 0 deletions feature_tests/cpp/include/CallbackTestingStruct.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d7aeba0

Please sign in to comment.