tfpt review “/shelveset:arity;REDMOND\tomat”
Comment :
Fixes bugs in block parameters:
- Anonymous unsplat parameters were not handled correctly (the
parser ignored them):
def y
a = [1,2,3,4,5]
yield a,[6]
end
y { |(x,y,),| p x,y }
2) Arity wasn’t calculated correctly. Arity depends upon AST
structure that is not preserved in runtime. Therefore we need to
calculate block arity at compile time and save it to BlockDispatcher.
Some peculiar cases:
Proc.new{|(a,b,c,)|}.arity.should == -4
Proc.new{|()|}.arity.should == -1
Proc.new{}.arity.should == -1
Proc.new{||}.arity.should == 0
Proc.new{x,}.arity.should == 1
Proc.new{(x,)}.arity.should == 1
Tomas