Skip to content

Commit

Permalink
Add support for return static slices in JS (#796)
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth authored Feb 21, 2025
1 parent d9abfbf commit f3e980c
Show file tree
Hide file tree
Showing 10 changed files with 52 additions and 13 deletions.
2 changes: 2 additions & 0 deletions feature_tests/c/include/MyString.h

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

2 changes: 2 additions & 0 deletions feature_tests/cpp/include/MyString.d.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/cpp/include/MyString.hpp

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

10 changes: 10 additions & 0 deletions feature_tests/dart/lib/src/MyString.g.dart

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

2 changes: 2 additions & 0 deletions feature_tests/js/api/MyString.d.ts

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

14 changes: 14 additions & 0 deletions feature_tests/js/api/MyString.mjs

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.

4 changes: 4 additions & 0 deletions feature_tests/src/slices.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ mod ffi {
let _infallible = write!(write, "{}", self.0);
}

pub fn get_static_str() -> &'static str {
"hello"
}

pub fn string_transform(foo: &str, write: &mut DiplomatWrite) {
let _ = foo;
let _ = write;
Expand Down
10 changes: 2 additions & 8 deletions tool/src/dart/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,10 +274,7 @@ impl<'cx> TyGenContext<'_, 'cx> {
/// Get the name/initializer of the allocator needed for a particular type
fn alloc_name<P: TyPosition>(ty: &hir::StructDef<P>, field_ty: &Type<P>) -> Option<String> {
if let &hir::Type::Slice(slice) = field_ty {
if let Some(lt) = slice.lifetime() {
let MaybeStatic::NonStatic(lt) = lt else {
panic!("'static not supported in Dart");
};
if let Some(MaybeStatic::NonStatic(lt)) = slice.lifetime() {
Some(format!(
"{lt_name}AppendArray.isNotEmpty ? _FinalizedArena.withLifetime({lt_name}AppendArray).arena : temp",
lt_name = ty.lifetimes.fmt_lifetime(lt),
Expand Down Expand Up @@ -1015,10 +1012,7 @@ impl<'cx> TyGenContext<'_, 'cx> {
format!("{type_name}.values.firstWhere((v) => v._ffi == {var_name})").into()
}
Type::Slice(slice) => {
if let Some(lt) = slice.lifetime() {
let MaybeStatic::NonStatic(lifetime) = lt else {
panic!("'static not supported in Dart");
};
if let Some(MaybeStatic::NonStatic(lifetime)) = slice.lifetime() {
format!(
"{var_name}._toDart({}Edges)",
lifetime_env.fmt_lifetime(lifetime)
Expand Down
7 changes: 2 additions & 5 deletions tool/src/js/converter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,11 +227,8 @@ impl<'tcx> TyGenContext<'_, 'tcx> {
}
Type::Slice(slice) => {
let edges = match slice.lifetime() {
Some(lt) => {
let hir::MaybeStatic::NonStatic(lifetime) = lt else {
panic!("'static not supported for JS backend");
};
format!("{}Edges", lifetime_environment.fmt_lifetime(lifetime))
Some(hir::MaybeStatic::NonStatic(lt)) => {
format!("{}Edges", lifetime_environment.fmt_lifetime(lt))
}
_ => "[]".into(),
};
Expand Down

0 comments on commit f3e980c

Please sign in to comment.