mirror of https://github.com/xqemu/xqemu.git
trace: [tcg] Argument type transformation machinery
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
e6d6c4bebf
commit
b55835ac10
|
@ -15,6 +15,7 @@ __email__ = "stefanha@linux.vnet.ibm.com"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
import weakref
|
||||||
|
|
||||||
import tracetool.format
|
import tracetool.format
|
||||||
import tracetool.backend
|
import tracetool.backend
|
||||||
|
@ -108,6 +109,18 @@ class Arguments:
|
||||||
"""List of argument types."""
|
"""List of argument types."""
|
||||||
return [ type_ for type_, _ in self._args ]
|
return [ type_ for type_, _ in self._args ]
|
||||||
|
|
||||||
|
def transform(self, *trans):
|
||||||
|
"""Return a new Arguments instance with transformed types.
|
||||||
|
|
||||||
|
The types in the resulting Arguments instance are transformed according
|
||||||
|
to tracetool.transform.transform_type.
|
||||||
|
"""
|
||||||
|
res = []
|
||||||
|
for type_, name in self._args:
|
||||||
|
res.append((tracetool.transform.transform_type(type_, *trans),
|
||||||
|
name))
|
||||||
|
return Arguments(res)
|
||||||
|
|
||||||
|
|
||||||
class Event(object):
|
class Event(object):
|
||||||
"""Event description.
|
"""Event description.
|
||||||
|
@ -128,7 +141,7 @@ class Event(object):
|
||||||
|
|
||||||
_VALID_PROPS = set(["disable"])
|
_VALID_PROPS = set(["disable"])
|
||||||
|
|
||||||
def __init__(self, name, props, fmt, args):
|
def __init__(self, name, props, fmt, args, orig=None):
|
||||||
"""
|
"""
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
|
@ -140,12 +153,19 @@ class Event(object):
|
||||||
Event printing format.
|
Event printing format.
|
||||||
args : Arguments
|
args : Arguments
|
||||||
Event arguments.
|
Event arguments.
|
||||||
|
orig : Event or None
|
||||||
|
Original Event before transformation.
|
||||||
"""
|
"""
|
||||||
self.name = name
|
self.name = name
|
||||||
self.properties = props
|
self.properties = props
|
||||||
self.fmt = fmt
|
self.fmt = fmt
|
||||||
self.args = args
|
self.args = args
|
||||||
|
|
||||||
|
if orig is None:
|
||||||
|
self.original = weakref.ref(self)
|
||||||
|
else:
|
||||||
|
self.original = orig
|
||||||
|
|
||||||
unknown_props = set(self.properties) - self._VALID_PROPS
|
unknown_props = set(self.properties) - self._VALID_PROPS
|
||||||
if len(unknown_props) > 0:
|
if len(unknown_props) > 0:
|
||||||
raise ValueError("Unknown properties: %s"
|
raise ValueError("Unknown properties: %s"
|
||||||
|
@ -190,6 +210,14 @@ class Event(object):
|
||||||
fmt = Event.QEMU_TRACE
|
fmt = Event.QEMU_TRACE
|
||||||
return fmt % {"name": self.name}
|
return fmt % {"name": self.name}
|
||||||
|
|
||||||
|
def transform(self, *trans):
|
||||||
|
"""Return a new Event with transformed Arguments."""
|
||||||
|
return Event(self.name,
|
||||||
|
list(self.properties),
|
||||||
|
self.fmt,
|
||||||
|
self.args.transform(*trans),
|
||||||
|
self)
|
||||||
|
|
||||||
|
|
||||||
def _read_events(fobj):
|
def _read_events(fobj):
|
||||||
res = []
|
res = []
|
||||||
|
|
Loading…
Reference in New Issue