]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bgenGeneratorGroup.py: changed placement of some blank lines in output
authorGuido van Rossum <guido@python.org>
Mon, 30 Jan 1995 11:44:02 +0000 (11:44 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 30 Jan 1995 11:44:02 +0000 (11:44 +0000)
bgenObjectDefinition.py: support chaining of object definitions
macsupport.py: support functions returning pointers to existing windows/dialogs
bgen.py: tighten rules for recognizing simple symbol definitions

Tools/bgen/bgen/bgenGeneratorGroup.py
Tools/bgen/bgen/bgenObjectDefinition.py
Tools/bgen/bgen/macsupport.py
Tools/bgen/bgen/scantools.py

index e7d617e75e9be4c3629ce08da1a1660fc8a979d2..294828f76c660564afd1cfe0c738ac8f4a552824 100644 (file)
@@ -13,6 +13,7 @@ class GeneratorGroup:
        def generate(self):
                for g in self.generators:
                        g.generate()
+               Output()
                Output("static PyMethodDef %s_methods[] = {", self.prefix)
                IndentLevel()
                for g in self.generators:
@@ -20,7 +21,6 @@ class GeneratorGroup:
                Output("{NULL, NULL, 0}")
                DedentLevel()
                Output("};")
-               Output()
 
 
 def _test():
index e7fa146abe022780ef7591b66be5bb576ecf4a2a..2cc7c6dfc5865316bb02e43cf613ad66465c86fe 100644 (file)
@@ -21,6 +21,7 @@ class ObjectDefinition(GeneratorGroup):
                self.typename = name + '_Type'
                self.argref = ""        # set to "*" if arg to <type>_New should be pointer
                self.static = "static " # set to "" to make <type>_New and <type>_Convert public
+               self.basechain = "NULL" # set to &<basetype>_chain to chain methods
 
        def add(self, g):
                g.setselftype(self.objecttype, self.itselftype)
@@ -38,18 +39,15 @@ class ObjectDefinition(GeneratorGroup):
                sf = self.static and "staticforward "
                Output("%sPyTypeObject %s;", sf, self.typename)
                Output()
-
                Output("#define %s_Check(x) ((x)->ob_type == &%s)",
                       self.prefix, self.typename)
                Output()
-
                Output("typedef struct %s {", self.objecttype)
                IndentLevel()
                Output("PyObject_HEAD")
                self.outputStructMembers()
                DedentLevel()
                Output("} %s;", self.objecttype)
-               Output()
 
                self.outputNew()
                
@@ -59,6 +57,10 @@ class ObjectDefinition(GeneratorGroup):
 
                GeneratorGroup.generate(self)
 
+               Output()
+               Output("%sPyMethodChain %s_chain = { %s_methods, %s };",
+                       self.static,    self.prefix, self.prefix, self.basechain)
+
                self.outputGetattr()
 
                self.outputSetattr()
@@ -71,6 +73,7 @@ class ObjectDefinition(GeneratorGroup):
                Output("%s ob_itself;", self.itselftype)
 
        def outputNew(self):
+               Output()
                Output("%sPyObject *%s_New(itself)", self.static, self.prefix)
                IndentLevel()
                Output("const %s %sitself;", self.itselftype, self.argref)
@@ -83,7 +86,6 @@ class ObjectDefinition(GeneratorGroup):
                self.outputInitStructMembers()
                Output("return (PyObject *)it;")
                OutRbrace()
-               Output()
 
        def outputInitStructMembers(self):
                Output("it->ob_itself = %sitself;", self.argref)
@@ -112,6 +114,7 @@ class ObjectDefinition(GeneratorGroup):
                "Override this method to apply additional conversions"
 
        def outputDealloc(self):
+               Output()
                Output("static void %s_dealloc(self)", self.prefix)
                IndentLevel()
                Output("%s *self;", self.objecttype)
@@ -120,7 +123,6 @@ class ObjectDefinition(GeneratorGroup):
                self.outputCleanupStructMembers()
                Output("PyMem_DEL(self);")
                OutRbrace()
-               Output()
 
        def outputCleanupStructMembers(self):
                self.outputFreeIt("self->ob_itself")
@@ -129,6 +131,7 @@ class ObjectDefinition(GeneratorGroup):
                Output("/* Cleanup of %s goes here */", name)
 
        def outputGetattr(self):
+               Output()
                Output("static PyObject *%s_getattr(self, name)", self.prefix)
                IndentLevel()
                Output("%s *self;", self.objecttype)
@@ -137,20 +140,21 @@ class ObjectDefinition(GeneratorGroup):
                OutLbrace()
                self.outputGetattrBody()
                OutRbrace()
-               Output()
 
        def outputGetattrBody(self):
                self.outputGetattrHook()
-               Output("return Py_FindMethod(%s_methods, (PyObject *)self, name);", self.prefix)
+               Output("return Py_FindMethodInChain(&%s_chain, (PyObject *)self, name);",
+                      self.prefix)
 
        def outputGetattrHook(self):
                pass
 
        def outputSetattr(self):
-               Output("#define %s_setattr NULL", self.prefix)
                Output()
+               Output("#define %s_setattr NULL", self.prefix)
 
        def outputTypeObject(self):
+               Output()
                Output("%sPyTypeObject %s = {", self.static, self.typename)
                IndentLevel()
                Output("PyObject_HEAD_INIT(&PyType_Type)")
@@ -168,7 +172,10 @@ class ObjectDefinition(GeneratorGroup):
 
 
 class GlobalObjectDefinition(ObjectDefinition):
-       "Same as ObjectDefinition but exports its New and Create methods"
+       """Like ObjectDefinition but exports some parts.
+       
+       XXX Should also somehow generate a .h file for them.
+       """
 
        def __init__(self, name, prefix = None, itselftype = None):
                ObjectDefinition.__init__(self, name, prefix or name, itselftype or name)
index d2269b186e3b8dccc42f64c072d481748f4868ee..4839cb61cd3b40601a41d78f1f5a2fbf928446fb 100644 (file)
@@ -37,6 +37,8 @@ ControlHandle = OpaqueByValueType("ControlHandle", "CtlObj")
 # Windows and Dialogs
 WindowPtr = OpaqueByValueType("WindowPtr", "WinObj")
 DialogPtr = OpaqueByValueType("DialogPtr", "DlgObj")
+ExistingWindowPtr = OpaqueByValueType("WindowPtr", "WinObj_WhichWindow", "BUG")
+ExistingDialogPtr = OpaqueByValueType("DialogPtr", "WinObj_WhichWindow", "BUG")
 
 # NULL pointer passed in as optional storage -- not present in Python version
 NullStorage = FakeType("(void *)0")
@@ -98,6 +100,8 @@ extern int MenuObj_Convert(PyObject *, MenuHandle *);
 
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
+
+extern PyObject *WinObj_WhichWindow(WindowPtr);
 """
 
 # Stuff added just before the module's init function
index 6919ad9e6843c0d6063747abb341bceec6bb1be7..06d606b8370053bd4caf0194808d706a700ac8e6 100644 (file)
@@ -94,7 +94,7 @@ class Scanner:
                self.whole_pat = "\(<type>[a-zA-Z0-9_]+\)[ \t\n]+" + \
                                 "\(<name>[a-zA-Z0-9_]+\)[ \t\n]*(\(<args>[^()]*\))"
                self.sym_pat = "^[ \t]*\(<name>[a-zA-Z0-9_]+\)[ \t]*=" + \
-                              "[ \t]*\(<defn>[-0-9'\"][^\t\n,]*\),?"
+                              "[ \t]*\(<defn>[-0-9'\"][^\t\n,}]*\),?"
                self.asplit_pat = "^\(<type>.*[^a-zA-Z0-9_]\)\(<name>[a-zA-Z0-9_]+\)$"
 
        def compilepatterns(self):