home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / symtable.h < prev    next >
C/C++ Source or Header  |  2003-12-30  |  4KB  |  100 lines

  1. #ifndef Py_SYMTABLE_H
  2. #define Py_SYMTABLE_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6.  
  7. /* A symbol table is constructed each time PyNode_Compile() is
  8.    called.  The table walks the entire parse tree and identifies each
  9.    use or definition of a variable. 
  10.  
  11.    The symbol table contains a dictionary for each code block in a
  12.    module: The symbol dictionary for the block.  They keys of these
  13.    dictionaries are the name of all variables used or defined in the
  14.    block; the integer values are used to store several flags,
  15.    e.g. DEF_PARAM indicates that a variable is a parameter to a
  16.    function. 
  17. */
  18.  
  19. struct _symtable_entry;
  20.  
  21. struct symtable {
  22.     int st_pass;             /* pass == 1 or 2 */
  23.     const char *st_filename; /* name of file being compiled */
  24.     struct _symtable_entry *st_cur; /* current symbol table entry */
  25.     PyObject *st_symbols;    /* dictionary of symbol table entries */
  26.         PyObject *st_stack;      /* stack of namespace info */
  27.     PyObject *st_global;     /* borrowed ref to MODULE in st_symbols */
  28.     int st_nscopes;          /* number of scopes */
  29.     int st_errors;           /* number of errors */
  30.     char *st_private;        /* name of current class or NULL */
  31.     PyFutureFeatures *st_future; /* module's future features */
  32. };
  33.  
  34. typedef struct _symtable_entry {
  35.     PyObject_HEAD
  36.     PyObject *ste_id;        /* int: key in st_symbols) */
  37.     PyObject *ste_symbols;   /* dict: name to flags) */
  38.     PyObject *ste_name;      /* string: name of scope */
  39.     PyObject *ste_varnames;  /* list of variable names */
  40.     PyObject *ste_children;  /* list of child ids */
  41.     int ste_type;            /* module, class, or function */
  42.     int ste_lineno;          /* first line of scope */
  43.     int ste_optimized;       /* true if namespace can't be optimized */
  44.     int ste_nested;          /* true if scope is nested */
  45.     int ste_child_free;      /* true if a child scope has free variables,
  46.                     including free refs to globals */
  47.     int ste_generator;       /* true if namespace is a generator */
  48.     int ste_opt_lineno;      /* lineno of last exec or import * */
  49.     int ste_tmpname;          /* temporary name counter */
  50.     struct symtable *ste_table;
  51. } PySymtableEntryObject;
  52.  
  53. PyAPI_DATA(PyTypeObject) PySymtableEntry_Type;
  54.  
  55. #define PySymtableEntry_Check(op) ((op)->ob_type == &PySymtableEntry_Type)
  56.  
  57. PyAPI_FUNC(PyObject *) PySymtableEntry_New(struct symtable *,
  58.                          char *, int, int);
  59.  
  60. PyAPI_FUNC(struct symtable *) PyNode_CompileSymtable(struct _node *, const char *);
  61. PyAPI_FUNC(void) PySymtable_Free(struct symtable *);
  62.  
  63.  
  64. #define TOP "global"
  65.  
  66. /* Flags for def-use information */
  67.  
  68. #define DEF_GLOBAL 1           /* global stmt */
  69. #define DEF_LOCAL 2            /* assignment in code block */
  70. #define DEF_PARAM 2<<1         /* formal parameter */
  71. #define USE 2<<2               /* name is used */
  72. #define DEF_STAR 2<<3          /* parameter is star arg */
  73. #define DEF_DOUBLESTAR 2<<4    /* parameter is star-star arg */
  74. #define DEF_INTUPLE 2<<5       /* name defined in tuple in parameters */
  75. #define DEF_FREE 2<<6          /* name used but not defined in nested scope */
  76. #define DEF_FREE_GLOBAL 2<<7   /* free variable is actually implicit global */
  77. #define DEF_FREE_CLASS 2<<8    /* free variable from class's method */
  78. #define DEF_IMPORT 2<<9        /* assignment occurred via import */
  79.  
  80. #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  81.  
  82. #define TYPE_FUNCTION 1
  83. #define TYPE_CLASS 2
  84. #define TYPE_MODULE 3
  85.  
  86. #define LOCAL 1
  87. #define GLOBAL_EXPLICIT 2
  88. #define GLOBAL_IMPLICIT 3
  89. #define FREE 4
  90. #define CELL 5
  91.  
  92. #define OPT_IMPORT_STAR 1
  93. #define OPT_EXEC 2
  94. #define OPT_BARE_EXEC 4
  95.  
  96. #ifdef __cplusplus
  97. }
  98. #endif
  99. #endif /* !Py_SYMTABLE_H */
  100.