[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 10/27] qapi: Improve reporting of invalid name errors
From: |
Markus Armbruster |
Subject: |
[PULL 10/27] qapi: Improve reporting of invalid name errors |
Date: |
Sat, 28 Sep 2019 20:39:17 +0200 |
Split check_name() into check_name_is_str() and check_name_str(), keep
check_name() as a wrapper.
Move add_name()'s call into its caller check_exprs(), and inline.
This permits delaying check_name_str() there, so its error message
gains an "in definition" line.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
---
scripts/qapi/common.py | 20 ++++++++++++++++----
tests/qapi-schema/bad-ident.err | 1 +
tests/qapi-schema/command-int.err | 1 +
tests/qapi-schema/redefined-builtin.err | 1 +
tests/qapi-schema/redefined-command.err | 1 +
tests/qapi-schema/redefined-event.err | 1 +
tests/qapi-schema/redefined-type.err | 1 +
tests/qapi-schema/reserved-command-q.err | 1 +
tests/qapi-schema/reserved-type-kind.err | 1 +
tests/qapi-schema/reserved-type-list.err | 1 +
10 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index c909821560..6f35cd131e 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -708,11 +708,22 @@ valid_name = re.compile(r'^(__[a-zA-Z0-9.-]+_)?'
def check_name(name, info, source,
allow_optional=False, enum_member=False, permit_upper=False):
+ check_name_is_str(name, info, source)
+ check_name_str(name, info, source,
+ allow_optional, enum_member, permit_upper)
+
+
+def check_name_is_str(name, info, source):
+ if not isinstance(name, str):
+ raise QAPISemError(info, "%s requires a string name" % source)
+
+
+def check_name_str(name, info, source,
+ allow_optional=False, enum_member=False,
+ permit_upper=False):
global valid_name
membername = name
- if not isinstance(name, str):
- raise QAPISemError(info, "%s requires a string name" % source)
if name.startswith('*'):
membername = name[1:]
if not allow_optional:
@@ -734,7 +745,6 @@ def check_name(name, info, source,
def add_name(name, info, meta):
global all_names
- check_name(name, info, "'%s'" % meta, permit_upper=True)
# FIXME should reject names that differ only in '_' vs. '.'
# vs. '-', because they're liable to clash in generated C.
if name in all_names:
@@ -1153,8 +1163,10 @@ def check_exprs(exprs):
raise QAPISemError(info, "expression is missing metatype")
normalize_if(expr)
name = expr[meta]
- add_name(name, info, meta)
+ check_name_is_str(name, info, "'%s'" % meta)
info.set_defn(meta, name)
+ check_name_str(name, info, "'%s'" % meta, permit_upper=True)
+ add_name(name, info, meta)
if doc and doc.symbol != name:
raise QAPISemError(
info,
diff --git a/tests/qapi-schema/bad-ident.err b/tests/qapi-schema/bad-ident.err
index c4190602b5..6878889854 100644
--- a/tests/qapi-schema/bad-ident.err
+++ b/tests/qapi-schema/bad-ident.err
@@ -1 +1,2 @@
+tests/qapi-schema/bad-ident.json: In struct '*oops':
tests/qapi-schema/bad-ident.json:2: 'struct' does not allow optional name
'*oops'
diff --git a/tests/qapi-schema/command-int.err
b/tests/qapi-schema/command-int.err
index 0f9300679b..56b45bf656 100644
--- a/tests/qapi-schema/command-int.err
+++ b/tests/qapi-schema/command-int.err
@@ -1 +1,2 @@
+tests/qapi-schema/command-int.json: In command 'int':
tests/qapi-schema/command-int.json:2: built-in 'int' is already defined
diff --git a/tests/qapi-schema/redefined-builtin.err
b/tests/qapi-schema/redefined-builtin.err
index b2757225c4..67775fdb41 100644
--- a/tests/qapi-schema/redefined-builtin.err
+++ b/tests/qapi-schema/redefined-builtin.err
@@ -1 +1,2 @@
+tests/qapi-schema/redefined-builtin.json: In struct 'size':
tests/qapi-schema/redefined-builtin.json:2: built-in 'size' is already defined
diff --git a/tests/qapi-schema/redefined-command.err
b/tests/qapi-schema/redefined-command.err
index 82ae256e63..b77a05d354 100644
--- a/tests/qapi-schema/redefined-command.err
+++ b/tests/qapi-schema/redefined-command.err
@@ -1 +1,2 @@
+tests/qapi-schema/redefined-command.json: In command 'foo':
tests/qapi-schema/redefined-command.json:3: command 'foo' is already defined
diff --git a/tests/qapi-schema/redefined-event.err
b/tests/qapi-schema/redefined-event.err
index 35429cb481..fd02d38157 100644
--- a/tests/qapi-schema/redefined-event.err
+++ b/tests/qapi-schema/redefined-event.err
@@ -1 +1,2 @@
+tests/qapi-schema/redefined-event.json: In event 'EVENT_A':
tests/qapi-schema/redefined-event.json:3: event 'EVENT_A' is already defined
diff --git a/tests/qapi-schema/redefined-type.err
b/tests/qapi-schema/redefined-type.err
index 06ea78c478..89acc82c2d 100644
--- a/tests/qapi-schema/redefined-type.err
+++ b/tests/qapi-schema/redefined-type.err
@@ -1 +1,2 @@
+tests/qapi-schema/redefined-type.json: In enum 'foo':
tests/qapi-schema/redefined-type.json:3: struct 'foo' is already defined
diff --git a/tests/qapi-schema/reserved-command-q.err
b/tests/qapi-schema/reserved-command-q.err
index f939e044eb..0844e14b26 100644
--- a/tests/qapi-schema/reserved-command-q.err
+++ b/tests/qapi-schema/reserved-command-q.err
@@ -1 +1,2 @@
+tests/qapi-schema/reserved-command-q.json: In command 'q-unix':
tests/qapi-schema/reserved-command-q.json:5: 'command' uses invalid name
'q-unix'
diff --git a/tests/qapi-schema/reserved-type-kind.err
b/tests/qapi-schema/reserved-type-kind.err
index 0a38efaad8..8d21479000 100644
--- a/tests/qapi-schema/reserved-type-kind.err
+++ b/tests/qapi-schema/reserved-type-kind.err
@@ -1 +1,2 @@
+tests/qapi-schema/reserved-type-kind.json: In enum 'UnionKind':
tests/qapi-schema/reserved-type-kind.json:2: enum 'UnionKind' should not end
in 'Kind'
diff --git a/tests/qapi-schema/reserved-type-list.err
b/tests/qapi-schema/reserved-type-list.err
index 4510fa6d90..2bdd7d8a06 100644
--- a/tests/qapi-schema/reserved-type-list.err
+++ b/tests/qapi-schema/reserved-type-list.err
@@ -1 +1,2 @@
+tests/qapi-schema/reserved-type-list.json: In struct 'FooList':
tests/qapi-schema/reserved-type-list.json:5: struct 'FooList' should not end
in 'List'
--
2.21.0
- [PULL 00/27] QAPI patches for 2019-09-28, Markus Armbruster, 2019/09/28
- [PULL 01/27] qmp-dispatch: Use CommandNotFound error for disabled commands, Markus Armbruster, 2019/09/28
- [PULL 02/27] qapi: Tighten QAPISchemaFOO.check() assertions, Markus Armbruster, 2019/09/28
- [PULL 14/27] qapi: Make check_type()'s array case a bit more obvious, Markus Armbruster, 2019/09/28
- [PULL 11/27] qapi: Use check_name_str() where it suffices, Markus Armbruster, 2019/09/28
- [PULL 13/27] qapi: Move check for reserved names out of add_name(), Markus Armbruster, 2019/09/28
- [PULL 10/27] qapi: Improve reporting of invalid name errors,
Markus Armbruster <=
- [PULL 27/27] qapi: Improve source file read error handling, Markus Armbruster, 2019/09/28
- [PULL 19/27] qapi: Improve reporting of invalid 'if' errors, Markus Armbruster, 2019/09/28
- [PULL 20/27] qapi: Improve reporting of invalid flags, Markus Armbruster, 2019/09/28
- [PULL 18/27] qapi: Move context-free checking to the proper place, Markus Armbruster, 2019/09/28
- [PULL 24/27] qapi: Eliminate check_keys(), rename check_known_keys(), Markus Armbruster, 2019/09/28
- [PULL 21/27] qapi: Improve reporting of missing / unknown definition keys, Markus Armbruster, 2019/09/28
- [PULL 23/27] qapi: Improve reporting of invalid 'if' further, Markus Armbruster, 2019/09/28
- [PULL 17/27] qapi: Move context-sensitive checking to the proper place, Markus Armbruster, 2019/09/28
- [PULL 03/27] qapi: Rename .owner to .defined_in, Markus Armbruster, 2019/09/28
- [PULL 04/27] qapi: New QAPISourceInfo, replacing dict, Markus Armbruster, 2019/09/28