From 8ea8e219ef8b2f4d830eac6859166d901bbe63b9 Mon Sep 17 00:00:00 2001 From: vms Date: Sun, 18 Apr 2021 13:29:49 +0300 Subject: [PATCH] improve interface --- crates/main/src/export_allocator.rs | 2 + crates/main/src/lib.rs | 14 +- .../src/{fce_ast_types.rs => ast_types.rs} | 56 ++---- crates/wit/src/export_ast_types.rs | 171 ++++++++++++++++++ crates/wit/src/lib.rs | 5 +- crates/wit/src/parse_macro_input.rs | 2 +- crates/wit/src/parse_macro_input/item_fn.rs | 16 +- .../src/parse_macro_input/item_foreign_mod.rs | 16 +- .../wit/src/parse_macro_input/item_record.rs | 10 +- crates/wit/src/parsed_type/fn_arg.rs | 2 +- crates/wit/src/parsed_type/fn_epilog.rs | 2 +- crates/wit/src/parsed_type/fn_prolog.rs | 2 +- .../wit/src/parsed_type/foreign_mod_prolog.rs | 2 +- crates/wit/src/token_stream_generator.rs | 2 +- .../token_stream_generator/fn_generator.rs | 4 +- .../foreign_mod_generator.rs | 10 +- .../record_generator.rs | 8 +- .../record_generator/record_deserializer.rs | 14 +- .../record_generator/record_serializer.rs | 6 +- crates/wit/src/utils.rs | 2 +- 20 files changed, 250 insertions(+), 96 deletions(-) rename crates/wit/src/{fce_ast_types.rs => ast_types.rs} (53%) create mode 100644 crates/wit/src/export_ast_types.rs diff --git a/crates/main/src/export_allocator.rs b/crates/main/src/export_allocator.rs index fb13180..651c44b 100644 --- a/crates/main/src/export_allocator.rs +++ b/crates/main/src/export_allocator.rs @@ -37,6 +37,7 @@ pub unsafe fn allocate(size: usize) -> usize { global_alloc(layout) as _ } +/* /// Allocates memory area of specified size and returns its address. /// Returns 0 if supplied size is too long. #[no_mangle] @@ -55,3 +56,4 @@ pub unsafe fn allocate_vec(element_count: usize, align: usize) -> usize { global_alloc(layout) as _ } +*/ diff --git a/crates/main/src/lib.rs b/crates/main/src/lib.rs index f1296db..5535eaf 100644 --- a/crates/main/src/lib.rs +++ b/crates/main/src/lib.rs @@ -57,14 +57,12 @@ pub use result::add_object_to_release; pub use module_manifest::MANIFEST_SECTION_NAME; pub use sdk_version_embedder::VERSION_SECTION_NAME; +// logs will be printed only if debug feature is enabled +#[cfg(feature = "debug")] #[allow(unused_variables)] pub(crate) fn log>(msg: S) { - // logs will be printed only if debug feature is enabled - #[cfg(feature = "debug")] - { - let level = log::Level::Info as i32; - let target = 0i32; - let msg = msg.as_ref(); - logger::log_utf8_string(level, target, msg.as_ptr() as i32, msg.len() as i32); - } + let level = log::Level::Info as i32; + let target = 0i32; + let msg = msg.as_ref(); + logger::log_utf8_string(level, target, msg.as_ptr() as i32, msg.len() as i32); } diff --git a/crates/wit/src/fce_ast_types.rs b/crates/wit/src/ast_types.rs similarity index 53% rename from crates/wit/src/fce_ast_types.rs rename to crates/wit/src/ast_types.rs index 2e6642a..51f0ed0 100644 --- a/crates/wit/src/fce_ast_types.rs +++ b/crates/wit/src/ast_types.rs @@ -16,20 +16,15 @@ use crate::parsed_type::ParsedType; -use serde::Serialize; -use serde::Deserialize; - -#[derive(Clone, Serialize, Deserialize)] -pub struct AstFnArgument { +#[derive(Clone)] +pub(crate) struct AstFnArgument { pub name: String, pub ty: ParsedType, } -#[derive(Clone, Serialize, Deserialize)] -pub struct AstFnSignature { - // Option is needed only for skipping serialization/deserialization of syn::ItemFn - #[serde(skip)] - pub visibility: Option, +#[derive(Clone)] +pub(crate) struct AstFnSignature { + pub visibility: syn::Visibility, pub name: String, pub arguments: Vec, // fce supports only one return value now, @@ -37,54 +32,43 @@ pub struct AstFnSignature { pub output_type: Option, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct AstRecordField { +#[derive(Debug, Clone, PartialEq)] +pub(crate) struct AstRecordField { // fields of tuple structs haven't got name pub name: Option, pub ty: ParsedType, } -#[derive(Clone, Serialize, Deserialize)] -pub struct AstRecordItem { +#[derive(Clone)] +pub(crate) struct AstRecordItem { pub name: String, pub fields: Vec, - - // Option is needed only for skipping serialization/deserialization of syn::ItemFn - #[serde(skip)] - pub original: Option, + pub original: syn::ItemStruct, } -#[derive(Clone, Serialize, Deserialize)] -pub struct AstExternFnItem { +#[derive(Clone)] +pub(crate) struct AstExternFnItem { pub link_name: Option, // only imports are possible here pub signature: AstFnSignature, } -#[derive(Clone, Serialize, Deserialize)] -pub struct AstExternModItem { +#[derive(Clone)] +pub(crate) struct AstExternModItem { pub namespace: String, - // only imports are possible here pub imports: Vec, - - // Option is needed only for skipping serialization/deserialization of syn::ItemFn - #[serde(skip)] - pub original: Option, + pub original: syn::ItemForeignMod, } -#[derive(Clone, Serialize, Deserialize)] -pub struct AstFnItem { +#[derive(Clone)] +pub(crate) struct AstFnItem { pub signature: AstFnSignature, - - // Option is needed only for skipping serialization/deserialization of syn::ItemFn - #[serde(skip)] - pub original: Option, + pub original: syn::ItemFn, } -#[derive(Clone, Serialize, Deserialize)] -#[serde(tag = "ast_type")] -pub enum FCEAst { +#[derive(Clone)] +pub(crate) enum FCEAst { Function(AstFnItem), ExternMod(AstExternModItem), Record(AstRecordItem), diff --git a/crates/wit/src/export_ast_types.rs b/crates/wit/src/export_ast_types.rs new file mode 100644 index 0000000..80f26e3 --- /dev/null +++ b/crates/wit/src/export_ast_types.rs @@ -0,0 +1,171 @@ +/* + * Copyright 2020 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use crate::parsed_type::ParsedType; + +use serde::Serialize; +use serde::Deserialize; + +#[derive(Clone, Serialize, Deserialize)] +pub struct FnArgument { + pub name: String, + pub ty: ParsedType, +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct FnSignature { + pub name: String, + pub arguments: Vec, + // fce supports only one return value now, + // waiting for adding multi-value support in Wasmer. + pub output_type: Option, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct RecordField { + // fields of tuple structs haven't got name + pub name: Option, + pub ty: ParsedType, +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct RecordItem { + pub name: String, + pub fields: Vec, +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct ExternFnItem { + pub link_name: Option, + // only imports are possible here + pub signature: FnSignature, +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct ExternModItem { + pub namespace: String, + // only imports are possible here + pub imports: Vec, +} + +#[derive(Clone, Serialize, Deserialize)] +pub struct FnItem { + pub signature: FnSignature, +} + +#[derive(Clone, Serialize, Deserialize)] +#[serde(tag = "ast_type")] +pub enum SDKAst { + Function(FnItem), + ExternMod(ExternModItem), + Record(RecordItem), +} + +use crate::ast_types::{ + AstFnItem, AstFnSignature, AstFnArgument, AstExternModItem, AstExternFnItem, AstRecordField, + AstRecordItem, +}; + +impl From for SDKAst { + fn from(ast_fn_item: AstFnItem) -> Self { + let fn_item = ast_fn_item.into(); + Self::Function(fn_item) + } +} + +impl From for SDKAst { + fn from(ast_extern_mod: AstExternModItem) -> Self { + let extern_mod = ast_extern_mod.into(); + Self::ExternMod(extern_mod) + } +} + +impl From for SDKAst { + fn from(ast_record_item: AstRecordItem) -> Self { + let record_item = ast_record_item.into(); + Self::Record(record_item) + } +} + +impl From for FnItem { + fn from(ast_fn_item: AstFnItem) -> Self { + let signature = ast_fn_item.signature.into(); + + Self { signature } + } +} + +impl From for ExternModItem { + fn from(ast_extern_mod: AstExternModItem) -> Self { + let imports = ast_extern_mod.imports.into_iter().map(Into::into).collect(); + + Self { + namespace: ast_extern_mod.namespace, + imports, + } + } +} + +impl From for RecordItem { + fn from(ast_record_item: AstRecordItem) -> Self { + let fields = ast_record_item.fields.into_iter().map(Into::into).collect(); + + Self { + name: ast_record_item.name, + fields, + } + } +} + +impl From for FnSignature { + fn from(ast_fn_sig: AstFnSignature) -> Self { + // TODO: consider to do transmute here in case of optimization issues. + let arguments = ast_fn_sig.arguments.into_iter().map(Into::into).collect(); + + Self { + name: ast_fn_sig.name, + arguments, + output_type: ast_fn_sig.output_type, + } + } +} + +impl From for FnArgument { + fn from(ast_fn_arg: AstFnArgument) -> Self { + Self { + name: ast_fn_arg.name, + ty: ast_fn_arg.ty, + } + } +} + +impl From for ExternFnItem { + fn from(ast_extern_item: AstExternFnItem) -> Self { + Self { + link_name: ast_extern_item.link_name, + signature: ast_extern_item.signature.into(), + } + } +} + +impl From for RecordField { + fn from(ast_record_field: AstRecordField) -> Self { + Self { + name: ast_record_field.name, + ty: ast_record_field.ty, + } + } +} diff --git a/crates/wit/src/lib.rs b/crates/wit/src/lib.rs index 600b12e..0d17a84 100644 --- a/crates/wit/src/lib.rs +++ b/crates/wit/src/lib.rs @@ -30,7 +30,8 @@ /// This crate contains functions and types to support work with WebAssembly interface-types /// in Fluence. -mod fce_ast_types; +mod ast_types; +mod export_ast_types; mod fce_macro_impl; mod parsed_type; mod parse_macro_input; @@ -38,7 +39,7 @@ mod token_stream_generator; mod utils; mod wasm_type; -pub use fce_ast_types::*; +pub use export_ast_types::*; pub use fce_macro_impl::fce; pub use parsed_type::ParsedType; pub use token_stream_generator::GENERATED_WRAPPER_FUNC_PREFIX; diff --git a/crates/wit/src/parse_macro_input.rs b/crates/wit/src/parse_macro_input.rs index 87389d5..39668e2 100644 --- a/crates/wit/src/parse_macro_input.rs +++ b/crates/wit/src/parse_macro_input.rs @@ -19,7 +19,7 @@ mod item_foreign_mod; mod item_record; mod utils; -use crate::fce_ast_types::FCEAst; +use crate::ast_types::FCEAst; pub(crate) trait ParseMacroInput { fn parse_macro_input(self) -> syn::Result; diff --git a/crates/wit/src/parse_macro_input/item_fn.rs b/crates/wit/src/parse_macro_input/item_fn.rs index 8c38a11..eb93fe0 100644 --- a/crates/wit/src/parse_macro_input/item_fn.rs +++ b/crates/wit/src/parse_macro_input/item_fn.rs @@ -15,11 +15,11 @@ */ use super::ParseMacroInput; -use crate::fce_ast_types; +use crate::ast_types; use crate::ParsedType; -use crate::fce_ast_types::FCEAst; -use crate::fce_ast_types::AstFnItem; -use crate::fce_ast_types::AstFnArgument; +use crate::ast_types::FCEAst; +use crate::ast_types::AstFnItem; +use crate::ast_types::AstFnArgument; use crate::syn_error; use syn::Result; @@ -40,7 +40,7 @@ impl ParseMacroInput for syn::ItemFn { let ast_fn = FCEAst::Function(AstFnItem { signature, - original: Some(self), + original: self, }); Ok(ast_fn) } @@ -49,7 +49,7 @@ impl ParseMacroInput for syn::ItemFn { pub(super) fn try_to_ast_signature( signature: syn::Signature, visibility: syn::Visibility, -) -> Result { +) -> Result { use quote::ToTokens; check_function(&signature)?; @@ -86,8 +86,8 @@ pub(super) fn try_to_ast_signature( let output_type = ParsedType::from_return_type(&output)?; - let ast_function_item = fce_ast_types::AstFnSignature { - visibility: Some(visibility), + let ast_function_item = ast_types::AstFnSignature { + visibility, name: signature.ident.to_string(), arguments, output_type, diff --git a/crates/wit/src/parse_macro_input/item_foreign_mod.rs b/crates/wit/src/parse_macro_input/item_foreign_mod.rs index 68d6c4d..9fe07e6 100644 --- a/crates/wit/src/parse_macro_input/item_foreign_mod.rs +++ b/crates/wit/src/parse_macro_input/item_foreign_mod.rs @@ -15,8 +15,8 @@ */ use super::ParseMacroInput; -use crate::fce_ast_types; -use crate::fce_ast_types::FCEAst; +use crate::ast_types; +use crate::ast_types::FCEAst; use crate::syn_error; use syn::Result; @@ -36,10 +36,10 @@ impl ParseMacroInput for syn::ItemForeignMod { let imports = extract_import_functions(&self)?; check_imports(imports.iter().zip(self.items.iter().map(|i| i.span())))?; - let extern_mod_item = fce_ast_types::AstExternModItem { + let extern_mod_item = ast_types::AstExternModItem { namespace, imports, - original: Some(self), + original: self, }; Ok(FCEAst::ExternMod(extern_mod_item)) } @@ -99,7 +99,7 @@ fn try_extract_namespace( fn extract_import_functions( foreign_mod: &syn::ItemForeignMod, -) -> Result> { +) -> Result> { foreign_mod .items .iter() @@ -111,7 +111,7 @@ fn extract_import_functions( /// This function checks whether these imports contains inner references. In this case glue /// code couldn't be generated. fn check_imports<'i>( - extern_fns: impl ExactSizeIterator, + extern_fns: impl ExactSizeIterator, ) -> Result<()> { use super::utils::contain_inner_ref; @@ -129,7 +129,7 @@ fn check_imports<'i>( Ok(()) } -fn parse_raw_foreign_item(raw_item: syn::ForeignItem) -> Result { +fn parse_raw_foreign_item(raw_item: syn::ForeignItem) -> Result { let function_item = match raw_item { syn::ForeignItem::Fn(function_item) => function_item, _ => { @@ -158,7 +158,7 @@ fn parse_raw_foreign_item(raw_item: syn::ForeignItem) -> Result, diff --git a/crates/wit/src/token_stream_generator.rs b/crates/wit/src/token_stream_generator.rs index 86a1ce7..58997d5 100644 --- a/crates/wit/src/token_stream_generator.rs +++ b/crates/wit/src/token_stream_generator.rs @@ -18,7 +18,7 @@ mod fn_generator; mod foreign_mod_generator; mod record_generator; -use crate::fce_ast_types::FCEAst; +use crate::ast_types::FCEAst; pub const GENERATED_WRAPPER_FUNC_PREFIX: &str = "__fce_generated_wrapper_func_"; pub const GENERATED_SECTION_PREFIX: &str = "__fce_generated_section__"; diff --git a/crates/wit/src/token_stream_generator/fn_generator.rs b/crates/wit/src/token_stream_generator/fn_generator.rs index f5e2aec..4377cbe 100644 --- a/crates/wit/src/token_stream_generator/fn_generator.rs +++ b/crates/wit/src/token_stream_generator/fn_generator.rs @@ -14,7 +14,7 @@ * limitations under the License. */ -use crate::fce_ast_types; +use crate::ast_types; use crate::parsed_type::FnEpilogGlueCodeGenerator; use crate::parsed_type::FnEpilogDescriptor; use crate::parsed_type::FnEpilogIngredients; @@ -25,7 +25,7 @@ use crate::new_ident; use proc_macro2::TokenStream; -impl quote::ToTokens for fce_ast_types::AstFnItem { +impl quote::ToTokens for ast_types::AstFnItem { fn to_tokens(&self, tokens: &mut TokenStream) { crate::prepare_global_data!( Function, diff --git a/crates/wit/src/token_stream_generator/foreign_mod_generator.rs b/crates/wit/src/token_stream_generator/foreign_mod_generator.rs index 4f5f678..1efaadb 100644 --- a/crates/wit/src/token_stream_generator/foreign_mod_generator.rs +++ b/crates/wit/src/token_stream_generator/foreign_mod_generator.rs @@ -14,14 +14,14 @@ * limitations under the License. */ -use crate::fce_ast_types; +use crate::ast_types; use crate::new_ident; use crate::parsed_type::*; use proc_macro2::TokenStream; use quote::quote; -impl quote::ToTokens for fce_ast_types::AstExternModItem { +impl quote::ToTokens for ast_types::AstExternModItem { fn to_tokens(&self, tokens: &mut TokenStream) { crate::prepare_global_data!( ExternMod, @@ -61,9 +61,7 @@ impl quote::ToTokens for fce_ast_types::AstExternModItem { } } -fn generate_extern_section_items( - extern_item: &fce_ast_types::AstExternModItem, -) -> Vec { +fn generate_extern_section_items(extern_item: &ast_types::AstExternModItem) -> Vec { let mut section_items = Vec::with_capacity(extern_item.imports.len()); for import in &extern_item.imports { @@ -92,7 +90,7 @@ fn generate_import_name(import_name: &str) -> syn::Ident { crate::new_ident!(format!("{}_{}", super::GENERATED_WRAPPER_FUNC_PREFIX, import_name)) } -fn generate_wrapper_functions(extern_item: &fce_ast_types::AstExternModItem) -> TokenStream { +fn generate_wrapper_functions(extern_item: &ast_types::AstExternModItem) -> TokenStream { let mut token_stream = TokenStream::new(); for import in &extern_item.imports { diff --git a/crates/wit/src/token_stream_generator/record_generator.rs b/crates/wit/src/token_stream_generator/record_generator.rs index fb5af4e..768b628 100644 --- a/crates/wit/src/token_stream_generator/record_generator.rs +++ b/crates/wit/src/token_stream_generator/record_generator.rs @@ -21,9 +21,9 @@ use record_serializer::*; use record_deserializer::*; use crate::new_ident; -use crate::fce_ast_types; +use crate::ast_types; -impl quote::ToTokens for fce_ast_types::AstRecordItem { +impl quote::ToTokens for ast_types::AstRecordItem { fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { let original = &self.original; crate::prepare_global_data!( @@ -65,7 +65,7 @@ impl quote::ToTokens for fce_ast_types::AstRecordItem { } } -fn generate_serializer_fn(record: &fce_ast_types::AstRecordItem) -> proc_macro2::TokenStream { +fn generate_serializer_fn(record: &ast_types::AstRecordItem) -> proc_macro2::TokenStream { let serializer = record.generate_serializer(); let fields_count = record.fields.len(); @@ -83,7 +83,7 @@ fn generate_serializer_fn(record: &fce_ast_types::AstRecordItem) -> proc_macro2: } } -fn generate_deserializer_fn(record: &fce_ast_types::AstRecordItem) -> proc_macro2::TokenStream { +fn generate_deserializer_fn(record: &ast_types::AstRecordItem) -> proc_macro2::TokenStream { let RecordDerDescriptor { fields_der, record_ctor, diff --git a/crates/wit/src/token_stream_generator/record_generator/record_deserializer.rs b/crates/wit/src/token_stream_generator/record_generator/record_deserializer.rs index 7040c5a..3f62038 100644 --- a/crates/wit/src/token_stream_generator/record_generator/record_deserializer.rs +++ b/crates/wit/src/token_stream_generator/record_generator/record_deserializer.rs @@ -16,7 +16,7 @@ use crate::new_ident; use crate::parsed_type::ParsedType; -use crate::fce_ast_types; +use crate::ast_types; use quote::quote; @@ -30,7 +30,7 @@ pub(super) trait RecordDerGlueCodeGenerator { fn generate_der(&self) -> RecordDerDescriptor; } -impl RecordDerGlueCodeGenerator for fce_ast_types::AstRecordItem { +impl RecordDerGlueCodeGenerator for ast_types::AstRecordItem { fn generate_der(&self) -> RecordDerDescriptor { let builder = FieldValuesBuilder::build(self.fields.iter()); let record_ctor = build_record_ctor(self.fields.iter(), builder.field_value_idents.iter()); @@ -61,7 +61,7 @@ struct FieldValuesOutcome { impl FieldValuesBuilder { pub(self) fn build<'a>( - fields: impl ExactSizeIterator, + fields: impl ExactSizeIterator, ) -> FieldValuesOutcome { let values_builder = Self::new(fields.len()); values_builder.build_impl(fields) @@ -77,7 +77,7 @@ impl FieldValuesBuilder { fn build_impl<'r>( mut self, - fields: impl ExactSizeIterator, + fields: impl ExactSizeIterator, ) -> FieldValuesOutcome { for (id, ast_field) in fields.enumerate() { let field_value_ident = new_ident!(format!("field_{}", id)); @@ -97,7 +97,7 @@ impl FieldValuesBuilder { fn field_der( &mut self, - ast_field: &fce_ast_types::AstRecordField, + ast_field: &ast_types::AstRecordField, field: &syn::Ident, ) -> proc_macro2::TokenStream { let value_id = self.value_id; @@ -162,7 +162,7 @@ impl FieldValuesBuilder { } fn build_record_ctor<'a, 'v>( - ast_fields: impl ExactSizeIterator, + ast_fields: impl ExactSizeIterator, field_values: impl ExactSizeIterator, ) -> proc_macro2::TokenStream { let mut ast_fields = ast_fields.peekable(); @@ -179,7 +179,7 @@ fn build_record_ctor<'a, 'v>( } fn build_named_fields_ctor<'a, 'v>( - ast_fields: impl ExactSizeIterator, + ast_fields: impl ExactSizeIterator, field_values: impl ExactSizeIterator, ) -> proc_macro2::TokenStream { let field_names = ast_fields diff --git a/crates/wit/src/token_stream_generator/record_generator/record_serializer.rs b/crates/wit/src/token_stream_generator/record_generator/record_serializer.rs index 5f448d1..3bc2a24 100644 --- a/crates/wit/src/token_stream_generator/record_generator/record_serializer.rs +++ b/crates/wit/src/token_stream_generator/record_generator/record_serializer.rs @@ -16,7 +16,7 @@ use crate::new_ident; use crate::parsed_type::ParsedType; -use crate::fce_ast_types; +use crate::ast_types; use quote::quote; @@ -25,7 +25,7 @@ pub(super) trait RecordSerializerGlueCodeGenerator { fn generate_serializer(&self) -> proc_macro2::TokenStream; } -impl RecordSerializerGlueCodeGenerator for fce_ast_types::AstRecordItem { +impl RecordSerializerGlueCodeGenerator for ast_types::AstRecordItem { fn generate_serializer(&self) -> proc_macro2::TokenStream { let mut serializer = proc_macro2::TokenStream::new(); for (id, field) in self.fields.iter().enumerate() { @@ -82,7 +82,7 @@ impl RecordSerializerGlueCodeGenerator for fce_ast_types::AstRecordItem { } } -fn field_ident(field: &fce_ast_types::AstRecordField, id: usize) -> proc_macro2::TokenStream { +fn field_ident(field: &ast_types::AstRecordField, id: usize) -> proc_macro2::TokenStream { match &field.name { Some(name) => { let name = new_ident!(name); diff --git a/crates/wit/src/utils.rs b/crates/wit/src/utils.rs index f936385..9a851a9 100644 --- a/crates/wit/src/utils.rs +++ b/crates/wit/src/utils.rs @@ -26,7 +26,7 @@ macro_rules! new_ident { macro_rules! prepare_global_data { ($fce_type: ident, $self: ident, $name: expr, $data: ident, $data_size: ident, $global_static_name: ident, $section_name: ident) => { // TODO: change serialization protocol - let fce_type = fce_ast_types::FCEAst::$fce_type($self.clone()); + let fce_type = crate::export_ast_types::SDKAst::$fce_type($self.clone().into()); let $data = serde_json::to_vec(&fce_type).unwrap(); let $data_size = $data.len(); let $data = syn::LitByteStr::new(&$data, proc_macro2::Span::call_site());