-#!/usr/bin/env python
+#!/usr/bin/env python2
##########################################################################
#
-# Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+# Copyright 2008 VMware, Inc.
# All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-# IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+# IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import sys
import string
-import format
+import binascii
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
+import format
+
class Node:
visitor.visit_literal(self)
+class Blob(Node):
+
+ def __init__(self, value):
+ self._rawValue = None
+ self._hexValue = value
+
+ def getValue(self):
+ if self._rawValue is None:
+ self._rawValue = binascii.a2b_hex(self._hexValue)
+ self._hexValue = None
+ return self._rawValue
+
+ def visit(self, visitor):
+ visitor.visit_blob(self)
+
+
class NamedConstant(Node):
def __init__(self, name):
class Call:
- def __init__(self, no, klass, method, args, ret):
+ def __init__(self, no, klass, method, args, ret, time):
self.no = no
self.klass = klass
self.method = method
self.args = args
self.ret = ret
+ self.time = time
def visit(self, visitor):
visitor.visit_call(self)
def visit_literal(self, node):
raise NotImplementedError
+ def visit_blob(self, node):
+ raise NotImplementedError
+
def visit_named_constant(self, node):
raise NotImplementedError
self.formatter = formatter
def visit_literal(self, node):
- if isinstance(node.value, basestring):
- if len(node.value) >= 4096 or node.value.strip(string.printable):
- self.formatter.address('blob(%u)' % len(node.value))
- #self.formatter.text('...')
- return
+ if node.value is None:
+ self.formatter.literal('NULL')
+ return
+ if isinstance(node.value, basestring):
self.formatter.literal('"' + node.value + '"')
return
self.formatter.literal(repr(node.value))
+ def visit_blob(self, node):
+ self.formatter.address('blob()')
+
def visit_named_constant(self, node):
self.formatter.literal(node.name)
if node.ret is not None:
self.formatter.text(' = ')
node.ret.visit(self)
-
+ if node.time is not None:
+ self.formatter.text(' // time ')
+ node.time.visit(self)
+
def visit_trace(self, node):
for call in node.calls:
call.visit(self)