Skip to content

Commit

Permalink
Fixing bug in opaque/struct cleanup codegen in kotlin (#690)
Browse files Browse the repository at this point in the history
* Fixing bug in opaque/struct cleanup codegen in kotlin

* filename typo

* regen tests

---------

Co-authored-by: Ellen Arteca <emarteca@google.com>
  • Loading branch information
emarteca and Ellen Arteca committed Sep 17, 2024
1 parent de87900 commit 57e8916
Show file tree
Hide file tree
Showing 20 changed files with 106 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class DataProvider internal constructor (
val handle = returnVal
val returnOpaque = DataProvider(handle, selfEdges)
CLEANER.register(returnOpaque, DataProvider.DataProviderCleaner(handle, DataProvider.lib));

return returnOpaque
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ class FixedDecimal internal constructor (
val handle = returnVal
val returnOpaque = FixedDecimal(handle, selfEdges)
CLEANER.register(returnOpaque, FixedDecimal.FixedDecimalCleaner(handle, FixedDecimal.lib));

return returnOpaque
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ class FixedDecimalFormatter internal constructor (
val handle = returnVal.union.ok
val returnOpaque = FixedDecimalFormatter(handle, selfEdges)
CLEANER.register(returnOpaque, FixedDecimalFormatter.FixedDecimalFormatterCleaner(handle, FixedDecimalFormatter.lib));

return returnOpaque.ok()
} else {
return Err(Unit)
Expand Down

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.

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.

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.

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.

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.

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.

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.

49 changes: 49 additions & 0 deletions tool/src/kotlin/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2051,6 +2051,55 @@ mod test {
}
}

#[test]
fn test_opaque_gen_multiple_ref_args() {
let tk_stream = quote! {
#[diplomat::bridge]
mod ffi {
#[diplomat::opaque]
struct RustOwnedBytes {
my_bytes: Vec<u8>,
}

#[diplomat::opaque]
struct AnotherOpaque {
my_bytes: Vec<u8>,
}

impl AnotherOpaque {
// we need the 2 referenced inputs to make sure the cleaner
// code is not all on the same line
pub fn get_rust_owned_bytes(&self, a: &[u8], b: &[u8]) -> Box<RustOwnedBytes> {
return Box::new(RustOwnedBytes{my_bytes: a.to_vec()})
}
}
}
};
let tcx = new_tcx(tk_stream);
let mut all_types = tcx.all_types();
if let (_id, TypeDef::Opaque(opaque_def)) = all_types
.next()
.expect("Failed to generate first opaque def")
{
let eror_store = ErrorStore::default();
let formatter = KotlinFormatter::new(&tcx, None);
let mut callback_params = Vec::new();
let mut ty_gen_cx = TyGenContext {
tcx: &tcx,
formatter: &formatter,
result_types: RefCell::new(BTreeSet::new()),
option_types: RefCell::new(BTreeSet::new()),
errors: &eror_store,
callback_params: &mut callback_params,
};
let type_name = opaque_def.name.to_string();
// test that we can render and that it doesn't panic
let (_, result) =
ty_gen_cx.gen_opaque_def(opaque_def, &type_name, "dev.gigapixel", "somelib", false);
insta::assert_snapshot!(result)
}
}

#[test]
fn test_opaque_gen() {
let tk_stream = quote! {
Expand Down
Loading

0 comments on commit 57e8916

Please sign in to comment.