wardite 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Steepfile +1 -0
- data/examples/grayscale.rb +64 -0
- data/exe/wardite +11 -5
- data/lib/wardite/instruction.rb +10 -9
- data/lib/wardite/load.rb +20 -10
- data/lib/wardite/revisitor.rb +92 -0
- data/lib/wardite/value.rb +6 -22
- data/lib/wardite/version.rb +1 -1
- data/lib/wardite/wasi/consts.rb +129 -0
- data/lib/wardite/wasi.rb +268 -7
- data/lib/wardite/wasm_module.rb +53 -0
- data/lib/wardite.rb +74 -105
- data/misc/proposals/rubykaigi2025.md +46 -0
- data/misc/slides/fib.c +4 -0
- data/misc/slides/fib.html +13 -0
- data/misc/slides/image-1.png +0 -0
- data/misc/slides/image-2.png +0 -0
- data/misc/slides/image.png +0 -0
- data/misc/slides/tokyo12.html +614 -0
- data/misc/slides/tokyo12.md +624 -0
- data/sig/fcntl.rbs +7 -0
- data/sig/generated/wardite/instruction.rbs +2 -0
- data/sig/generated/wardite/load.rbs +2 -3
- data/sig/generated/wardite/revisitor.rbs +25 -0
- data/sig/generated/wardite/value.rbs +3 -10
- data/sig/generated/wardite/wasi/consts.rbs +137 -0
- data/sig/generated/wardite/wasi.rbs +62 -5
- data/sig/generated/wardite/wasm_module.rbs +42 -0
- data/sig/generated/wardite.rbs +24 -19
- metadata +18 -3
- data/examples/add.wasm +0 -0
@@ -0,0 +1,137 @@
|
|
1
|
+
# Generated from lib/wardite/wasi/consts.rb with RBS::Inline
|
2
|
+
|
3
|
+
module Wardite
|
4
|
+
module Wasi
|
5
|
+
EACCES: ::Integer
|
6
|
+
|
7
|
+
EAGAIN: ::Integer
|
8
|
+
|
9
|
+
EBADF: ::Integer
|
10
|
+
|
11
|
+
EEXIST: ::Integer
|
12
|
+
|
13
|
+
EFAULT: ::Integer
|
14
|
+
|
15
|
+
EINTR: ::Integer
|
16
|
+
|
17
|
+
EINVAL: ::Integer
|
18
|
+
|
19
|
+
EIO: ::Integer
|
20
|
+
|
21
|
+
EISDIR: ::Integer
|
22
|
+
|
23
|
+
ELOOP: ::Integer
|
24
|
+
|
25
|
+
ENAMETOOLONG: ::Integer
|
26
|
+
|
27
|
+
ENOENT: ::Integer
|
28
|
+
|
29
|
+
ENOSYS: ::Integer
|
30
|
+
|
31
|
+
ENOTDIR: ::Integer
|
32
|
+
|
33
|
+
ERANGE: ::Integer
|
34
|
+
|
35
|
+
ENOTEMPTY: ::Integer
|
36
|
+
|
37
|
+
ENOTSOCK: ::Integer
|
38
|
+
|
39
|
+
ENOTSUP: ::Integer
|
40
|
+
|
41
|
+
EPERM: ::Integer
|
42
|
+
|
43
|
+
EROFS: ::Integer
|
44
|
+
|
45
|
+
FILETYPE_UNKNOWN: ::Integer
|
46
|
+
|
47
|
+
FILETYPE_BLOCK_DEVICE: Integer
|
48
|
+
|
49
|
+
FILETYPE_CHARACTER_DEVICE: Integer
|
50
|
+
|
51
|
+
FILETYPE_DIRECTORY: Integer
|
52
|
+
|
53
|
+
FILETYPE_REGULAR_FILE: Integer
|
54
|
+
|
55
|
+
FILETYPE_SOCKET_DGRAM: Integer
|
56
|
+
|
57
|
+
FILETYPE_SOCKET_STREAM: Integer
|
58
|
+
|
59
|
+
FILETYPE_SYMBOLIC_LINK: Integer
|
60
|
+
|
61
|
+
FD_APPEND: Integer
|
62
|
+
|
63
|
+
FD_DSYNC: Integer
|
64
|
+
|
65
|
+
FD_NONBLOCK: Integer
|
66
|
+
|
67
|
+
FD_RSYNC: Integer
|
68
|
+
|
69
|
+
FD_SYNC: Integer
|
70
|
+
|
71
|
+
RIGHT_FD_DATASYNC: untyped
|
72
|
+
|
73
|
+
RIGHT_FD_READ: untyped
|
74
|
+
|
75
|
+
RIGHT_FD_SEEK: untyped
|
76
|
+
|
77
|
+
RIGHT_FDSTAT_SET_FLAGS: untyped
|
78
|
+
|
79
|
+
RIGHT_FD_SYNC: untyped
|
80
|
+
|
81
|
+
RIGHT_FD_TELL: untyped
|
82
|
+
|
83
|
+
RIGHT_FD_WRITE: untyped
|
84
|
+
|
85
|
+
RIGHT_FD_ADVISE: untyped
|
86
|
+
|
87
|
+
RIGHT_FD_ALLOCATE: untyped
|
88
|
+
|
89
|
+
RIGHT_PATH_CREATE_DIRECTORY: untyped
|
90
|
+
|
91
|
+
RIGHT_PATH_CREATE_FILE: untyped
|
92
|
+
|
93
|
+
RIGHT_PATH_LINK_SOURCE: untyped
|
94
|
+
|
95
|
+
RIGHT_PATH_LINK_TARGET: untyped
|
96
|
+
|
97
|
+
RIGHT_PATH_OPEN: untyped
|
98
|
+
|
99
|
+
RIGHT_FD_READDIR: untyped
|
100
|
+
|
101
|
+
RIGHT_PATH_READLINK: untyped
|
102
|
+
|
103
|
+
RIGHT_PATH_RENAME_SOURCE: untyped
|
104
|
+
|
105
|
+
RIGHT_PATH_RENAME_TARGET: untyped
|
106
|
+
|
107
|
+
RIGHT_PATH_FILESTAT_GET: untyped
|
108
|
+
|
109
|
+
RIGHT_PATH_FILESTAT_SET_SIZE: untyped
|
110
|
+
|
111
|
+
RIGHT_PATH_FILESTAT_SET_TIMES: untyped
|
112
|
+
|
113
|
+
RIGHT_FD_FILESTAT_GET: untyped
|
114
|
+
|
115
|
+
RIGHT_FD_FILESTAT_SET_SIZE: untyped
|
116
|
+
|
117
|
+
RIGHT_FD_FILESTAT_SET_TIMES: untyped
|
118
|
+
|
119
|
+
RIGHT_PATH_SYMLINK: untyped
|
120
|
+
|
121
|
+
RIGHT_PATH_REMOVE_DIRECTORY: untyped
|
122
|
+
|
123
|
+
RIGHT_PATH_UNLINK_FILE: untyped
|
124
|
+
|
125
|
+
RIGHT_POLL_FD_READWRITE: untyped
|
126
|
+
|
127
|
+
RIGHT_SOCK_SHUTDOWN: untyped
|
128
|
+
|
129
|
+
RIGHT_FILE_RIGHT_BASE: untyped
|
130
|
+
|
131
|
+
RIGHT_DIR_RIGHT_BASE: untyped
|
132
|
+
|
133
|
+
# @rbs mode_str: String
|
134
|
+
# @rbs return: Integer
|
135
|
+
def self.to_ftype: (String mode_str) -> Integer
|
136
|
+
end
|
137
|
+
end
|
@@ -1,21 +1,78 @@
|
|
1
1
|
# Generated from lib/wardite/wasi.rb with RBS::Inline
|
2
2
|
|
3
|
-
# rbs_inline: enabled
|
4
3
|
module Wardite
|
5
4
|
class WasiSnapshotPreview1
|
6
5
|
include ValueHelper
|
7
6
|
|
8
|
-
|
7
|
+
include WasmModule
|
9
8
|
|
10
|
-
|
9
|
+
attr_accessor fd_table: Array[IO | File]
|
10
|
+
|
11
|
+
attr_accessor argv: Array[String]
|
12
|
+
|
13
|
+
# @rbs argv: Array[String]
|
14
|
+
# @rbs return: void
|
15
|
+
def initialize: (?argv: Array[String]) -> void
|
16
|
+
|
17
|
+
# @rbs store: Store
|
18
|
+
# @rbs args: Array[wasmValue]
|
19
|
+
# @rbs return: Object
|
20
|
+
def args_get: (Store store, Array[wasmValue] args) -> Object
|
21
|
+
|
22
|
+
# @rbs store: Store
|
23
|
+
# @rbs args: Array[wasmValue]
|
24
|
+
# @rbs return: Object
|
25
|
+
def args_sizes_get: (Store store, Array[wasmValue] args) -> Object
|
26
|
+
|
27
|
+
# @rbs store: Store
|
28
|
+
# @rbs args: Array[wasmValue]
|
29
|
+
# @rbs return: Object
|
30
|
+
def environ_sizes_get: (Store store, Array[wasmValue] args) -> Object
|
31
|
+
|
32
|
+
# @rbs store: Store
|
33
|
+
# @rbs args: Array[wasmValue]
|
34
|
+
# @rbs return: Object
|
35
|
+
def environ_get: (Store store, Array[wasmValue] args) -> Object
|
36
|
+
|
37
|
+
# @rbs store: Store
|
38
|
+
# @rbs args: Array[wasmValue]
|
39
|
+
# @rbs return: Object
|
40
|
+
def clock_time_get: (Store store, Array[wasmValue] args) -> Object
|
41
|
+
|
42
|
+
# @rbs store: Store
|
43
|
+
# @rbs args: Array[wasmValue]
|
44
|
+
# @rbs return: Object
|
45
|
+
def fd_prestat_get: (Store store, Array[wasmValue] args) -> Object
|
11
46
|
|
12
47
|
# @rbs store: Store
|
13
48
|
# @rbs args: Array[wasmValue]
|
14
49
|
# @rbs return: Object
|
15
50
|
def fd_write: (Store store, Array[wasmValue] args) -> Object
|
16
51
|
|
17
|
-
# @rbs
|
18
|
-
|
52
|
+
# @rbs store: Store
|
53
|
+
# @rbs args: Array[wasmValue]
|
54
|
+
# @rbs return: Object
|
55
|
+
def fd_read: (Store store, Array[wasmValue] args) -> Object
|
56
|
+
|
57
|
+
# @rbs store: Store
|
58
|
+
# @rbs args: Array[wasmValue]
|
59
|
+
# @rbs return: Object
|
60
|
+
def fd_fdstat_get: (Store store, Array[wasmValue] args) -> Object
|
61
|
+
|
62
|
+
# @rbs store: Store
|
63
|
+
# @rbs args: Array[wasmValue]
|
64
|
+
# @rbs return: Object
|
65
|
+
def fd_filestat_get: (Store store, Array[wasmValue] args) -> Object
|
66
|
+
|
67
|
+
# @rbs store: Store
|
68
|
+
# @rbs args: Array[wasmValue]
|
69
|
+
# @rbs return: Object
|
70
|
+
def proc_exit: (Store store, Array[wasmValue] args) -> Object
|
71
|
+
|
72
|
+
# @rbs store: Store
|
73
|
+
# @rbs args: Array[wasmValue]
|
74
|
+
# @rbs return: Object
|
75
|
+
def random_get: (Store store, Array[wasmValue] args) -> Object
|
19
76
|
|
20
77
|
private
|
21
78
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Generated from lib/wardite/wasm_module.rb with RBS::Inline
|
2
|
+
|
3
|
+
module Wardite
|
4
|
+
interface _WasmCallable
|
5
|
+
def call: (Store, Array[wasmValue]) -> wasmFuncReturn
|
6
|
+
|
7
|
+
def []: (Store, Array[wasmValue]) -> wasmFuncReturn
|
8
|
+
end
|
9
|
+
|
10
|
+
type wasmModuleSrc = Hash[Symbol, _WasmCallable] | WasmModule | HashModule
|
11
|
+
|
12
|
+
type wasmModule = WasmModule | HashModule
|
13
|
+
|
14
|
+
module WasmModule
|
15
|
+
# @rbs fnname: Symbol
|
16
|
+
# @rbs store: Store
|
17
|
+
# @rbs args: Array[wasmValue]
|
18
|
+
# @rbs return: wasmFuncReturn
|
19
|
+
def invoke: (Symbol fnname, Store store, *untyped args) -> wasmFuncReturn
|
20
|
+
|
21
|
+
# @rbs fnname: Symbol
|
22
|
+
# @rbs return: _WasmCallable
|
23
|
+
def callable: (Symbol fnname) -> _WasmCallable
|
24
|
+
end
|
25
|
+
|
26
|
+
class HashModule
|
27
|
+
attr_accessor hash: Hash[Symbol, _WasmCallable]
|
28
|
+
|
29
|
+
# @rbs ha: Hash[Symbol, _WasmCallable]
|
30
|
+
def initialize: (untyped hash) -> untyped
|
31
|
+
|
32
|
+
# @rbs fnname: Symbol
|
33
|
+
# @rbs store: Store
|
34
|
+
# @rbs args: Array[wasmValue]
|
35
|
+
# @rbs return: wasmFuncReturn
|
36
|
+
def invoke: (Symbol fnname, Store store, *untyped args) -> wasmFuncReturn
|
37
|
+
|
38
|
+
# @rbs fnname: Symbol
|
39
|
+
# @rbs return: _WasmCallable
|
40
|
+
def callable: (Symbol fnname) -> _WasmCallable
|
41
|
+
end
|
42
|
+
end
|
data/sig/generated/wardite.rbs
CHANGED
@@ -20,11 +20,13 @@ module Wardite
|
|
20
20
|
|
21
21
|
attr_accessor exports: Exports
|
22
22
|
|
23
|
-
attr_reader import_object: Hash[Symbol,
|
23
|
+
attr_reader import_object: Hash[Symbol, wasmModule]
|
24
24
|
|
25
|
-
|
25
|
+
attr_accessor wasi: WasiSnapshotPreview1?
|
26
|
+
|
27
|
+
# @rbs import_object: Hash[Symbol, wasmModuleSrc]
|
26
28
|
# @rbs &blk: (Instance) -> void
|
27
|
-
def initialize: (Hash[Symbol,
|
29
|
+
def initialize: (Hash[Symbol, wasmModuleSrc] import_object) { (Instance) -> void } -> untyped
|
28
30
|
|
29
31
|
# @rbs return: void
|
30
32
|
def check_data_count: () -> void
|
@@ -115,22 +117,12 @@ module Wardite
|
|
115
117
|
# @rbs return: void
|
116
118
|
def eval_insn: (Frame frame, Op insn) -> void
|
117
119
|
|
118
|
-
# @rbs ops: Array[Op]
|
119
|
-
# @rbs pc_start: Integer
|
120
|
-
# @rbs return: Integer
|
121
|
-
def fetch_ops_while_else_or_end: (Array[Op] ops, Integer pc_start) -> Integer
|
122
|
-
|
123
120
|
# @rbs labels: Array[Label]
|
124
121
|
# @rbs stack: Array[wasmValue]
|
125
122
|
# @rbs level: Integer
|
126
123
|
# @rbs return: Integer
|
127
124
|
def do_branch: (Array[Label] labels, Array[wasmValue] stack, Integer level) -> Integer
|
128
125
|
|
129
|
-
# @rbs ops: Array[Op]
|
130
|
-
# @rbs pc_start: Integer
|
131
|
-
# @rbs return: Integer
|
132
|
-
def fetch_ops_while_end: (Array[Op] ops, Integer pc_start) -> Integer
|
133
|
-
|
134
126
|
# unwind the stack and put return value if exists
|
135
127
|
# @rbs sp: Integer
|
136
128
|
# @rbs arity: Integer
|
@@ -209,6 +201,8 @@ module Wardite
|
|
209
201
|
class Store
|
210
202
|
attr_accessor funcs: Array[WasmFunction | ExternalFunction]
|
211
203
|
|
204
|
+
attr_accessor modules: Hash[Symbol, wasmModule]
|
205
|
+
|
212
206
|
attr_accessor memories: Array[Memory]
|
213
207
|
|
214
208
|
attr_accessor globals: Array[Global]
|
@@ -335,7 +329,10 @@ module Wardite
|
|
335
329
|
end
|
336
330
|
|
337
331
|
# TODO: common interface btw. WasmFunction and ExternalFunction?
|
332
|
+
# may be _WasmCallable?
|
338
333
|
class WasmFunction
|
334
|
+
include ValueHelper
|
335
|
+
|
339
336
|
attr_accessor callsig: Array[Symbol]
|
340
337
|
|
341
338
|
attr_accessor retsig: Array[Symbol]
|
@@ -344,6 +341,8 @@ module Wardite
|
|
344
341
|
|
345
342
|
attr_accessor findex: Integer
|
346
343
|
|
344
|
+
attr_accessor default_locals: Array[wasmValue]
|
345
|
+
|
347
346
|
# @rbs callsig: Array[Symbol]
|
348
347
|
# @rbs retsig: Array[Symbol]
|
349
348
|
# @rbs code_body: CodeSection::CodeBody
|
@@ -359,6 +358,9 @@ module Wardite
|
|
359
358
|
# @rbs return: Array[Integer]
|
360
359
|
def locals_count: () -> Array[Integer]
|
361
360
|
|
361
|
+
# @rbs return: Array[wasmValue]
|
362
|
+
def construct_default_locals: () -> Array[wasmValue]
|
363
|
+
|
362
364
|
# @rbs override_type: Type?
|
363
365
|
# @rbs return: WasmFunction
|
364
366
|
def clone: (?override_type: Type?) -> WasmFunction
|
@@ -366,20 +368,23 @@ module Wardite
|
|
366
368
|
|
367
369
|
type wasmFuncReturn = Object | nil
|
368
370
|
|
369
|
-
type wasmCallable = ^(Store, Array[wasmValue]) -> wasmFuncReturn
|
370
|
-
|
371
371
|
class ExternalFunction
|
372
|
+
attr_accessor target_module: wasmModule
|
373
|
+
|
374
|
+
attr_accessor name: Symbol
|
375
|
+
|
372
376
|
attr_accessor callsig: Array[Symbol]
|
373
377
|
|
374
378
|
attr_accessor retsig: Array[Symbol]
|
375
379
|
|
376
|
-
attr_accessor callable: wasmCallable
|
377
|
-
|
378
380
|
# @rbs callsig: Array[Symbol]
|
379
381
|
# @rbs retsig: Array[Symbol]
|
380
|
-
# @rbs callable:
|
382
|
+
# @rbs callable: _WasmCallable
|
381
383
|
# @rbs return: void
|
382
|
-
def initialize: (Array[Symbol] callsig, Array[Symbol] retsig
|
384
|
+
def initialize: (untyped target_module, untyped name, Array[Symbol] callsig, Array[Symbol] retsig) -> void
|
385
|
+
|
386
|
+
# @rbs return: _WasmCallable
|
387
|
+
def callable: () -> _WasmCallable
|
383
388
|
|
384
389
|
# @rbs override_type: Type?
|
385
390
|
# @rbs return: ExternalFunction
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wardite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uchio Kondo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A pure-ruby webassembly runtime
|
14
14
|
email:
|
@@ -22,7 +22,6 @@ files:
|
|
22
22
|
- Rakefile
|
23
23
|
- Steepfile
|
24
24
|
- examples/.gitignore
|
25
|
-
- examples/add.wasm
|
26
25
|
- examples/add.wat
|
27
26
|
- examples/break.wat
|
28
27
|
- examples/call.wat
|
@@ -31,6 +30,7 @@ files:
|
|
31
30
|
- examples/fib.wat
|
32
31
|
- examples/fib2.wat
|
33
32
|
- examples/global.wat
|
33
|
+
- examples/grayscale.rb
|
34
34
|
- examples/helloworld.wat
|
35
35
|
- examples/i32_const.wat
|
36
36
|
- examples/i32_store.wat
|
@@ -53,13 +53,25 @@ files:
|
|
53
53
|
- lib/wardite/instruction.rb
|
54
54
|
- lib/wardite/leb128.rb
|
55
55
|
- lib/wardite/load.rb
|
56
|
+
- lib/wardite/revisitor.rb
|
56
57
|
- lib/wardite/value.rb
|
57
58
|
- lib/wardite/version.rb
|
58
59
|
- lib/wardite/wasi.rb
|
60
|
+
- lib/wardite/wasi/consts.rb
|
61
|
+
- lib/wardite/wasm_module.rb
|
62
|
+
- misc/proposals/rubykaigi2025.md
|
63
|
+
- misc/slides/fib.c
|
64
|
+
- misc/slides/fib.html
|
65
|
+
- misc/slides/image-1.png
|
66
|
+
- misc/slides/image-2.png
|
67
|
+
- misc/slides/image.png
|
68
|
+
- misc/slides/tokyo12.html
|
69
|
+
- misc/slides/tokyo12.md
|
59
70
|
- scripts/gen_alu.rb
|
60
71
|
- scripts/gen_conv.rb
|
61
72
|
- scripts/templates/alu_module.rb.tmpl
|
62
73
|
- scripts/templates/conv_module.rb.tmpl
|
74
|
+
- sig/fcntl.rbs
|
63
75
|
- sig/generated/wardite.rbs
|
64
76
|
- sig/generated/wardite/alu_f32.generated.rbs
|
65
77
|
- sig/generated/wardite/alu_f64.generated.rbs
|
@@ -71,9 +83,12 @@ files:
|
|
71
83
|
- sig/generated/wardite/instruction.rbs
|
72
84
|
- sig/generated/wardite/leb128.rbs
|
73
85
|
- sig/generated/wardite/load.rbs
|
86
|
+
- sig/generated/wardite/revisitor.rbs
|
74
87
|
- sig/generated/wardite/value.rbs
|
75
88
|
- sig/generated/wardite/version.rbs
|
76
89
|
- sig/generated/wardite/wasi.rbs
|
90
|
+
- sig/generated/wardite/wasi/consts.rbs
|
91
|
+
- sig/generated/wardite/wasm_module.rbs
|
77
92
|
- sig/wardite.rbs
|
78
93
|
homepage: https://github.com/udzura/wardite
|
79
94
|
licenses: []
|
data/examples/add.wasm
DELETED
Binary file
|