summaryrefslogtreecommitdiff
path: root/trace.py
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2010-11-26 15:26:14 +0000
committerJosé Fonseca <jfonseca@vmware.com>2010-11-26 15:26:14 +0000
commitf84c70e16aaf953f8984981456f5baf8eada7153 (patch)
tree1b1584e39e4df5dea4a0b3cd750f53060e57b70d /trace.py
parent2250a0e42a0fcad757f38121859ce7de10384df3 (diff)
More efficient enum representation.
Diffstat (limited to 'trace.py')
-rw-r--r--trace.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/trace.py b/trace.py
index da7f9ce..47360a8 100644
--- a/trace.py
+++ b/trace.py
@@ -68,15 +68,22 @@ class DumpDeclarator(stdapi.OnceVisitor):
def visit_enum(self, enum):
print 'static void __traceEnum%s(const %s value) {' % (enum.id, enum.expr)
+ n = len(enum.values)
+ for i in range(n):
+ value = enum.values[i]
+ print ' static const Trace::EnumSig sig%u = {%u, "%s", %s};' % (i, enum.vid + i, value, value)
+ print ' const Trace::EnumSig *sig;'
print ' switch(value) {'
- for value in enum.values:
+ for i in range(n):
+ value = enum.values[i]
print ' case %s:' % value
- print ' Trace::LiteralNamedConstant("%s", %s);' % (value, value)
+ print ' sig = &sig%u;' % i
print ' break;'
print ' default:'
print ' Trace::LiteralSInt(value);'
- print ' break;'
+ print ' return;'
print ' }'
+ print ' Trace::LiteralEnum(sig);'
print '}'
print