Eric Blake <ebl...@redhat.com> writes: > On 08/04/2015 09:58 AM, Markus Armbruster wrote: >> It's first class, because unlike '**', it actually works, i.e. doesn't >> require 'gen': false. >> >> '**' will go away next. >> >> Signed-off-by: Markus Armbruster <arm...@redhat.com> >> Reviewed-by: Eric Blake <ebl...@redhat.com> >> --- > >> @@ -1039,8 +1040,7 @@ class QAPISchema(object): >> >> def _def_builtin_type(self, name, json_type, c_type, c_null): >> self._def_entity(QAPISchemaBuiltinType(name, json_type, c_type, >> c_null)) >> - if name != '**': >> - self._make_array_type(name) # TODO really needed? >> + self._make_array_type(name) # TODO really needed? > > Do we really want to allow ['any'] in schemata? That would imply the > possibility of a 2D array.
It's 2D-by-trickery. Unlike the existing trick of wrapping the inner array in a struct, this one isn't visible on the wire, though. It requires giving up some type checking. >From a backend point of view, array of any type should just work. We're already debating whether we want them under PATCH 02, so let's continue there. >> +++ b/tests/qapi-schema/qapi-schema-test.json >> @@ -83,6 +83,8 @@ >> 'returns': 'UserDefTwo' } >> { 'command': 'user_def_cmd3', 'data': {'a': 'int', '*b': 'int' }, >> 'returns': 'int' } >> +# note: command name 'guest-sync' chosen to avoid "cannot use built-in" >> error >> +{ 'command': 'guest-sync', 'data': { 'arg': 'any' }, 'returns': 'any' } >> > > In particular, if we DO want to allow it, this file should be enhanced > to include ['any'] in the UserDefNativeListUnion. Yes, to keep the test case complete. > As it is, JSON allows mixed-type arrays, but all our uses of QList are > fixed-type (all elements share the same type); allowing an array of any > element may prove to be problematic. anyList is fixed-type, too: the fixed type is QObject * ;) ['any'] isn't ABI until we actually use it in an external interface.