From a8fbe2ca6e36a0469caf2139f2316b8687f2e64e Mon Sep 17 00:00:00 2001 From: vms Date: Tue, 9 Mar 2021 15:45:05 +0300 Subject: [PATCH] progress --- Cargo.toml | 2 ++ crates/main/src/lib.rs | 7 ------- crates/wit/src/parse_macro_input/item_record.rs | 2 +- crates/wit/src/parsed_type/fn_epilog.rs | 4 +++- .../token_stream_generator/record_generator.rs | 2 +- {crates/main/src => src}/call_parameters.rs | 2 +- src/lib.rs | 17 +++++++++++------ {crates/main/src => src}/mounted_binary.rs | 0 8 files changed, 19 insertions(+), 17 deletions(-) rename {crates/main/src => src}/call_parameters.rs (97%) rename {crates/main/src => src}/mounted_binary.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 44098b7..2ae7c56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,10 +16,12 @@ all-features = true [lib] path = "src/lib.rs" +name = "fluence" [dependencies] fluence-sdk-macro = { path = "crates/macro", version = "=0.5.0" } fluence-sdk-main = { path = "crates/main", version = "=0.5.0" } +serde = "=1.0.118" [features] # Print some internal logs by log_utf8_string diff --git a/crates/main/src/lib.rs b/crates/main/src/lib.rs index 285e606..22a074a 100644 --- a/crates/main/src/lib.rs +++ b/crates/main/src/lib.rs @@ -31,18 +31,11 @@ )] #![warn(rust_2018_idioms)] -mod call_parameters; mod export_allocator; #[cfg(any(feature = "debug", feature = "logger"))] mod logger; -pub mod mounted_binary; mod result; -pub use call_parameters::CallParameters; -pub use call_parameters::SecurityTetraplet; -#[cfg(target_arch = "wasm32")] -pub use call_parameters::get_call_parameters; - pub use export_allocator::allocate; pub use export_allocator::deallocate; diff --git a/crates/wit/src/parse_macro_input/item_record.rs b/crates/wit/src/parse_macro_input/item_record.rs index 56c896f..9ae3887 100644 --- a/crates/wit/src/parse_macro_input/item_record.rs +++ b/crates/wit/src/parse_macro_input/item_record.rs @@ -71,7 +71,7 @@ fn check_record(record: &syn::ItemStruct) -> Result<()> { { return Err(Error::new( record.span(), - "#[fce] couldn't be applied to a struct with generics", + "#[fce] couldn't be applied to a struct with generics or lifetimes", )); } diff --git a/crates/wit/src/parsed_type/fn_epilog.rs b/crates/wit/src/parsed_type/fn_epilog.rs index 67ffe3a..3446368 100644 --- a/crates/wit/src/parsed_type/fn_epilog.rs +++ b/crates/wit/src/parsed_type/fn_epilog.rs @@ -145,7 +145,9 @@ fn generate_mem_forget( match passing_style { // result will be deleted by IT side - Some(PassingStyle::ByValue) => quote! { std::mem::forget(result); }, + Some(PassingStyle::ByValue) => { + quote! { fluence::internal::add_object_to_release(Box::new(result)); } + } Some(PassingStyle::ByRef) | Some(PassingStyle::ByMutRef) => { mem_forget_by_args(args, converted_args) } diff --git a/crates/wit/src/token_stream_generator/record_generator.rs b/crates/wit/src/token_stream_generator/record_generator.rs index 9efcaf7..a9a4386 100644 --- a/crates/wit/src/token_stream_generator/record_generator.rs +++ b/crates/wit/src/token_stream_generator/record_generator.rs @@ -75,7 +75,7 @@ fn generate_serializer_fn(record: &fce_ast_types::AstRecordItem) -> proc_macro2: #serializer let raw_record_ptr = raw_record.as_ptr(); - std::mem::forget(raw_record); + fluence::internal::add_object_to_release(Box::new(raw_record)); raw_record_ptr as _ } diff --git a/crates/main/src/call_parameters.rs b/src/call_parameters.rs similarity index 97% rename from crates/main/src/call_parameters.rs rename to src/call_parameters.rs index 0b14d38..be09f8c 100644 --- a/crates/main/src/call_parameters.rs +++ b/src/call_parameters.rs @@ -59,7 +59,7 @@ pub fn get_call_parameters() -> CallParameters { // it's safe until it is executed on standard Fluence node with appropriate import function unsafe { get_call_raw_parameters(); - let raw_call_parameters = crate::result::get_result_ptr(); + let raw_call_parameters = crate::internal::get_result_ptr(); CallParameters::__fce_generated_deserialize(raw_call_parameters as _) } } diff --git a/src/lib.rs b/src/lib.rs index 69fc9b2..fe31c00 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -67,21 +67,26 @@ )] #![warn(rust_2018_idioms)] +mod call_parameters; +mod mounted_binary; + +extern crate self as fluence; + pub use fluence_sdk_macro::fce; -pub use fluence_sdk_main::CallParameters; -pub use fluence_sdk_main::SecurityTetraplet; +pub use call_parameters::CallParameters; +pub use call_parameters::SecurityTetraplet; #[cfg(target_arch = "wasm32")] -pub use fluence_sdk_main::get_call_parameters; +pub use call_parameters::get_call_parameters; #[cfg(feature = "logger")] pub use fluence_sdk_main::WasmLoggerBuilder; #[cfg(feature = "logger")] pub use fluence_sdk_main::TargetMap; -pub use fluence_sdk_main::mounted_binary::Result as MountedBinaryResult; -pub use fluence_sdk_main::mounted_binary::StringResult as MountedBinaryStringResult; -pub use fluence_sdk_main::mounted_binary::SUCCESS_CODE as BINARY_SUCCESS_CODE; +pub use mounted_binary::Result as MountedBinaryResult; +pub use mounted_binary::StringResult as MountedBinaryStringResult; +pub use mounted_binary::SUCCESS_CODE as BINARY_SUCCESS_CODE; /// These API functions are intended for internal usage in generated code. /// Normally, you shouldn't use them. diff --git a/crates/main/src/mounted_binary.rs b/src/mounted_binary.rs similarity index 100% rename from crates/main/src/mounted_binary.rs rename to src/mounted_binary.rs