mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00

Built-in stuff is not parsed from a source file, and therefore have no QAPISourceInfo. If such None info was used for reporting an error, built-in stuff would be broken. Programming error. Instead of reporting a confusing error with bogus source location then, we better crash. We currently crash only if self.col was set. Assert that self.info is not None in order to crash reliably. We can not yet change the type of the initializer to prove this cannot happen at static analysis time before the remainder of the code is fully typed. Signed-off-by: John Snow <jsnow@redhat.com> Message-Id: <20210421192233.3542904-5-jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
# -*- 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):
|
|
"""Base class for all exceptions from the QAPI package."""
|
|
|
|
|
|
class QAPISourceError(QAPIError):
|
|
"""Error class for all exceptions identifying a source location."""
|
|
def __init__(self, info, msg, col=None):
|
|
super().__init__()
|
|
self.info = info
|
|
self.msg = msg
|
|
self.col = col
|
|
|
|
def __str__(self):
|
|
assert self.info is not None
|
|
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(QAPISourceError):
|
|
"""Error class for all QAPI schema parsing errors."""
|
|
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
|
|
super().__init__(parser.info, msg, col)
|
|
|
|
|
|
class QAPISemError(QAPISourceError):
|
|
"""Error class for semantic QAPI errors."""
|