X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=specs%2Fstdapi.py;h=1988c6588068389304a2dcf6d22488959782a049;hb=77c10d8849459dbf7484fbc75eabe26cb401bb5a;hp=c652736a8383e9156e5bd7e88af34dde79760382;hpb=999284fd424cbf7dde024f949cdece0f308d41db;p=apitrace diff --git a/specs/stdapi.py b/specs/stdapi.py index c652736..1988c65 100644 --- a/specs/stdapi.py +++ b/specs/stdapi.py @@ -270,6 +270,25 @@ class Array(Type): return visitor.visitArray(self, *args, **kwargs) +class AttribArray(Type): + + def __init__(self, baseType, valueTypes, isConst = True, terminator = '0'): + self.baseType = baseType + if isConst: + Type.__init__(self, (Pointer(Const(self.baseType))).expr) + else: + Type.__init__(self, (Pointer(self.baseType)).expr) + self.valueTypes = valueTypes + self.terminator = terminator + self.hasKeysWithoutValues = False + for key, value in valueTypes: + if value is None: + self.hasKeysWithoutValues = True + + def visit(self, visitor, *args, **kwargs): + return visitor.visitAttribArray(self, *args, **kwargs) + + class Blob(Type): def __init__(self, type, size): @@ -434,6 +453,12 @@ class Interface(Type): iface = iface.base raise StopIteration + def hasBase(self, *bases): + for iface in self.iterBases(): + if iface in bases: + return True + return False + def iterBaseMethods(self): if self.base is not None: for iface, method in self.base.iterBaseMethods(): @@ -566,6 +591,9 @@ class Visitor: def visitArray(self, array, *args, **kwargs): raise NotImplementedError + def visitAttribArray(self, array, *args, **kwargs): + raise NotImplementedError + def visitBlob(self, blob, *args, **kwargs): raise NotImplementedError @@ -770,6 +798,11 @@ class Traverser(Visitor): def visitArray(self, array, *args, **kwargs): self.visit(array.type, *args, **kwargs) + def visitAttribArray(self, attribs, *args, **kwargs): + for key, valueType in attribs.valueTypes: + if valueType is not None: + self.visit(valueType, *args, **kwargs) + def visitBlob(self, array, *args, **kwargs): pass