~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Include/code.h

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Definitions for bytecode */
 
2
 
 
3
#ifndef Py_CODE_H
 
4
#define Py_CODE_H
 
5
#ifdef __cplusplus
 
6
extern "C" {
 
7
#endif
 
8
 
 
9
/* Bytecode object */
 
10
typedef struct {
 
11
    PyObject_HEAD
 
12
    int co_argcount;            /* #arguments, except *args */
 
13
    int co_kwonlyargcount;      /* #keyword only arguments */
 
14
    int co_nlocals;             /* #local variables */
 
15
    int co_stacksize;           /* #entries needed for evaluation stack */
 
16
    int co_flags;               /* CO_..., see below */
 
17
    PyObject *co_code;          /* instruction opcodes */
 
18
    PyObject *co_consts;        /* list (constants used) */
 
19
    PyObject *co_names;         /* list of strings (names used) */
 
20
    PyObject *co_varnames;      /* tuple of strings (local variable names) */
 
21
    PyObject *co_freevars;      /* tuple of strings (free variable names) */
 
22
    PyObject *co_cellvars;      /* tuple of strings (cell variable names) */
 
23
    /* The rest doesn't count for hash or comparisons */
 
24
    PyObject *co_filename;      /* unicode (where it was loaded from) */
 
25
    PyObject *co_name;          /* unicode (name, for reference) */
 
26
    int co_firstlineno;         /* first source line number */
 
27
    PyObject *co_lnotab;        /* string (encoding addr<->lineno mapping) */
 
28
    void *co_zombieframe;     /* for optimization only (see frameobject.c) */
 
29
} PyCodeObject;
 
30
 
 
31
/* Masks for co_flags above */
 
32
#define CO_OPTIMIZED    0x0001
 
33
#define CO_NEWLOCALS    0x0002
 
34
#define CO_VARARGS      0x0004
 
35
#define CO_VARKEYWORDS  0x0008
 
36
#define CO_NESTED       0x0010
 
37
#define CO_GENERATOR    0x0020
 
38
/* The CO_NOFREE flag is set if there are no free or cell variables.
 
39
   This information is redundant, but it allows a single flag test
 
40
   to determine whether there is any extra work to be done when the
 
41
   call frame it setup.
 
42
*/
 
43
#define CO_NOFREE       0x0040
 
44
 
 
45
#if 0
 
46
/* These are no longer used. */
 
47
#define CO_GENERATOR_ALLOWED    0x1000
 
48
#define CO_FUTURE_DIVISION      0x2000
 
49
#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
 
50
#define CO_FUTURE_WITH_STATEMENT  0x8000
 
51
#define CO_FUTURE_PRINT_FUNCTION  0x10000
 
52
#define CO_FUTURE_UNICODE_LITERALS 0x20000
 
53
#endif
 
54
 
 
55
/* This should be defined if a future statement modifies the syntax.
 
56
   For example, when a keyword is added.
 
57
*/
 
58
/* #define PY_PARSER_REQUIRES_FUTURE_KEYWORD */
 
59
 
 
60
#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
 
61
 
 
62
PyAPI_DATA(PyTypeObject) PyCode_Type;
 
63
 
 
64
#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
 
65
#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
 
66
 
 
67
/* Public interface */
 
68
PyAPI_FUNC(PyCodeObject *) PyCode_New(
 
69
        int, int, int, int, int, PyObject *, PyObject *,
 
70
        PyObject *, PyObject *, PyObject *, PyObject *,
 
71
        PyObject *, PyObject *, int, PyObject *); 
 
72
        /* same as struct above */
 
73
PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
 
74
 
 
75
/* for internal use only */
 
76
typedef struct _addr_pair {
 
77
        int ap_lower;
 
78
        int ap_upper;
 
79
} PyAddrPair;
 
80
 
 
81
/* Check whether lasti (an instruction offset) falls outside bounds
 
82
   and whether it is a line number that should be traced.  Returns
 
83
   a line number if it should be traced or -1 if the line should not.
 
84
 
 
85
   If lasti is not within bounds, updates bounds.
 
86
*/
 
87
 
 
88
PyAPI_FUNC(int) PyCode_CheckLineNumber(PyCodeObject* co,
 
89
                                       int lasti, PyAddrPair *bounds);
 
90
 
 
91
PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
 
92
                                      PyObject *names, PyObject *lineno_obj);
 
93
 
 
94
#ifdef __cplusplus
 
95
}
 
96
#endif
 
97
#endif /* !Py_CODE_H */