wardite 0.2.2 → 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.
@@ -26,8 +26,17 @@ module Wardite
26
26
  def initialize: () -> void
27
27
  end
28
28
 
29
+ class TableSection < Section
30
+ attr_accessor table_types: Array[Symbol]
31
+
32
+ attr_accessor table_limits: Array[[ Integer, Integer? ]]
33
+
34
+ # @rbs return: void
35
+ def initialize: () -> void
36
+ end
37
+
29
38
  class MemorySection < Section
30
- attr_accessor limits: Array[[ Integer, Integer | nil ]]
39
+ attr_accessor limits: Array[[ Integer, Integer? ]]
31
40
 
32
41
  # @rbs return: void
33
42
  def initialize: () -> void
@@ -42,7 +51,7 @@ module Wardite
42
51
  # TODO: unused in wasm 1.0 spec?
43
52
  attr_accessor shared: bool
44
53
 
45
- attr_accessor value: I32 | I64 | F32 | F64
54
+ attr_accessor value: wasmValue
46
55
 
47
56
  # @rbs &blk: (Global) -> void
48
57
  # @rbs return: void
@@ -55,6 +64,24 @@ module Wardite
55
64
  def initialize: () -> void
56
65
  end
57
66
 
67
+ class StartSection < Section
68
+ attr_accessor func_index: Integer
69
+
70
+ # @rbs return: void
71
+ def initialize: () -> void
72
+ end
73
+
74
+ class ElemSection < Section
75
+ attr_accessor table_indices: Array[Integer]
76
+
77
+ attr_accessor table_offsets: Array[Integer]
78
+
79
+ attr_accessor element_indices: Array[Array[Integer]]
80
+
81
+ # @rbs return: void
82
+ def initialize: () -> void
83
+ end
84
+
58
85
  class CodeSection < Section
59
86
  class CodeBody
60
87
  attr_accessor locals_count: Array[Integer]
@@ -134,11 +161,13 @@ module Wardite
134
161
 
135
162
  extend Wardite::ValueHelper
136
163
 
164
+ self.@buf: File | StringIO
165
+
137
166
  # @rbs buf: File|StringIO
138
- # @rbs import_object: Hash[Symbol, Hash[Symbol, Proc]]
167
+ # @rbs import_object: Hash[Symbol, Hash[Symbol, wasmCallable]]
139
168
  # @rbs enable_wasi: boolish
140
169
  # @rbs return: Instance
141
- def self.load_from_buffer: (File | StringIO buf, ?import_object: Hash[Symbol, Hash[Symbol, Proc]], ?enable_wasi: boolish) -> Instance
170
+ def self.load_from_buffer: (File | StringIO buf, ?import_object: Hash[Symbol, Hash[Symbol, wasmCallable]], ?enable_wasi: boolish) -> Instance
142
171
 
143
172
  # @rbs return: Integer
144
173
  def self.preamble: () -> Integer
@@ -155,12 +184,21 @@ module Wardite
155
184
  # @rbs return: MemorySection
156
185
  def self.memory_section: () -> MemorySection
157
186
 
187
+ # @rbs return: StartSection
188
+ def self.start_section: () -> StartSection
189
+
190
+ # @rbs return: ElemSection
191
+ def self.elem_section: () -> ElemSection
192
+
158
193
  # @rbs return: GlobalSection
159
194
  def self.global_section: () -> GlobalSection
160
195
 
161
196
  # @rbs return: FunctionSection
162
197
  def self.function_section: () -> FunctionSection
163
198
 
199
+ # @rbs return: TableSection
200
+ def self.table_section: () -> TableSection
201
+
164
202
  # @rbs return: CodeSection
165
203
  def self.code_section: () -> CodeSection
166
204
 
@@ -180,8 +218,8 @@ module Wardite
180
218
  def self.decode_expr: (Array[Op] ops) -> Integer
181
219
 
182
220
  # @rbs ops: Array[Op]
183
- # @rbs return: I32|I64|F32|F64
184
- def self.decode_global_expr: (Array[Op] ops) -> (I32 | I64 | F32 | F64)
221
+ # @rbs return: wasmValue
222
+ def self.decode_global_expr: (Array[Op] ops) -> wasmValue
185
223
 
186
224
  # @rbs return: ExportSection
187
225
  def self.export_section: () -> ExportSection
@@ -1,6 +1,8 @@
1
1
  # Generated from lib/wardite/value.rb with RBS::Inline
2
2
 
3
3
  module Wardite
4
+ type wasmValue = I32 | I64 | F32 | F64
5
+
4
6
  module ValueHelper
5
7
  # @rbs value: Integer
6
8
  # @rbs return: I32
@@ -59,44 +61,44 @@ module Wardite
59
61
  def packed: (?size: Integer | nil) -> String
60
62
 
61
63
  # @rbs to: Symbol
62
- # @rbs return: I32|I64|F32|F64
63
- def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
64
+ # @rbs return: wasmValue
65
+ def wrap: (to: Symbol) -> wasmValue
64
66
 
65
67
  # @rbs to: Symbol
66
- # @rbs return: I32|I64|F32|F64
67
- def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
68
+ # @rbs return: wasmValue
69
+ def extend_s: (to: Symbol) -> wasmValue
68
70
 
69
71
  # @rbs to: Symbol
70
- # @rbs return: I32|I64|F32|F64
71
- def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
72
+ # @rbs return: wasmValue
73
+ def extend_u: (to: Symbol) -> wasmValue
72
74
 
73
75
  # @rbs to: Symbol
74
- # @rbs return: I32|I64|F32|F64
75
- def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
76
+ # @rbs return: wasmValue
77
+ def trunc_s: (to: Symbol) -> wasmValue
76
78
 
77
79
  # @rbs to: Symbol
78
- # @rbs return: I32|I64|F32|F64
79
- def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
80
+ # @rbs return: wasmValue
81
+ def trunc_u: (to: Symbol) -> wasmValue
80
82
 
81
83
  # @rbs to: Symbol
82
- # @rbs return: I32|I64|F32|F64
83
- def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
84
+ # @rbs return: wasmValue
85
+ def convert_s: (to: Symbol) -> wasmValue
84
86
 
85
87
  # @rbs to: Symbol
86
- # @rbs return: I32|I64|F32|F64
87
- def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
88
+ # @rbs return: wasmValue
89
+ def convert_u: (to: Symbol) -> wasmValue
88
90
 
89
91
  # @rbs to: Symbol
90
- # @rbs return: I32|I64|F32|F64
91
- def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
92
+ # @rbs return: wasmValue
93
+ def demote: (to: Symbol) -> wasmValue
92
94
 
93
95
  # @rbs to: Symbol
94
- # @rbs return: I32|I64|F32|F64
95
- def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
96
+ # @rbs return: wasmValue
97
+ def promote: (to: Symbol) -> wasmValue
96
98
 
97
99
  # @rbs to: Symbol
98
- # @rbs return: I32|I64|F32|F64
99
- def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
100
+ # @rbs return: wasmValue
101
+ def reinterpret: (to: Symbol) -> wasmValue
100
102
 
101
103
  # I32#inspect shows signed value for convinience
102
104
  def inspect: () -> untyped
@@ -127,44 +129,44 @@ module Wardite
127
129
  def packed: (?size: Integer | nil) -> String
128
130
 
129
131
  # @rbs to: Symbol
130
- # @rbs return: I32|I64|F32|F64
131
- def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
132
+ # @rbs return: wasmValue
133
+ def wrap: (to: Symbol) -> wasmValue
132
134
 
133
135
  # @rbs to: Symbol
134
- # @rbs return: I32|I64|F32|F64
135
- def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
136
+ # @rbs return: wasmValue
137
+ def extend_s: (to: Symbol) -> wasmValue
136
138
 
137
139
  # @rbs to: Symbol
138
- # @rbs return: I32|I64|F32|F64
139
- def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
140
+ # @rbs return: wasmValue
141
+ def extend_u: (to: Symbol) -> wasmValue
140
142
 
141
143
  # @rbs to: Symbol
142
- # @rbs return: I32|I64|F32|F64
143
- def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
144
+ # @rbs return: wasmValue
145
+ def trunc_s: (to: Symbol) -> wasmValue
144
146
 
145
147
  # @rbs to: Symbol
146
- # @rbs return: I32|I64|F32|F64
147
- def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
148
+ # @rbs return: wasmValue
149
+ def trunc_u: (to: Symbol) -> wasmValue
148
150
 
149
151
  # @rbs to: Symbol
150
- # @rbs return: I32|I64|F32|F64
151
- def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
152
+ # @rbs return: wasmValue
153
+ def convert_s: (to: Symbol) -> wasmValue
152
154
 
153
155
  # @rbs to: Symbol
154
- # @rbs return: I32|I64|F32|F64
155
- def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
156
+ # @rbs return: wasmValue
157
+ def convert_u: (to: Symbol) -> wasmValue
156
158
 
157
159
  # @rbs to: Symbol
158
- # @rbs return: I32|I64|F32|F64
159
- def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
160
+ # @rbs return: wasmValue
161
+ def demote: (to: Symbol) -> wasmValue
160
162
 
161
163
  # @rbs to: Symbol
162
- # @rbs return: I32|I64|F32|F64
163
- def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
164
+ # @rbs return: wasmValue
165
+ def promote: (to: Symbol) -> wasmValue
164
166
 
165
167
  # @rbs to: Symbol
166
- # @rbs return: I32|I64|F32|F64
167
- def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
168
+ # @rbs return: wasmValue
169
+ def reinterpret: (to: Symbol) -> wasmValue
168
170
 
169
171
  # I64#inspect shows signed value
170
172
  def inspect: () -> untyped
@@ -190,47 +192,47 @@ module Wardite
190
192
  def packed: (?size: Integer | nil) -> String
191
193
 
192
194
  # @rbs to: Symbol
193
- # @rbs return: I32|I64|F32|F64
194
- def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
195
+ # @rbs return: wasmValue
196
+ def wrap: (to: Symbol) -> wasmValue
195
197
 
196
198
  # @rbs to: Symbol
197
- # @rbs return: I32|I64|F32|F64
198
- def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
199
+ # @rbs return: wasmValue
200
+ def extend_s: (to: Symbol) -> wasmValue
199
201
 
200
202
  # @rbs to: Symbol
201
- # @rbs return: I32|I64|F32|F64
202
- def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
203
+ # @rbs return: wasmValue
204
+ def extend_u: (to: Symbol) -> wasmValue
203
205
 
204
206
  # @todo need more testcase...
205
207
  # @see https://webassembly.github.io/spec/core/exec/numerics.html#xref-exec-numerics-op-trunc-s-mathrm-trunc-mathsf-s-m-n-z
206
208
  # @rbs to: Symbol
207
- # @rbs return: I32|I64|F32|F64
208
- def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
209
+ # @rbs return: wasmValue
210
+ def trunc_s: (to: Symbol) -> wasmValue
209
211
 
210
212
  # @see https://webassembly.github.io/spec/core/exec/numerics.html#xref-exec-numerics-op-trunc-u-mathrm-trunc-mathsf-u-m-n-z
211
213
  # @rbs to: Symbol
212
- # @rbs return: I32|I64|F32|F64
213
- def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
214
+ # @rbs return: wasmValue
215
+ def trunc_u: (to: Symbol) -> wasmValue
214
216
 
215
217
  # @rbs to: Symbol
216
- # @rbs return: I32|I64|F32|F64
217
- def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
218
+ # @rbs return: wasmValue
219
+ def convert_s: (to: Symbol) -> wasmValue
218
220
 
219
221
  # @rbs to: Symbol
220
- # @rbs return: I32|I64|F32|F64
221
- def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
222
+ # @rbs return: wasmValue
223
+ def convert_u: (to: Symbol) -> wasmValue
222
224
 
223
225
  # @rbs to: Symbol
224
- # @rbs return: I32|I64|F32|F64
225
- def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
226
+ # @rbs return: wasmValue
227
+ def demote: (to: Symbol) -> wasmValue
226
228
 
227
229
  # @rbs to: Symbol
228
- # @rbs return: I32|I64|F32|F64
229
- def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
230
+ # @rbs return: wasmValue
231
+ def promote: (to: Symbol) -> wasmValue
230
232
 
231
233
  # @rbs to: Symbol
232
- # @rbs return: I32|I64|F32|F64
233
- def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
234
+ # @rbs return: wasmValue
235
+ def reinterpret: (to: Symbol) -> wasmValue
234
236
 
235
237
  def inspect: () -> untyped
236
238
  end
@@ -255,47 +257,47 @@ module Wardite
255
257
  def packed: (?size: Integer | nil) -> String
256
258
 
257
259
  # @rbs to: Symbol
258
- # @rbs return: I32|I64|F32|F64
259
- def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
260
+ # @rbs return: wasmValue
261
+ def wrap: (to: Symbol) -> wasmValue
260
262
 
261
263
  # @rbs to: Symbol
262
- # @rbs return: I32|I64|F32|F64
263
- def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
264
+ # @rbs return: wasmValue
265
+ def extend_s: (to: Symbol) -> wasmValue
264
266
 
265
267
  # @rbs to: Symbol
266
- # @rbs return: I32|I64|F32|F64
267
- def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
268
+ # @rbs return: wasmValue
269
+ def extend_u: (to: Symbol) -> wasmValue
268
270
 
269
271
  # @see the same as F32
270
272
  # @rbs to: Symbol
271
- # @rbs return: I32|I64|F32|F64
272
- def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
273
+ # @rbs return: wasmValue
274
+ def trunc_s: (to: Symbol) -> wasmValue
273
275
 
274
276
  # @see the same as F32
275
277
  # @rbs to: Symbol
276
- # @rbs return: I32|I64|F32|F64
277
- def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
278
+ # @rbs return: wasmValue
279
+ def trunc_u: (to: Symbol) -> wasmValue
278
280
 
279
281
  # @rbs to: Symbol
280
- # @rbs return: I32|I64|F32|F64
281
- def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
282
+ # @rbs return: wasmValue
283
+ def convert_s: (to: Symbol) -> wasmValue
282
284
 
283
285
  # @rbs to: Symbol
284
- # @rbs return: I32|I64|F32|F64
285
- def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
286
+ # @rbs return: wasmValue
287
+ def convert_u: (to: Symbol) -> wasmValue
286
288
 
287
289
  # @todo no loss of digits...
288
290
  # @rbs to: Symbol
289
- # @rbs return: I32|I64|F32|F64
290
- def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
291
+ # @rbs return: wasmValue
292
+ def demote: (to: Symbol) -> wasmValue
291
293
 
292
294
  # @rbs to: Symbol
293
- # @rbs return: I32|I64|F32|F64
294
- def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
295
+ # @rbs return: wasmValue
296
+ def promote: (to: Symbol) -> wasmValue
295
297
 
296
298
  # @rbs to: Symbol
297
- # @rbs return: I32|I64|F32|F64
298
- def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
299
+ # @rbs return: wasmValue
300
+ def reinterpret: (to: Symbol) -> wasmValue
299
301
 
300
302
  def inspect: () -> untyped
301
303
  end
@@ -10,12 +10,12 @@ module Wardite
10
10
  def initialize: () -> untyped
11
11
 
12
12
  # @rbs store: Store
13
- # @rbs args: Array[I32|I64|F32|F64]
13
+ # @rbs args: Array[wasmValue]
14
14
  # @rbs return: Object
15
- def fd_write: (Store store, Array[I32 | I64 | F32 | F64] args) -> Object
15
+ def fd_write: (Store store, Array[wasmValue] args) -> Object
16
16
 
17
- # @rbs return: Hash[Symbol, Proc]
18
- def to_module: () -> Hash[Symbol, Proc]
17
+ # @rbs return: Hash[Symbol, wasmCallable]
18
+ def to_module: () -> Hash[Symbol, wasmCallable]
19
19
 
20
20
  private
21
21
 
@@ -14,15 +14,17 @@ module Wardite
14
14
 
15
15
  attr_accessor runtime: Runtime
16
16
 
17
+ attr_accessor types: Array[Type]
18
+
17
19
  attr_accessor store: Store
18
20
 
19
21
  attr_accessor exports: Exports
20
22
 
21
- attr_reader import_object: Hash[Symbol, Hash[Symbol, Proc]]
23
+ attr_reader import_object: Hash[Symbol, Hash[Symbol, wasmCallable]]
22
24
 
23
- # @rbs import_object: Hash[Symbol, Hash[Symbol, Proc]]
25
+ # @rbs import_object: Hash[Symbol, Hash[Symbol, wasmCallable]]
24
26
  # @rbs &blk: (Instance) -> void
25
- def initialize: (Hash[Symbol, Hash[Symbol, Proc]] import_object) { (Instance) -> void } -> untyped
27
+ def initialize: (Hash[Symbol, Hash[Symbol, wasmCallable]] import_object) { (Instance) -> void } -> untyped
26
28
 
27
29
  # @rbs return: ImportSection
28
30
  def import_section: () -> ImportSection
@@ -33,6 +35,9 @@ module Wardite
33
35
  # @rbs return: MemorySection|nil
34
36
  def memory_section: () -> (MemorySection | nil)
35
37
 
38
+ # @rbs return: StartSection|nil
39
+ def start_section: () -> (StartSection | nil)
40
+
36
41
  # @rbs return: GlobalSection|nil
37
42
  def global_section: () -> (GlobalSection | nil)
38
43
 
@@ -42,6 +47,12 @@ module Wardite
42
47
  # @rbs return: FunctionSection|nil
43
48
  def function_section: () -> (FunctionSection | nil)
44
49
 
50
+ # @rbs return: TableSection?
51
+ def table_section: () -> TableSection?
52
+
53
+ # @rbs return: ElemSection?
54
+ def elem_section: () -> ElemSection?
55
+
45
56
  # @rbs return: CodeSection|nil
46
57
  def code_section: () -> (CodeSection | nil)
47
58
 
@@ -53,7 +64,7 @@ module Wardite
53
64
  include ValueHelper
54
65
 
55
66
  # TODO: add types of class that the stack accomodates
56
- attr_accessor stack: Array[I32 | I64 | F32 | F64]
67
+ attr_accessor stack: Array[wasmValue]
57
68
 
58
69
  attr_accessor call_stack: Array[Frame]
59
70
 
@@ -62,6 +73,9 @@ module Wardite
62
73
  # @rbs inst: Instance
63
74
  def initialize: (Instance inst) -> untyped
64
75
 
76
+ # @rbs return: void
77
+ def invoke_start_section: () -> void
78
+
65
79
  # @rbs name: String|Symbol
66
80
  # @rbs return: bool
67
81
  def callable?: (String | Symbol name) -> bool
@@ -71,6 +85,10 @@ module Wardite
71
85
  # @rbs return: Object|nil
72
86
  def call: (String | Symbol name, Array[Object] args) -> (Object | nil)
73
87
 
88
+ # @rbs idx: Integer
89
+ # @rbs return: void
90
+ def call_by_index: (Integer idx) -> void
91
+
74
92
  # @rbs wasm_function: WasmFunction
75
93
  # @rbs return: void
76
94
  def push_frame: (WasmFunction wasm_function) -> void
@@ -80,8 +98,8 @@ module Wardite
80
98
  def invoke_internal: (WasmFunction wasm_function) -> (Object | nil)
81
99
 
82
100
  # @rbs external_function: ExternalFunction
83
- # @rbs return: I32|I64|F32|F64|nil
84
- def invoke_external: (ExternalFunction external_function) -> (I32 | I64 | F32 | F64 | nil)
101
+ # @rbs return: wasmValue|nil
102
+ def invoke_external: (ExternalFunction external_function) -> (wasmValue | nil)
85
103
 
86
104
  # @rbs return: void
87
105
  def execute!: () -> void
@@ -91,6 +109,17 @@ module Wardite
91
109
  # @rbs return: void
92
110
  def eval_insn: (Frame frame, Op insn) -> void
93
111
 
112
+ # @rbs ops: Array[Op]
113
+ # @rbs pc_start: Integer
114
+ # @rbs return: Integer
115
+ def fetch_ops_while_else_or_end: (Array[Op] ops, Integer pc_start) -> Integer
116
+
117
+ # @rbs labels: Array[Label]
118
+ # @rbs stack: Array[wasmValue]
119
+ # @rbs level: Integer
120
+ # @rbs return: Integer
121
+ def do_branch: (Array[Label] labels, Array[wasmValue] stack, Integer level) -> Integer
122
+
94
123
  # @rbs ops: Array[Op]
95
124
  # @rbs pc_start: Integer
96
125
  # @rbs return: Integer
@@ -103,8 +132,8 @@ module Wardite
103
132
  def stack_unwind: (Integer sp, Integer arity) -> void
104
133
 
105
134
  # @rbs finish: Integer
106
- # @rbs return: Array[I32|I64|F32|F64]
107
- def drained_stack: (Integer finish) -> Array[I32 | I64 | F32 | F64]
135
+ # @rbs return: Array[wasmValue]
136
+ def drained_stack: (Integer finish) -> Array[wasmValue]
108
137
 
109
138
  # @rbs name: Symbol
110
139
  # @rbs args: Array[Object]
@@ -116,6 +145,17 @@ module Wardite
116
145
  def respond_to?: (String | Symbol name) -> bool
117
146
  end
118
147
 
148
+ class Type
149
+ attr_accessor callsig: Array[Symbol]
150
+
151
+ attr_accessor retsig: Array[Symbol]
152
+
153
+ # @rbs callsig: Array[Symbol]
154
+ # @rbs retsig: Array[Symbol]
155
+ # @rbs returb: void
156
+ def initialize: (Array[Symbol] callsig, Array[Symbol] retsig) -> untyped
157
+ end
158
+
119
159
  class Frame
120
160
  attr_accessor pc: Integer
121
161
 
@@ -127,15 +167,15 @@ module Wardite
127
167
 
128
168
  attr_accessor labels: Array[Label]
129
169
 
130
- attr_accessor locals: Array[I32 | I64 | F32 | F64]
170
+ attr_accessor locals: Array[wasmValue]
131
171
 
132
172
  # @rbs pc: Integer
133
173
  # @rbs sp: Integer
134
174
  # @rbs body: Array[Op]
135
175
  # @rbs arity: Integer
136
- # @rbs locals: Array[Object]
176
+ # @rbs locals: Array[wasmValue]
137
177
  # @rbs returb: void
138
- def initialize: (Integer pc, Integer sp, Array[Op] body, Integer arity, Array[Object] locals) -> untyped
178
+ def initialize: (Integer pc, Integer sp, Array[Op] body, Integer arity, Array[wasmValue] locals) -> untyped
139
179
  end
140
180
 
141
181
  class Label
@@ -147,12 +187,15 @@ module Wardite
147
187
 
148
188
  attr_accessor arity: Integer
149
189
 
190
+ attr_accessor start: Integer | nil
191
+
150
192
  # @rbs kind: (:if|:loop|:block)
151
193
  # @rbs pc: Integer
152
194
  # @rbs sp: Integer
153
195
  # @rbs arity: Integer
154
- # @rbs returb: void
155
- def initialize: (:if | :loop | :block kind, Integer pc, Integer sp, Integer arity) -> untyped
196
+ # @rbs start: Integer|nil
197
+ # @rbs return: void
198
+ def initialize: (:if | :loop | :block kind, Integer pc, Integer sp, Integer arity, ?Integer | nil start) -> void
156
199
  end
157
200
 
158
201
  class Store
@@ -162,6 +205,10 @@ module Wardite
162
205
 
163
206
  attr_accessor globals: Array[Global]
164
207
 
208
+ attr_accessor tables: Array[Table]
209
+
210
+ attr_accessor elements: Array[[ Symbol, Integer, Array[Integer] ]]
211
+
165
212
  # @rbs inst: Instance
166
213
  # @rbs return: void
167
214
  def initialize: (Instance inst) -> void
@@ -189,6 +236,27 @@ module Wardite
189
236
  def inspect: () -> untyped
190
237
  end
191
238
 
239
+ class Table
240
+ attr_accessor type: Symbol
241
+
242
+ attr_accessor current: Integer
243
+
244
+ attr_accessor max: Integer | nil
245
+
246
+ attr_accessor refs: Array[WasmFunction | ExternalFunction | nil]
247
+
248
+ # @rbs type: Symbol
249
+ # @rbs init: Integer
250
+ # @rbs max: Integer|nil
251
+ # @rbs return: void
252
+ def initialize: (Symbol type, Integer init, Integer | nil max) -> void
253
+
254
+ # @rbs idx: Integer
255
+ # @rbs elem: WasmFunction|ExternalFunction|nil
256
+ # @rbs return: void
257
+ def set: (Integer idx, WasmFunction | ExternalFunction | nil elem) -> void
258
+ end
259
+
192
260
  class Global
193
261
  attr_accessor type: Symbol
194
262
 
@@ -197,7 +265,7 @@ module Wardite
197
265
  # TODO: unused in wasm 1.0 spec?
198
266
  attr_accessor shared: bool
199
267
 
200
- attr_accessor value: I32 | I64 | F32 | F64
268
+ attr_accessor value: wasmValue
201
269
 
202
270
  # @rbs &blk: (Global) -> void
203
271
  # @rbs return: void
@@ -274,20 +342,32 @@ module Wardite
274
342
 
275
343
  # @rbs return: Array[Integer]
276
344
  def locals_count: () -> Array[Integer]
345
+
346
+ # @rbs override_type: Type?
347
+ # @rbs return: WasmFunction
348
+ def clone: (?override_type: Type?) -> WasmFunction
277
349
  end
278
350
 
351
+ type wasmFuncReturn = Object | nil
352
+
353
+ type wasmCallable = ^(Store, Array[wasmValue]) -> wasmFuncReturn
354
+
279
355
  class ExternalFunction
280
356
  attr_accessor callsig: Array[Symbol]
281
357
 
282
358
  attr_accessor retsig: Array[Symbol]
283
359
 
284
- attr_accessor callable: Proc
360
+ attr_accessor callable: wasmCallable
285
361
 
286
362
  # @rbs callsig: Array[Symbol]
287
363
  # @rbs retsig: Array[Symbol]
288
- # @rbs callable: Proc
364
+ # @rbs callable: wasmCallable
289
365
  # @rbs return: void
290
- def initialize: (Array[Symbol] callsig, Array[Symbol] retsig, Proc callable) -> void
366
+ def initialize: (Array[Symbol] callsig, Array[Symbol] retsig, wasmCallable callable) -> void
367
+
368
+ # @rbs override_type: Type?
369
+ # @rbs return: ExternalFunction
370
+ def clone: (?override_type: Type?) -> ExternalFunction
291
371
  end
292
372
 
293
373
  class GenericError < StandardError
data/sig/wardite.rbs CHANGED
@@ -1,6 +1,4 @@
1
1
  module Wardite
2
2
  # definitions that cannot cover by rbs-inline
3
- module BinaryLoader
4
- self.@buf: File|StringIO
5
- end
3
+ # but nothing for now
6
4
  end
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.2.2
4
+ version: 0.3.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: 2024-11-08 00:00:00.000000000 Z
11
+ date: 2024-11-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A pure-ruby webassembly runtime
14
14
  email:
@@ -24,7 +24,9 @@ files:
24
24
  - examples/.gitignore
25
25
  - examples/add.wasm
26
26
  - examples/add.wat
27
+ - examples/break.wat
27
28
  - examples/call.wat
29
+ - examples/call_indirect.wat
28
30
  - examples/consts.wat
29
31
  - examples/fib.wat
30
32
  - examples/fib2.wat
@@ -33,7 +35,9 @@ files:
33
35
  - examples/i32_const.wat
34
36
  - examples/i32_store.wat
35
37
  - examples/local_set.wat
38
+ - examples/loop.wat
36
39
  - examples/memory.wat
40
+ - examples/start.wat
37
41
  - exe/wardite
38
42
  - lib/wardite.rb
39
43
  - lib/wardite/alu_f32.generated.rb