Skip to content

Commit

Permalink
qapi: Pseudo-type '**' is now unused, drop it
Browse files Browse the repository at this point in the history
'gen': false needs to stay for now, because netdev_add is still using
it.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <1442401589-24189-25-git-send-email-armbru@redhat.com>
  • Loading branch information
Markus Armbruster committed Sep 21, 2015
1 parent b8a9832 commit 2d21291
Show file tree
Hide file tree
Showing 11 changed files with 11 additions and 40 deletions.
18 changes: 6 additions & 12 deletions docs/qapi-code-gen.txt
Expand Up @@ -111,10 +111,7 @@ and field names within a type, should be all lower case with words
separated by a hyphen. However, some existing older commands and
complex types use underscore; when extending such expressions,
consistency is preferred over blindly avoiding underscore. Event
names should be ALL_CAPS with words separated by underscore. The
special string '**' appears for some commands that manually perform
their own type checking rather than relying on the type-safe code
produced by the qapi code generators.
names should be ALL_CAPS with words separated by underscore.

Any name (command, event, type, field, or enum value) beginning with
"x-" is marked experimental, and may be withdrawn or changed
Expand Down Expand Up @@ -461,14 +458,11 @@ which would validate this Client JSON Protocol transaction:
<= { "return": [ { "value": "one" }, { } ] }

In rare cases, QAPI cannot express a type-safe representation of a
corresponding Client JSON Protocol command. In these cases, if the
command expression includes the key 'gen' with boolean value false,
then the 'data' or 'returns' member that intends to bypass generated
type-safety and do its own manual validation should use an inline
dictionary definition, with a value of '**' rather than a valid type
name for the keys that the generated code will not validate. Please
try to avoid adding new commands that rely on this, and instead use
type-safe unions. For an example of bypass usage:
corresponding Client JSON Protocol command. You then have to suppress
generation of a marshalling function by including a key 'gen' with
boolean value false, and instead write your own function. Please try
to avoid adding new commands that rely on this, and instead use
type-safe unions. For an example of this usage:

{ 'command': 'netdev_add',
'data': {'type': 'str', 'id': 'str'},
Expand Down
20 changes: 4 additions & 16 deletions scripts/qapi.py
Expand Up @@ -428,15 +428,12 @@ def is_enum(name):

def check_type(expr_info, source, value, allow_array = False,
allow_dict = False, allow_optional = False,
allow_star = False, allow_metas = []):
allow_metas = []):
global all_names

if value is None:
return

if allow_star and value == '**':
return

# Check if array type for value is okay
if isinstance(value, list):
if not allow_array:
Expand All @@ -450,10 +447,6 @@ def check_type(expr_info, source, value, allow_array = False,

# Check if type name for value is okay
if isinstance(value, str):
if value == '**':
raise QAPIExprError(expr_info,
"%s uses '**' but did not request 'gen':false"
% source)
if not value in all_names:
raise QAPIExprError(expr_info,
"%s uses unknown type '%s'"
Expand All @@ -479,7 +472,7 @@ def check_type(expr_info, source, value, allow_array = False,
# Todo: allow dictionaries to represent default values of
# an optional argument.
check_type(expr_info, "Member '%s' of %s" % (key, source), arg,
allow_array=True, allow_star=allow_star,
allow_array=True,
allow_metas=['built-in', 'union', 'alternate', 'struct',
'enum'])

Expand All @@ -499,18 +492,16 @@ def check_member_clash(expr_info, base_name, data, source = ""):

def check_command(expr, expr_info):
name = expr['command']
allow_star = expr.has_key('gen')

check_type(expr_info, "'data' for command '%s'" % name,
expr.get('data'), allow_dict=True, allow_optional=True,
allow_metas=['struct'], allow_star=allow_star)
allow_metas=['struct'])
returns_meta = ['union', 'struct']
if name in returns_whitelist:
returns_meta += ['built-in', 'alternate', 'enum']
check_type(expr_info, "'returns' for command '%s'" % name,
expr.get('returns'), allow_array=True,
allow_optional=True, allow_metas=returns_meta,
allow_star=allow_star)
allow_optional=True, allow_metas=returns_meta)

def check_event(expr, expr_info):
global events
Expand Down Expand Up @@ -1122,7 +1113,6 @@ def _def_predefineds(self):
('bool', 'boolean', 'bool', 'false'),
('any', 'value', 'QObject' + pointer_suffix, 'NULL')]:
self._def_builtin_type(*t)
self._entity_dict['**'] = self.lookup_type('any') # TODO drop this alias

def _make_implicit_enum_type(self, name, values):
name = name + 'Kind'
Expand Down Expand Up @@ -1272,8 +1262,6 @@ def check(self):
def visit(self, visitor):
visitor.visit_begin(self)
for name in sorted(self._entity_dict.keys()):
if self._entity_dict[name].name != name:
continue # ignore alias TODO drop alias and remove
self._entity_dict[name].visit(visitor)
visitor.visit_end()

Expand Down
2 changes: 1 addition & 1 deletion tests/Makefile
Expand Up @@ -234,7 +234,7 @@ check-qapi-schema-y := $(addprefix tests/qapi-schema/, \
bad-type-dict.json double-data.json unknown-expr-key.json \
redefined-type.json redefined-command.json redefined-builtin.json \
redefined-event.json command-int.json bad-data.json event-max.json \
type-bypass.json type-bypass-no-gen.json type-bypass-bad-gen.json \
type-bypass-bad-gen.json \
args-invalid.json \
args-array-empty.json args-array-unknown.json args-int.json \
args-unknown.json args-member-unknown.json args-member-array.json \
Expand Down
1 change: 0 additions & 1 deletion tests/qapi-schema/type-bypass-no-gen.err

This file was deleted.

1 change: 0 additions & 1 deletion tests/qapi-schema/type-bypass-no-gen.exit

This file was deleted.

2 changes: 0 additions & 2 deletions tests/qapi-schema/type-bypass-no-gen.json

This file was deleted.

Empty file.
Empty file removed tests/qapi-schema/type-bypass.err
Empty file.
1 change: 0 additions & 1 deletion tests/qapi-schema/type-bypass.exit

This file was deleted.

2 changes: 0 additions & 2 deletions tests/qapi-schema/type-bypass.json

This file was deleted.

4 changes: 0 additions & 4 deletions tests/qapi-schema/type-bypass.out

This file was deleted.

0 comments on commit 2d21291

Please sign in to comment.