wardite 0.8.1 → 0.9.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.
- checksums.yaml +4 -4
- data/Rakefile +23 -0
- data/examples/i32_bench.html +482 -0
- data/examples/i32_bench.wat +137 -0
- data/examples/i32_bench_original.wat +314 -0
- data/examples/load_perf.rb +24 -0
- data/lib/wardite/alu_f32.generated.rb +12 -10
- data/lib/wardite/alu_f64.generated.rb +12 -10
- data/lib/wardite/alu_i32.generated.rb +24 -22
- data/lib/wardite/alu_i64.generated.rb +30 -28
- data/lib/wardite/cli/cli.rb +22 -0
- data/lib/wardite/convert.generated.rb +7 -5
- data/lib/wardite/instruction.rb +424 -64
- data/lib/wardite/leb128.rb +3 -6
- data/lib/wardite/load.rb +65 -26
- data/lib/wardite/revisitor.rb +12 -4
- data/lib/wardite/version.rb +1 -1
- data/lib/wardite.rb +53 -36
- data/rbs_collection.lock.yaml +24 -20
- data/scripts/gen_alu.rb +24 -24
- data/scripts/templates/alu_module.rb.tmpl +7 -5
- data/scripts/templates/conv_module.rb.tmpl +7 -5
- data/sig/generated/wardite/alu_f32.generated.rbs +4 -3
- data/sig/generated/wardite/alu_f64.generated.rbs +4 -3
- data/sig/generated/wardite/alu_i32.generated.rbs +4 -3
- data/sig/generated/wardite/alu_i64.generated.rbs +4 -3
- data/sig/generated/wardite/cli/cli.rbs +5 -0
- data/sig/generated/wardite/convert.generated.rbs +4 -3
- data/sig/generated/wardite/instruction.rbs +13 -9
- data/sig/generated/wardite/load.rbs +9 -9
- data/sig/generated/wardite.rbs +11 -7
- data/sig/vernier.rbs +3 -0
- metadata +8 -3
data/lib/wardite/load.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
# rbs_inline: enabled
|
2
|
-
require "wardite/revisitor"
|
3
2
|
|
4
3
|
module Wardite
|
5
4
|
class Section
|
@@ -128,7 +127,7 @@ module Wardite
|
|
128
127
|
|
129
128
|
attr_accessor :locals_type #: Array[Symbol]
|
130
129
|
|
131
|
-
attr_accessor :body #: Array[
|
130
|
+
attr_accessor :body #: Array[[Symbol, Symbol, Array[operandItem], Integer?, Integer?]]
|
132
131
|
|
133
132
|
# @rbs &blk: (CodeBody) -> void
|
134
133
|
# @rbs return: void
|
@@ -254,6 +253,7 @@ module Wardite
|
|
254
253
|
# @rbs enable_wasi: boolish
|
255
254
|
# @rbs return: Instance
|
256
255
|
def self.load_from_buffer(buf, import_object: {}, enable_wasi: true)
|
256
|
+
start = Time.now.to_f #: Float
|
257
257
|
@buf = buf
|
258
258
|
|
259
259
|
version = preamble
|
@@ -273,6 +273,8 @@ module Wardite
|
|
273
273
|
i.wasi = wasi_env
|
274
274
|
end
|
275
275
|
end
|
276
|
+
ensure
|
277
|
+
$stderr.puts "load_from_buffer: #{Time.now.to_f - start}" if ENV['WARITE_TRACE']
|
276
278
|
end
|
277
279
|
|
278
280
|
# @rbs return: Integer
|
@@ -600,25 +602,25 @@ module Wardite
|
|
600
602
|
locals_type << Op.i2type(value_type || -1)
|
601
603
|
end
|
602
604
|
body = code_body(cbuf)
|
603
|
-
revisitor = Revisitor.new(body)
|
604
|
-
revisitor.revisit!
|
605
605
|
|
606
606
|
dest.func_codes << CodeSection::CodeBody.new do |b|
|
607
607
|
b.locals_count = locals_count
|
608
608
|
b.locals_type = locals_type
|
609
|
-
b.body =
|
609
|
+
b.body = body
|
610
610
|
end
|
611
611
|
end
|
612
612
|
dest
|
613
613
|
end
|
614
614
|
|
615
615
|
# @rbs buf: StringIO
|
616
|
-
# @rbs return: Array[
|
616
|
+
# @rbs return: Array[[Symbol, Symbol, Array[operandItem], Integer?, Integer?]]
|
617
617
|
def self.code_body(buf)
|
618
|
-
dest = [] #: Array[
|
618
|
+
dest = [] #: Array[[Symbol, Symbol, Array[operandItem], Integer?, Integer?]]
|
619
|
+
# HINT: [symname, index of op, index of else, index of end]
|
620
|
+
branching_stack = [] #: Array[[Symbol, Integer, Integer, Integer]]
|
621
|
+
fixed_stack = [] #: Array[[Symbol, Integer, Integer, Integer]]
|
619
622
|
while c = buf.read(1)
|
620
|
-
namespace, code = resolve_code(c, buf)
|
621
|
-
operand_types = Op.operand_of(code)
|
623
|
+
namespace, code, operand_types = resolve_code(c, buf)
|
622
624
|
operand = [] #: Array[operandItem]
|
623
625
|
operand_types.each do |typ|
|
624
626
|
case typ
|
@@ -673,9 +675,42 @@ module Wardite
|
|
673
675
|
end
|
674
676
|
end
|
675
677
|
|
676
|
-
|
678
|
+
# HINT: [namespace, code, operand, else_pos, end_pos]
|
679
|
+
dest << [namespace, code, operand, nil, nil]
|
680
|
+
if code == :block || code == :loop || code == :if
|
681
|
+
branching_stack << [code, dest.size - 1, -1, -1]
|
682
|
+
elsif code == :else
|
683
|
+
if branching_stack.empty?
|
684
|
+
raise "broken sequence: unmatched else"
|
685
|
+
else
|
686
|
+
last = branching_stack.pop || raise("[BUG] empty pop")
|
687
|
+
if last[0] != :if
|
688
|
+
raise "broken sequence: else without if"
|
689
|
+
end
|
690
|
+
branching_stack << [last[0], last[1], dest.size - 1, -1]
|
691
|
+
end
|
692
|
+
elsif code == :end
|
693
|
+
unless branching_stack.empty?
|
694
|
+
last = branching_stack.pop || raise("[BUG] empty pop")
|
695
|
+
fixed_stack << [last[0], last[1], last[2], dest.size - 1]
|
696
|
+
end
|
697
|
+
end
|
677
698
|
end
|
678
699
|
|
700
|
+
fixed_stack.each do |(sym, begin_idx, else_idx, end_idx)|
|
701
|
+
if end_idx == -1
|
702
|
+
raise "broken sequence: branching without end"
|
703
|
+
end
|
704
|
+
case sym
|
705
|
+
when :block, :loop
|
706
|
+
dest[begin_idx][-1] = end_idx
|
707
|
+
when :if
|
708
|
+
dest[begin_idx][-2] = else_idx == -1 ? end_idx : else_idx
|
709
|
+
dest[begin_idx][-1] = end_idx
|
710
|
+
else
|
711
|
+
raise "[BUG] unknown sym #{sym.inspect}"
|
712
|
+
end
|
713
|
+
end
|
679
714
|
dest
|
680
715
|
rescue => e
|
681
716
|
require "pp"
|
@@ -687,14 +722,18 @@ module Wardite
|
|
687
722
|
|
688
723
|
# @rbs c: String
|
689
724
|
# @rbs buf: StringIO
|
690
|
-
# @rbs return: [Symbol, Symbol]
|
725
|
+
# @rbs return: [Symbol, Symbol, Array[Symbol]]
|
691
726
|
def self.resolve_code(c, buf)
|
692
|
-
|
693
|
-
|
727
|
+
ord = c.ord
|
728
|
+
code = Op::SYMS[ord]
|
729
|
+
if code == :fc
|
694
730
|
lower = fetch_uleb128(buf)
|
695
|
-
|
731
|
+
sym = Op::FC_SYMS[lower]
|
732
|
+
namespace = Op::FC_OPERANDS[lower] || :default
|
733
|
+
return [namespace, sym, Op.operand_of(sym)]
|
696
734
|
end
|
697
|
-
|
735
|
+
namespace = Op::NAMESPACES[ord] || raise("unsupported code: #{ord}")
|
736
|
+
return [namespace, code, Op::OPERANDS[ord]]
|
698
737
|
end
|
699
738
|
|
700
739
|
# @rbs return: DataSection
|
@@ -771,7 +810,7 @@ module Wardite
|
|
771
810
|
code
|
772
811
|
end
|
773
812
|
|
774
|
-
# @rbs ops: Array[
|
813
|
+
# @rbs ops: Array[[Symbol, Symbol, Array[operandItem], Integer?, Integer?]]
|
775
814
|
# @rbs return: Integer
|
776
815
|
def self.decode_expr(ops)
|
777
816
|
# sees first opcode
|
@@ -779,19 +818,19 @@ module Wardite
|
|
779
818
|
if !op
|
780
819
|
raise LoadError, "empty opcodes"
|
781
820
|
end
|
782
|
-
case op
|
821
|
+
case op[1]
|
783
822
|
when :i32_const
|
784
|
-
arg = op
|
823
|
+
arg = op[2][0]
|
785
824
|
if !arg.is_a?(Integer)
|
786
825
|
raise "Invalid definition of operand"
|
787
826
|
end
|
788
827
|
return arg
|
789
828
|
else
|
790
|
-
raise "Unimplemented offset op: #{op.
|
829
|
+
raise "Unimplemented offset op: #{op.inspect}"
|
791
830
|
end
|
792
831
|
end
|
793
832
|
|
794
|
-
# @rbs ops: Array[
|
833
|
+
# @rbs ops: Array[[Symbol, Symbol, Array[operandItem], Integer?, Integer?]]
|
795
834
|
# @rbs return: wasmValue
|
796
835
|
def self.decode_global_expr(ops)
|
797
836
|
# sees first opcode
|
@@ -799,33 +838,33 @@ module Wardite
|
|
799
838
|
if !op
|
800
839
|
raise LoadError, "empty opcodes"
|
801
840
|
end
|
802
|
-
case op
|
841
|
+
case op[1]
|
803
842
|
when :i32_const
|
804
|
-
arg = op
|
843
|
+
arg = op[2][0]
|
805
844
|
if !arg.is_a?(Integer)
|
806
845
|
raise "Invalid definition of operand"
|
807
846
|
end
|
808
847
|
return I32(arg)
|
809
848
|
when :i64_const
|
810
|
-
arg = op
|
849
|
+
arg = op[2][0]
|
811
850
|
if !arg.is_a?(Integer)
|
812
851
|
raise "Invalid definition of operand"
|
813
852
|
end
|
814
853
|
return I64(arg)
|
815
854
|
when :f32_const
|
816
|
-
arg = op
|
855
|
+
arg = op[2][0]
|
817
856
|
if !arg.is_a?(Float)
|
818
857
|
raise "Invalid definition of operand"
|
819
858
|
end
|
820
859
|
return F32(arg)
|
821
860
|
when :f64_const
|
822
|
-
arg = op
|
861
|
+
arg = op[2][0]
|
823
862
|
if !arg.is_a?(Float)
|
824
863
|
raise "Invalid definition of operand"
|
825
864
|
end
|
826
865
|
return F64(arg)
|
827
866
|
else
|
828
|
-
raise "Unimplemented offset op: #{op.
|
867
|
+
raise "Unimplemented offset op: #{op.inspect}"
|
829
868
|
end
|
830
869
|
end
|
831
870
|
|
data/lib/wardite/revisitor.rb
CHANGED
@@ -15,17 +15,25 @@ module Wardite
|
|
15
15
|
case op.code
|
16
16
|
when :block
|
17
17
|
next_pc = fetch_ops_while_end(idx)
|
18
|
-
op.meta[:end_pos]
|
18
|
+
if op.meta[:end_pos] != next_pc
|
19
|
+
raise "mismatched end_pos for block at #{op}: #{op.meta[:end_pos]} vs #{next_pc}"
|
20
|
+
end
|
19
21
|
|
20
22
|
when :loop
|
21
23
|
next_pc = fetch_ops_while_end(idx)
|
22
|
-
op.meta[:end_pos]
|
24
|
+
if op.meta[:end_pos] != next_pc
|
25
|
+
raise "mismatched end_pos for loop at #{op}: #{op.meta[:end_pos]} vs #{next_pc}"
|
26
|
+
end
|
23
27
|
|
24
28
|
when :if
|
25
29
|
next_pc = fetch_ops_while_end(idx)
|
26
30
|
else_pc = fetch_ops_while_else_or_end(idx)
|
27
|
-
op.meta[:end_pos]
|
28
|
-
|
31
|
+
if op.meta[:end_pos] != next_pc
|
32
|
+
raise "mismatched end_pos for if at #{op}: #{op.meta[:end_pos]} vs #{next_pc}"
|
33
|
+
end
|
34
|
+
if op.meta[:else_pos] != else_pc
|
35
|
+
raise "mismatched else_pos for if at #{op}: #{op.meta[:else_pos]} vs #{else_pc}"
|
36
|
+
end
|
29
37
|
end
|
30
38
|
end
|
31
39
|
end
|
data/lib/wardite/version.rb
CHANGED
data/lib/wardite.rb
CHANGED
@@ -362,9 +362,22 @@ module Wardite
|
|
362
362
|
return nil
|
363
363
|
end
|
364
364
|
|
365
|
+
# @rbs!
|
366
|
+
# $GLOBAL_EXTERNAL_ELAP: Float
|
367
|
+
# $GLOBAL_EXTERNAL_TIMES: Integer
|
368
|
+
$GLOBAL_EXTERNAL_ELAP = 0.0 #: Float
|
369
|
+
$GLOBAL_EXTERNAL_TIMES = 0 #: Integer
|
370
|
+
END {
|
371
|
+
if ENV["WARDITE_TRACE"] == "1"
|
372
|
+
$stderr.puts "external call count: #{$GLOBAL_EXTERNAL_TIMES}"
|
373
|
+
$stderr.puts "external call elapsed: #{$GLOBAL_EXTERNAL_ELAP}(s)"
|
374
|
+
end
|
375
|
+
}
|
376
|
+
|
365
377
|
# @rbs external_function: ExternalFunction
|
366
378
|
# @rbs return: wasmValue|nil
|
367
379
|
def invoke_external(external_function)
|
380
|
+
start = Time.now.to_f
|
368
381
|
$stderr.puts "[trace] call external function: #{external_function.name}" if ENV["WARDITE_TRACE"]
|
369
382
|
local_start = stack.size - external_function.callsig.size
|
370
383
|
args = stack[local_start..]
|
@@ -399,6 +412,9 @@ module Wardite
|
|
399
412
|
end
|
400
413
|
|
401
414
|
raise "invalid type of value returned in proc. val: #{val.inspect}"
|
415
|
+
ensure
|
416
|
+
$GLOBAL_EXTERNAL_TIMES += 1
|
417
|
+
$GLOBAL_EXTERNAL_ELAP += (Time.now.to_f - start)
|
402
418
|
end
|
403
419
|
|
404
420
|
# @rbs return: void
|
@@ -409,7 +425,7 @@ module Wardite
|
|
409
425
|
break
|
410
426
|
end
|
411
427
|
cur_frame.pc += 1
|
412
|
-
insn = cur_frame.body[cur_frame.pc]
|
428
|
+
insn = cur_frame.body[cur_frame.pc]
|
413
429
|
if !insn
|
414
430
|
break
|
415
431
|
end
|
@@ -418,37 +434,38 @@ module Wardite
|
|
418
434
|
end
|
419
435
|
|
420
436
|
# @rbs frame: Frame
|
421
|
-
# @rbs insn:
|
437
|
+
# @rbs insn: [Symbol, Symbol, Array[operandItem], Integer?, Integer?]
|
422
438
|
# @rbs return: void
|
423
439
|
def eval_insn(frame, insn)
|
424
|
-
|
440
|
+
namespace, code, operand, else_pos, end_pos = *insn
|
441
|
+
case namespace
|
425
442
|
when :convert
|
426
|
-
return Evaluator.convert_eval_insn(self, frame,
|
443
|
+
return Evaluator.convert_eval_insn(self, frame, code, operand)
|
427
444
|
when :i32
|
428
|
-
return Evaluator.i32_eval_insn(self, frame,
|
445
|
+
return Evaluator.i32_eval_insn(self, frame, code, operand)
|
429
446
|
when :i64
|
430
|
-
return Evaluator.i64_eval_insn(self, frame,
|
447
|
+
return Evaluator.i64_eval_insn(self, frame, code, operand)
|
431
448
|
when :f32
|
432
|
-
return Evaluator.f32_eval_insn(self, frame,
|
449
|
+
return Evaluator.f32_eval_insn(self, frame, code, operand)
|
433
450
|
when :f64
|
434
|
-
return Evaluator.f64_eval_insn(self, frame,
|
451
|
+
return Evaluator.f64_eval_insn(self, frame, code, operand)
|
435
452
|
end
|
436
453
|
|
437
454
|
# unmached namespace...
|
438
|
-
case
|
455
|
+
case code
|
439
456
|
when :unreachable
|
440
457
|
raise Unreachable, "unreachable op"
|
441
458
|
when :nop
|
442
459
|
return
|
443
460
|
|
444
461
|
when :br
|
445
|
-
level =
|
462
|
+
level = operand[0]
|
446
463
|
raise EvalError, "br op without level" if !level.is_a?(Integer)
|
447
464
|
pc = do_branch(frame.labels, stack, level)
|
448
465
|
frame.pc = pc
|
449
466
|
|
450
467
|
when :br_if
|
451
|
-
level =
|
468
|
+
level = operand[0]
|
452
469
|
raise EvalError, "br op without level" if !level.is_a?(Integer)
|
453
470
|
cond = stack.pop
|
454
471
|
raise EvalError, "cond not found" if !cond.is_a?(I32)
|
@@ -459,9 +476,9 @@ module Wardite
|
|
459
476
|
frame.pc = pc
|
460
477
|
|
461
478
|
when :br_table
|
462
|
-
level_vec =
|
479
|
+
level_vec = operand[0]
|
463
480
|
raise EvalError, "no level vector" if !level_vec.is_a?(Array)
|
464
|
-
default =
|
481
|
+
default = operand[1]
|
465
482
|
raise EvalError, "no default specified" if !default.is_a?(Integer)
|
466
483
|
idx = stack.pop
|
467
484
|
raise EvalError, "idx not found" if !idx.is_a?(I32)
|
@@ -474,29 +491,29 @@ module Wardite
|
|
474
491
|
frame.pc = pc
|
475
492
|
|
476
493
|
when :block
|
477
|
-
block =
|
494
|
+
block = operand[0]
|
478
495
|
raise EvalError, "block op without block" if !block.is_a?(Block)
|
479
|
-
next_pc =
|
496
|
+
next_pc = end_pos || -1
|
480
497
|
label = Label.new(:block, next_pc, stack.size, block.result_size)
|
481
498
|
frame.labels.push(label)
|
482
499
|
|
483
500
|
when :loop
|
484
|
-
block =
|
501
|
+
block = operand[0]
|
485
502
|
raise EvalError, "loop op without block" if !block.is_a?(Block)
|
486
503
|
start = frame.pc
|
487
|
-
next_pc =
|
504
|
+
next_pc = end_pos || -1
|
488
505
|
label = Label.new(:loop, next_pc, stack.size, block.result_size, start)
|
489
506
|
frame.labels.push(label)
|
490
507
|
|
491
508
|
when :if
|
492
|
-
block =
|
509
|
+
block = operand[0]
|
493
510
|
raise EvalError, "if op without block" if !block.is_a?(Block)
|
494
511
|
cond = stack.pop
|
495
512
|
raise EvalError, "cond not found" if !cond.is_a?(I32)
|
496
|
-
next_pc =
|
513
|
+
next_pc = end_pos || -1
|
497
514
|
|
498
515
|
if cond.value.zero?
|
499
|
-
frame.pc =
|
516
|
+
frame.pc = else_pos || -1
|
500
517
|
end
|
501
518
|
|
502
519
|
if frame.pc == next_pc
|
@@ -516,7 +533,7 @@ module Wardite
|
|
516
533
|
end
|
517
534
|
|
518
535
|
when :call
|
519
|
-
idx =
|
536
|
+
idx = operand[0]
|
520
537
|
raise EvalError, "[BUG] local operand not found" if !idx.is_a?(Integer)
|
521
538
|
fn = self.instance.store.funcs[idx]
|
522
539
|
case fn
|
@@ -532,9 +549,9 @@ module Wardite
|
|
532
549
|
when :call_indirect
|
533
550
|
table = self.instance.store.tables[0]
|
534
551
|
raise EvalError, "table required but not found" if !table
|
535
|
-
type_idx =
|
552
|
+
type_idx = operand[0]
|
536
553
|
raise EvalError, "[BUG] index operand invalid" if !type_idx.is_a?(Integer)
|
537
|
-
nullbyte =
|
554
|
+
nullbyte = operand[1]
|
538
555
|
raise EvalError, "[BUG] invalid bytearray of call_indirect" if nullbyte != 0x0
|
539
556
|
table_idx = stack.pop
|
540
557
|
raise EvalError, "[BUG] index stack invalid" if !table_idx.is_a?(I32)
|
@@ -602,7 +619,7 @@ module Wardite
|
|
602
619
|
stack.push(cond.value != 0 ? left : right)
|
603
620
|
|
604
621
|
when :local_get
|
605
|
-
idx =
|
622
|
+
idx = operand[0]
|
606
623
|
if !idx.is_a?(Integer)
|
607
624
|
raise EvalError, "[BUG] invalid type of operand"
|
608
625
|
end
|
@@ -614,7 +631,7 @@ module Wardite
|
|
614
631
|
stack.push(local)
|
615
632
|
|
616
633
|
when :local_set
|
617
|
-
idx =
|
634
|
+
idx = operand[0]
|
618
635
|
if !idx.is_a?(Integer)
|
619
636
|
raise EvalError, "[BUG] invalid type of operand"
|
620
637
|
end
|
@@ -625,7 +642,7 @@ module Wardite
|
|
625
642
|
frame.locals[idx] = value
|
626
643
|
|
627
644
|
when :local_tee
|
628
|
-
idx =
|
645
|
+
idx = operand[0]
|
629
646
|
if !idx.is_a?(Integer)
|
630
647
|
raise EvalError, "[BUG] invalid type of operand"
|
631
648
|
end
|
@@ -637,7 +654,7 @@ module Wardite
|
|
637
654
|
stack.push value
|
638
655
|
|
639
656
|
when :global_get
|
640
|
-
idx =
|
657
|
+
idx = operand[0]
|
641
658
|
if !idx.is_a?(Integer)
|
642
659
|
raise EvalError, "[BUG] invalid type of operand"
|
643
660
|
end
|
@@ -648,7 +665,7 @@ module Wardite
|
|
648
665
|
stack.push(global.value)
|
649
666
|
|
650
667
|
when :global_set
|
651
|
-
idx =
|
668
|
+
idx = operand[0]
|
652
669
|
if !idx.is_a?(Integer)
|
653
670
|
raise EvalError, "[BUG] invalid type of operand"
|
654
671
|
end
|
@@ -679,11 +696,11 @@ module Wardite
|
|
679
696
|
stack.push(I32(memory.grow(delta.value)))
|
680
697
|
|
681
698
|
when :memory_init
|
682
|
-
idx =
|
699
|
+
idx = operand[0]
|
683
700
|
if !idx.is_a?(Integer)
|
684
701
|
raise EvalError, "[BUG] invalid type of operand"
|
685
702
|
end
|
686
|
-
if
|
703
|
+
if operand[1] != 0x0
|
687
704
|
$stderr.puts "warning: :memory_init is not ending with 0x00"
|
688
705
|
end
|
689
706
|
data_sec = instance.data_section
|
@@ -705,7 +722,7 @@ module Wardite
|
|
705
722
|
memory.data[dest_offset.value...(dest_offset.value+length.value)] = source
|
706
723
|
|
707
724
|
when :memory_copy
|
708
|
-
if
|
725
|
+
if operand[0] != 0x0 || operand[1] != 0x0
|
709
726
|
$stderr.puts "warning: :memory_copy is not ending with 0x00"
|
710
727
|
end
|
711
728
|
length, src_offset, dest_offset = stack.pop, stack.pop, stack.pop
|
@@ -718,7 +735,7 @@ module Wardite
|
|
718
735
|
memory.data[dest_offset.value...(dest_offset.value+length.value)] = source
|
719
736
|
|
720
737
|
when :memory_fill
|
721
|
-
if
|
738
|
+
if operand[0] != 0x0
|
722
739
|
$stderr.puts "warning: :memory_fill is not ending with 0x00"
|
723
740
|
end
|
724
741
|
length, byte, dest_offset = stack.pop, stack.pop, stack.pop
|
@@ -841,7 +858,7 @@ module Wardite
|
|
841
858
|
attr_accessor :pc #: Integer
|
842
859
|
attr_accessor :sp #: Integer
|
843
860
|
|
844
|
-
attr_accessor :body #: Array[
|
861
|
+
attr_accessor :body #: Array[[Symbol, Symbol, Array[Wardite::operandItem], Integer?, Integer?]]
|
845
862
|
|
846
863
|
attr_accessor :arity #: Integer
|
847
864
|
|
@@ -853,7 +870,7 @@ module Wardite
|
|
853
870
|
|
854
871
|
# @rbs pc: Integer
|
855
872
|
# @rbs sp: Integer
|
856
|
-
# @rbs body: Array[
|
873
|
+
# @rbs body: Array[[Symbol, Symbol, Array[Wardite::operandItem], Integer?, Integer?]]
|
857
874
|
# @rbs arity: Integer
|
858
875
|
# @rbs locals: Array[wasmValue]
|
859
876
|
# @rbs returb: void
|
@@ -1247,7 +1264,7 @@ module Wardite
|
|
1247
1264
|
@default_locals = construct_default_locals
|
1248
1265
|
end
|
1249
1266
|
|
1250
|
-
# @rbs return: Array[
|
1267
|
+
# @rbs return: Array[[Symbol, Symbol, Array[operandItem], Integer?, Integer?]]
|
1251
1268
|
def body
|
1252
1269
|
code_body.body
|
1253
1270
|
end
|
@@ -1255,7 +1272,7 @@ module Wardite
|
|
1255
1272
|
# @rbs return: Array[Symbol]
|
1256
1273
|
def locals_type
|
1257
1274
|
code_body.locals_type
|
1258
|
-
end
|
1275
|
+
end
|
1259
1276
|
|
1260
1277
|
# @rbs return: Array[Integer]
|
1261
1278
|
def locals_count
|
data/rbs_collection.lock.yaml
CHANGED
@@ -6,7 +6,7 @@ gems:
|
|
6
6
|
source:
|
7
7
|
type: git
|
8
8
|
name: ruby/gem_rbs_collection
|
9
|
-
revision:
|
9
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
10
10
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
11
11
|
repo_dir: gems
|
12
12
|
- name: ast
|
@@ -14,7 +14,7 @@ gems:
|
|
14
14
|
source:
|
15
15
|
type: git
|
16
16
|
name: ruby/gem_rbs_collection
|
17
|
-
revision:
|
17
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
18
18
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
19
19
|
repo_dir: gems
|
20
20
|
- name: base64
|
@@ -22,7 +22,7 @@ gems:
|
|
22
22
|
source:
|
23
23
|
type: git
|
24
24
|
name: ruby/gem_rbs_collection
|
25
|
-
revision:
|
25
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
26
26
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
27
27
|
repo_dir: gems
|
28
28
|
- name: bigdecimal
|
@@ -30,7 +30,7 @@ gems:
|
|
30
30
|
source:
|
31
31
|
type: git
|
32
32
|
name: ruby/gem_rbs_collection
|
33
|
-
revision:
|
33
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
34
34
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
35
35
|
repo_dir: gems
|
36
36
|
- name: concurrent-ruby
|
@@ -38,7 +38,7 @@ gems:
|
|
38
38
|
source:
|
39
39
|
type: git
|
40
40
|
name: ruby/gem_rbs_collection
|
41
|
-
revision:
|
41
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
42
42
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
43
43
|
repo_dir: gems
|
44
44
|
- name: connection_pool
|
@@ -46,7 +46,7 @@ gems:
|
|
46
46
|
source:
|
47
47
|
type: git
|
48
48
|
name: ruby/gem_rbs_collection
|
49
|
-
revision:
|
49
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
50
50
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
51
51
|
repo_dir: gems
|
52
52
|
- name: csv
|
@@ -54,7 +54,7 @@ gems:
|
|
54
54
|
source:
|
55
55
|
type: git
|
56
56
|
name: ruby/gem_rbs_collection
|
57
|
-
revision:
|
57
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
58
58
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
59
59
|
repo_dir: gems
|
60
60
|
- name: date
|
@@ -86,7 +86,7 @@ gems:
|
|
86
86
|
source:
|
87
87
|
type: git
|
88
88
|
name: ruby/gem_rbs_collection
|
89
|
-
revision:
|
89
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
90
90
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
91
91
|
repo_dir: gems
|
92
92
|
- name: json
|
@@ -98,7 +98,7 @@ gems:
|
|
98
98
|
source:
|
99
99
|
type: git
|
100
100
|
name: ruby/gem_rbs_collection
|
101
|
-
revision:
|
101
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
102
102
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
103
103
|
repo_dir: gems
|
104
104
|
- name: logger
|
@@ -106,17 +106,17 @@ gems:
|
|
106
106
|
source:
|
107
107
|
type: stdlib
|
108
108
|
- name: minitest
|
109
|
-
version: '
|
109
|
+
version: '5.25'
|
110
110
|
source:
|
111
|
-
type:
|
111
|
+
type: git
|
112
|
+
name: ruby/gem_rbs_collection
|
113
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
114
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
115
|
+
repo_dir: gems
|
112
116
|
- name: monitor
|
113
117
|
version: '0'
|
114
118
|
source:
|
115
119
|
type: stdlib
|
116
|
-
- name: mutex_m
|
117
|
-
version: '0'
|
118
|
-
source:
|
119
|
-
type: stdlib
|
120
120
|
- name: openssl
|
121
121
|
version: '0'
|
122
122
|
source:
|
@@ -130,7 +130,7 @@ gems:
|
|
130
130
|
source:
|
131
131
|
type: git
|
132
132
|
name: ruby/gem_rbs_collection
|
133
|
-
revision:
|
133
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
134
134
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
135
135
|
repo_dir: gems
|
136
136
|
- name: pathname
|
@@ -142,7 +142,7 @@ gems:
|
|
142
142
|
source:
|
143
143
|
type: git
|
144
144
|
name: ruby/gem_rbs_collection
|
145
|
-
revision:
|
145
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
146
146
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
147
147
|
repo_dir: gems
|
148
148
|
- name: rake
|
@@ -150,11 +150,11 @@ gems:
|
|
150
150
|
source:
|
151
151
|
type: git
|
152
152
|
name: ruby/gem_rbs_collection
|
153
|
-
revision:
|
153
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
154
154
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
155
155
|
repo_dir: gems
|
156
156
|
- name: rbs
|
157
|
-
version: 3.
|
157
|
+
version: 3.9.4
|
158
158
|
source:
|
159
159
|
type: rubygems
|
160
160
|
- name: rdoc
|
@@ -198,7 +198,11 @@ gems:
|
|
198
198
|
source:
|
199
199
|
type: git
|
200
200
|
name: ruby/gem_rbs_collection
|
201
|
-
revision:
|
201
|
+
revision: 4873ad046b4ea8931591626cd547becae6d1e84e
|
202
202
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
203
203
|
repo_dir: gems
|
204
|
+
- name: uri
|
205
|
+
version: '0'
|
206
|
+
source:
|
207
|
+
type: stdlib
|
204
208
|
gemfile_lock_path: Gemfile.lock
|