X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=specs%2Fstdapi.py;h=61e2b21b756e2f241f2d8a7b130e07f18fbce58c;hb=2ef6d5bbcf98d92afb3c2c77608fba5d4297eaa0;hp=35257a3571ffdacc71c86d666637f4393a4fff4c;hpb=568ecc29ff1a22d8ad059bade28ac79728b92958;p=apitrace diff --git a/specs/stdapi.py b/specs/stdapi.py index 35257a3..61e2b21 100644 --- a/specs/stdapi.py +++ b/specs/stdapi.py @@ -127,6 +127,25 @@ class Pointer(Type): return visitor.visitPointer(self, *args, **kwargs) +class IntPointer(Type): + '''Integer encoded as a pointer.''' + + def visit(self, visitor, *args, **kwargs): + return visitor.visitIntPointer(self, *args, **kwargs) + + +class LinearPointer(Type): + '''Integer encoded as a pointer.''' + + def __init__(self, type, size = None): + Type.__init__(self, type.expr + " *", 'P' + type.tag) + self.type = type + self.size = size + + def visit(self, visitor, *args, **kwargs): + return visitor.visitLinearPointer(self, *args, **kwargs) + + class Handle(Type): def __init__(self, name, type, range=None, key=None): @@ -437,6 +456,12 @@ class Visitor: def visitPointer(self, pointer, *args, **kwargs): raise NotImplementedError + def visitIntPointer(self, pointer, *args, **kwargs): + raise NotImplementedError + + def visitLinearPointer(self, pointer, *args, **kwargs): + raise NotImplementedError + def visitHandle(self, handle, *args, **kwargs): raise NotImplementedError @@ -508,6 +533,13 @@ class Rebuilder(Visitor): type = self.visit(pointer.type) return Pointer(type) + def visitIntPointer(self, pointer): + return pointer + + def visitLinearPointer(self, pointer): + type = self.visit(pointer.type) + return LinearPointer(type, pointer.size) + def visitHandle(self, handle): type = self.visit(handle.type) return Handle(handle.name, type, range=handle.range, key=handle.key) @@ -519,6 +551,9 @@ class Rebuilder(Visitor): def visitOpaque(self, opaque): return opaque + def visitInterface(self, interface, *args, **kwargs): + return interface + def visitPolymorphic(self, polymorphic): defaultType = self.visit(polymorphic.defaultType) switchExpr = polymorphic.switchExpr @@ -571,6 +606,12 @@ class Collector(Visitor): def visitPointer(self, pointer): self.visit(pointer.type) + def visitIntPointer(self, pointer): + pass + + def visitLinearPointer(self, pointer): + self.visit(pointer.type) + def visitHandle(self, handle): self.visit(handle.type) @@ -606,7 +647,7 @@ class API: self.functions = [] self.interfaces = [] - def all_types(self): + def getAllTypes(self): collector = Collector() for function in self.functions: for arg in function.args: @@ -620,6 +661,14 @@ class API: collector.visit(method.type) return collector.types + def getAllInterfaces(self): + types = self.getAllTypes() + interfaces = [type for type in types if isinstance(type, Interface)] + for interface in self.interfaces: + if interface not in interfaces: + interfaces.append(interface) + return interfaces + def addFunction(self, function): self.functions.append(function)