block arg access was off by one

This commit is contained in:
Torsten Ruger 2018-07-27 12:16:06 +03:00
parent e1d5592c55
commit 1cb07a4164
4 changed files with 15 additions and 5 deletions

View File

@ -68,7 +68,17 @@ module Parfait
end
def to_s
"#{class_name}-#{@names.inspect}"
str = "#{class_name}-["
first = false
@names.each do |name|
unless(first)
first = true
str += ":#{name}"
else
str += ", :#{name}"
end
end
str + "]"
end
def method_names

View File

@ -66,7 +66,7 @@ module Risc
end
def to_s
s = "#{symbol}:#{type}"
s = "#{symbol}:#{type&.class_name}"
s += ":#{extra}" unless extra.empty?
s
end

View File

@ -64,7 +64,7 @@ module Vool
# to call the block (that we know now to be the last arg),
# we do a message setup, arg transfer and the a arg_yield (which is similar to dynamic_call)
def yield_arg_block(compiler)
arg_index = compiler.get_method.arguments_type.get_length
arg_index = compiler.get_method.arguments_type.get_length - 1
setup = Mom::MessageSetup.new( arg_index )
mom_receive = @receiver.slot_definition(compiler)
arg_target = [:message , :next_message , :arguments]

View File

@ -35,7 +35,7 @@ module Vool
end
def test_setup
assert_equal MessageSetup, @ins.next(2).class
assert_equal 3, @ins.next(2).method_source
assert_equal 2, @ins.next(2).method_source
end
def test_transfer
assert_equal ArgumentTransfer, @ins.next(3).class
@ -53,7 +53,7 @@ module Vool
end
def test_yield
assert_equal BlockYield, @ins.next(4).class
assert_equal 3, @ins.next(4).arg_index
assert_equal 2, @ins.next(4).arg_index
end
end
end