wasmtime 0.2.0-x86_64-linux → 0.3.0-x86_64-linux
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/LICENSE +23 -21
- data/README.md +47 -118
- data/lib/wasmtime/2.7/ext.so +0 -0
- data/lib/wasmtime/3.0/ext.so +0 -0
- data/lib/wasmtime/3.1/ext.so +0 -0
- data/lib/wasmtime/version.rb +1 -1
- data/lib/wasmtime.rb +29 -4
- metadata +24 -34
- data/.cargo/config +0 -4
- data/CHANGELOG.md +0 -27
- data/Cargo.lock +0 -1197
- data/Cargo.toml +0 -14
- data/ext/wasmtime/Makefile +0 -5
- data/ext/wasmtime/Rakefile +0 -3
- data/ext/wasmtime/extconf.rb +0 -5
- data/lib/tasks/compile.rake +0 -27
- data/lib/wasmtime/native.so +0 -0
- data/lib/wasmtime/refinements.rb +0 -20
- data/lib/wasmtime/require.rb +0 -72
- data/src/export.rs +0 -19
- data/src/func.rs +0 -175
- data/src/instance.rs +0 -93
- data/src/lib.rs +0 -22
- data/src/memory.rs +0 -48
- data/src/ruby_type.rs +0 -32
- data/src/vm.rs +0 -6
data/Cargo.toml
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
[package]
|
2
|
-
name = "wasmtime-ruby"
|
3
|
-
version = "0.1.0"
|
4
|
-
authors = ["David Cristofaro <david@dtcristo.com>"]
|
5
|
-
edition = "2018"
|
6
|
-
publish = false
|
7
|
-
|
8
|
-
[lib]
|
9
|
-
crate-type = ["cdylib"]
|
10
|
-
|
11
|
-
[dependencies]
|
12
|
-
lazy_static = "1.4.0"
|
13
|
-
rutie = "0.7.0"
|
14
|
-
wasmtime = "0.16.0"
|
data/ext/wasmtime/Makefile
DELETED
data/ext/wasmtime/Rakefile
DELETED
data/ext/wasmtime/extconf.rb
DELETED
data/lib/tasks/compile.rake
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rbconfig'
|
4
|
-
|
5
|
-
SOEXT = RbConfig::CONFIG['SOEXT']
|
6
|
-
DLEXT = RbConfig::CONFIG['DLEXT']
|
7
|
-
|
8
|
-
SO = File.expand_path("../../target/release/libwasmtime_ruby.#{SOEXT}", __dir__)
|
9
|
-
DL = File.expand_path("../wasmtime/native.#{DLEXT}", __dir__)
|
10
|
-
|
11
|
-
desc 'Remove compile artifacts'
|
12
|
-
task :clean do
|
13
|
-
sh 'cargo clean'
|
14
|
-
rm_rf SO
|
15
|
-
rm_rf DL
|
16
|
-
end
|
17
|
-
|
18
|
-
desc 'Compile native extension'
|
19
|
-
task :compile do
|
20
|
-
unless `rustup target list`.include?('wasm32-unknown-unknown (installed)')
|
21
|
-
sh 'rustup target add wasm32-unknown-unknown'
|
22
|
-
end
|
23
|
-
|
24
|
-
ENV['NO_LINK_RUTIE'] = '1'
|
25
|
-
sh 'cargo build --release'
|
26
|
-
cp SO, DL
|
27
|
-
end
|
data/lib/wasmtime/native.so
DELETED
Binary file
|
data/lib/wasmtime/refinements.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wasmtime
|
4
|
-
module Refinements
|
5
|
-
refine String do
|
6
|
-
def camelize(uppercase_first_letter = true)
|
7
|
-
string = self
|
8
|
-
if uppercase_first_letter
|
9
|
-
string = string.sub(/^[a-z\d]*/, &:capitalize)
|
10
|
-
else
|
11
|
-
string = string.sub(/^(?:(?=\b|[A-Z_])|\w)/, &:downcase)
|
12
|
-
end
|
13
|
-
string.gsub(%r{(?:_|(\/))([a-z\d]*)}) { "#{$1}#{$2.capitalize}" }.gsub(
|
14
|
-
'/',
|
15
|
-
'::'
|
16
|
-
)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/wasmtime/require.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'wasmtime'
|
4
|
-
|
5
|
-
using Wasmtime::Refinements
|
6
|
-
|
7
|
-
module Kernel
|
8
|
-
unless defined?(wasmtime_original_require)
|
9
|
-
alias_method :wasmtime_original_require, :require
|
10
|
-
private :wasmtime_original_require
|
11
|
-
end
|
12
|
-
|
13
|
-
def require(path)
|
14
|
-
wasmtime_original_require(path)
|
15
|
-
rescue LoadError => load_error
|
16
|
-
try_load =
|
17
|
-
Proc.new do |path, extention|
|
18
|
-
path_with_extention =
|
19
|
-
path.end_with?(".#{extention}") ? path : "#{path}.#{extention}"
|
20
|
-
|
21
|
-
if path_with_extention.start_with?('.', '/', '~')
|
22
|
-
absolute_path = File.expand_path(path_with_extention)
|
23
|
-
return Wasmtime.load(absolute_path) if File.file?(absolute_path)
|
24
|
-
end
|
25
|
-
$LOAD_PATH.each do |load_dir|
|
26
|
-
absolute_path = File.expand_path(path_with_extention, load_dir)
|
27
|
-
return Wasmtime.load(absolute_path) if File.file?(absolute_path)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
try_load.call(path, 'wasm')
|
32
|
-
try_load.call(path, 'wat')
|
33
|
-
|
34
|
-
raise load_error
|
35
|
-
end
|
36
|
-
|
37
|
-
unless defined?(wasmtime_original_require_relative)
|
38
|
-
alias_method :wasmtime_original_require_relative, :require_relative
|
39
|
-
private :wasmtime_original_require_relative
|
40
|
-
end
|
41
|
-
|
42
|
-
def require_relative(path)
|
43
|
-
absolute_path =
|
44
|
-
File.expand_path(path, File.dirname(caller_locations[0].absolute_path))
|
45
|
-
require(absolute_path)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
module Wasmtime
|
50
|
-
module_function
|
51
|
-
|
52
|
-
def load(absolute_path)
|
53
|
-
return false if $LOADED_FEATURES.include?(absolute_path)
|
54
|
-
filename = absolute_path.split(File::SEPARATOR).last
|
55
|
-
module_name =
|
56
|
-
if filename.end_with?('.wasm')
|
57
|
-
filename.delete_suffix('.wasm')
|
58
|
-
else
|
59
|
-
filename.delete_suffix('.wat')
|
60
|
-
end
|
61
|
-
mod = Object.const_set(module_name.camelize, Module.new)
|
62
|
-
instance = Wasmtime::Instance.new(absolute_path)
|
63
|
-
instance.exports.each do |name, export|
|
64
|
-
case export
|
65
|
-
when Wasmtime::Func
|
66
|
-
mod.define_singleton_method(name) { |*args| export.call(*args) }
|
67
|
-
end
|
68
|
-
end
|
69
|
-
$LOADED_FEATURES << absolute_path
|
70
|
-
true
|
71
|
-
end
|
72
|
-
end
|
data/src/export.rs
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
use rutie::{AnyObject, Object};
|
2
|
-
use wasmtime as w;
|
3
|
-
|
4
|
-
use crate::func::{Func, RubyFunc};
|
5
|
-
use crate::memory::RubyMemory;
|
6
|
-
|
7
|
-
pub enum Export {
|
8
|
-
Func(Func),
|
9
|
-
Memory(w::Memory),
|
10
|
-
}
|
11
|
-
|
12
|
-
impl From<Export> for AnyObject {
|
13
|
-
fn from(export: Export) -> Self {
|
14
|
-
match export {
|
15
|
-
Export::Func(func) => RubyFunc::from(func).value().into(),
|
16
|
-
Export::Memory(memory) => RubyMemory::from(memory).value().into(),
|
17
|
-
}
|
18
|
-
}
|
19
|
-
}
|
data/src/func.rs
DELETED
@@ -1,175 +0,0 @@
|
|
1
|
-
use lazy_static::lazy_static;
|
2
|
-
use rutie as r;
|
3
|
-
use rutie::rubysys;
|
4
|
-
use rutie::{
|
5
|
-
class, methods, wrappable_struct, AnyObject, Array, Float, Hash, Integer, Module, NilClass,
|
6
|
-
Object, RString, Symbol,
|
7
|
-
};
|
8
|
-
use std::mem;
|
9
|
-
use wasmtime as w;
|
10
|
-
|
11
|
-
use crate::ruby_type::RubyType;
|
12
|
-
use crate::vm::raise;
|
13
|
-
|
14
|
-
pub struct Func {
|
15
|
-
func: w::Func,
|
16
|
-
}
|
17
|
-
|
18
|
-
impl Func {
|
19
|
-
pub fn new(func: w::Func) -> Self {
|
20
|
-
Func { func }
|
21
|
-
}
|
22
|
-
|
23
|
-
pub fn call(&mut self, args: &[w::Val]) -> Vec<w::Val> {
|
24
|
-
self.func.call(args).expect("failed to call func").to_vec()
|
25
|
-
}
|
26
|
-
|
27
|
-
fn parse_param_types(&self) -> Vec<RubyType> {
|
28
|
-
self.func
|
29
|
-
.ty()
|
30
|
-
.params()
|
31
|
-
.iter()
|
32
|
-
.map(|val_type| val_type.into())
|
33
|
-
.collect()
|
34
|
-
}
|
35
|
-
|
36
|
-
fn parse_result_type(&self) -> RubyType {
|
37
|
-
match self.func.ty().results().len() {
|
38
|
-
0 => RubyType::NilClass,
|
39
|
-
1 => self.func.ty().results().first().unwrap().into(),
|
40
|
-
_ => raise("StandardError", "multiple return values are not supported"),
|
41
|
-
}
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
|
-
fn translate_incoming(args: Array, param_types: &[RubyType]) -> Vec<w::Val> {
|
46
|
-
if args.length() != param_types.len() {
|
47
|
-
raise(
|
48
|
-
"ArgumentError",
|
49
|
-
&format!(
|
50
|
-
"wrong number of arguments (given {}, expected {})",
|
51
|
-
args.length(),
|
52
|
-
param_types.len()
|
53
|
-
),
|
54
|
-
)
|
55
|
-
}
|
56
|
-
args.into_iter()
|
57
|
-
.zip(param_types)
|
58
|
-
.map(|(arg, param_type)| match param_type {
|
59
|
-
RubyType::Integer32 => w::Val::I32(
|
60
|
-
arg.try_convert_to::<Integer>()
|
61
|
-
.expect("failed to convert integer")
|
62
|
-
.to_i32(),
|
63
|
-
),
|
64
|
-
RubyType::Integer64 => w::Val::I64(
|
65
|
-
arg.try_convert_to::<Integer>()
|
66
|
-
.expect("failed to convert integer")
|
67
|
-
.to_i64(),
|
68
|
-
),
|
69
|
-
RubyType::Float32 => w::Val::F32(
|
70
|
-
(arg.try_convert_to::<Float>()
|
71
|
-
.expect("failed to convert float")
|
72
|
-
.to_f64() as f32)
|
73
|
-
.to_bits(),
|
74
|
-
),
|
75
|
-
RubyType::Float64 => w::Val::F64(
|
76
|
-
arg.try_convert_to::<Float>()
|
77
|
-
.expect("failed to convert float")
|
78
|
-
.to_f64()
|
79
|
-
.to_bits(),
|
80
|
-
),
|
81
|
-
RubyType::NilClass | RubyType::Unsupported => raise(
|
82
|
-
"StandardError",
|
83
|
-
&format!("unsupported arg type: {:?}", param_type),
|
84
|
-
),
|
85
|
-
})
|
86
|
-
.collect()
|
87
|
-
}
|
88
|
-
|
89
|
-
fn translate_outgoing(native_results: Vec<w::Val>) -> AnyObject {
|
90
|
-
let results: Vec<AnyObject> = native_results
|
91
|
-
.into_iter()
|
92
|
-
.map(|r| match r {
|
93
|
-
w::Val::I32(v) => Integer::new(v.into()).into(),
|
94
|
-
w::Val::I64(v) => Integer::new(v).into(),
|
95
|
-
w::Val::F32(v) => Float::new(f32::from_bits(v).into()).into(),
|
96
|
-
w::Val::F64(v) => Float::new(f64::from_bits(v)).into(),
|
97
|
-
_ => raise("StandardError", &format!("unsupported value: {:?}", r)),
|
98
|
-
})
|
99
|
-
.collect();
|
100
|
-
|
101
|
-
match results.len() {
|
102
|
-
0 => NilClass::new().into(),
|
103
|
-
1 => results.first().unwrap().into(),
|
104
|
-
_ => raise("StandardError", "multiple return values are not supported"),
|
105
|
-
}
|
106
|
-
}
|
107
|
-
|
108
|
-
wrappable_struct!(Func, FuncWrapper, FUNC_WRAPPER);
|
109
|
-
class!(RubyFunc);
|
110
|
-
|
111
|
-
impl From<Func> for RubyFunc {
|
112
|
-
fn from(func: Func) -> Self {
|
113
|
-
Module::from_existing("Wasmtime")
|
114
|
-
.get_nested_class("Func")
|
115
|
-
.wrap_data(func, &*FUNC_WRAPPER)
|
116
|
-
}
|
117
|
-
}
|
118
|
-
|
119
|
-
#[rustfmt::skip]
|
120
|
-
methods!(
|
121
|
-
RubyFunc,
|
122
|
-
itself,
|
123
|
-
|
124
|
-
fn ruby_func_signature() -> Hash {
|
125
|
-
let func = itself.get_data(&*FUNC_WRAPPER);
|
126
|
-
|
127
|
-
let mut param_types = Array::new();
|
128
|
-
for param_type in func.parse_param_types().iter() {
|
129
|
-
param_types.push(RString::new_utf8(&format!("{:?}", param_type)));
|
130
|
-
}
|
131
|
-
|
132
|
-
let result_type: AnyObject = func.parse_result_type().into();
|
133
|
-
|
134
|
-
let mut signature = Hash::new();
|
135
|
-
signature.store(Symbol::new("params"), param_types);
|
136
|
-
signature.store(Symbol::new("result"), result_type);
|
137
|
-
|
138
|
-
signature
|
139
|
-
}
|
140
|
-
);
|
141
|
-
|
142
|
-
pub extern "C" fn ruby_func_call(
|
143
|
-
argc: r::types::Argc,
|
144
|
-
argv: *const AnyObject,
|
145
|
-
mut itself: AnyObject,
|
146
|
-
) -> AnyObject {
|
147
|
-
// TODO: Remove this section when rutie `methods!` macro has support for variadic functions
|
148
|
-
// https://github.com/danielpclark/rutie/blob/1c951b59e00944d305ca425267c54115c8c1bb86/README.md#variadic-functions--splat-operator
|
149
|
-
let args_raw = r::types::Value::from(0);
|
150
|
-
unsafe {
|
151
|
-
let p_argv: *const r::types::Value = mem::transmute(argv);
|
152
|
-
rubysys::class::rb_scan_args(
|
153
|
-
argc,
|
154
|
-
p_argv,
|
155
|
-
r::util::str_to_cstring("*").as_ptr(),
|
156
|
-
&args_raw,
|
157
|
-
)
|
158
|
-
};
|
159
|
-
let args = Array::from(args_raw);
|
160
|
-
// ---
|
161
|
-
let func = itself.get_data_mut(&*FUNC_WRAPPER);
|
162
|
-
|
163
|
-
let args_native = translate_incoming(args, &func.parse_param_types());
|
164
|
-
let results_native = func.call(&args_native[..]);
|
165
|
-
translate_outgoing(results_native)
|
166
|
-
}
|
167
|
-
|
168
|
-
pub fn ruby_init() {
|
169
|
-
Module::from_existing("Wasmtime").define(|module| {
|
170
|
-
module.define_nested_class("Func", None).define(|class| {
|
171
|
-
class.def("signature", ruby_func_signature);
|
172
|
-
class.def("call", ruby_func_call);
|
173
|
-
});
|
174
|
-
});
|
175
|
-
}
|
data/src/instance.rs
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
use lazy_static::lazy_static;
|
2
|
-
use rutie::{class, methods, wrappable_struct, AnyObject, Hash, Module, Object, RString};
|
3
|
-
use std::collections::HashMap;
|
4
|
-
use std::fs;
|
5
|
-
use wasmtime as w;
|
6
|
-
|
7
|
-
use crate::export::Export;
|
8
|
-
use crate::func::Func;
|
9
|
-
|
10
|
-
pub struct Instance {
|
11
|
-
instance: w::Instance,
|
12
|
-
}
|
13
|
-
|
14
|
-
impl Instance {
|
15
|
-
pub fn new(path: String) -> Self {
|
16
|
-
let wasm = fs::read(path).expect("failed to read wasm file");
|
17
|
-
|
18
|
-
let config = w::Config::new();
|
19
|
-
// config.wasm_interface_types(true);
|
20
|
-
|
21
|
-
let engine = w::Engine::new(&config);
|
22
|
-
let store = w::Store::new(&engine);
|
23
|
-
let module = w::Module::new(&store, &wasm).expect("failed to create module");
|
24
|
-
let imports: Vec<w::Extern> = Vec::new();
|
25
|
-
let instance = w::Instance::new(&module, &imports).expect("failed to create instance");
|
26
|
-
|
27
|
-
Instance { instance }
|
28
|
-
}
|
29
|
-
|
30
|
-
fn exports(&self) -> HashMap<String, Export> {
|
31
|
-
let mut exports = HashMap::new();
|
32
|
-
|
33
|
-
for export in self.instance.exports() {
|
34
|
-
match export.ty() {
|
35
|
-
w::ExternType::Func(_) => {
|
36
|
-
let name = export.name().to_string();
|
37
|
-
let func = Func::new(export.into_func().unwrap());
|
38
|
-
exports.insert(name, Export::Func(func));
|
39
|
-
}
|
40
|
-
w::ExternType::Memory(_) => {
|
41
|
-
let name = export.name().to_string();
|
42
|
-
let memory = export.into_memory().unwrap();
|
43
|
-
exports.insert(name, Export::Memory(memory));
|
44
|
-
}
|
45
|
-
_ => {}
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
exports
|
50
|
-
}
|
51
|
-
}
|
52
|
-
|
53
|
-
wrappable_struct!(Instance, InstanceWrapper, INSTANCE_WRAPPER);
|
54
|
-
class!(RubyInstance);
|
55
|
-
|
56
|
-
impl From<Instance> for RubyInstance {
|
57
|
-
fn from(instance: Instance) -> Self {
|
58
|
-
Module::from_existing("Wasmtime")
|
59
|
-
.get_nested_class("Instance")
|
60
|
-
.wrap_data(instance, &*INSTANCE_WRAPPER)
|
61
|
-
}
|
62
|
-
}
|
63
|
-
|
64
|
-
#[rustfmt::skip]
|
65
|
-
methods!(
|
66
|
-
RubyInstance,
|
67
|
-
itself,
|
68
|
-
|
69
|
-
fn ruby_instance_new(path: RString) -> RubyInstance {
|
70
|
-
Instance::new(path.expect("failed read path").to_string()).into()
|
71
|
-
}
|
72
|
-
|
73
|
-
fn ruby_instance_exports() -> Hash {
|
74
|
-
let mut exports = Hash::new();
|
75
|
-
|
76
|
-
for (export_name, export) in itself.get_data(&*INSTANCE_WRAPPER).exports().into_iter() {
|
77
|
-
exports.store::<RString, AnyObject>(RString::new_utf8(&export_name), export.into());
|
78
|
-
}
|
79
|
-
|
80
|
-
exports
|
81
|
-
}
|
82
|
-
);
|
83
|
-
|
84
|
-
pub fn ruby_init() {
|
85
|
-
Module::from_existing("Wasmtime").define(|module| {
|
86
|
-
module
|
87
|
-
.define_nested_class("Instance", None)
|
88
|
-
.define(|class| {
|
89
|
-
class.def_self("new", ruby_instance_new);
|
90
|
-
class.def("exports", ruby_instance_exports);
|
91
|
-
});
|
92
|
-
});
|
93
|
-
}
|
data/src/lib.rs
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
mod export;
|
2
|
-
mod func;
|
3
|
-
mod instance;
|
4
|
-
mod memory;
|
5
|
-
mod ruby_type;
|
6
|
-
mod vm;
|
7
|
-
|
8
|
-
#[allow(non_snake_case)]
|
9
|
-
#[no_mangle]
|
10
|
-
pub extern "C" fn Init_native() {
|
11
|
-
std::panic::set_hook(Box::new(|panic_info| {
|
12
|
-
if let Some(s) = panic_info.payload().downcast_ref::<&str>() {
|
13
|
-
vm::raise("StandardError", s)
|
14
|
-
} else {
|
15
|
-
vm::raise("StandardError", &format!("{:?}", panic_info))
|
16
|
-
}
|
17
|
-
}));
|
18
|
-
|
19
|
-
instance::ruby_init();
|
20
|
-
func::ruby_init();
|
21
|
-
memory::ruby_init();
|
22
|
-
}
|
data/src/memory.rs
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
use lazy_static::lazy_static;
|
2
|
-
use rutie::{class, methods, wrappable_struct, AnyObject, Integer, Module, NilClass, Object};
|
3
|
-
use wasmtime as w;
|
4
|
-
|
5
|
-
wrappable_struct!(w::Memory, MemoryWrapper, MEMORY_WRAPPER);
|
6
|
-
class!(RubyMemory);
|
7
|
-
|
8
|
-
impl From<w::Memory> for RubyMemory {
|
9
|
-
fn from(memory: w::Memory) -> Self {
|
10
|
-
Module::from_existing("Wasmtime")
|
11
|
-
.get_nested_class("Memory")
|
12
|
-
.wrap_data(memory, &*MEMORY_WRAPPER)
|
13
|
-
}
|
14
|
-
}
|
15
|
-
|
16
|
-
#[rustfmt::skip]
|
17
|
-
methods!(
|
18
|
-
RubyMemory,
|
19
|
-
itself,
|
20
|
-
|
21
|
-
fn ruby_instance_data_size() -> Integer {
|
22
|
-
Integer::from(itself.get_data(&*MEMORY_WRAPPER).data_size() as u32)
|
23
|
-
}
|
24
|
-
|
25
|
-
fn ruby_instance_size() -> Integer {
|
26
|
-
Integer::from(itself.get_data(&*MEMORY_WRAPPER).size())
|
27
|
-
}
|
28
|
-
|
29
|
-
fn ruby_instance_grow(delta: Integer) -> AnyObject {
|
30
|
-
let memory = itself.get_data(&*MEMORY_WRAPPER);
|
31
|
-
let delta = delta.unwrap().to_i32();
|
32
|
-
if delta < 0 { return NilClass::new().into() }
|
33
|
-
match memory.grow(delta as u32) {
|
34
|
-
Ok(original) => Integer::from(original).into(),
|
35
|
-
Err(_) => NilClass::new().into()
|
36
|
-
}
|
37
|
-
}
|
38
|
-
);
|
39
|
-
|
40
|
-
pub fn ruby_init() {
|
41
|
-
Module::from_existing("Wasmtime").define(|module| {
|
42
|
-
module.define_nested_class("Memory", None).define(|class| {
|
43
|
-
class.def("data_size", ruby_instance_data_size);
|
44
|
-
class.def("size", ruby_instance_size);
|
45
|
-
class.def("grow", ruby_instance_grow);
|
46
|
-
});
|
47
|
-
});
|
48
|
-
}
|
data/src/ruby_type.rs
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
use rutie::{AnyObject, RString};
|
2
|
-
use wasmtime as w;
|
3
|
-
|
4
|
-
#[derive(Debug, Copy, Clone)]
|
5
|
-
pub enum RubyType {
|
6
|
-
Integer32,
|
7
|
-
Integer64,
|
8
|
-
Float32,
|
9
|
-
Float64,
|
10
|
-
// String,
|
11
|
-
// Boolean,
|
12
|
-
NilClass,
|
13
|
-
Unsupported,
|
14
|
-
}
|
15
|
-
|
16
|
-
impl From<RubyType> for AnyObject {
|
17
|
-
fn from(ruby_type: RubyType) -> AnyObject {
|
18
|
-
RString::new_utf8(&format!("{:?}", ruby_type)).into()
|
19
|
-
}
|
20
|
-
}
|
21
|
-
|
22
|
-
impl From<&w::ValType> for RubyType {
|
23
|
-
fn from(val_type: &w::ValType) -> Self {
|
24
|
-
match val_type {
|
25
|
-
w::ValType::I32 => RubyType::Integer32,
|
26
|
-
w::ValType::I64 => RubyType::Integer64,
|
27
|
-
w::ValType::F32 => RubyType::Float32,
|
28
|
-
w::ValType::F64 => RubyType::Float64,
|
29
|
-
_ => RubyType::Unsupported,
|
30
|
-
}
|
31
|
-
}
|
32
|
-
}
|