wardite 0.1.2 → 0.2.1

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.
@@ -0,0 +1,76 @@
1
+ require "stringio"
2
+
3
+ module GenConv
4
+ def self.execute(path, defined_ops: {})
5
+ parent_dir = File.dirname(path)
6
+ system "mkdir -p #{parent_dir}"
7
+
8
+ basic_module = File.read(
9
+ File.expand_path("../templates/conv_module.rb.tmpl", __FILE__)
10
+ )
11
+
12
+ ope_defs = generate_ops(defined_ops: defined_ops)
13
+ basic_module.gsub!(/\$\{DEFS\}/, ope_defs)
14
+
15
+ dest = File.open(path, "w")
16
+ dest.puts basic_module
17
+
18
+ $stderr.puts "generated: #{path}"
19
+ end
20
+
21
+ def self.generate_ops(defined_ops:)
22
+ result = StringIO.new("")
23
+ defined_ops.each_pair do |to, ops|
24
+ ops.each_pair do |op, argtypes|
25
+ argtypes.each do |from|
26
+ code = generate_one_branch(op: op, to: to, from: from)
27
+ result << "\n"
28
+ code.each_line do |ln|
29
+ result << " " * 6 << ln
30
+ end
31
+ result << "\n"
32
+ end
33
+ end
34
+ end
35
+ result.string
36
+ end
37
+
38
+ def self.generate_one_branch(op:, to:, from:)
39
+ code = DEF.dup
40
+ method = op.to_s
41
+ symbol = "#{to.to_s}_#{method}_#{from.to_sym}"
42
+
43
+ if method == "extend"
44
+ method = "extend_"
45
+ elsif method.end_with?("_s") or method.end_with?("_u")
46
+ core, suffix = *(method.split("_")[0..1])
47
+ symbol = "#{to.to_s}_#{core}_#{from.to_sym}_#{suffix}"
48
+ end
49
+ # NOTE to is as namespace
50
+ code.gsub!(/\$\{SYMBOL\}/, symbol)
51
+ code.gsub!(/\$\{METHOD\}/, method)
52
+ code.gsub!(/\$\{TO\}/, to.to_s)
53
+ code.gsub!(/\$\{TO_CLASS\}/, to_class(to.to_sym))
54
+ code.gsub!(/\$\{FROM_CLASS\}/, to_class(from.to_sym))
55
+ return code
56
+ end
57
+
58
+ def self.to_class(typ)
59
+ {
60
+ i32: "I32",
61
+ i64: "I64",
62
+ f32: "F32",
63
+ f64: "F64",
64
+ }[typ]
65
+ end
66
+
67
+ # ope_templates
68
+ DEF = <<~RUBY
69
+ when :${SYMBOL}
70
+ from = runtime.stack.pop
71
+ raise EvalError, "maybe empty or invalid stack" if !from.is_a?(${FROM_CLASS})
72
+ to = from.${METHOD}(to: :${TO})
73
+ raise EvalError, "failed to convert type" if !to.is_a?(${TO_CLASS})
74
+ runtime.stack.push(to)
75
+ RUBY
76
+ end
@@ -0,0 +1,18 @@
1
+ # rbs_inline: enabled
2
+ require_relative "value"
3
+
4
+ module Wardite
5
+ module Evaluator
6
+ # @rbs runtime: Runtime
7
+ # @rbs frame: Frame
8
+ # @rbs insn: Op
9
+ # @rbs return: void
10
+ def self.${PREFIX}_eval_insn(runtime, frame, insn)
11
+ case insn.code
12
+ ${DEFS}
13
+ else
14
+ raise "Unknown opcode for namespace #{insn.namespace}: #{insn.code}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # rbs_inline: enabled
2
+ require_relative "value"
3
+
4
+ module Wardite
5
+ module Evaluator
6
+ # @rbs runtime: Runtime
7
+ # @rbs frame: Frame
8
+ # @rbs insn: Op
9
+ # @rbs return: void
10
+ def self.convert_eval_insn(runtime, frame, insn)
11
+ case insn.code
12
+ ${DEFS}
13
+ else
14
+ raise "Unknown opcode for namespace #{insn.namespace}: #{insn.code}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/wardite/alu_f32.generated.rb with RBS::Inline
2
+
3
+ module Wardite
4
+ module Evaluator
5
+ # @rbs runtime: Runtime
6
+ # @rbs frame: Frame
7
+ # @rbs insn: Op
8
+ # @rbs return: void
9
+ def self.f32_eval_insn: (Runtime runtime, Frame frame, Op insn) -> void
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/wardite/alu_f64.generated.rb with RBS::Inline
2
+
3
+ module Wardite
4
+ module Evaluator
5
+ # @rbs runtime: Runtime
6
+ # @rbs frame: Frame
7
+ # @rbs insn: Op
8
+ # @rbs return: void
9
+ def self.f64_eval_insn: (Runtime runtime, Frame frame, Op insn) -> void
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/wardite/alu_i32.generated.rb with RBS::Inline
2
+
3
+ module Wardite
4
+ module Evaluator
5
+ # @rbs runtime: Runtime
6
+ # @rbs frame: Frame
7
+ # @rbs insn: Op
8
+ # @rbs return: void
9
+ def self.i32_eval_insn: (Runtime runtime, Frame frame, Op insn) -> void
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/wardite/alu_i64.generated.rb with RBS::Inline
2
+
3
+ module Wardite
4
+ module Evaluator
5
+ # @rbs runtime: Runtime
6
+ # @rbs frame: Frame
7
+ # @rbs insn: Op
8
+ # @rbs return: void
9
+ def self.i64_eval_insn: (Runtime runtime, Frame frame, Op insn) -> void
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # Generated from lib/wardite/convert.generated.rb with RBS::Inline
2
+
3
+ module Wardite
4
+ module Evaluator
5
+ # @rbs runtime: Runtime
6
+ # @rbs frame: Frame
7
+ # @rbs insn: Op
8
+ # @rbs return: void
9
+ def self.convert_eval_insn: (Runtime runtime, Frame frame, Op insn) -> void
10
+ end
11
+ end
@@ -1,19 +1,28 @@
1
1
  # Generated from lib/wardite/instruction.rb with RBS::Inline
2
2
 
3
- # rbs_inline: enabled
4
3
  module Wardite
5
4
  class Op
5
+ # @see https://pengowray.github.io/wasm-ops/
6
+ SYMS: Array[Symbol]
7
+
8
+ # @rbs return: Hash[Integer, Symbol]
9
+ def self.table: () -> Hash[Integer, Symbol]
10
+
11
+ attr_accessor namespace: Symbol
12
+
6
13
  attr_accessor code: Symbol
7
14
 
8
- attr_accessor operand: Array[Object]
15
+ # TODO: add types of potential operands
16
+ attr_accessor operand: Array[Integer | Float | Block]
9
17
 
18
+ # @rbs namespace: Symbol
10
19
  # @rbs code: Symbol
11
- # @rbs operand: Array[Object]
12
- def initialize: (Symbol code, Array[Object] operand) -> untyped
20
+ # @rbs operand: Array[Integer|Float|Block]
21
+ def initialize: (Symbol namespace, Symbol code, Array[Integer | Float | Block] operand) -> untyped
13
22
 
14
23
  # @rbs chr: String
15
- # @rbs return: Symbol
16
- def self.to_sym: (String chr) -> Symbol
24
+ # @rbs return: [Symbol, Symbol]
25
+ def self.to_sym: (String chr) -> [ Symbol, Symbol ]
17
26
 
18
27
  # @rbs chr: Symbol
19
28
  # @rbs return: Array[Symbol]
@@ -2,7 +2,7 @@
2
2
 
3
3
  # rbs_inline: enabled
4
4
  module Wardite
5
- module Leb128Helpers
5
+ module Leb128Helper
6
6
  # @rbs buf: File|StringIO
7
7
  # @rbs return: Integer
8
8
  def fetch_uleb128: (File | StringIO buf) -> Integer
@@ -0,0 +1,302 @@
1
+ # Generated from lib/wardite/value.rb with RBS::Inline
2
+
3
+ module Wardite
4
+ module ValueHelper
5
+ # @rbs value: Integer
6
+ # @rbs return: I32
7
+ def I32: (Integer value) -> I32
8
+
9
+ # @rbs value: Integer
10
+ # @rbs return: I64
11
+ def I64: (Integer value) -> I64
12
+
13
+ # @rbs value: Float
14
+ # @rbs return: F32
15
+ def F32: (Float value) -> F32
16
+
17
+ # @rbs value: Float
18
+ # @rbs return: F64
19
+ def F64: (Float value) -> F64
20
+
21
+ private
22
+
23
+ # @rbs value: Integer
24
+ # @rbs return: Integer
25
+ def as_u32: (Integer value) -> Integer
26
+
27
+ # @rbs value: Integer
28
+ # @rbs return: Integer
29
+ def as_u64: (Integer value) -> Integer
30
+ end
31
+
32
+ extend ValueHelper
33
+
34
+ class I32
35
+ include ValueHelper
36
+
37
+ I32_MAX: untyped
38
+
39
+ # value should be stored as unsigned Integer, even in I32/I64
40
+ # when we want to access signed value, it'd be done via #value_s
41
+ attr_accessor value: Integer
42
+
43
+ # @rbs str: String
44
+ # @rbs size: Integer|nil
45
+ # @rbs signed: bool
46
+ # @rbs return: I32
47
+ def self.from_bytes: (String str, ?size: Integer | nil, ?signed: bool) -> I32
48
+
49
+ # @rbs return: Integer
50
+ def memsize: () -> Integer
51
+
52
+ # returns a value interpreted as signed integer
53
+ # @rbs return: Integer
54
+ def value_s: () -> Integer
55
+
56
+ # TODO: eliminate use of pack, to support mruby - in this file!
57
+ # @rbs size: Integer|nil
58
+ # @rbs return: String
59
+ def packed: (?size: Integer | nil) -> String
60
+
61
+ # @rbs to: Symbol
62
+ # @rbs return: I32|I64|F32|F64
63
+ def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
64
+
65
+ # @rbs to: Symbol
66
+ # @rbs return: I32|I64|F32|F64
67
+ def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
68
+
69
+ # @rbs to: Symbol
70
+ # @rbs return: I32|I64|F32|F64
71
+ def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
72
+
73
+ # @rbs to: Symbol
74
+ # @rbs return: I32|I64|F32|F64
75
+ def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
76
+
77
+ # @rbs to: Symbol
78
+ # @rbs return: I32|I64|F32|F64
79
+ def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
80
+
81
+ # @rbs to: Symbol
82
+ # @rbs return: I32|I64|F32|F64
83
+ def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
84
+
85
+ # @rbs to: Symbol
86
+ # @rbs return: I32|I64|F32|F64
87
+ def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
88
+
89
+ # @rbs to: Symbol
90
+ # @rbs return: I32|I64|F32|F64
91
+ def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
92
+
93
+ # @rbs to: Symbol
94
+ # @rbs return: I32|I64|F32|F64
95
+ def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
96
+
97
+ # @rbs to: Symbol
98
+ # @rbs return: I32|I64|F32|F64
99
+ def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
100
+
101
+ # I32#inspect shows signed value for convinience
102
+ def inspect: () -> untyped
103
+ end
104
+
105
+ class I64
106
+ include ValueHelper
107
+
108
+ I64_MAX: untyped
109
+
110
+ attr_accessor value: Integer
111
+
112
+ # @rbs str: String
113
+ # @rbs size: Integer|nil
114
+ # @rbs signed: bool
115
+ # @rbs return: I64
116
+ def self.from_bytes: (String str, ?size: Integer | nil, ?signed: bool) -> I64
117
+
118
+ # @rbs return: Integer
119
+ def memsize: () -> Integer
120
+
121
+ # returns a value interpreted as signed integer
122
+ # @rbs return: Integer
123
+ def value_s: () -> Integer
124
+
125
+ # @rbs size: Integer|nil
126
+ # @rbs return: String
127
+ def packed: (?size: Integer | nil) -> String
128
+
129
+ # @rbs to: Symbol
130
+ # @rbs return: I32|I64|F32|F64
131
+ def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
132
+
133
+ # @rbs to: Symbol
134
+ # @rbs return: I32|I64|F32|F64
135
+ def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
136
+
137
+ # @rbs to: Symbol
138
+ # @rbs return: I32|I64|F32|F64
139
+ def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
140
+
141
+ # @rbs to: Symbol
142
+ # @rbs return: I32|I64|F32|F64
143
+ def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
144
+
145
+ # @rbs to: Symbol
146
+ # @rbs return: I32|I64|F32|F64
147
+ def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
148
+
149
+ # @rbs to: Symbol
150
+ # @rbs return: I32|I64|F32|F64
151
+ def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
152
+
153
+ # @rbs to: Symbol
154
+ # @rbs return: I32|I64|F32|F64
155
+ def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
156
+
157
+ # @rbs to: Symbol
158
+ # @rbs return: I32|I64|F32|F64
159
+ def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
160
+
161
+ # @rbs to: Symbol
162
+ # @rbs return: I32|I64|F32|F64
163
+ def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
164
+
165
+ # @rbs to: Symbol
166
+ # @rbs return: I32|I64|F32|F64
167
+ def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
168
+
169
+ # I64#inspect shows signed value
170
+ def inspect: () -> untyped
171
+ end
172
+
173
+ class F32
174
+ include ValueHelper
175
+
176
+ attr_accessor value: Float
177
+
178
+ # @rbs str: String
179
+ # @rbs return: F32
180
+ def self.from_bytes: (String str) -> F32
181
+
182
+ # @rbs return: Integer
183
+ def memsize: () -> Integer
184
+
185
+ # @rbs return: :positive|:negative
186
+ def sign: () -> (:positive | :negative)
187
+
188
+ # @rbs size: Integer|nil
189
+ # @rbs return: String
190
+ def packed: (?size: Integer | nil) -> String
191
+
192
+ # @rbs to: Symbol
193
+ # @rbs return: I32|I64|F32|F64
194
+ def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
195
+
196
+ # @rbs to: Symbol
197
+ # @rbs return: I32|I64|F32|F64
198
+ def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
199
+
200
+ # @rbs to: Symbol
201
+ # @rbs return: I32|I64|F32|F64
202
+ def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
203
+
204
+ # @todo need more testcase...
205
+ # @see https://webassembly.github.io/spec/core/exec/numerics.html#xref-exec-numerics-op-trunc-s-mathrm-trunc-mathsf-s-m-n-z
206
+ # @rbs to: Symbol
207
+ # @rbs return: I32|I64|F32|F64
208
+ def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
209
+
210
+ # @see https://webassembly.github.io/spec/core/exec/numerics.html#xref-exec-numerics-op-trunc-u-mathrm-trunc-mathsf-u-m-n-z
211
+ # @rbs to: Symbol
212
+ # @rbs return: I32|I64|F32|F64
213
+ def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
214
+
215
+ # @rbs to: Symbol
216
+ # @rbs return: I32|I64|F32|F64
217
+ def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
218
+
219
+ # @rbs to: Symbol
220
+ # @rbs return: I32|I64|F32|F64
221
+ def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
222
+
223
+ # @rbs to: Symbol
224
+ # @rbs return: I32|I64|F32|F64
225
+ def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
226
+
227
+ # @rbs to: Symbol
228
+ # @rbs return: I32|I64|F32|F64
229
+ def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
230
+
231
+ # @rbs to: Symbol
232
+ # @rbs return: I32|I64|F32|F64
233
+ def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
234
+
235
+ def inspect: () -> untyped
236
+ end
237
+
238
+ class F64
239
+ include ValueHelper
240
+
241
+ attr_accessor value: Float
242
+
243
+ # @rbs str: String
244
+ # @rbs return: F64
245
+ def self.from_bytes: (String str) -> F64
246
+
247
+ # @rbs return: Integer
248
+ def memsize: () -> Integer
249
+
250
+ # @rbs return: :positive|:negative
251
+ def sign: () -> (:positive | :negative)
252
+
253
+ # @rbs size: Integer|nil
254
+ # @rbs return: String
255
+ def packed: (?size: Integer | nil) -> String
256
+
257
+ # @rbs to: Symbol
258
+ # @rbs return: I32|I64|F32|F64
259
+ def wrap: (to: Symbol) -> (I32 | I64 | F32 | F64)
260
+
261
+ # @rbs to: Symbol
262
+ # @rbs return: I32|I64|F32|F64
263
+ def extend_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
264
+
265
+ # @rbs to: Symbol
266
+ # @rbs return: I32|I64|F32|F64
267
+ def extend_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
268
+
269
+ # @see the same as F32
270
+ # @rbs to: Symbol
271
+ # @rbs return: I32|I64|F32|F64
272
+ def trunc_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
273
+
274
+ # @see the same as F32
275
+ # @rbs to: Symbol
276
+ # @rbs return: I32|I64|F32|F64
277
+ def trunc_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
278
+
279
+ # @rbs to: Symbol
280
+ # @rbs return: I32|I64|F32|F64
281
+ def convert_s: (to: Symbol) -> (I32 | I64 | F32 | F64)
282
+
283
+ # @rbs to: Symbol
284
+ # @rbs return: I32|I64|F32|F64
285
+ def convert_u: (to: Symbol) -> (I32 | I64 | F32 | F64)
286
+
287
+ # @todo no loss of digits...
288
+ # @rbs to: Symbol
289
+ # @rbs return: I32|I64|F32|F64
290
+ def demote: (to: Symbol) -> (I32 | I64 | F32 | F64)
291
+
292
+ # @rbs to: Symbol
293
+ # @rbs return: I32|I64|F32|F64
294
+ def promote: (to: Symbol) -> (I32 | I64 | F32 | F64)
295
+
296
+ # @rbs to: Symbol
297
+ # @rbs return: I32|I64|F32|F64
298
+ def reinterpret: (to: Symbol) -> (I32 | I64 | F32 | F64)
299
+
300
+ def inspect: () -> untyped
301
+ end
302
+ end
@@ -3,14 +3,16 @@
3
3
  # rbs_inline: enabled
4
4
  module Wardite
5
5
  class WasiSnapshotPreview1
6
+ include ValueHelper
7
+
6
8
  attr_accessor fd_table: Array[IO]
7
9
 
8
10
  def initialize: () -> untyped
9
11
 
10
12
  # @rbs store: Store
11
- # @rbs args: Array[Object]
13
+ # @rbs args: Array[I32|I64|F32|F64]
12
14
  # @rbs return: Object
13
- def fd_write: (Store store, Array[Object] args) -> Object
15
+ def fd_write: (Store store, Array[I32 | I64 | F32 | F64] args) -> Object
14
16
 
15
17
  # @rbs return: Hash[Symbol, Proc]
16
18
  def to_module: () -> Hash[Symbol, Proc]
@@ -1,5 +1,11 @@
1
1
  # Generated from lib/wardite.rb with RBS::Inline
2
2
 
3
+ module Wardite
4
+ module Evaluator
5
+ extend Wardite::ValueHelper
6
+ end
7
+ end
8
+
3
9
  module Wardite
4
10
  class Section
5
11
  attr_accessor name: String
@@ -107,7 +113,9 @@ module Wardite
107
113
  end
108
114
 
109
115
  module BinaryLoader
110
- extend Wardite::Leb128Helpers
116
+ extend Wardite::Leb128Helper
117
+
118
+ extend Wardite::ValueHelper
111
119
 
112
120
  # @rbs buf: File|StringIO
113
121
  # @rbs import_object: Hash[Symbol, Hash[Symbol, Proc]]
@@ -204,7 +212,10 @@ module Wardite
204
212
  end
205
213
 
206
214
  class Runtime
207
- attr_accessor stack: Array[Object]
215
+ include ValueHelper
216
+
217
+ # TODO: add types of class that the stack accomodates
218
+ attr_accessor stack: Array[I32 | I64 | F32 | F64]
208
219
 
209
220
  attr_accessor call_stack: Array[Frame]
210
221
 
@@ -222,11 +233,6 @@ module Wardite
222
233
  # @rbs return: Object|nil
223
234
  def call: (String | Symbol name, Array[Object] args) -> (Object | nil)
224
235
 
225
- # @rbs idx: Integer
226
- # @rbs args: Array[Object]
227
- # @rbs return: Object|nil
228
- def call_index: (Integer idx, Array[Object] args) -> (Object | nil)
229
-
230
236
  # @rbs wasm_function: WasmFunction
231
237
  # @rbs return: void
232
238
  def push_frame: (WasmFunction wasm_function) -> void
@@ -236,8 +242,8 @@ module Wardite
236
242
  def invoke_internal: (WasmFunction wasm_function) -> (Object | nil)
237
243
 
238
244
  # @rbs external_function: ExternalFunction
239
- # @rbs return: Object|nil
240
- def invoke_external: (ExternalFunction external_function) -> (Object | nil)
245
+ # @rbs return: I32|I64|F32|F64|nil
246
+ def invoke_external: (ExternalFunction external_function) -> (I32 | I64 | F32 | F64 | nil)
241
247
 
242
248
  # @rbs return: void
243
249
  def execute!: () -> void
@@ -259,8 +265,8 @@ module Wardite
259
265
  def stack_unwind: (Integer sp, Integer arity) -> void
260
266
 
261
267
  # @rbs finish: Integer
262
- # @rbs return: Array[Object]
263
- def drained_stack: (Integer finish) -> Array[Object]
268
+ # @rbs return: Array[I32|I64|F32|F64]
269
+ def drained_stack: (Integer finish) -> Array[I32 | I64 | F32 | F64]
264
270
 
265
271
  # @rbs name: Symbol
266
272
  # @rbs args: Array[Object]
@@ -283,7 +289,7 @@ module Wardite
283
289
 
284
290
  attr_accessor labels: Array[Label]
285
291
 
286
- attr_accessor locals: Array[Object]
292
+ attr_accessor locals: Array[I32 | I64 | F32 | F64]
287
293
 
288
294
  # @rbs pc: Integer
289
295
  # @rbs sp: Integer
@@ -327,6 +333,8 @@ module Wardite
327
333
  class Memory
328
334
  attr_accessor data: String
329
335
 
336
+ attr_accessor current: Integer
337
+
330
338
  attr_accessor max: Integer | nil
331
339
 
332
340
  # @rbs min: Integer
@@ -334,6 +342,10 @@ module Wardite
334
342
  # @rbs return: void
335
343
  def initialize: (Integer min, Integer | nil max) -> void
336
344
 
345
+ # @rbs delta: Integer
346
+ # @rbs return: Integer
347
+ def grow: (Integer delta) -> Integer
348
+
337
349
  def inspect: () -> untyped
338
350
  end
339
351
 
@@ -431,6 +443,9 @@ module Wardite
431
443
  class EvalError < StandardError
432
444
  end
433
445
 
446
+ class Unreachable < StandardError
447
+ end
448
+
434
449
  # @rbs path: String|nil
435
450
  # @rbs buffer: File|StringIO|nil
436
451
  # @rbs **options: Hash[Symbol, Object]