New submission from Christian Heimes:

I've created a pyvm module for Python 3.0. So far it just contains a
bunch of internal types. What methods do you like to add to pyvm?
Somebody suggested internal functions from sys like the check internal.

----------
components: Extension Modules, Interpreter Core
files: py3k_pyvm.patch
keywords: patch, py3k
messages: 57937
nosy: gvanrossum, tiran
priority: normal
severity: normal
status: open
title: pyvm module patch
versions: Python 3.0
Added file: http://bugs.python.org/file8824/py3k_pyvm.patch

__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1522>
__________________________________
Index: Include/descrobject.h
===================================================================
--- Include/descrobject.h	(Revision 59215)
+++ Include/descrobject.h	(Arbeitskopie)
@@ -67,6 +67,10 @@
 	void *d_wrapped; /* This can be any function pointer */
 } PyWrapperDescrObject;
 
+PyAPI_DATA(PyTypeObject) PyClassMethodDescr_Type;
+PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type;
+PyAPI_DATA(PyTypeObject) PyMemberDescr_Type;
+PyAPI_DATA(PyTypeObject) PyMethodDescr_Type;
 PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type;
 
 PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
Index: Objects/descrobject.c
===================================================================
--- Objects/descrobject.c	(Revision 59216)
+++ Objects/descrobject.c	(Arbeitskopie)
@@ -383,7 +383,7 @@
 	return 0;
 }
 
-static PyTypeObject PyMethodDescr_Type = {
+PyTypeObject PyMethodDescr_Type = {
 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
 	"method_descriptor",
 	sizeof(PyMethodDescrObject),
@@ -421,7 +421,7 @@
 };
 
 /* This is for METH_CLASS in C, not for "f = classmethod(f)" in Python! */
-static PyTypeObject PyClassMethodDescr_Type = {
+PyTypeObject PyClassMethodDescr_Type = {
 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
 	"classmethod_descriptor",
 	sizeof(PyMethodDescrObject),
@@ -458,7 +458,7 @@
 	0,					/* tp_descr_set */
 };
 
-static PyTypeObject PyMemberDescr_Type = {
+PyTypeObject PyMemberDescr_Type = {
 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
 	"member_descriptor",
 	sizeof(PyMemberDescrObject),
@@ -495,7 +495,7 @@
 	(descrsetfunc)member_set,		/* tp_descr_set */
 };
 
-static PyTypeObject PyGetSetDescr_Type = {
+PyTypeObject PyGetSetDescr_Type = {
 	PyVarObject_HEAD_INIT(&PyType_Type, 0)
 	"getset_descriptor",
 	sizeof(PyGetSetDescrObject),
Index: Makefile.pre.in
===================================================================
--- Makefile.pre.in	(Revision 59215)
+++ Makefile.pre.in	(Arbeitskopie)
@@ -328,6 +328,7 @@
 LIBRARY_OBJS=	\
 		Modules/_typesmodule.o \
 		Modules/getbuildinfo.o \
+		Modules/pyvm.o \
 		$(PARSER_OBJS) \
 		$(OBJECT_OBJS) \
 		$(PYTHON_OBJS) \
@@ -365,6 +366,7 @@
 	-rm -f $@
 	$(AR) cr $@ Modules/getbuildinfo.o
 	$(AR) cr $@ Modules/_typesmodule.o
+	$(AR) cr $@ Modules/pyvm.o
 	$(AR) cr $@ $(PARSER_OBJS)
 	$(AR) cr $@ $(OBJECT_OBJS)
 	$(AR) cr $@ $(PYTHON_OBJS)
Index: Modules/pyvm.c
===================================================================
--- Modules/pyvm.c	(Revision 0)
+++ Modules/pyvm.c	(Revision 0)
@@ -0,0 +1,69 @@
+
+
+
+/* pyvm module
+   Low level interface to Python's virtual machine and internal types.
+
+   Copyright (c) 2007 by Christian Heimes <[EMAIL PROTECTED]>
+   Licensed to PSF under a Contributor Agreement.
+   All rights reserved.
+*/
+
+#include "Python.h"
+#include "frameobject.h"
+
+typedef struct _typeinfo {
+	PyTypeObject *type;
+	char *name;
+} typeinfo;
+
+PyDoc_STRVAR(pyvm_doc,
+"Python Virtual Machine module\n");
+
+static PyMethodDef pyvm_methods[] = {
+	{NULL,		NULL}		/* sentinel */
+};
+
+PyMODINIT_FUNC
+initpyvm(void)
+{
+	char *name;
+	PyObject *mod;
+	typeinfo *ti;
+	typeinfo types[] = {
+		/* descriptor types */
+		{&PyClassMethodDescr_Type, NULL},
+		{&PyGetSetDescr_Type, NULL},
+		{&PyMemberDescr_Type, NULL},
+		{&PyMethodDescr_Type, NULL},
+		{&PyWrapperDescr_Type, NULL},
+		/* functions */
+		{&PyCFunction_Type, "builtin_method"},
+		{&PyCFunction_Type, "builtin_function"}, /* alias */
+		{&PyFunction_Type, NULL},
+		{&PyMethod_Type, "instance_method"},
+		/* other */
+		{&PyCode_Type, NULL},
+		{&PyFrame_Type, NULL},
+		{&PyGen_Type, NULL},
+		{&PyModule_Type, NULL},
+		{&PyTraceBack_Type, NULL},
+		{&PyCallIter_Type, "callable_iterator"},
+		{NULL, NULL}	/* sentinel */
+	};
+
+	mod = Py_InitModule3("pyvm", pyvm_methods, pyvm_doc);
+	if (mod == NULL)
+		return;
+
+	ti = types;
+	while(ti->type != NULL) {
+		name = ti->name;
+		if (name == NULL)
+			name = (char*)ti->type->tp_name;
+		assert(name);
+		Py_INCREF(ti->type);
+		PyModule_AddObject(mod, name, (PyObject *)ti->type);
+		ti++;
+	}
+}

Eigenschaftsänderungen: Modules/pyvm.c
___________________________________________________________________
Name: svn:keywords
   + Id

_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to