Quickly renamed.

This commit is contained in:
Guido van Rossum 1997-04-29 14:49:28 +00:00
parent 9d0a3dfa3d
commit 1875247549
1 changed files with 101 additions and 100 deletions

View File

@ -31,15 +31,14 @@ PERFORMANCE OF THIS SOFTWARE.
/* Frame object implementation */
#include "allobjects.h"
#include "Python.h"
#include "compile.h"
#include "frameobject.h"
#include "opcode.h"
#include "structmember.h"
#include "bltinmodule.h"
#define OFF(x) offsetof(frameobject, x)
#define OFF(x) offsetof(PyFrameObject, x)
static struct memberlist frame_memberlist[] = {
{"f_back", T_OBJECT, OFF(f_back), RO},
@ -54,23 +53,23 @@ static struct memberlist frame_memberlist[] = {
{NULL} /* Sentinel */
};
static object *
static PyObject *
frame_getattr(f, name)
frameobject *f;
PyFrameObject *f;
char *name;
{
if (strcmp(name, "f_locals") == 0)
fast_2_locals(f);
return getmember((char *)f, frame_memberlist, name);
PyFrame_FastToLocals(f);
return PyMember_Get((char *)f, frame_memberlist, name);
}
static int
frame_setattr(f, name, value)
frameobject *f;
PyFrameObject *f;
char *name;
object *value;
PyObject *value;
{
return setmember((char *)f, frame_memberlist, name, value);
return PyMember_Set((char *)f, frame_memberlist, name, value);
}
/* Stack frames are allocated and deallocated at a considerable rate.
@ -92,11 +91,11 @@ frame_setattr(f, name, value)
unless the program contains run-away recursion. I hope.
*/
static frameobject *free_list = NULL;
static PyFrameObject *free_list = NULL;
static void
frame_dealloc(f)
frameobject *f;
PyFrameObject *f;
{
int i;
PyObject **fastlocals;
@ -104,24 +103,24 @@ frame_dealloc(f)
/* Kill all local variables */
fastlocals = f->f_localsplus;
for (i = f->f_nlocals; --i >= 0; ++fastlocals) {
XDECREF(*fastlocals);
Py_XDECREF(*fastlocals);
}
XDECREF(f->f_back);
XDECREF(f->f_code);
XDECREF(f->f_builtins);
XDECREF(f->f_globals);
XDECREF(f->f_locals);
XDECREF(f->f_trace);
Py_XDECREF(f->f_back);
Py_XDECREF(f->f_code);
Py_XDECREF(f->f_builtins);
Py_XDECREF(f->f_globals);
Py_XDECREF(f->f_locals);
Py_XDECREF(f->f_trace);
f->f_back = free_list;
free_list = f;
}
typeobject Frametype = {
OB_HEAD_INIT(&Typetype)
PyTypeObject PyFrame_Type = {
PyObject_HEAD_INIT(&PyType_Type)
0,
"frame",
sizeof(frameobject),
sizeof(PyFrameObject),
0,
(destructor)frame_dealloc, /*tp_dealloc*/
0, /*tp_print*/
@ -134,16 +133,16 @@ typeobject Frametype = {
0, /*tp_as_mapping*/
};
frameobject *
newframeobject(back, code, globals, locals)
frameobject *back;
codeobject *code;
object *globals;
object *locals;
PyFrameObject *
PyFrame_New(back, code, globals, locals)
PyFrameObject *back;
PyCodeObject *code;
PyObject *globals;
PyObject *locals;
{
static object *builtin_object;
frameobject *f;
object *builtins;
static PyObject *builtin_object;
PyFrameObject *f;
PyObject *builtins;
int extras = code->co_stacksize + code->co_nlocals;
if (builtin_object == NULL) {
@ -151,57 +150,59 @@ newframeobject(back, code, globals, locals)
if (builtin_object == NULL)
return NULL;
}
if ((back != NULL && !is_frameobject(back)) ||
code == NULL || !is_codeobject(code) ||
globals == NULL || !is_dictobject(globals) ||
(locals != NULL && !is_dictobject(locals))) {
err_badcall();
if ((back != NULL && !PyFrame_Check(back)) ||
code == NULL || !PyCode_Check(code) ||
globals == NULL || !PyDict_Check(globals) ||
(locals != NULL && !PyDict_Check(locals))) {
PyErr_BadInternalCall();
return NULL;
}
builtins = mappinglookup(globals, builtin_object);
if (builtins != NULL && is_moduleobject(builtins))
builtins = getmoduledict(builtins);
if (builtins == NULL || !is_mappingobject(builtins)) {
err_setstr(TypeError, "bad __builtins__ dictionary");
builtins = PyDict_GetItem(globals, builtin_object);
if (builtins != NULL && PyModule_Check(builtins))
builtins = PyModule_GetDict(builtins);
if (builtins == NULL || !PyDict_Check(builtins)) {
PyErr_SetString(PyExc_TypeError,
"bad __builtins__ dictionary");
return NULL;
}
if (free_list == NULL) {
f = (frameobject *)
malloc(sizeof(frameobject) + extras*sizeof(object *));
f = (PyFrameObject *)
malloc(sizeof(PyFrameObject) +
extras*sizeof(PyObject *));
if (f == NULL)
return (PyFrameObject *)err_nomem();
f->ob_type = &Frametype;
NEWREF(f);
return (PyFrameObject *)PyErr_NoMemory();
f->ob_type = &PyFrame_Type;
_Py_NewReference(f);
}
else {
f = free_list;
free_list = free_list->f_back;
if (f->f_nlocals + f->f_stacksize < extras) {
f = realloc(f, sizeof(frameobject) +
extras*sizeof(object *));
f = realloc(f, sizeof(PyFrameObject) +
extras*sizeof(PyObject *));
if (f == NULL)
return (PyFrameObject *)err_nomem();
return (PyFrameObject *)PyErr_NoMemory();
}
else
extras = f->f_nlocals + f->f_stacksize;
f->ob_type = &Frametype;
NEWREF(f);
f->ob_type = &PyFrame_Type;
_Py_NewReference(f);
}
XINCREF(back);
Py_XINCREF(back);
f->f_back = back;
INCREF(code);
Py_INCREF(code);
f->f_code = code;
XINCREF(builtins);
Py_XINCREF(builtins);
f->f_builtins = builtins;
INCREF(globals);
Py_INCREF(globals);
f->f_globals = globals;
if (code->co_flags & CO_NEWLOCALS) {
if (code->co_flags & CO_OPTIMIZED)
locals = NULL; /* Let fast_2_locals handle it */
else {
locals = newdictobject();
locals = PyDict_New();
if (locals == NULL) {
DECREF(f);
Py_DECREF(f);
return NULL;
}
}
@ -209,14 +210,14 @@ newframeobject(back, code, globals, locals)
else {
if (locals == NULL)
locals = globals;
INCREF(locals);
Py_INCREF(locals);
}
f->f_locals = locals;
f->f_trace = NULL;
f->f_lasti = 0;
f->f_lineno = code->co_firstlineno;
f->f_restricted = (builtins != getbuiltindict());
f->f_restricted = (builtins != PyBuiltin_GetDict());
f->f_iblock = 0;
f->f_nlocals = code->co_nlocals;
f->f_stacksize = extras - code->co_nlocals;
@ -232,28 +233,28 @@ newframeobject(back, code, globals, locals)
/* Block management */
void
setup_block(f, type, handler, level)
frameobject *f;
PyFrame_BlockSetup(f, type, handler, level)
PyFrameObject *f;
int type;
int handler;
int level;
{
block *b;
PyTryBlock *b;
if (f->f_iblock >= CO_MAXBLOCKS)
fatal("XXX block stack overflow");
Py_FatalError("XXX block stack overflow");
b = &f->f_blockstack[f->f_iblock++];
b->b_type = type;
b->b_level = level;
b->b_handler = handler;
}
block *
pop_block(f)
frameobject *f;
PyTryBlock *
PyFrame_BlockPop(f)
PyFrameObject *f;
{
block *b;
PyTryBlock *b;
if (f->f_iblock <= 0)
fatal("XXX block stack underflow");
Py_FatalError("XXX block stack underflow");
b = &f->f_blockstack[--f->f_iblock];
return b;
}
@ -261,59 +262,59 @@ pop_block(f)
/* Convert between "fast" version of locals and dictionary version */
void
fast_2_locals(f)
frameobject *f;
PyFrame_FastToLocals(f)
PyFrameObject *f;
{
/* Merge fast locals into f->f_locals */
object *locals, *map;
object **fast;
object *error_type, *error_value, *error_traceback;
PyObject *locals, *map;
PyObject **fast;
PyObject *error_type, *error_value, *error_traceback;
int j;
if (f == NULL)
return;
locals = f->f_locals;
if (locals == NULL) {
locals = f->f_locals = newdictobject();
locals = f->f_locals = PyDict_New();
if (locals == NULL) {
err_clear(); /* Can't report it :-( */
PyErr_Clear(); /* Can't report it :-( */
return;
}
}
if (f->f_nlocals == 0)
return;
map = f->f_code->co_varnames;
if (!is_dictobject(locals) || !is_tupleobject(map))
if (!PyDict_Check(locals) || !PyTuple_Check(map))
return;
err_fetch(&error_type, &error_value, &error_traceback);
PyErr_Fetch(&error_type, &error_value, &error_traceback);
fast = f->f_localsplus;
j = gettuplesize(map);
j = PyTuple_Size(map);
if (j > f->f_nlocals)
j = f->f_nlocals;
for (; --j >= 0; ) {
object *key = gettupleitem(map, j);
object *value = fast[j];
PyObject *key = PyTuple_GetItem(map, j);
PyObject *value = fast[j];
if (value == NULL) {
err_clear();
if (dict2remove(locals, key) != 0)
err_clear();
PyErr_Clear();
if (PyDict_DelItem(locals, key) != 0)
PyErr_Clear();
}
else {
if (dict2insert(locals, key, value) != 0)
err_clear();
if (PyDict_SetItem(locals, key, value) != 0)
PyErr_Clear();
}
}
err_restore(error_type, error_value, error_traceback);
PyErr_Restore(error_type, error_value, error_traceback);
}
void
locals_2_fast(f, clear)
frameobject *f;
PyFrame_LocalsToFast(f, clear)
PyFrameObject *f;
int clear;
{
/* Merge f->f_locals into fast locals */
object *locals, *map;
object **fast;
object *error_type, *error_value, *error_traceback;
PyObject *locals, *map;
PyObject **fast;
PyObject *error_type, *error_value, *error_traceback;
int j;
if (f == NULL)
return;
@ -321,24 +322,24 @@ locals_2_fast(f, clear)
map = f->f_code->co_varnames;
if (locals == NULL || f->f_code->co_nlocals == 0)
return;
if (!is_dictobject(locals) || !is_tupleobject(map))
if (!PyDict_Check(locals) || !PyTuple_Check(map))
return;
err_fetch(&error_type, &error_value, &error_traceback);
PyErr_Fetch(&error_type, &error_value, &error_traceback);
fast = f->f_localsplus;
j = gettuplesize(map);
j = PyTuple_Size(map);
if (j > f->f_nlocals)
j = f->f_nlocals;
for (; --j >= 0; ) {
object *key = gettupleitem(map, j);
object *value = dict2lookup(locals, key);
PyObject *key = PyTuple_GetItem(map, j);
PyObject *value = PyDict_GetItem(locals, key);
if (value == NULL)
err_clear();
PyErr_Clear();
else
INCREF(value);
Py_INCREF(value);
if (value != NULL || clear) {
XDECREF(fast[j]);
Py_XDECREF(fast[j]);
fast[j] = value;
}
}
err_restore(error_type, error_value, error_traceback);
PyErr_Restore(error_type, error_value, error_traceback);
}