wasmtime 0.2.0 → 0.3.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +941 -627
  3. data/Cargo.toml +2 -14
  4. data/LICENSE +23 -21
  5. data/README.md +47 -118
  6. data/ext/Cargo.toml +17 -0
  7. data/ext/extconf.rb +6 -0
  8. data/ext/src/helpers/mod.rs +3 -0
  9. data/ext/src/helpers/wrapped_struct.rs +84 -0
  10. data/ext/src/lib.rs +9 -0
  11. data/ext/src/ruby_api/config.rs +68 -0
  12. data/ext/src/ruby_api/convert.rs +92 -0
  13. data/ext/src/ruby_api/engine.rs +66 -0
  14. data/ext/src/ruby_api/errors.rs +56 -0
  15. data/ext/src/ruby_api/externals.rs +113 -0
  16. data/ext/src/ruby_api/func.rs +388 -0
  17. data/ext/src/ruby_api/func_type.rs +139 -0
  18. data/ext/src/ruby_api/instance.rs +174 -0
  19. data/ext/src/ruby_api/linker.rs +296 -0
  20. data/ext/src/ruby_api/macros.rs +12 -0
  21. data/ext/src/ruby_api/memory.rs +142 -0
  22. data/ext/src/ruby_api/memory_type.rs +56 -0
  23. data/ext/src/ruby_api/mod.rs +48 -0
  24. data/ext/src/ruby_api/module.rs +107 -0
  25. data/ext/src/ruby_api/params.rs +42 -0
  26. data/ext/src/ruby_api/static_id.rs +57 -0
  27. data/ext/src/ruby_api/store.rs +182 -0
  28. data/ext/src/ruby_api/trap.rs +135 -0
  29. data/lib/wasmtime/version.rb +1 -1
  30. data/lib/wasmtime.rb +29 -4
  31. metadata +54 -30
  32. data/.cargo/config +0 -4
  33. data/CHANGELOG.md +0 -27
  34. data/ext/wasmtime/Makefile +0 -5
  35. data/ext/wasmtime/Rakefile +0 -3
  36. data/ext/wasmtime/extconf.rb +0 -5
  37. data/lib/tasks/compile.rake +0 -27
  38. data/lib/wasmtime/refinements.rb +0 -20
  39. data/lib/wasmtime/require.rb +0 -72
  40. data/src/export.rs +0 -19
  41. data/src/func.rs +0 -175
  42. data/src/instance.rs +0 -93
  43. data/src/lib.rs +0 -22
  44. data/src/memory.rs +0 -48
  45. data/src/ruby_type.rs +0 -32
  46. data/src/vm.rs +0 -6
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
- }
data/src/vm.rs DELETED
@@ -1,6 +0,0 @@
1
- use rutie::{Class, VM};
2
-
3
- pub fn raise(exception: &str, message: &str) -> ! {
4
- VM::raise(Class::from_existing(exception), message);
5
- loop {}
6
- }