summary refs log tree commit diff stats
path: root/scripts/qapi/common.py
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2019-09-27 15:46:22 +0200
committerMarkus Armbruster <armbru@redhat.com>2019-09-28 17:17:18 +0200
commitd7bc17c602f128bb358376e6976b3b5dee1ad732 (patch)
treedcb866d6555d49919c90479e62de679e36c3b966 /scripts/qapi/common.py
parentc9efc984ca5b5f75f184680e1ab9a7784d241578 (diff)
downloadfocaccia-qemu-d7bc17c602f128bb358376e6976b3b5dee1ad732.tar.gz
focaccia-qemu-d7bc17c602f128bb358376e6976b3b5dee1ad732.zip
qapi: Improve reporting of invalid name errors
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 <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20190927134639.4284-10-armbru@redhat.com>
Diffstat (limited to 'scripts/qapi/common.py')
-rw-r--r--scripts/qapi/common.py20
1 files changed, 16 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):
-    global valid_name
-    membername = name
+    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 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,