]> granicus.if.org Git - python/commitdiff
remove the concept of an unoptimized function scope from the compiler, since it can...
authorBenjamin Peterson <benjamin@python.org>
Tue, 28 Apr 2015 01:44:22 +0000 (21:44 -0400)
committerBenjamin Peterson <benjamin@python.org>
Tue, 28 Apr 2015 01:44:22 +0000 (21:44 -0400)
Include/symtable.h
Lib/symtable.py
Modules/symtablemodule.c
Python/compile.c
Python/symtable.c

index 1cfd8844e5afb8927f069ed831286b7fc9c3142b..1409cd91ce6a1d85114c69706c1f856215ce9e9c 100644 (file)
@@ -43,7 +43,6 @@ typedef struct _symtable_entry {
     PyObject *ste_children;  /* list of child blocks */
     PyObject *ste_directives;/* locations of global and nonlocal statements */
     _Py_block_ty ste_type;   /* module, class, or function */
-    int ste_unoptimized;     /* false if namespace is optimized */
     int ste_nested;      /* true if block is nested */
     unsigned ste_free : 1;        /* true if block has free variables */
     unsigned ste_child_free : 1;  /* true if a child block has free vars,
@@ -108,10 +107,6 @@ PyAPI_FUNC(void) PySymtable_Free(struct symtable *);
 #define FREE 4
 #define CELL 5
 
-/* The following two names are used for the ste_unoptimized bit field */
-#define OPT_IMPORT_STAR 1
-#define OPT_TOPLEVEL 2  /* top-level names, including eval and exec */
-
 #define GENERATOR 1
 #define GENERATOR_EXPRESSION 2
 
index e23313b031c9d45e9f50ecf6d4c9dd97594c4ee4..84fec4aa66681867af1301dab889f6906d8bc41d 100644 (file)
@@ -2,7 +2,7 @@
 
 import _symtable
 from _symtable import (USE, DEF_GLOBAL, DEF_LOCAL, DEF_PARAM,
-     DEF_IMPORT, DEF_BOUND, OPT_IMPORT_STAR, SCOPE_OFF, SCOPE_MASK, FREE,
+     DEF_IMPORT, DEF_BOUND, SCOPE_OFF, SCOPE_MASK, FREE,
      LOCAL, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT, CELL)
 
 import weakref
@@ -74,8 +74,7 @@ class SymbolTable(object):
         return self._table.lineno
 
     def is_optimized(self):
-        return bool(self._table.type == _symtable.TYPE_FUNCTION
-                    and not self._table.optimized)
+        return bool(self._table.type == _symtable.TYPE_FUNCTION)
 
     def is_nested(self):
         return bool(self._table.nested)
@@ -87,10 +86,6 @@ class SymbolTable(object):
         """Return true if the scope uses exec.  Deprecated method."""
         return False
 
-    def has_import_star(self):
-        """Return true if the scope uses import *"""
-        return bool(self._table.optimized & OPT_IMPORT_STAR)
-
     def get_identifiers(self):
         return self._table.symbols.keys()
 
index cdb4ffcbd84743ed49fb2c7e81133a334cc0b969..f84cc78b739ac78657d688df455e47afcfc2f665 100644 (file)
@@ -84,9 +84,6 @@ PyInit__symtable(void)
     PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock);
     PyModule_AddIntConstant(m, "TYPE_MODULE", ModuleBlock);
 
-    PyModule_AddIntMacro(m, OPT_IMPORT_STAR);
-    PyModule_AddIntMacro(m, OPT_TOPLEVEL);
-
     PyModule_AddIntMacro(m, LOCAL);
     PyModule_AddIntMacro(m, GLOBAL_EXPLICIT);
     PyModule_AddIntMacro(m, GLOBAL_IMPLICIT);
index d5009e18fa78b439e0d9950ce3f450fc61373f2c..855ec464af6c88c9b91f0d73679864c786b08770 100644 (file)
@@ -2753,8 +2753,7 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx)
             optype = OP_FAST;
         break;
     case GLOBAL_IMPLICIT:
-        if (c->u->u_ste->ste_type == FunctionBlock &&
-            !c->u->u_ste->ste_unoptimized)
+        if (c->u->u_ste->ste_type == FunctionBlock)
             optype = OP_GLOBAL;
         break;
     case GLOBAL_EXPLICIT:
@@ -4185,9 +4184,7 @@ compute_code_flags(struct compiler *c)
     int flags = 0;
     Py_ssize_t n;
     if (ste->ste_type == FunctionBlock) {
-        flags |= CO_NEWLOCALS;
-        if (!ste->ste_unoptimized)
-            flags |= CO_OPTIMIZED;
+        flags |= CO_NEWLOCALS | CO_OPTIMIZED;
         if (ste->ste_nested)
             flags |= CO_NESTED;
         if (ste->ste_generator)
index 951267342b900b8c6ad17bf4f15b1ac0ffdbbdc5..fbbe77f62508f0980cd4cc7f363749262e6079b0 100644 (file)
@@ -47,7 +47,6 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block,
     ste->ste_directives = NULL;
 
     ste->ste_type = block;
-    ste->ste_unoptimized = 0;
     ste->ste_nested = 0;
     ste->ste_free = 0;
     ste->ste_varargs = 0;
@@ -113,7 +112,6 @@ static PyMemberDef ste_memberlist[] = {
     {"symbols",  T_OBJECT, OFF(ste_symbols), READONLY},
     {"varnames", T_OBJECT, OFF(ste_varnames), READONLY},
     {"children", T_OBJECT, OFF(ste_children), READONLY},
-    {"optimized",T_INT,    OFF(ste_unoptimized), READONLY},
     {"nested",   T_INT,    OFF(ste_nested), READONLY},
     {"type",     T_INT,    OFF(ste_type), READONLY},
     {"lineno",   T_INT,    OFF(ste_lineno), READONLY},
@@ -271,7 +269,6 @@ PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future)
     }
 
     st->st_top = st->st_cur;
-    st->st_cur->ste_unoptimized = OPT_TOPLEVEL;
     switch (mod->kind) {
     case Module_kind:
         seq = mod->v.Module.body;
@@ -1245,21 +1242,9 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
         break;
     case Import_kind:
         VISIT_SEQ(st, alias, s->v.Import.names);
-        /* XXX Don't have the lineno available inside
-           visit_alias */
-        if (st->st_cur->ste_unoptimized && !st->st_cur->ste_opt_lineno) {
-            st->st_cur->ste_opt_lineno = s->lineno;
-            st->st_cur->ste_opt_col_offset = s->col_offset;
-        }
         break;
     case ImportFrom_kind:
         VISIT_SEQ(st, alias, s->v.ImportFrom.names);
-        /* XXX Don't have the lineno available inside
-           visit_alias */
-        if (st->st_cur->ste_unoptimized && !st->st_cur->ste_opt_lineno) {
-            st->st_cur->ste_opt_lineno = s->lineno;
-            st->st_cur->ste_opt_col_offset = s->col_offset;
-        }
         break;
     case Global_kind: {
         int i;
@@ -1615,7 +1600,6 @@ symtable_visit_alias(struct symtable *st, alias_ty a)
             Py_DECREF(store_name);
             return 0;
         }
-        st->st_cur->ste_unoptimized |= OPT_IMPORT_STAR;
         Py_DECREF(store_name);
         return 1;
     }