18cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossumfrom bgenOutput import *
28cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossum
38cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossumclass GeneratorGroup:
48cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossum
52cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    def __init__(self, prefix):
62cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        self.prefix = prefix
72cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        self.generators = []
88cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossum
92cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    def add(self, g, dupcheck=0):
102cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        if dupcheck:
112cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen            if g in self.generators:
122cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen                print 'DUP', g.name
132cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen                return
142cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        g.setprefix(self.prefix)
152cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        self.generators.append(g)
168cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossum
172cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    def generate(self):
182cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        for g in self.generators:
192cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen            g.generate()
202cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        Output()
212cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        Output("static PyMethodDef %s_methods[] = {", self.prefix)
222cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        IndentLevel()
232cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        for g in self.generators:
242cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen            g.reference()
252cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        Output("{NULL, NULL, 0}")
262cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        DedentLevel()
272cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen        Output("};")
288cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossum
298cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossum
308cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossumdef _test():
312cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    void = None
322cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    from bgenGenerator import FunctionGenerator
332cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    group = GeneratorGroup("spam")
342cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    eggs = FunctionGenerator(void, "eggs")
352cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    group.add(eggs)
362cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    print "/* START */"
372cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    group.generate()
388cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossum
398cfc4bfb9d2c784c0901f8d31b24c49ab905b9aeGuido van Rossumif __name__ == "__main__":
402cf08ab4c2ef9743b35e61414c978555e2c6815dJack Jansen    _test()
41