X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=specs%2Fstdapi.py;h=7aa60a111f6331c33f3fad03a0ab672355cb2f6d;hb=b89c59301b6bedebe35e35e9bda913683ad265b3;hp=5ba621fff35ceb7e26df9d94d0d303240d77e68c;hpb=280a176f599484b3acf75f070e3f25b756786cc2;p=apitrace diff --git a/specs/stdapi.py b/specs/stdapi.py index 5ba621f..7aa60a1 100644 --- a/specs/stdapi.py +++ b/specs/stdapi.py @@ -146,6 +146,17 @@ class LinearPointer(Type): return visitor.visitLinearPointer(self, *args, **kwargs) +class Reference(Type): + '''C++ references.''' + + def __init__(self, type): + Type.__init__(self, type.expr + " &", 'R' + type.tag) + self.type = type + + def visit(self, visitor, *args, **kwargs): + return visitor.visitReference(self, *args, **kwargs) + + class Handle(Type): def __init__(self, name, type, range=None, key=None): @@ -350,13 +361,28 @@ class Interface(Type): yield method raise StopIteration + def iterBaseMethods(self): + if self.base is not None: + for iface, method in self.base.iterBaseMethods(): + yield iface, method + for method in self.methods: + yield self, method + raise StopIteration + class Method(Function): - def __init__(self, type, name, args): - Function.__init__(self, type, name, args, call = '__stdcall') + def __init__(self, type, name, args, const=False, sideeffects=True): + Function.__init__(self, type, name, args, call = '__stdcall', sideeffects=sideeffects) for index in range(len(self.args)): self.args[index].index = index + 1 + self.const = const + + def prototype(self, name=None): + s = Function.prototype(self, name) + if self.const: + s += ' const' + return s class String(Type): @@ -460,6 +486,9 @@ class Visitor: def visitLinearPointer(self, pointer, *args, **kwargs): raise NotImplementedError + def visitReference(self, reference, *args, **kwargs): + raise NotImplementedError + def visitHandle(self, handle, *args, **kwargs): raise NotImplementedError @@ -538,6 +567,10 @@ class Rebuilder(Visitor): type = self.visit(pointer.type) return LinearPointer(type, pointer.size) + def visitReference(self, reference): + type = self.visit(reference.type) + return Reference(type) + def visitHandle(self, handle): type = self.visit(handle.type) return Handle(handle.name, type, range=handle.range, key=handle.key) @@ -610,6 +643,9 @@ class Collector(Visitor): def visitLinearPointer(self, pointer): self.visit(pointer.type) + def visitReference(self, reference): + self.visit(reference.type) + def visitHandle(self, handle): self.visit(handle.type)