Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.2 KiB

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