Пример #1
0
    def test_overridden_signatures(self):
        clsA = Class("ClsA")
        clsB = Class("ClsB")
        clsB.bases.append(clsA)

        methodA = Method("test")
        methodA.signatures.append(FunctionSignature())
        methodA.signatures[0].context = methodA
        methodA.signatures[0].virtual = True
        methodB = Method("test")
        methodB.signatures.append(FunctionSignature())
        methodB.signatures[0].context = methodB

        clsA.methods.append(methodA)
        methodA.context = clsA
        clsB.methods.append(methodB)
        methodB.context = clsB

        self.assertEqual(clsA.get_overridable_signatures(), [[methodA.signatures[0]]])
        self.assertEqual(clsB.get_overridable_signatures(), [])

        methodB.signatures[0].virtual = True
        self.assertEqual(clsB.get_overridable_signatures(), [[methodB.signatures[0]]])

        methodB.signatures[0].const = True
        self.assertEqual(clsB.get_overridable_signatures(), [[methodB.signatures[0], methodA.signatures[0]]])
Пример #2
0
    def process_signatures(self):
        for context, function in self.signatures.iteritems():
            for name, signatures in function.iteritems():
                cxt = self.nodes.get(context)
                if not cxt:
                    continue

                f = None
                if isinstance(cxt, (Class, Struct)):
                    if all(sig.constructor for sig in signatures):
                        cxt.constructors = signatures
                    elif signatures[0].destructor:
                        cxt.destructor = signatures[0]
                    else:
                        f = Method(name)
                        cxt.methods.append(f)
                else:
                    f = Function(name)
                    cxt.nodes.append(f)

                if f:
                    f.context = cxt
                    f.signatures = signatures
                    for sig in signatures:
                        sig.context = f