mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-22 20:55:27 +00:00
qapi: Prepare for system modules other than 'builtin'
The next commit wants to generate qapi-emit-events.{c.h}. To enable that, extend QAPISchemaModularCVisitor to support additional "system modules", i.e. modules that don't correspond to a (user-defined) QAPI schema module. Backports commit c2e196a9b41235a308fb6d1c516aa91ba0a807c8 from qemu
This commit is contained in:
parent
5d0966ce6b
commit
6279d604d3
|
@ -2270,27 +2270,42 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
|
|||
self._module = {}
|
||||
self._main_module = None
|
||||
|
||||
@staticmethod
|
||||
def _is_user_module(name):
|
||||
return name and not name.startswith('./')
|
||||
|
||||
@staticmethod
|
||||
def _is_builtin_module(name):
|
||||
return not name
|
||||
|
||||
def _module_basename(self, what, name):
|
||||
if name is None:
|
||||
return re.sub(r'-', '-builtin-', what)
|
||||
basename = os.path.join(os.path.dirname(name),
|
||||
self._prefix + what)
|
||||
if name == self._main_module:
|
||||
return basename
|
||||
return basename + '-' + os.path.splitext(os.path.basename(name))[0]
|
||||
ret = '' if self._is_builtin_module(name) else self._prefix
|
||||
if self._is_user_module(name):
|
||||
dirname, basename = os.path.split(name)
|
||||
ret += what
|
||||
if name != self._main_module:
|
||||
ret += '-' + os.path.splitext(basename)[0]
|
||||
ret = os.path.join(dirname, ret)
|
||||
else:
|
||||
name = name[2:] if name else 'builtin'
|
||||
ret += re.sub(r'-', '-' + name + '-', what)
|
||||
return ret
|
||||
|
||||
def _add_module(self, name, blurb):
|
||||
if self._main_module is None and not self._is_builtin_module(name):
|
||||
self._main_module = name
|
||||
genc = QAPIGenC(blurb, self._pydoc)
|
||||
genh = QAPIGenH(blurb, self._pydoc)
|
||||
self._module[name] = (genc, genh)
|
||||
self._set_module(name)
|
||||
|
||||
def _add_user_module(self, name, blurb):
|
||||
assert self._is_user_module(name)
|
||||
if self._main_module is None:
|
||||
self._main_module = name
|
||||
self._add_module(name, blurb)
|
||||
|
||||
def _add_system_module(self, name, blurb):
|
||||
self._add_module(name and './' + name, blurb)
|
||||
|
||||
def _set_module(self, name):
|
||||
self._genc, self._genh = self._module[name]
|
||||
|
||||
|
@ -2315,7 +2330,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor):
|
|||
self._genc = None
|
||||
self._genh = None
|
||||
else:
|
||||
self._add_module(name, self._blurb)
|
||||
self._add_user_module(name, self._blurb)
|
||||
self._begin_user_module(name)
|
||||
|
||||
def visit_include(self, name, info):
|
||||
|
|
|
@ -179,7 +179,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
|
|||
QAPISchemaModularCVisitor.__init__(
|
||||
self, prefix, 'qapi-types', ' * Schema-defined QAPI types',
|
||||
__doc__)
|
||||
self._add_module(None, ' * Built-in QAPI types')
|
||||
self._add_system_module(None, ' * Built-in QAPI types')
|
||||
self._genc.preamble_add(mcgen('''
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/dealloc-visitor.h"
|
||||
|
|
|
@ -278,7 +278,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
|
|||
QAPISchemaModularCVisitor.__init__(
|
||||
self, prefix, 'qapi-visit', ' * Schema-defined QAPI visitors',
|
||||
__doc__)
|
||||
self._add_module(None, ' * Built-in QAPI visitors')
|
||||
self._add_system_module(None, ' * Built-in QAPI visitors')
|
||||
self._genc.preamble_add(mcgen('''
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu-common.h"
|
||||
|
|
Loading…
Reference in a new issue