aboutsummaryrefslogtreecommitdiff
path: root/scripts/qapi/error.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/qapi/error.py')
-rw-r--r--scripts/qapi/error.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/scripts/qapi/error.py b/scripts/qapi/error.py
new file mode 100644
index 0000000000..b9f3751bea
--- /dev/null
+++ b/scripts/qapi/error.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+#
+# QAPI error classes
+#
+# Copyright (c) 2017-2019 Red Hat Inc.
+#
+# Authors:
+# Markus Armbruster <armbru@redhat.com>
+# Marc-André Lureau <marcandre.lureau@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2.
+# See the COPYING file in the top-level directory.
+
+
+class QAPIError(Exception):
+ def __init__(self, info, col, msg):
+ Exception.__init__(self)
+ self.info = info
+ self.col = col
+ self.msg = msg
+
+ def __str__(self):
+ loc = str(self.info)
+ if self.col is not None:
+ assert self.info.line is not None
+ loc += ':%s' % self.col
+ return loc + ': ' + self.msg
+
+
+class QAPIParseError(QAPIError):
+ def __init__(self, parser, msg):
+ col = 1
+ for ch in parser.src[parser.line_pos:parser.pos]:
+ if ch == '\t':
+ col = (col + 7) % 8 + 1
+ else:
+ col += 1
+ QAPIError.__init__(self, parser.info, col, msg)
+
+
+class QAPISemError(QAPIError):
+ def __init__(self, info, msg):
+ QAPIError.__init__(self, info, None, msg)