[Python-checkins] python/dist/src/Objects codeobject.c,NONE,1.1.2.1 frameobject.c,2.62,2.62.2.1 funcobject.c,2.55,2.55.2.1 object.c,2.179,2.179.2.1
jhylton@users.sourceforge.net
jhylton@users.sourceforge.net
Tue, 09 Jul 2002 06:22:03 -0700
- Previous message: [Python-checkins] python/dist/src/Modules main.c,1.64,1.64.2.1 symtablemodule.c,1.5.8.1,1.5.8.2
- Next message: [Python-checkins] python/dist/src/Python bltinmodule.c,2.261,2.261.2.1 ceval.c,2.314,2.314.2.1 compile.c,2.247.2.1,2.247.2.2 future.c,2.12.2.1,2.12.2.2 import.c,2.208,2.208.2.1 marshal.c,1.72,1.72.2.1 pythonrun.c,2.161.2.2,2.161.2.3 symtable.c,2.10.8.2,2.10.8.3 sysmodule.c,2.107,2.107.2.1 traceback.c,2.38,2.38.2.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv9917/Objects
Modified Files:
Tag: ast-branch
frameobject.c funcobject.c object.c
Added Files:
Tag: ast-branch
codeobject.c
Log Message:
Move PyCodeObject from compile.c to Objects/codeobject.c.
--- NEW FILE: codeobject.c ---
#include "Python.h"
#include "code.h"
#include "structmember.h"
#define OFF(x) offsetof(PyCodeObject, x)
static PyMemberDef code_memberlist[] = {
{"co_argcount", T_INT, OFF(co_argcount), READONLY},
{"co_nlocals", T_INT, OFF(co_nlocals), READONLY},
{"co_stacksize",T_INT, OFF(co_stacksize), READONLY},
{"co_flags", T_INT, OFF(co_flags), READONLY},
{"co_code", T_OBJECT, OFF(co_code), READONLY},
{"co_consts", T_OBJECT, OFF(co_consts), READONLY},
{"co_names", T_OBJECT, OFF(co_names), READONLY},
{"co_varnames", T_OBJECT, OFF(co_varnames), READONLY},
{"co_freevars", T_OBJECT, OFF(co_freevars), READONLY},
{"co_cellvars", T_OBJECT, OFF(co_cellvars), READONLY},
{"co_filename", T_OBJECT, OFF(co_filename), READONLY},
{"co_name", T_OBJECT, OFF(co_name), READONLY},
{"co_firstlineno", T_INT, OFF(co_firstlineno), READONLY},
{"co_lnotab", T_OBJECT, OFF(co_lnotab), READONLY},
{NULL} /* Sentinel */
};
PyDoc_STRVAR(code_doc,
"code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n\
varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n\
\n\
Create a code object. Not for the faint of heart.");
static PyObject *
code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
{
int argcount;
int nlocals;
int stacksize;
int flags;
PyObject *code;
PyObject *consts;
PyObject *names;
PyObject *varnames;
PyObject *freevars = NULL;
PyObject *cellvars = NULL;
PyObject *filename;
PyObject *name;
int firstlineno;
PyObject *lnotab;
if (!PyArg_ParseTuple(args, "iiiiSO!O!O!SSiS|O!O!:code",
&argcount, &nlocals, &stacksize, &flags,
&code,
&PyTuple_Type, &consts,
&PyTuple_Type, &names,
&PyTuple_Type, &varnames,
&filename, &name,
&firstlineno, &lnotab,
&PyTuple_Type, &freevars,
&PyTuple_Type, &cellvars))
return NULL;
if (freevars == NULL || cellvars == NULL) {
PyObject *empty = PyTuple_New(0);
if (empty == NULL)
return NULL;
if (freevars == NULL) {
freevars = empty;
Py_INCREF(freevars);
}
if (cellvars == NULL) {
cellvars = empty;
Py_INCREF(cellvars);
}
Py_DECREF(empty);
}
if (!PyObject_CheckReadBuffer(code)) {
PyErr_SetString(PyExc_TypeError,
"bytecode object must be a single-segment read-only buffer");
return NULL;
}
return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
code, consts, names, varnames,
freevars, cellvars, filename, name,
firstlineno, lnotab);
}
static void
code_dealloc(PyCodeObject *co)
{
Py_XDECREF(co->co_code);
Py_XDECREF(co->co_consts);
Py_XDECREF(co->co_names);
Py_XDECREF(co->co_varnames);
Py_XDECREF(co->co_freevars);
Py_XDECREF(co->co_cellvars);
Py_XDECREF(co->co_filename);
Py_XDECREF(co->co_name);
Py_XDECREF(co->co_lnotab);
PyObject_DEL(co);
}
static PyObject *
code_repr(PyCodeObject *co)
{
char buf[500];
int lineno = -1;
char *filename = "???";
char *name = "???";
if (co->co_firstlineno != 0)
lineno = co->co_firstlineno;
if (co->co_filename && PyString_Check(co->co_filename))
filename = PyString_AS_STRING(co->co_filename);
if (co->co_name && PyString_Check(co->co_name))
name = PyString_AS_STRING(co->co_name);
PyOS_snprintf(buf, sizeof(buf),
"<code object %.100s at %p, file \"%.300s\", line %d>",
name, co, filename, lineno);
return PyString_FromString(buf);
}
static int
code_compare(PyCodeObject *co, PyCodeObject *cp)
{
int cmp;
cmp = PyObject_Compare(co->co_name, cp->co_name);
if (cmp) return cmp;
cmp = co->co_argcount - cp->co_argcount;
if (cmp) return cmp;
cmp = co->co_nlocals - cp->co_nlocals;
if (cmp) return cmp;
cmp = co->co_flags - cp->co_flags;
if (cmp) return cmp;
cmp = PyObject_Compare(co->co_code, cp->co_code);
if (cmp) return cmp;
cmp = PyObject_Compare(co->co_consts, cp->co_consts);
if (cmp) return cmp;
cmp = PyObject_Compare(co->co_names, cp->co_names);
if (cmp) return cmp;
cmp = PyObject_Compare(co->co_varnames, cp->co_varnames);
if (cmp) return cmp;
cmp = PyObject_Compare(co->co_freevars, cp->co_freevars);
if (cmp) return cmp;
cmp = PyObject_Compare(co->co_cellvars, cp->co_cellvars);
return cmp;
}
static long
code_hash(PyCodeObject *co)
{
long h, h0, h1, h2, h3, h4, h5, h6;
h0 = PyObject_Hash(co->co_name);
if (h0 == -1) return -1;
h1 = PyObject_Hash(co->co_code);
if (h1 == -1) return -1;
h2 = PyObject_Hash(co->co_consts);
if (h2 == -1) return -1;
h3 = PyObject_Hash(co->co_names);
if (h3 == -1) return -1;
h4 = PyObject_Hash(co->co_varnames);
if (h4 == -1) return -1;
h5 = PyObject_Hash(co->co_freevars);
if (h5 == -1) return -1;
h6 = PyObject_Hash(co->co_cellvars);
if (h6 == -1) return -1;
h = h0 ^ h1 ^ h2 ^ h3 ^ h4 ^ h5 ^ h6 ^
co->co_argcount ^ co->co_nlocals ^ co->co_flags;
if (h == -1) h = -2;
return h;
}
/* XXX code objects need to participate in GC? */
PyTypeObject PyCode_Type = {
PyObject_HEAD_INIT(&PyType_Type)
0,
"code",
sizeof(PyCodeObject),
0,
(destructor)code_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
(cmpfunc)code_compare, /* tp_compare */
(reprfunc)code_repr, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
(hashfunc)code_hash, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */
code_doc, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
code_memberlist, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
0, /* tp_init */
0, /* tp_alloc */
code_new, /* tp_new */
};
Index: frameobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/frameobject.c,v
retrieving revision 2.62
retrieving revision 2.62.2.1
diff -C2 -d -r2.62 -r2.62.2.1
*** frameobject.c 20 Apr 2002 04:46:55 -0000 2.62
--- frameobject.c 9 Jul 2002 13:22:00 -0000 2.62.2.1
***************
*** 4,7 ****
--- 4,8 ----
#include "Python.h"
+ #include "code.h"
#include "compile.h"
#include "frameobject.h"
Index: funcobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/funcobject.c,v
retrieving revision 2.55
retrieving revision 2.55.2.1
diff -C2 -d -r2.55 -r2.55.2.1
*** funcobject.c 14 Jun 2002 20:41:15 -0000 2.55
--- funcobject.c 9 Jul 2002 13:22:01 -0000 2.55.2.1
***************
*** 3,7 ****
#include "Python.h"
! #include "compile.h"
#include "eval.h"
#include "structmember.h"
--- 3,7 ----
#include "Python.h"
! #include "code.h"
#include "eval.h"
#include "structmember.h"
Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.179
retrieving revision 2.179.2.1
diff -C2 -d -r2.179 -r2.179.2.1
*** object.c 13 Jun 2002 21:42:51 -0000 2.179
--- object.c 9 Jul 2002 13:22:01 -0000 2.179.2.1
***************
*** 9,13 ****
/* just for trashcan: */
! #include "compile.h"
#include "frameobject.h"
#include "traceback.h"
--- 9,13 ----
/* just for trashcan: */
! #include "code.h"
#include "frameobject.h"
#include "traceback.h"
- Previous message: [Python-checkins] python/dist/src/Modules main.c,1.64,1.64.2.1 symtablemodule.c,1.5.8.1,1.5.8.2
- Next message: [Python-checkins] python/dist/src/Python bltinmodule.c,2.261,2.261.2.1 ceval.c,2.314,2.314.2.1 compile.c,2.247.2.1,2.247.2.2 future.c,2.12.2.1,2.12.2.2 import.c,2.208,2.208.2.1 marshal.c,1.72,1.72.2.1 pythonrun.c,2.161.2.2,2.161.2.3 symtable.c,2.10.8.2,2.10.8.3 sysmodule.c,2.107,2.107.2.1 traceback.c,2.38,2.38.2.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]