File: pdictobject.c

package info (click to toggle)
psyco 1.5.1-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,864 kB
  • ctags: 3,295
  • sloc: ansic: 24,491; python: 5,573; perl: 1,309; makefile: 166; sh: 1
file content (60 lines) | stat: -rw-r--r-- 1,379 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "pdictobject.h"


#define DICT_ma_used   FMUT(DEF_FIELD(PyDictObject, int, ma_used, OB_type))
#define iDICT_MA_USED  FIELD_INDEX(DICT_ma_used)

DEFINEFN
vinfo_t* PsycoDict_New(PsycoObject* po)
{
	/* XXX no virtual dicts yet */
	vinfo_t* v = psyco_generic_call(po, PyDict_New,
					CfReturnRef|CfPyErrIfNull, "");
	if (v == NULL)
		return NULL;

	/* the result is a dict */
	Psyco_AssertType(po, v, &PyDict_Type);
	return v;
}

DEFINEFN
vinfo_t* PsycoDict_Copy(PsycoObject* po, vinfo_t* orig)
{
	vinfo_t* v = psyco_generic_call(po, PyDict_Copy,
					CfReturnRef|CfPyErrIfNull,
					"v", orig);
	if (v == NULL)
		return NULL;

	/* the result is a dict */
	Psyco_AssertType(po, v, &PyDict_Type);
	return v;
}

DEFINEFN
bool PsycoDict_SetItem(PsycoObject* po, vinfo_t* vdict,
			   PyObject* key, vinfo_t* vvalue)
{
	return psyco_generic_call(po, PyDict_SetItem,
				  CfNoReturnValue|CfPyErrIfNeg,
				  "vlv", vdict, (long) key, vvalue) != NULL;
}

static vinfo_t* psyco_dict_length(PsycoObject* po, vinfo_t* vi)
{
	return psyco_get_field(po, vi, DICT_ma_used);
}


INITIALIZATIONFN
void psy_dictobject_init(void)
{
	PyMappingMethods *m = PyDict_Type.tp_as_mapping;
	Psyco_DefineMeta(m->mp_length, psyco_dict_length);

#if !HAVE_struct_dictobject
        extra_assert(sizeof(struct _dictobject) + PyGC_HEAD_SIZE ==
                     PyDict_Type.tp_basicsize);
#endif
}