X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=stdapi.py;h=8852345884a69ce26b081a755201d9aa12e050bc;hb=124cd34846abf59579fe7cbd819a3a719a07a29f;hp=122b89f84821d099c2d6754169a35925161fdea0;hpb=6fac5ae3f768d5f8b87324482155f5f8e2d23cb2;p=apitrace diff --git a/stdapi.py b/stdapi.py index 122b89f..8852345 100644 --- 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")