wasmer 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/documentation.yml +50 -0
- data/.github/workflows/test.yml +34 -61
- data/CHANGELOG.md +89 -29
- data/Cargo.lock +812 -380
- data/Cargo.toml +7 -20
- data/Gemfile +2 -3
- data/README.md +1 -0
- data/Rakefile +4 -3
- data/crates/rutie-derive-macros/Cargo.toml +19 -0
- data/crates/rutie-derive-macros/README.md +4 -0
- data/crates/rutie-derive-macros/src/class.rs +156 -0
- data/crates/rutie-derive-macros/src/function.rs +178 -0
- data/crates/rutie-derive-macros/src/lib.rs +27 -0
- data/crates/rutie-derive-macros/src/methods.rs +282 -0
- data/crates/rutie-derive/Cargo.toml +14 -0
- data/crates/rutie-derive/README.md +97 -0
- data/crates/rutie-derive/src/lib.rs +4 -0
- data/crates/rutie-derive/src/upcast.rs +47 -0
- data/crates/rutie-test/Cargo.toml +10 -0
- data/crates/rutie-test/src/lib.rs +38 -0
- data/crates/wasmer/Cargo.toml +27 -0
- data/crates/wasmer/README.md +228 -0
- data/crates/wasmer/src/doc.rs +1512 -0
- data/crates/wasmer/src/error.rs +55 -0
- data/crates/wasmer/src/exports.rs +107 -0
- data/crates/wasmer/src/externals/function.rs +159 -0
- data/crates/wasmer/src/externals/global.rs +62 -0
- data/crates/wasmer/src/externals/memory.rs +117 -0
- data/crates/wasmer/src/externals/mod.rs +9 -0
- data/crates/wasmer/src/externals/table.rs +41 -0
- data/crates/wasmer/src/import_object.rs +78 -0
- data/crates/wasmer/src/instance.rs +45 -0
- data/crates/wasmer/src/lib.rs +307 -0
- data/crates/wasmer/src/memory/mod.rs +1 -0
- data/crates/wasmer/src/memory/views.rs +112 -0
- data/crates/wasmer/src/module.rs +106 -0
- data/crates/wasmer/src/prelude.rs +3 -0
- data/crates/wasmer/src/store.rs +22 -0
- data/crates/wasmer/src/types.rs +390 -0
- data/crates/wasmer/src/values.rs +84 -0
- data/crates/wasmer/src/wasi.rs +226 -0
- data/crates/wasmer/src/wat.rs +20 -0
- data/justfile +7 -1
- data/lib/wasmer.rb +29 -3
- data/wasmer.gemspec +6 -10
- metadata +45 -47
- data/README.md +0 -332
- data/lib/wasmer/version.rb +0 -3
- data/src/error.rs +0 -16
- data/src/instance/exports.rs +0 -215
- data/src/instance/globals.rs +0 -234
- data/src/instance/mod.rs +0 -141
- data/src/lib.rs +0 -162
- data/src/memory/mod.rs +0 -158
- data/src/memory/view.rs +0 -145
- data/src/module.rs +0 -28
| @@ -0,0 +1,84 @@ | |
| 1 | 
            +
            use crate::{
         | 
| 2 | 
            +
                error::{to_ruby_err, RubyResult, TypeError},
         | 
| 3 | 
            +
                prelude::*,
         | 
| 4 | 
            +
            };
         | 
| 5 | 
            +
            use rutie::{AnyObject, Fixnum, Float, Object};
         | 
| 6 | 
            +
            use std::convert::TryInto;
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            pub(crate) fn to_wasm_value((any, ty): (&AnyObject, wasmer::Type)) -> RubyResult<wasmer::Value> {
         | 
| 9 | 
            +
                Ok(match ty {
         | 
| 10 | 
            +
                    wasmer::Type::I32 => wasmer::Value::I32(
         | 
| 11 | 
            +
                        any.try_convert_to::<Fixnum>()?
         | 
| 12 | 
            +
                            .to_u64()
         | 
| 13 | 
            +
                            .try_into()
         | 
| 14 | 
            +
                            .map_err(to_ruby_err::<TypeError, _>)?,
         | 
| 15 | 
            +
                    ),
         | 
| 16 | 
            +
                    wasmer::Type::I64 => wasmer::Value::I64(
         | 
| 17 | 
            +
                        any.try_convert_to::<Fixnum>()?
         | 
| 18 | 
            +
                            .to_u64()
         | 
| 19 | 
            +
                            .try_into()
         | 
| 20 | 
            +
                            .map_err(to_ruby_err::<TypeError, _>)?,
         | 
| 21 | 
            +
                    ),
         | 
| 22 | 
            +
                    wasmer::Type::F32 => wasmer::Value::F32(any.try_convert_to::<Float>()?.to_f64() as _),
         | 
| 23 | 
            +
                    wasmer::Type::F64 => wasmer::Value::F64(any.try_convert_to::<Float>()?.to_f64()),
         | 
| 24 | 
            +
                    _ => unimplemented!(),
         | 
| 25 | 
            +
                })
         | 
| 26 | 
            +
            }
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            pub(crate) fn to_ruby_object(value: &wasmer::Value) -> AnyObject {
         | 
| 29 | 
            +
                match value {
         | 
| 30 | 
            +
                    wasmer::Value::I32(value) => Fixnum::new((*value).into()).to_any_object(),
         | 
| 31 | 
            +
                    wasmer::Value::I64(value) => Fixnum::new(*value).to_any_object(),
         | 
| 32 | 
            +
                    wasmer::Value::F32(value) => Float::new((*value).into()).to_any_object(),
         | 
| 33 | 
            +
                    wasmer::Value::F64(value) => Float::new(*value).to_any_object(),
         | 
| 34 | 
            +
                    _ => unimplemented!(),
         | 
| 35 | 
            +
                }
         | 
| 36 | 
            +
            }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            #[rubyclass(module = "Wasmer")]
         | 
| 39 | 
            +
            pub struct Value {
         | 
| 40 | 
            +
                inner: wasmer::Value,
         | 
| 41 | 
            +
            }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            impl Value {
         | 
| 44 | 
            +
                pub(crate) fn inner(&self) -> &wasmer::Value {
         | 
| 45 | 
            +
                    &self.inner
         | 
| 46 | 
            +
                }
         | 
| 47 | 
            +
            }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            #[rubymethods]
         | 
| 50 | 
            +
            impl Value {
         | 
| 51 | 
            +
                pub fn i32(value: &Fixnum) -> RubyResult<AnyObject> {
         | 
| 52 | 
            +
                    Ok(Value::ruby_new(Value {
         | 
| 53 | 
            +
                        inner: wasmer::Value::I32(
         | 
| 54 | 
            +
                            value
         | 
| 55 | 
            +
                                .to_u64()
         | 
| 56 | 
            +
                                .try_into()
         | 
| 57 | 
            +
                                .map_err(to_ruby_err::<TypeError, _>)?,
         | 
| 58 | 
            +
                        ),
         | 
| 59 | 
            +
                    }))
         | 
| 60 | 
            +
                }
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                pub fn i64(value: &Fixnum) -> RubyResult<AnyObject> {
         | 
| 63 | 
            +
                    Ok(Value::ruby_new(Value {
         | 
| 64 | 
            +
                        inner: wasmer::Value::I64(
         | 
| 65 | 
            +
                            value
         | 
| 66 | 
            +
                                .to_u64()
         | 
| 67 | 
            +
                                .try_into()
         | 
| 68 | 
            +
                                .map_err(to_ruby_err::<TypeError, _>)?,
         | 
| 69 | 
            +
                        ),
         | 
| 70 | 
            +
                    }))
         | 
| 71 | 
            +
                }
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                pub fn f32(value: &Float) -> RubyResult<AnyObject> {
         | 
| 74 | 
            +
                    Ok(Value::ruby_new(Value {
         | 
| 75 | 
            +
                        inner: wasmer::Value::F32(value.to_f64() as _),
         | 
| 76 | 
            +
                    }))
         | 
| 77 | 
            +
                }
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                pub fn f64(value: &Float) -> RubyResult<AnyObject> {
         | 
| 80 | 
            +
                    Ok(Value::ruby_new(Value {
         | 
| 81 | 
            +
                        inner: wasmer::Value::F64(value.to_f64()),
         | 
| 82 | 
            +
                    }))
         | 
| 83 | 
            +
                }
         | 
| 84 | 
            +
            }
         | 
| @@ -0,0 +1,226 @@ | |
| 1 | 
            +
            use crate::{
         | 
| 2 | 
            +
                error::{to_ruby_err, unwrap_or_raise, RuntimeError, TypeError},
         | 
| 3 | 
            +
                import_object::ImportObject,
         | 
| 4 | 
            +
                module::Module,
         | 
| 5 | 
            +
                prelude::*,
         | 
| 6 | 
            +
                store::Store,
         | 
| 7 | 
            +
            };
         | 
| 8 | 
            +
            use rutie::{AnyObject, Array, Boolean, Hash, Integer, NilClass, Object, RString};
         | 
| 9 | 
            +
            use std::{convert::TryFrom, path::PathBuf};
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            #[derive(Debug, Copy, Clone)]
         | 
| 12 | 
            +
            #[repr(u8)]
         | 
| 13 | 
            +
            pub enum Version {
         | 
| 14 | 
            +
                Latest = 1,
         | 
| 15 | 
            +
                Snapshot0 = 2,
         | 
| 16 | 
            +
                Snapshot1 = 3,
         | 
| 17 | 
            +
            }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            impl Version {
         | 
| 20 | 
            +
                fn to_integer(&self) -> Integer {
         | 
| 21 | 
            +
                    match self {
         | 
| 22 | 
            +
                        Self::Latest => Integer::new(1),
         | 
| 23 | 
            +
                        Self::Snapshot0 => Integer::new(2),
         | 
| 24 | 
            +
                        Self::Snapshot1 => Integer::new(3),
         | 
| 25 | 
            +
                    }
         | 
| 26 | 
            +
                }
         | 
| 27 | 
            +
            }
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            impl From<&wasmer_wasi::WasiVersion> for Version {
         | 
| 30 | 
            +
                fn from(value: &wasmer_wasi::WasiVersion) -> Self {
         | 
| 31 | 
            +
                    match value {
         | 
| 32 | 
            +
                        wasmer_wasi::WasiVersion::Latest => Self::Latest,
         | 
| 33 | 
            +
                        wasmer_wasi::WasiVersion::Snapshot0 => Self::Snapshot0,
         | 
| 34 | 
            +
                        wasmer_wasi::WasiVersion::Snapshot1 => Self::Snapshot1,
         | 
| 35 | 
            +
                    }
         | 
| 36 | 
            +
                }
         | 
| 37 | 
            +
            }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            impl Into<wasmer_wasi::WasiVersion> for Version {
         | 
| 40 | 
            +
                fn into(self) -> wasmer_wasi::WasiVersion {
         | 
| 41 | 
            +
                    match self {
         | 
| 42 | 
            +
                        Self::Latest => wasmer_wasi::WasiVersion::Latest,
         | 
| 43 | 
            +
                        Self::Snapshot0 => wasmer_wasi::WasiVersion::Snapshot0,
         | 
| 44 | 
            +
                        Self::Snapshot1 => wasmer_wasi::WasiVersion::Snapshot1,
         | 
| 45 | 
            +
                    }
         | 
| 46 | 
            +
                }
         | 
| 47 | 
            +
            }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            impl TryFrom<&Integer> for Version {
         | 
| 50 | 
            +
                type Error = &'static str;
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                fn try_from(value: &Integer) -> Result<Self, Self::Error> {
         | 
| 53 | 
            +
                    Ok(match value.to_i32() {
         | 
| 54 | 
            +
                        1 => Version::Latest,
         | 
| 55 | 
            +
                        2 => Version::Snapshot0,
         | 
| 56 | 
            +
                        3 => Version::Snapshot1,
         | 
| 57 | 
            +
                        _ => return Err("Unrecognized WASI version"),
         | 
| 58 | 
            +
                    })
         | 
| 59 | 
            +
                }
         | 
| 60 | 
            +
            }
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            #[rubyclass(module = "Wasmer::Wasi")]
         | 
| 63 | 
            +
            pub struct StateBuilder {
         | 
| 64 | 
            +
                inner: wasmer_wasi::WasiStateBuilder,
         | 
| 65 | 
            +
            }
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            #[rubymethods]
         | 
| 68 | 
            +
            impl StateBuilder {
         | 
| 69 | 
            +
                pub fn new(program_name: &RString) -> RubyResult<AnyObject> {
         | 
| 70 | 
            +
                    Ok(StateBuilder::ruby_new(StateBuilder {
         | 
| 71 | 
            +
                        inner: wasmer_wasi::WasiState::new(program_name.to_str()),
         | 
| 72 | 
            +
                    }))
         | 
| 73 | 
            +
                }
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                pub fn arguments(&mut self, arguments: &Array) -> RubyResult<RubyStateBuilder> {
         | 
| 76 | 
            +
                    self.inner.args(
         | 
| 77 | 
            +
                        unsafe { arguments.to_any_object().to::<Array>() }
         | 
| 78 | 
            +
                            .into_iter()
         | 
| 79 | 
            +
                            .map(|argument| {
         | 
| 80 | 
            +
                                argument
         | 
| 81 | 
            +
                                    .try_convert_to::<RString>()
         | 
| 82 | 
            +
                                    .map(|argument| argument.to_string())
         | 
| 83 | 
            +
                            })
         | 
| 84 | 
            +
                            .collect::<RubyResult<Vec<_>>>()?,
         | 
| 85 | 
            +
                    );
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                    Ok(_ruby_self)
         | 
| 88 | 
            +
                }
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                pub fn argument(&mut self, argument: &RString) -> RubyResult<RubyStateBuilder> {
         | 
| 91 | 
            +
                    self.inner.arg(argument.to_str());
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                    Ok(_ruby_self)
         | 
| 94 | 
            +
                }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                pub fn environments(&mut self, environments: &Hash) -> RubyResult<RubyStateBuilder> {
         | 
| 97 | 
            +
                    let mut environment_pairs = Vec::with_capacity(environments.length());
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                    environments.each(|key, value| {
         | 
| 100 | 
            +
                        unwrap_or_raise(|| {
         | 
| 101 | 
            +
                            environment_pairs.push((
         | 
| 102 | 
            +
                                key.try_convert_to::<RString>()?.to_string(),
         | 
| 103 | 
            +
                                value.try_convert_to::<RString>()?.to_string(),
         | 
| 104 | 
            +
                            ));
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                            Ok(())
         | 
| 107 | 
            +
                        });
         | 
| 108 | 
            +
                    });
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                    self.inner.envs(environment_pairs);
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                    Ok(_ruby_self)
         | 
| 113 | 
            +
                }
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                pub fn environment(&mut self, key: &RString, value: &RString) -> RubyResult<RubyStateBuilder> {
         | 
| 116 | 
            +
                    self.inner.env(key.to_str(), value.to_str());
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                    Ok(_ruby_self)
         | 
| 119 | 
            +
                }
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                pub fn preopen_directories(
         | 
| 122 | 
            +
                    &mut self,
         | 
| 123 | 
            +
                    preopen_directories: &Array,
         | 
| 124 | 
            +
                ) -> RubyResult<RubyStateBuilder> {
         | 
| 125 | 
            +
                    self.inner
         | 
| 126 | 
            +
                        .preopen_dirs(
         | 
| 127 | 
            +
                            unsafe { preopen_directories.to_any_object().to::<Array>() }
         | 
| 128 | 
            +
                                .into_iter()
         | 
| 129 | 
            +
                                .map(|directory| {
         | 
| 130 | 
            +
                                    Ok(PathBuf::from(
         | 
| 131 | 
            +
                                        directory.try_convert_to::<RString>()?.to_string(),
         | 
| 132 | 
            +
                                    ))
         | 
| 133 | 
            +
                                })
         | 
| 134 | 
            +
                                .collect::<RubyResult<Vec<_>>>()?,
         | 
| 135 | 
            +
                        )
         | 
| 136 | 
            +
                        .map_err(to_ruby_err::<RuntimeError, _>)?;
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                    Ok(_ruby_self)
         | 
| 139 | 
            +
                }
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                pub fn preopen_directory(
         | 
| 142 | 
            +
                    &mut self,
         | 
| 143 | 
            +
                    preopen_directory: &RString,
         | 
| 144 | 
            +
                ) -> RubyResult<RubyStateBuilder> {
         | 
| 145 | 
            +
                    self.inner
         | 
| 146 | 
            +
                        .preopen_dir(preopen_directory.to_str())
         | 
| 147 | 
            +
                        .map_err(to_ruby_err::<RuntimeError, _>)?;
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                    Ok(_ruby_self)
         | 
| 150 | 
            +
                }
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                pub fn map_directories(&mut self, map_directories: &Hash) -> RubyResult<RubyStateBuilder> {
         | 
| 153 | 
            +
                    let mut map_directory_pairs = Vec::with_capacity(map_directories.length());
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                    map_directories.each(|key, value| {
         | 
| 156 | 
            +
                        unwrap_or_raise(|| {
         | 
| 157 | 
            +
                            map_directory_pairs.push((
         | 
| 158 | 
            +
                                key.try_convert_to::<RString>()?.to_string(),
         | 
| 159 | 
            +
                                PathBuf::from(value.try_convert_to::<RString>()?.to_str()),
         | 
| 160 | 
            +
                            ));
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                            Ok(())
         | 
| 163 | 
            +
                        });
         | 
| 164 | 
            +
                    });
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                    self.inner
         | 
| 167 | 
            +
                        .map_dirs(map_directory_pairs)
         | 
| 168 | 
            +
                        .map_err(to_ruby_err::<RuntimeError, _>)?;
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                    Ok(_ruby_self)
         | 
| 171 | 
            +
                }
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                pub fn map_directory(
         | 
| 174 | 
            +
                    &mut self,
         | 
| 175 | 
            +
                    alias: &RString,
         | 
| 176 | 
            +
                    directory: &RString,
         | 
| 177 | 
            +
                ) -> RubyResult<RubyStateBuilder> {
         | 
| 178 | 
            +
                    self.inner
         | 
| 179 | 
            +
                        .map_dir(alias.to_str(), PathBuf::from(directory.to_str()))
         | 
| 180 | 
            +
                        .map_err(to_ruby_err::<RuntimeError, _>)?;
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    Ok(_ruby_self)
         | 
| 183 | 
            +
                }
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                pub fn finalize(&mut self) -> RubyResult<AnyObject> {
         | 
| 186 | 
            +
                    Ok(Environment::ruby_new(Environment {
         | 
| 187 | 
            +
                        inner: self
         | 
| 188 | 
            +
                            .inner
         | 
| 189 | 
            +
                            .finalize()
         | 
| 190 | 
            +
                            .map_err(to_ruby_err::<RuntimeError, _>)?,
         | 
| 191 | 
            +
                    }))
         | 
| 192 | 
            +
                }
         | 
| 193 | 
            +
            }
         | 
| 194 | 
            +
             | 
| 195 | 
            +
            #[rubyclass(module = "Wasmer::Wasi")]
         | 
| 196 | 
            +
            pub struct Environment {
         | 
| 197 | 
            +
                inner: wasmer_wasi::WasiEnv,
         | 
| 198 | 
            +
            }
         | 
| 199 | 
            +
             | 
| 200 | 
            +
            #[rubymethods]
         | 
| 201 | 
            +
            impl Environment {
         | 
| 202 | 
            +
                pub fn generate_import_object(
         | 
| 203 | 
            +
                    &self,
         | 
| 204 | 
            +
                    store: &Store,
         | 
| 205 | 
            +
                    wasi_version: &Integer,
         | 
| 206 | 
            +
                ) -> RubyResult<AnyObject> {
         | 
| 207 | 
            +
                    let import_object = wasmer_wasi::generate_import_object_from_env(
         | 
| 208 | 
            +
                        store.inner(),
         | 
| 209 | 
            +
                        self.inner.clone(),
         | 
| 210 | 
            +
                        Version::try_from(wasi_version)
         | 
| 211 | 
            +
                            .map_err(to_ruby_err::<TypeError, _>)?
         | 
| 212 | 
            +
                            .into(),
         | 
| 213 | 
            +
                    );
         | 
| 214 | 
            +
             | 
| 215 | 
            +
                    Ok(ImportObject::ruby_new(ImportObject::raw_new(import_object)))
         | 
| 216 | 
            +
                }
         | 
| 217 | 
            +
            }
         | 
| 218 | 
            +
             | 
| 219 | 
            +
            #[rubyfunction]
         | 
| 220 | 
            +
            pub fn get_version(module: &Module, strict: &Boolean) -> RubyResult<AnyObject> {
         | 
| 221 | 
            +
                Ok(
         | 
| 222 | 
            +
                    wasmer_wasi::get_wasi_version(&module.inner(), strict.to_bool())
         | 
| 223 | 
            +
                        .map(|version| Version::from(&version).to_integer().to_any_object())
         | 
| 224 | 
            +
                        .unwrap_or_else(|| NilClass::new().to_any_object()),
         | 
| 225 | 
            +
                )
         | 
| 226 | 
            +
            }
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            use crate::{
         | 
| 2 | 
            +
                error::{to_ruby_err, RuntimeError},
         | 
| 3 | 
            +
                prelude::*,
         | 
| 4 | 
            +
            };
         | 
| 5 | 
            +
            use rutie::{Encoding, RString};
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            #[rubyfunction]
         | 
| 8 | 
            +
            pub fn wat2wasm(wat: &RString) -> RubyResult<RString> {
         | 
| 9 | 
            +
                wat::parse_str(wat.to_str())
         | 
| 10 | 
            +
                    .map(|bytes| RString::from_bytes(bytes.as_slice(), &Encoding::us_ascii()))
         | 
| 11 | 
            +
                    .map_err(to_ruby_err::<RuntimeError, _>)
         | 
| 12 | 
            +
            }
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            #[rubyfunction]
         | 
| 15 | 
            +
            pub fn wasm2wat(bytes: &RString) -> RubyResult<RString> {
         | 
| 16 | 
            +
                Ok(RString::new_utf8(
         | 
| 17 | 
            +
                    &wasmprinter::print_bytes(bytes.to_bytes_unchecked())
         | 
| 18 | 
            +
                        .map_err(to_ruby_err::<RuntimeError, _>)?,
         | 
| 19 | 
            +
                ))
         | 
| 20 | 
            +
            }
         | 
    
        data/justfile
    CHANGED
    
    | @@ -1,15 +1,21 @@ | |
| 1 1 | 
             
            # Compile and install the Ruby extension.
         | 
| 2 2 | 
             
            build:
         | 
| 3 3 | 
             
            	rake build_lib
         | 
| 4 | 
            +
            	rake bundle_install
         | 
| 4 5 |  | 
| 5 | 
            -
            # Run the tests.
         | 
| 6 | 
            +
            # Run all the tests.
         | 
| 6 7 | 
             
            test:
         | 
| 7 8 | 
             
            	rake test
         | 
| 9 | 
            +
            	cargo test --manifest-path crates/wasmer/Cargo.toml --doc
         | 
| 8 10 |  | 
| 9 11 | 
             
            # Build the `.gem` file.
         | 
| 10 12 | 
             
            gem:
         | 
| 11 13 | 
             
            	rake build
         | 
| 12 14 |  | 
| 15 | 
            +
            # Generate the documentation.
         | 
| 16 | 
            +
            doc:
         | 
| 17 | 
            +
            	cargo rustdoc --manifest-path crates/wasmer/Cargo.toml -- --extend-css doc/patch-rustdoc.css
         | 
| 18 | 
            +
             | 
| 13 19 | 
             
            # Clean the project.
         | 
| 14 20 | 
             
            clean:
         | 
| 15 21 | 
             
            	cargo clean
         | 
    
        data/lib/wasmer.rb
    CHANGED
    
    | @@ -1,6 +1,32 @@ | |
| 1 | 
            -
            require  | 
| 2 | 
            -
            require 'rutie'
         | 
| 1 | 
            +
            require "fiddle"
         | 
| 3 2 |  | 
| 4 3 | 
             
            module Wasmer
         | 
| 5 | 
            -
               | 
| 4 | 
            +
              shared_library_name = :wasmer_ruby
         | 
| 5 | 
            +
              init_function = :init
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              shared_library_prefix =
         | 
| 8 | 
            +
                case RUBY_PLATFORM
         | 
| 9 | 
            +
                when /windows|mswin|mingw/ then ""
         | 
| 10 | 
            +
                when /cygwin/ then "cyg"
         | 
| 11 | 
            +
                else "lib"
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              shared_library_suffix =
         | 
| 15 | 
            +
                case RUBY_PLATFORM
         | 
| 16 | 
            +
                when /darwin/ then "dylib"
         | 
| 17 | 
            +
                when /windows|mswin|mingw|cygwin/ then "dll"
         | 
| 18 | 
            +
                else "so"
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              shared_library_directory = File.expand_path "../target/release/", __dir__
         | 
| 22 | 
            +
              shared_library_path = File.join(
         | 
| 23 | 
            +
                shared_library_directory,
         | 
| 24 | 
            +
                [shared_library_prefix, shared_library_name, ".", shared_library_suffix].join()
         | 
| 25 | 
            +
              )
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              Fiddle::Function.new(
         | 
| 28 | 
            +
                Fiddle::dlopen(shared_library_path)[init_function.to_s],
         | 
| 29 | 
            +
                [],
         | 
| 30 | 
            +
                Fiddle::TYPE_VOIDP
         | 
| 31 | 
            +
              ).call
         | 
| 6 32 | 
             
            end
         | 
    
        data/wasmer.gemspec
    CHANGED
    
    | @@ -1,29 +1,25 @@ | |
| 1 1 | 
             
            lib = File.expand_path("../lib", __FILE__)
         | 
| 2 2 | 
             
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 3 3 |  | 
| 4 | 
            -
            require "wasmer/version"
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 5 | 
             
              spec.name          = "wasmer"
         | 
| 8 | 
            -
              spec.version       =  | 
| 9 | 
            -
              spec.authors       = [" | 
| 10 | 
            -
              spec.email         = [" | 
| 6 | 
            +
              spec.version       = "0.5.0"
         | 
| 7 | 
            +
              spec.authors       = ["Wasmer Engineering Team"]
         | 
| 8 | 
            +
              spec.email         = ["engineering@wasmer.io"]
         | 
| 11 9 |  | 
| 12 10 | 
             
              spec.summary       = "Run WebAssembly binaries."
         | 
| 13 11 | 
             
              spec.description   = "Wasmer is a Ruby extension to run WebAssembly binaries."
         | 
| 14 | 
            -
              spec.homepage      = "https://github.com/wasmerio/ruby | 
| 15 | 
            -
              spec.license       = " | 
| 12 | 
            +
              spec.homepage      = "https://github.com/wasmerio/wasmer-ruby"
         | 
| 13 | 
            +
              spec.license       = "MIT"
         | 
| 16 14 |  | 
| 17 15 | 
             
              spec.extensions    = %w(Rakefile)
         | 
| 18 16 |  | 
| 19 17 | 
             
              spec.files         = Dir.chdir(File.expand_path('..', __FILE__)) do
         | 
| 20 | 
            -
                `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(examples|tests)/}) }
         | 
| 18 | 
            +
                `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(examples|tests|doc)/}) }
         | 
| 21 19 | 
             
              end
         | 
| 22 20 |  | 
| 23 21 | 
             
              spec.require_paths = %w(lib)
         | 
| 24 22 |  | 
| 25 | 
            -
              spec.add_dependency "rutie", "~> 0.0.4"
         | 
| 26 23 | 
             
              spec.add_development_dependency "bundler", "~> 2.1"
         | 
| 27 24 | 
             
              spec.add_development_dependency "rake", "~> 13.0"
         | 
| 28 | 
            -
              spec.add_development_dependency "minitest", "~> 5.14"
         | 
| 29 25 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,29 +1,15 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: wasmer
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.5.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 | 
            -
            -  | 
| 8 | 
            -
            autorequire: | 
| 7 | 
            +
            - Wasmer Engineering Team
         | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-05-17 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name: rutie
         | 
| 15 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            -
                requirements:
         | 
| 17 | 
            -
                - - "~>"
         | 
| 18 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 0.0.4
         | 
| 20 | 
            -
              type: :runtime
         | 
| 21 | 
            -
              prerelease: false
         | 
| 22 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            -
                requirements:
         | 
| 24 | 
            -
                - - "~>"
         | 
| 25 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 0.0.4
         | 
| 27 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 14 | 
             
              name: bundler
         | 
| 29 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -52,23 +38,9 @@ dependencies: | |
| 52 38 | 
             
                - - "~>"
         | 
| 53 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 40 | 
             
                    version: '13.0'
         | 
| 55 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name: minitest
         | 
| 57 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            -
                requirements:
         | 
| 59 | 
            -
                - - "~>"
         | 
| 60 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: '5.14'
         | 
| 62 | 
            -
              type: :development
         | 
| 63 | 
            -
              prerelease: false
         | 
| 64 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            -
                requirements:
         | 
| 66 | 
            -
                - - "~>"
         | 
| 67 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: '5.14'
         | 
| 69 41 | 
             
            description: Wasmer is a Ruby extension to run WebAssembly binaries.
         | 
| 70 42 | 
             
            email:
         | 
| 71 | 
            -
            -  | 
| 43 | 
            +
            - engineering@wasmer.io
         | 
| 72 44 | 
             
            executables: []
         | 
| 73 45 | 
             
            extensions:
         | 
| 74 46 | 
             
            - Rakefile
         | 
| @@ -78,6 +50,7 @@ files: | |
| 78 50 | 
             
            - ".github/ISSUE_TEMPLATE/---bug-report.md"
         | 
| 79 51 | 
             
            - ".github/ISSUE_TEMPLATE/---feature-request.md"
         | 
| 80 52 | 
             
            - ".github/ISSUE_TEMPLATE/--question.md"
         | 
| 53 | 
            +
            - ".github/workflows/documentation.yml"
         | 
| 81 54 | 
             
            - ".github/workflows/test.yml"
         | 
| 82 55 | 
             
            - ".gitignore"
         | 
| 83 56 | 
             
            - CHANGELOG.md
         | 
| @@ -88,23 +61,48 @@ files: | |
| 88 61 | 
             
            - README.md
         | 
| 89 62 | 
             
            - Rakefile
         | 
| 90 63 | 
             
            - bors.toml
         | 
| 64 | 
            +
            - crates/rutie-derive-macros/Cargo.toml
         | 
| 65 | 
            +
            - crates/rutie-derive-macros/README.md
         | 
| 66 | 
            +
            - crates/rutie-derive-macros/src/class.rs
         | 
| 67 | 
            +
            - crates/rutie-derive-macros/src/function.rs
         | 
| 68 | 
            +
            - crates/rutie-derive-macros/src/lib.rs
         | 
| 69 | 
            +
            - crates/rutie-derive-macros/src/methods.rs
         | 
| 70 | 
            +
            - crates/rutie-derive/Cargo.toml
         | 
| 71 | 
            +
            - crates/rutie-derive/README.md
         | 
| 72 | 
            +
            - crates/rutie-derive/src/lib.rs
         | 
| 73 | 
            +
            - crates/rutie-derive/src/upcast.rs
         | 
| 74 | 
            +
            - crates/rutie-test/Cargo.toml
         | 
| 75 | 
            +
            - crates/rutie-test/src/lib.rs
         | 
| 76 | 
            +
            - crates/wasmer/Cargo.toml
         | 
| 77 | 
            +
            - crates/wasmer/README.md
         | 
| 78 | 
            +
            - crates/wasmer/src/doc.rs
         | 
| 79 | 
            +
            - crates/wasmer/src/error.rs
         | 
| 80 | 
            +
            - crates/wasmer/src/exports.rs
         | 
| 81 | 
            +
            - crates/wasmer/src/externals/function.rs
         | 
| 82 | 
            +
            - crates/wasmer/src/externals/global.rs
         | 
| 83 | 
            +
            - crates/wasmer/src/externals/memory.rs
         | 
| 84 | 
            +
            - crates/wasmer/src/externals/mod.rs
         | 
| 85 | 
            +
            - crates/wasmer/src/externals/table.rs
         | 
| 86 | 
            +
            - crates/wasmer/src/import_object.rs
         | 
| 87 | 
            +
            - crates/wasmer/src/instance.rs
         | 
| 88 | 
            +
            - crates/wasmer/src/lib.rs
         | 
| 89 | 
            +
            - crates/wasmer/src/memory/mod.rs
         | 
| 90 | 
            +
            - crates/wasmer/src/memory/views.rs
         | 
| 91 | 
            +
            - crates/wasmer/src/module.rs
         | 
| 92 | 
            +
            - crates/wasmer/src/prelude.rs
         | 
| 93 | 
            +
            - crates/wasmer/src/store.rs
         | 
| 94 | 
            +
            - crates/wasmer/src/types.rs
         | 
| 95 | 
            +
            - crates/wasmer/src/values.rs
         | 
| 96 | 
            +
            - crates/wasmer/src/wasi.rs
         | 
| 97 | 
            +
            - crates/wasmer/src/wat.rs
         | 
| 91 98 | 
             
            - justfile
         | 
| 92 99 | 
             
            - lib/wasmer.rb
         | 
| 93 | 
            -
            - lib/wasmer/version.rb
         | 
| 94 | 
            -
            - src/error.rs
         | 
| 95 | 
            -
            - src/instance/exports.rs
         | 
| 96 | 
            -
            - src/instance/globals.rs
         | 
| 97 | 
            -
            - src/instance/mod.rs
         | 
| 98 | 
            -
            - src/lib.rs
         | 
| 99 | 
            -
            - src/memory/mod.rs
         | 
| 100 | 
            -
            - src/memory/view.rs
         | 
| 101 | 
            -
            - src/module.rs
         | 
| 102 100 | 
             
            - wasmer.gemspec
         | 
| 103 | 
            -
            homepage: https://github.com/wasmerio/ruby | 
| 101 | 
            +
            homepage: https://github.com/wasmerio/wasmer-ruby
         | 
| 104 102 | 
             
            licenses:
         | 
| 105 | 
            -
            -  | 
| 103 | 
            +
            - MIT
         | 
| 106 104 | 
             
            metadata: {}
         | 
| 107 | 
            -
            post_install_message: | 
| 105 | 
            +
            post_install_message:
         | 
| 108 106 | 
             
            rdoc_options: []
         | 
| 109 107 | 
             
            require_paths:
         | 
| 110 108 | 
             
            - lib
         | 
| @@ -119,8 +117,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 119 117 | 
             
                - !ruby/object:Gem::Version
         | 
| 120 118 | 
             
                  version: '0'
         | 
| 121 119 | 
             
            requirements: []
         | 
| 122 | 
            -
            rubygems_version: 3. | 
| 123 | 
            -
            signing_key: | 
| 120 | 
            +
            rubygems_version: 3.2.15
         | 
| 121 | 
            +
            signing_key:
         | 
| 124 122 | 
             
            specification_version: 4
         | 
| 125 123 | 
             
            summary: Run WebAssembly binaries.
         | 
| 126 124 | 
             
            test_files: []
         |