X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=specs%2Fstdapi.py;h=7aa60a111f6331c33f3fad03a0ab672355cb2f6d;hb=b89c59301b6bedebe35e35e9bda913683ad265b3;hp=30a42df888794ba543fe3227c57896f0196eb757;hpb=160373232fa861fed10f8f137415888a18b12b1d;p=apitrace diff --git a/specs/stdapi.py b/specs/stdapi.py index 30a42df..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): @@ -475,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 @@ -553,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) @@ -625,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)