[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V9 02/10] qapi script: add check for duplicated key
From: |
Wenchao Xia |
Subject: |
[Qemu-devel] [PATCH V9 02/10] qapi script: add check for duplicated key |
Date: |
Tue, 4 Mar 2014 18:44:32 -0800 |
It is bad that same key was specified twice, especially when a union has
two branches with same condition. This patch can prevent it.
Signed-off-by: Wenchao Xia <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
scripts/qapi.py | 2 ++
tests/Makefile | 3 ++-
tests/qapi-schema/duplicate-key.err | 1 +
tests/qapi-schema/duplicate-key.exit | 1 +
tests/qapi-schema/duplicate-key.json | 2 ++
5 files changed, 8 insertions(+), 1 deletions(-)
create mode 100644 tests/qapi-schema/duplicate-key.err
create mode 100644 tests/qapi-schema/duplicate-key.exit
create mode 100644 tests/qapi-schema/duplicate-key.json
create mode 100644 tests/qapi-schema/duplicate-key.out
diff --git a/scripts/qapi.py b/scripts/qapi.py
index 023930e..d0e7934 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -116,6 +116,8 @@ class QAPISchema:
if self.tok != ':':
raise QAPISchemaError(self, 'Expected ":"')
self.accept()
+ if key in expr:
+ raise QAPISchemaError(self, 'Duplicate key "%s"' % key)
expr[key] = self.get_expr(True)
if self.tok == '}':
self.accept()
diff --git a/tests/Makefile b/tests/Makefile
index b17d41e..dfe06eb 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -142,7 +142,8 @@ check-qapi-schema-y := $(addprefix tests/qapi-schema/, \
missing-comma-object.json non-objects.json \
qapi-schema-test.json quoted-structural-chars.json \
trailing-comma-list.json trailing-comma-object.json \
- unclosed-list.json unclosed-object.json unclosed-string.json)
+ unclosed-list.json unclosed-object.json unclosed-string.json \
+ duplicate-key.json)
GENERATED_HEADERS += tests/test-qapi-types.h tests/test-qapi-visit.h
tests/test-qmp-commands.h
diff --git a/tests/qapi-schema/duplicate-key.err
b/tests/qapi-schema/duplicate-key.err
new file mode 100644
index 0000000..0801c6a
--- /dev/null
+++ b/tests/qapi-schema/duplicate-key.err
@@ -0,0 +1 @@
+<stdin>:2:10: Duplicate key "key"
diff --git a/tests/qapi-schema/duplicate-key.exit
b/tests/qapi-schema/duplicate-key.exit
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/tests/qapi-schema/duplicate-key.exit
@@ -0,0 +1 @@
+1
diff --git a/tests/qapi-schema/duplicate-key.json
b/tests/qapi-schema/duplicate-key.json
new file mode 100644
index 0000000..1b55d88
--- /dev/null
+++ b/tests/qapi-schema/duplicate-key.json
@@ -0,0 +1,2 @@
+{ 'key': 'value',
+ 'key': 'value' }
diff --git a/tests/qapi-schema/duplicate-key.out
b/tests/qapi-schema/duplicate-key.out
new file mode 100644
index 0000000..e69de29
--
1.7.1
- [Qemu-devel] [PATCH V9 00/10] qapi script: support enum as discriminator and better enum name, Wenchao Xia, 2014/03/04
- [Qemu-devel] [PATCH V9 01/10] qapi script: remember explicitly defined enum values, Wenchao Xia, 2014/03/04
- [Qemu-devel] [PATCH V9 02/10] qapi script: add check for duplicated key,
Wenchao Xia <=
- [Qemu-devel] [PATCH V9 03/10] qapi script: remember line number in schema parsing, Wenchao Xia, 2014/03/04
- [Qemu-devel] [PATCH V9 04/10] qapi script: check correctness of union, Wenchao Xia, 2014/03/04
- [Qemu-devel] [PATCH V9 05/10] qapi script: code move for generate_enum_name(), Wenchao Xia, 2014/03/04
- [Qemu-devel] [PATCH V9 06/10] qapi script: use same function to generate enum string, Wenchao Xia, 2014/03/04
- [Qemu-devel] [PATCH V9 07/10] qapi script: support enum type as discriminator in union, Wenchao Xia, 2014/03/04