def to_vool
      block_name = "implicit_block_#{object_id}".to_sym
      block = Vool::BlockStatement.new( @args.dup , @body.to_vool)
      assign = Vool::LocalAssignment.new( block_name , block)
      sendd = @send.to_vool
      if(sendd.is_a?(Vool::Statements))
        ret = sendd
        sendd = sendd.last
      else
        ret = Vool::Statements.new([sendd])
      end
      sendd.arguments << LocalVariable.new(block_name).to_vool
      ret.prepend(assign)
      ret
    end
def to_vool
      block_name = "implicit_block_#{object_id}".to_sym
      block = Vool::BlockStatement.new( @args.dup , @body.to_vool)
      assign = Vool::LocalAssignment.new( block_name , block)
      sendd = @send.to_vool
      if(sendd.is_a?(Vool::Statements))
        ret = sendd
        sendd = sendd.last
      else
        ret = Vool::Statements.new([sendd])
      end
      sendd.arguments << LocalVariable.new(block_name).to_vool
      ret.prepend(assign)
      ret
    end
In Vool we "hoist" the block definition through a local assignment, much
 as we would other complex args (bit like in the Normalizer)
 The block is then passed as a normal variable to the send. In other words, the
 BlockStatement resolves to a list of Statements, the last of which is the send