wardite 0.2.2 → 0.4.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.
@@ -14,15 +14,20 @@ 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
28
+
29
+ # @rbs return: void
30
+ def check_data_count: () -> void
26
31
 
27
32
  # @rbs return: ImportSection
28
33
  def import_section: () -> ImportSection
@@ -33,15 +38,27 @@ module Wardite
33
38
  # @rbs return: MemorySection|nil
34
39
  def memory_section: () -> (MemorySection | nil)
35
40
 
41
+ # @rbs return: StartSection|nil
42
+ def start_section: () -> (StartSection | nil)
43
+
36
44
  # @rbs return: GlobalSection|nil
37
45
  def global_section: () -> (GlobalSection | nil)
38
46
 
39
47
  # @rbs return: DataSection|nil
40
48
  def data_section: () -> (DataSection | nil)
41
49
 
50
+ # @rbs return: DataCountSection|nil
51
+ def data_count_section: () -> (DataCountSection | nil)
52
+
42
53
  # @rbs return: FunctionSection|nil
43
54
  def function_section: () -> (FunctionSection | nil)
44
55
 
56
+ # @rbs return: TableSection?
57
+ def table_section: () -> TableSection?
58
+
59
+ # @rbs return: ElemSection?
60
+ def elem_section: () -> ElemSection?
61
+
45
62
  # @rbs return: CodeSection|nil
46
63
  def code_section: () -> (CodeSection | nil)
47
64
 
@@ -53,7 +70,7 @@ module Wardite
53
70
  include ValueHelper
54
71
 
55
72
  # TODO: add types of class that the stack accomodates
56
- attr_accessor stack: Array[I32 | I64 | F32 | F64]
73
+ attr_accessor stack: Array[wasmValue]
57
74
 
58
75
  attr_accessor call_stack: Array[Frame]
59
76
 
@@ -62,6 +79,9 @@ module Wardite
62
79
  # @rbs inst: Instance
63
80
  def initialize: (Instance inst) -> untyped
64
81
 
82
+ # @rbs return: void
83
+ def invoke_start_section: () -> void
84
+
65
85
  # @rbs name: String|Symbol
66
86
  # @rbs return: bool
67
87
  def callable?: (String | Symbol name) -> bool
@@ -71,6 +91,10 @@ module Wardite
71
91
  # @rbs return: Object|nil
72
92
  def call: (String | Symbol name, Array[Object] args) -> (Object | nil)
73
93
 
94
+ # @rbs idx: Integer
95
+ # @rbs return: void
96
+ def call_by_index: (Integer idx) -> void
97
+
74
98
  # @rbs wasm_function: WasmFunction
75
99
  # @rbs return: void
76
100
  def push_frame: (WasmFunction wasm_function) -> void
@@ -80,8 +104,8 @@ module Wardite
80
104
  def invoke_internal: (WasmFunction wasm_function) -> (Object | nil)
81
105
 
82
106
  # @rbs external_function: ExternalFunction
83
- # @rbs return: I32|I64|F32|F64|nil
84
- def invoke_external: (ExternalFunction external_function) -> (I32 | I64 | F32 | F64 | nil)
107
+ # @rbs return: wasmValue|nil
108
+ def invoke_external: (ExternalFunction external_function) -> (wasmValue | nil)
85
109
 
86
110
  # @rbs return: void
87
111
  def execute!: () -> void
@@ -91,6 +115,17 @@ module Wardite
91
115
  # @rbs return: void
92
116
  def eval_insn: (Frame frame, Op insn) -> void
93
117
 
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
+ # @rbs labels: Array[Label]
124
+ # @rbs stack: Array[wasmValue]
125
+ # @rbs level: Integer
126
+ # @rbs return: Integer
127
+ def do_branch: (Array[Label] labels, Array[wasmValue] stack, Integer level) -> Integer
128
+
94
129
  # @rbs ops: Array[Op]
95
130
  # @rbs pc_start: Integer
96
131
  # @rbs return: Integer
@@ -103,8 +138,8 @@ module Wardite
103
138
  def stack_unwind: (Integer sp, Integer arity) -> void
104
139
 
105
140
  # @rbs finish: Integer
106
- # @rbs return: Array[I32|I64|F32|F64]
107
- def drained_stack: (Integer finish) -> Array[I32 | I64 | F32 | F64]
141
+ # @rbs return: Array[wasmValue]
142
+ def drained_stack: (Integer finish) -> Array[wasmValue]
108
143
 
109
144
  # @rbs name: Symbol
110
145
  # @rbs args: Array[Object]
@@ -116,6 +151,17 @@ module Wardite
116
151
  def respond_to?: (String | Symbol name) -> bool
117
152
  end
118
153
 
154
+ class Type
155
+ attr_accessor callsig: Array[Symbol]
156
+
157
+ attr_accessor retsig: Array[Symbol]
158
+
159
+ # @rbs callsig: Array[Symbol]
160
+ # @rbs retsig: Array[Symbol]
161
+ # @rbs returb: void
162
+ def initialize: (Array[Symbol] callsig, Array[Symbol] retsig) -> untyped
163
+ end
164
+
119
165
  class Frame
120
166
  attr_accessor pc: Integer
121
167
 
@@ -127,15 +173,15 @@ module Wardite
127
173
 
128
174
  attr_accessor labels: Array[Label]
129
175
 
130
- attr_accessor locals: Array[I32 | I64 | F32 | F64]
176
+ attr_accessor locals: Array[wasmValue]
131
177
 
132
178
  # @rbs pc: Integer
133
179
  # @rbs sp: Integer
134
180
  # @rbs body: Array[Op]
135
181
  # @rbs arity: Integer
136
- # @rbs locals: Array[Object]
182
+ # @rbs locals: Array[wasmValue]
137
183
  # @rbs returb: void
138
- def initialize: (Integer pc, Integer sp, Array[Op] body, Integer arity, Array[Object] locals) -> untyped
184
+ def initialize: (Integer pc, Integer sp, Array[Op] body, Integer arity, Array[wasmValue] locals) -> untyped
139
185
  end
140
186
 
141
187
  class Label
@@ -147,12 +193,15 @@ module Wardite
147
193
 
148
194
  attr_accessor arity: Integer
149
195
 
196
+ attr_accessor start: Integer | nil
197
+
150
198
  # @rbs kind: (:if|:loop|:block)
151
199
  # @rbs pc: Integer
152
200
  # @rbs sp: Integer
153
201
  # @rbs arity: Integer
154
- # @rbs returb: void
155
- def initialize: (:if | :loop | :block kind, Integer pc, Integer sp, Integer arity) -> untyped
202
+ # @rbs start: Integer|nil
203
+ # @rbs return: void
204
+ def initialize: (:if | :loop | :block kind, Integer pc, Integer sp, Integer arity, ?Integer | nil start) -> void
156
205
  end
157
206
 
158
207
  class Store
@@ -162,6 +211,10 @@ module Wardite
162
211
 
163
212
  attr_accessor globals: Array[Global]
164
213
 
214
+ attr_accessor tables: Array[Table]
215
+
216
+ attr_accessor elements: Array[[ Symbol, Integer, Array[Integer] ]]
217
+
165
218
  # @rbs inst: Instance
166
219
  # @rbs return: void
167
220
  def initialize: (Instance inst) -> void
@@ -189,6 +242,27 @@ module Wardite
189
242
  def inspect: () -> untyped
190
243
  end
191
244
 
245
+ class Table
246
+ attr_accessor type: Symbol
247
+
248
+ attr_accessor current: Integer
249
+
250
+ attr_accessor max: Integer | nil
251
+
252
+ attr_accessor refs: Array[WasmFunction | ExternalFunction | nil]
253
+
254
+ # @rbs type: Symbol
255
+ # @rbs init: Integer
256
+ # @rbs max: Integer|nil
257
+ # @rbs return: void
258
+ def initialize: (Symbol type, Integer init, Integer | nil max) -> void
259
+
260
+ # @rbs idx: Integer
261
+ # @rbs elem: WasmFunction|ExternalFunction|nil
262
+ # @rbs return: void
263
+ def set: (Integer idx, WasmFunction | ExternalFunction | nil elem) -> void
264
+ end
265
+
192
266
  class Global
193
267
  attr_accessor type: Symbol
194
268
 
@@ -197,7 +271,7 @@ module Wardite
197
271
  # TODO: unused in wasm 1.0 spec?
198
272
  attr_accessor shared: bool
199
273
 
200
- attr_accessor value: I32 | I64 | F32 | F64
274
+ attr_accessor value: wasmValue
201
275
 
202
276
  # @rbs &blk: (Global) -> void
203
277
  # @rbs return: void
@@ -274,20 +348,32 @@ module Wardite
274
348
 
275
349
  # @rbs return: Array[Integer]
276
350
  def locals_count: () -> Array[Integer]
351
+
352
+ # @rbs override_type: Type?
353
+ # @rbs return: WasmFunction
354
+ def clone: (?override_type: Type?) -> WasmFunction
277
355
  end
278
356
 
357
+ type wasmFuncReturn = Object | nil
358
+
359
+ type wasmCallable = ^(Store, Array[wasmValue]) -> wasmFuncReturn
360
+
279
361
  class ExternalFunction
280
362
  attr_accessor callsig: Array[Symbol]
281
363
 
282
364
  attr_accessor retsig: Array[Symbol]
283
365
 
284
- attr_accessor callable: Proc
366
+ attr_accessor callable: wasmCallable
285
367
 
286
368
  # @rbs callsig: Array[Symbol]
287
369
  # @rbs retsig: Array[Symbol]
288
- # @rbs callable: Proc
370
+ # @rbs callable: wasmCallable
289
371
  # @rbs return: void
290
- def initialize: (Array[Symbol] callsig, Array[Symbol] retsig, Proc callable) -> void
372
+ def initialize: (Array[Symbol] callsig, Array[Symbol] retsig, wasmCallable callable) -> void
373
+
374
+ # @rbs override_type: Type?
375
+ # @rbs return: ExternalFunction
376
+ def clone: (?override_type: Type?) -> ExternalFunction
291
377
  end
292
378
 
293
379
  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.4.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,12 @@ 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/memory_init.wat
41
+ - examples/saturate.wat
42
+ - examples/saturate_u.wat
43
+ - examples/start.wat
37
44
  - exe/wardite
38
45
  - lib/wardite.rb
39
46
  - lib/wardite/alu_f32.generated.rb