From edea899194c441353943c22577bc22bf0e64d187 Mon Sep 17 00:00:00 2001 From: Andreas Hartmetz Date: Fri, 12 Jul 2013 11:37:35 +0200 Subject: [PATCH] Allow float-based attrib_lists as found in WGL. It also turns out that no "type" member is needed in AttribArray, so remove it. --- specs/stdapi.py | 10 ++++++---- wrappers/trace.py | 6 +++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/specs/stdapi.py b/specs/stdapi.py index 88711e1..5cf1a37 100644 --- a/specs/stdapi.py +++ b/specs/stdapi.py @@ -272,12 +272,14 @@ class Array(Type): class AttribArray(Type): - def __init__(self, keyType, valueTypes, isConst = True, terminator = '0'): + def __init__(self, keyType, valueTypes, isConst = True, punType = None, terminator = '0'): + self.baseType = Int + if punType is not None: + self.baseType = punType if isConst: - Type.__init__(self, (Pointer(Const(Int))).expr) + Type.__init__(self, (Pointer(Const(self.baseType))).expr) else: - Type.__init__(self, (Pointer(Int)).expr) - self.type = (Pointer(Const(Int))) # for function prototypes and such + Type.__init__(self, (Pointer(self.baseType)).expr) self.keyType = keyType self.valueTypes = valueTypes self.terminator = terminator diff --git a/wrappers/trace.py b/wrappers/trace.py index 9bacf8a..adfc764 100644 --- a/wrappers/trace.py +++ b/wrappers/trace.py @@ -217,7 +217,7 @@ class ValueSerializer(stdapi.Visitor, stdapi.ExpanderMixin): print ' for (%(c)s = 0; %(array)s && %(array)s[%(c)s] != %(terminator)s; %(c)s += 2) {' \ % {'c': count, 'array': instance, 'terminator': array.terminator} if array.hasKeysWithoutValues: - print ' switch (%(array)s[%(c)s]) {' % {'array': instance, 'c': count} + print ' switch (int(%(array)s[%(c)s])) {' % {'array': instance, 'c': count} for key, valueType in array.valueTypes: if valueType is None: print ' case %s:' % key @@ -238,7 +238,7 @@ class ValueSerializer(stdapi.Visitor, stdapi.ExpanderMixin): print ' if (%(i)s + 1 >= %(count)s) {' % {'i': index, 'count': count} print ' break;' print ' }' - print ' switch (%(array)s[%(i)s++]) {' % {'array': instance, 'i': index} + print ' switch (int(%(array)s[%(i)s++])) {' % {'array': instance, 'i': index} # write generic value the usual way for key, valueType in array.valueTypes: if valueType is not None: @@ -258,7 +258,7 @@ class ValueSerializer(stdapi.Visitor, stdapi.ExpanderMixin): print ' default:' print ' trace::localWriter.beginElement();' print ' os::log("apitrace: warning: %s: unknown key 0x%04X, interpreting value as int\\n", ' + \ - '__FUNCTION__, %(array)s[%(i)s]);' % {'array': instance, 'i': index} + '__FUNCTION__, int(%(array)s[%(i)s]));' % {'array': instance, 'i': index} print ' trace::localWriter.writeSInt(%(array)s[%(i)s]);' % {'array': instance, 'i': index} print ' trace::localWriter.endElement();' print ' break;' -- 2.43.0