summaryrefslogtreecommitdiffstats
path: root/Objects/frameobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/frameobject.c')
-rw-r--r--Objects/frameobject.c201
1 files changed, 101 insertions, 100 deletions
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 1936138..b5af7b6 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -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);
}