]> git.cworth.org Git - apitrace/blobdiff - stdapi.py
Ignore assertion failure on Mac OS X.
[apitrace] / stdapi.py
index 122b89f84821d099c2d6754169a35925161fdea0..8852345884a69ce26b081a755201d9aa12e050bc 100644 (file)
--- a/stdapi.py
+++ b/stdapi.py
@@ -109,11 +109,12 @@ class Pointer(Type):
 
 class Handle(Type):
 
-    def __init__(self, name, type, range=None):
+    def __init__(self, name, type, range=None, key=None):
         Type.__init__(self, type.expr, 'P' + type.id)
         self.name = name
         self.type = type
         self.range = range
+        self.key = key
 
     def visit(self, visitor, *args, **kwargs):
         return visitor.visit_handle(self, *args, **kwargs)
@@ -125,12 +126,8 @@ def ConstPointer(type):
 
 class Enum(Type):
 
-    __vid = 0
-
     def __init__(self, name, values):
         Type.__init__(self, name)
-        self.vid = Enum.__vid
-        Enum.__vid += len(values)
         self.values = list(values)
     
     def visit(self, visitor, *args, **kwargs):
@@ -218,7 +215,7 @@ class Function:
 
     __id = 0
 
-    def __init__(self, type, name, args, call = '', fail = None, sideeffects=True, hidden=False):
+    def __init__(self, type, name, args, call = '', fail = None, sideeffects=True):
         self.id = Function.__id
         Function.__id += 1
 
@@ -228,8 +225,12 @@ class Function:
         self.args = []
         index = 0
         for arg in args:
-            if isinstance(arg, tuple):
-                arg_type, arg_name = arg
+            if not isinstance(arg, Arg):
+                if isinstance(arg, tuple):
+                    arg_type, arg_name = arg
+                else:
+                    arg_type = arg
+                    arg_name = "arg%u" % index
                 arg = Arg(arg_type, arg_name)
             arg.index = index
             index += 1
@@ -238,7 +239,6 @@ class Function:
         self.call = call
         self.fail = fail
         self.sideeffects = sideeffects
-        self.hidden = False
 
     def prototype(self, name=None):
         if name is not None:
@@ -410,7 +410,7 @@ class Rebuilder(Visitor):
         return Const(const.type)
 
     def visit_struct(self, struct):
-        members = [self.visit(member) for member in struct.members]
+        members = [(self.visit(type), name) for type, name in struct.members]
         return Struct(struct.name, members)
 
     def visit_array(self, array):
@@ -434,7 +434,7 @@ class Rebuilder(Visitor):
 
     def visit_handle(self, handle):
         type = self.visit(handle.type)
-        return Handle(handle.name, type, handle.range)
+        return Handle(handle.name, type, range=handle.range, key=handle.key)
 
     def visit_alias(self, alias):
         type = self.visit(alias.type)
@@ -509,7 +509,7 @@ class Collector(Visitor):
 
 class API:
 
-    def __init__(self, name):
+    def __init__(self, name = None):
         self.name = name
         self.headers = []
         self.functions = []
@@ -542,6 +542,17 @@ class API:
     def add_interfaces(self, interfaces):
         self.interfaces.extend(interfaces)
 
+    def add_api(self, api):
+        self.headers.extend(api.headers)
+        self.add_functions(api.functions)
+        self.add_interfaces(api.interfaces)
+
+    def get_function_by_name(self, name):
+        for function in self.functions:
+            if function.name == name:
+                return function
+        return None
+
 
 Bool = Literal("bool", "Bool")
 SChar = Literal("signed char", "SInt")
@@ -555,7 +566,7 @@ UInt = Literal("unsigned int", "UInt")
 ULong = Literal("unsigned long", "UInt")
 ULongLong = Literal("unsigned long long", "UInt")
 Float = Literal("float", "Float")
-Double = Literal("double", "Float")
+Double = Literal("double", "Double")
 SizeT = Literal("size_t", "UInt")
 WString = Literal("wchar_t *", "WString")