Skip to content

Commit

Permalink
Refactor (#209)
Browse files Browse the repository at this point in the history
Refactor and less memory clone
  • Loading branch information
yanganto committed Oct 1, 2021
1 parent a83a2ee commit 6c5d4e5
Show file tree
Hide file tree
Showing 13 changed files with 54 additions and 62 deletions.
9 changes: 3 additions & 6 deletions cargo-sewup/src/build.rs
Expand Up @@ -8,7 +8,6 @@ use tokio::{
process::Command,
};
use wasmprinter::print_file;
use wat;

use cargo_sewup::config::CargoToml;
use cargo_sewup::deploy_wasm;
Expand Down Expand Up @@ -78,11 +77,9 @@ async fn build_wat(
) -> Result<String> {
let eth_finish_re =
Regex::new(r#"\(import "ethereum" "finish" \(func (?P<eth_finish_sig>[^\s]*) "#).unwrap();
let eth_finish_sig = if let Some(cap) = eth_finish_re.captures(&tmpl) {
Some(cap.name("eth_finish_sig").unwrap().as_str())
} else {
None
};
let eth_finish_sig = eth_finish_re
.captures(&tmpl)
.map(|cap| cap.name("eth_finish_sig").unwrap().as_str());

let memory_re = Regex::new(r#"\(memory \(;0;\) (?P<mem_size>\d*)"#).unwrap();
let mem_size = if let Some(cap) = memory_re.captures(&tmpl) {
Expand Down
15 changes: 6 additions & 9 deletions cargo-sewup/src/generate.rs
Expand Up @@ -37,15 +37,12 @@ pub async fn run() -> Result<()> {
.find_iter(&expanded)
.map(|m| m.as_str().replace("_SIG", "_ABI"))
.collect();
let contract_abis: Vec<(String, String)> = abi_re
.captures_iter(&expanded)
.map(|c| {
(
c.name("abi_name").unwrap().as_str().to_string(),
c.get(0).unwrap().as_str().to_string(),
)
})
.collect();
let contract_abis = abi_re.captures_iter(&expanded).map(|c| {
(
c.name("abi_name").unwrap().as_str().to_string(),
c.get(0).unwrap().as_str().to_string(),
)
});

let all_abis = linked_hash_set::LinkedHashSet::<String>::from_iter(total_abis.iter().cloned());
let mut lib_abis = all_abis.clone();
Expand Down
1 change: 0 additions & 1 deletion cargo-sewup/src/main.rs
Expand Up @@ -3,7 +3,6 @@ use std::path::Path;

use anyhow::Result;
use structopt::StructOpt;
use tokio;

mod build;
mod deploy;
Expand Down
52 changes: 21 additions & 31 deletions sewup-derive/src/lib.rs
@@ -1,7 +1,6 @@
#![feature(box_into_inner)]
extern crate proc_macro;

use hex;
use proc_macro::TokenStream;
use proc_macro2::{Ident, Span};
use proc_macro_error::{abort, abort_call_site, proc_macro_error};
Expand Down Expand Up @@ -93,7 +92,7 @@ pub fn ewasm_main(attr: TokenStream, item: TokenStream) -> TokenStream {
syn::ReturnType::Type(_, boxed) => match Box::into_inner(boxed) {
syn::Type::Path(syn::TypePath { path: p, .. }) => {
let mut ok_type: Option<String> = None;
let mut segments = p.segments.clone();
let mut segments = p.segments;
while let Some(pair) = segments.pop() {
ok_type = match pair.into_value() {
syn::PathSegment {
Expand All @@ -103,21 +102,16 @@ pub fn ewasm_main(attr: TokenStream, item: TokenStream) -> TokenStream {
),
..
} => match a.first() {
Some(a) => match a {
syn::GenericArgument::Type(syn::Type::Path(syn::TypePath {
path: p,
..
})) => {
if let Some(syn::PathSegment { ident: i, .. }) =
p.segments.last()
{
Some(i.to_string())
} else {
None
}
Some(syn::GenericArgument::Type(syn::Type::Path(syn::TypePath {
path: p,
..
}))) => {
if let Some(syn::PathSegment { ident: i, .. }) = p.segments.last() {
Some(i.to_string())
} else {
None
}
_ => None,
},
}
_ => None,
},
_ => None,
Expand Down Expand Up @@ -252,15 +246,13 @@ pub fn ewasm_fn(attr: TokenStream, item: TokenStream) -> TokenStream {
(None, "{}".to_string())
} else if attr_str.starts_with('{') {
(None, attr_str.split_whitespace().collect())
} else if let Some((head, tail)) = attr_str.split_once(',') {
(
Some(head.replace("\"", "")),
tail.split_whitespace().collect(),
)
} else {
if let Some((head, tail)) = attr_str.split_once(',') {
(
Some(head.replace("\"", "")),
tail.split_whitespace().collect(),
)
} else {
(Some(attr_str.replace("\"", "")), "{}".to_string())
}
(Some(attr_str.replace("\"", "")), "{}".to_string())
};

let input = syn::parse_macro_input!(item as syn::ItemFn);
Expand Down Expand Up @@ -325,7 +317,7 @@ pub fn ewasm_fn(attr: TokenStream, item: TokenStream) -> TokenStream {
pub fn ewasm_constructor(_attr: TokenStream, item: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(item as syn::ItemFn);
let name = &input.sig.ident;
if name.to_string() != "constructor" {
if *name != "constructor" {
abort!(input.sig.ident, "please name the function as `constructor`");
}
let result = quote! {
Expand Down Expand Up @@ -382,13 +374,11 @@ pub fn ewasm_lib_fn(attr: TokenStream, item: TokenStream) -> TokenStream {
let (hex_str, abi_str) = if attr_str.is_empty() {
(None, "{}".to_string())
} else if attr_str.starts_with('{') {
(None, attr_str.to_string())
(None, attr_str)
} else if let Some((head, tail)) = attr_str.split_once(',') {
(Some(head.replace("\"", "")), tail.to_string())
} else {
if let Some((head, tail)) = attr_str.split_once(',') {
(Some(head.replace("\"", "")), tail.to_string())
} else {
(Some(attr_str.replace("\"", "")), "{}".to_string())
}
(Some(attr_str.replace("\"", "")), "{}".to_string())
};

let input = syn::parse_macro_input!(item as syn::ItemFn);
Expand Down
2 changes: 1 addition & 1 deletion sewup/src/rdb/db.rs
Expand Up @@ -318,7 +318,7 @@ impl Db {
}
}

#[cfg(not(target_arch = "wasm32"))]
#[cfg(all(not(target_arch = "wasm32"), test))]
fn migration_table(mut _list: Vec<(Range<u32>, Range<u32>)>) -> Result<()> {
Ok(())
}
Expand Down
2 changes: 1 addition & 1 deletion sewup/src/runtimes/traits.rs
Expand Up @@ -140,7 +140,7 @@ impl<'a> VMMessageBuilder<'a> {

if let Some(sender) = sender {
let destination = if let Some(destination) = destination {
destination.clone()
*destination
} else {
Raw::from(0u32)
};
Expand Down
2 changes: 2 additions & 0 deletions sewup/src/token/erc1155.rs
@@ -1,6 +1,8 @@
#[cfg(target_arch = "wasm32")]
use std::convert::TryInto;

use crate::primitives::Contract;
#[cfg(target_arch = "wasm32")]
use crate::types::Raw;
use sewup_derive::ewasm_lib_fn;

Expand Down
5 changes: 2 additions & 3 deletions sewup/src/token/erc20.rs
@@ -1,6 +1,8 @@
#[cfg(target_arch = "wasm32")]
use std::convert::TryInto;

use crate::primitives::Contract;
#[cfg(target_arch = "wasm32")]
use crate::types::Raw;

#[cfg(target_arch = "wasm32")]
Expand All @@ -18,9 +20,6 @@ use ewasm_api::{log3, prelude::Bytes20, types::Address};
#[cfg(target_arch = "wasm32")]
use hex::decode;

#[cfg(not(target_arch = "wasm32"))]
use super::helpers::Address;

use sewup_derive::ewasm_lib_fn;

/// Implement ERC-20 transfer(address,uint256)
Expand Down
4 changes: 3 additions & 1 deletion sewup/src/token/erc721.rs
@@ -1,6 +1,8 @@
#[cfg(target_arch = "wasm32")]
use std::convert::TryInto;

use crate::primitives::Contract;
#[cfg(target_arch = "wasm32")]
use crate::types::Raw;
use sewup_derive::ewasm_lib_fn;

Expand Down Expand Up @@ -243,7 +245,7 @@ pub fn is_approved_for_all(contract: &Contract) {
"stateMutability": "view",
"type": "function"
})]
pub fn tokenMetadata(contract: &Contract) {
pub fn token_metadata(contract: &Contract) {
// TODO
// https://github.com/second-state/SewUp/issues/161
}
Expand Down
6 changes: 4 additions & 2 deletions sewup/src/token/helpers.rs
@@ -1,5 +1,7 @@
#[cfg(target_arch = "wasm32")]
use std::convert::TryInto;

#[cfg(target_arch = "wasm32")]
use crate::types::Raw;
use crate::utils::sha3_256;

Expand Down Expand Up @@ -76,7 +78,7 @@ pub fn set_balance(address: &Address, value: &StorageValue) {
}

#[cfg(not(target_arch = "wasm32"))]
pub fn get_token_balance(_address: &Address, token_id: &[u8; 32]) -> StorageValue {
pub fn get_token_balance(_address: &Address, _token_id: &[u8; 32]) -> StorageValue {
StorageValue {}
}
#[cfg(target_arch = "wasm32")]
Expand All @@ -90,7 +92,7 @@ pub fn get_token_balance(address: &Address, token_id: &[u8; 32]) -> StorageValue
}

#[cfg(not(target_arch = "wasm32"))]
pub fn set_token_balance(_address: &Address, token_id: &[u8; 32], _value: &StorageValue) {}
pub fn set_token_balance(_address: &Address, _token_id: &[u8; 32], _value: &StorageValue) {}
#[cfg(target_arch = "wasm32")]
pub fn set_token_balance(address: &Address, token_id: &[u8; 32], value: &StorageValue) {
let hash = calculate_token_balance_hash(&address.bytes, token_id);
Expand Down
6 changes: 3 additions & 3 deletions sewup/src/types/raw.rs
Expand Up @@ -301,7 +301,7 @@ impl From<&String> for Raw {

impl From<&Raw> for Raw {
fn from(v: &Self) -> Self {
v.clone()
*v
}
}

Expand Down Expand Up @@ -342,7 +342,7 @@ impl TryFrom<&Row> for Raw {
if value.len() <= 1 {
Err("Row is bigger than raw")
} else {
Ok(value.inner[0].clone())
Ok(value.inner[0])
}
}
}
Expand All @@ -354,7 +354,7 @@ impl TryFrom<Row> for Raw {
if value.len() <= 1 {
Err("Row is bigger than raw")
} else {
Ok(value.inner[0].clone())
Ok(value.inner[0])
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion sewup/src/types/row.rs
Expand Up @@ -165,7 +165,7 @@ impl From<&String> for Row {
impl From<&Raw> for Row {
fn from(v: &Raw) -> Self {
Self {
inner: vec![v.clone()],
inner: vec![*v],
..Default::default()
}
}
Expand Down
10 changes: 7 additions & 3 deletions sewup/src/types/sized_str.rs
Expand Up @@ -64,15 +64,19 @@ impl SizedString {
pub fn len(&self) -> usize {
self.len
}

pub fn is_empty(&self) -> bool {
self.len == 0
}
}

macro_rules! into_slice {
($($s:expr),*) => {
$(
impl Into<[Raw; $s]> for SizedString {
fn into(self) -> [Raw; $s] {
impl From<SizedString> for [Raw; $s] {
fn from(s: SizedString) -> [Raw; $s] {
let mut output = Default::default();
<[Raw; $s] as AsMut<[Raw]>>::as_mut(&mut output).copy_from_slice(self.inner.as_slice());
<[Raw; $s] as AsMut<[Raw]>>::as_mut(&mut output).copy_from_slice(s.inner.as_slice());
output
}
}
Expand Down

0 comments on commit 6c5d4e5

Please sign in to comment.