[prev in list] [next in list] [prev in thread] [next in thread]
List: python-list
Subject: Implementing Metatypes in C
From: Phil Thompson <phil () river-bank ! demon ! co ! uk>
Date: 2003-04-13 23:10:10
[Download RAW message or body]
I want to create a type (in C) that has some additional, type specific,
information associated with it.
That type will then have many sub-types created, also in C. Instances of those
sub-types will then be created in Python.
As I understand it, I have to create a metatype for my new types so that they
get created with the correct size to contain the additional I want to store
in the type. To do this I am simply sub-typing from PyType_Type but
specifying an "appropriate" value for the tp_basicsize field. The sub-types
are then created on the heap by calling the metatype.
The problem I had was understanding what the "appropriate" value was. At first
my metatype data structure was...
struct metatype {
PyTypeObject supertype;
ExtraTypeData extra;
};
Eventually I worked out that Python allocates additional fields (as well as
PyTypeObject) when allocating new types on the heap. This is from
typeobject.c in the Python 2.3a2 source...
/* The *real* layout of a type object when allocated on the heap */
/* XXX Should we publish this in a header file? */
If I add the extra fields in my struct metatype, everything works.
Two questions...
1. Is my understanding correct, or is there a more correct way to do what I
want that avoids the problem?
2. If my solution is correct, can the structure defined in typeobject.c be
published in a header file as the comment says? Please?
Thanks,
Phil
--
http://mail.python.org/mailman/listinfo/python-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic