]> git.cworth.org Git - apitrace/commitdiff
Don't abuse NotImplementedError.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 14 Apr 2012 14:17:12 +0000 (15:17 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 14 Apr 2012 14:17:12 +0000 (15:17 +0100)
So that we can distinguish between types we can't support, and those we
can support, but haven't.

retrace.py

index a450f8221ea47499622b118896fa6ed0f6783720..9e9af208f53186d3fe6054406b4f3aad6d99d8e0 100644 (file)
@@ -33,6 +33,10 @@ import specs.stdapi as stdapi
 import specs.glapi as glapi
 
 
+class UnsupportedType(Exception):
+    pass
+
+
 class MutableRebuilder(stdapi.Rebuilder):
     '''Type visitor which derives a mutable type.'''
 
@@ -51,10 +55,6 @@ class MutableRebuilder(stdapi.Rebuilder):
         # Strip out references
         return reference.type
 
-    def visitOpaque(self, opaque):
-        # Don't recursule
-        return opaque
-
 
 def lookupHandle(handle, value):
     if handle.key is None:
@@ -114,6 +114,9 @@ class ValueAllocator(stdapi.Visitor):
     def visitPolymorphic(self, polymorphic, lvalue, rvalue):
         self.visit(polymorphic.defaultType, lvalue, rvalue)
 
+    def visitOpaque(self, opaque, lvalue, rvalue):
+        pass
+
 
 class ValueDeserializer(stdapi.Visitor):
 
@@ -205,6 +208,9 @@ class ValueDeserializer(stdapi.Visitor):
 
     def visitPolymorphic(self, polymorphic, lvalue, rvalue):
         self.visit(polymorphic.defaultType, lvalue, rvalue)
+    
+    def visitOpaque(self, opaque, lvalue, rvalue):
+        raise UnsupportedType
 
 
 class OpaqueValueDeserializer(ValueDeserializer):
@@ -310,6 +316,9 @@ class SwizzledValueRegistrator(stdapi.Visitor):
     
     def visitPolymorphic(self, polymorphic, lvalue, rvalue):
         self.visit(polymorphic.defaultType, lvalue, rvalue)
+    
+    def visitOpaque(self, opaque, lvalue, rvalue):
+        pass
 
 
 class Retracer:
@@ -365,7 +374,7 @@ class Retracer:
             lvalue = arg.name
             try:
                 self.extractArg(function, arg, arg_type, lvalue, rvalue)
-            except NotImplementedError:
+            except UnsupportedType:
                 success =  False
                 print '    memset(&%s, 0, sizeof %s); // FIXME' % (arg.name, arg.name)
             print
@@ -385,14 +394,14 @@ class Retracer:
                 lvalue = arg.name
                 try:
                     self.regiterSwizzledValue(arg_type, lvalue, rvalue)
-                except NotImplementedError:
+                except UnsupportedType:
                     print '    // XXX: %s' % arg.name
         if function.type is not stdapi.Void:
             rvalue = '*call.ret'
             lvalue = '__result'
             try:
                 self.regiterSwizzledValue(function.type, lvalue, rvalue)
-            except NotImplementedError:
+            except UnsupportedType:
                 raise
                 print '    // XXX: result'
 
@@ -410,7 +419,7 @@ class Retracer:
     def extractOpaqueArg(self, function, arg, arg_type, lvalue, rvalue):
         try:
             ValueAllocator().visit(arg_type, lvalue, rvalue)
-        except NotImplementedError:
+        except UnsupportedType:
             pass
         OpaqueValueDeserializer().visit(arg_type, lvalue, rvalue)