X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=specs%2Fstdapi.py;h=44d4680a7e53467a8a464bddac2a2c63b2050416;hb=59ee88ea99b6de592b32d635e097a759b7f70e23;hp=35257a3571ffdacc71c86d666637f4393a4fff4c;hpb=568ecc29ff1a22d8ad059bade28ac79728b92958;p=apitrace diff --git a/specs/stdapi.py b/specs/stdapi.py index 35257a3..44d4680 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) @@ -571,6 +603,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)