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)
__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
self.call = call
self.fail = fail
self.sideeffects = sideeffects
- self.hidden = False
def prototype(self, name=None):
if name is not None:
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):
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)
class API:
- def __init__(self, name):
+ def __init__(self, name = None):
self.name = name
self.headers = []
self.functions = []
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")