Problems with empty Arrays and Dicts in untyped languages

Joe Shaw joeshaw at novell.com
Thu Jul 28 05:52:03 EST 2005


On Wed, 2005-07-27 at 15:31 -0400, Colin Walters wrote:
> Joe, can you give some sample code for receiving arrays with Mono?  Does
> the caller specify what type of array/dictionary they're expecting to
> receive?

Sheesh, you're going to make me work?

Here's the code which demarshals an array:

        int elementTypeCode = dbus_message_iter_get_element_type (iter);
        dbus_message_iter_recurse (iter, arrayIter);
        this.elementType = (Type) Arguments.DBusTypes [(char) elementTypeCode];
        
        elements = new ArrayList ();
        
        if (dbus_message_iter_get_arg_type (arrayIter) != 0) {
          do {
            object [] pars = new Object[2];
            pars[0] = arrayIter;
            pars[1] = service;
            DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars);
            elements.Add(dbusType);
          } while (dbus_message_iter_next(arrayIter));
        }

Later an array of elementType is instantiated and the objects in
elements are copied into it.  If elementType becomes a new EMPTY_ARRAY,
there's no easy way for us to map this to what the user is expecting.
The mono bindings pretty heavily rely on emitting IL, which makes it
kind of hard to follow and a little gross to use.

Joe



More information about the dbus mailing list