# File lib/dbus/introspect.rb, line 339
    def define_method_from_descriptor(m)
      check_for_eval(m.name)
      check_for_quoted_eval(@name)
      methdef = "def #{m.name}("
      methdef += (0..(m.params.size - 1)).to_a.collect { |n|
        "arg#{n}"
      }.join(", ")
      methdef += %{)
              msg = Message.new(Message::METHOD_CALL)
              msg.path = @object.path
              msg.interface = "#{@name}"
              msg.destination = @object.destination
              msg.member = "#{m.name}"
              msg.sender = @object.bus.unique_name
            }
      idx = 0
      m.params.each do |fpar|
        par = fpar.type
        check_for_quoted_eval(par)

        # This is the signature validity check
        Type::Parser.new(par).parse

        methdef += %{
          msg.add_param("#{par}", arg#{idx})
        }
        idx += 1
      end
      methdef += "
        ret = nil
        if block_given?
          @object.bus.on_return(msg) do |rmsg|
            if rmsg.is_a?(Error)
              yield(rmsg)
            else
              yield(rmsg, *rmsg.params)
            end
          end
          @object.bus.send(msg.marshall)
        else
          @object.bus.send_sync(msg) do |rmsg|
            if rmsg.is_a?(Error)
              raise rmsg
            else
              ret = rmsg.params
            end
          end
        end
        ret
      end
      "
      singleton_class.class_eval(methdef)
      @methods[m.name] = m
    end