[Python-checkins] r63857 - in python/branches/tlee-ast-optimize: Include/compile.h Include/optimize.h Python/bltinmodule.c Python/compile.c Python/optimize.c Python/pythonrun.c

thomas.lee python-checkins at python.org
Sun Jun 1 18:29:03 CEST 2008


Author: thomas.lee
Date: Sun Jun 1 18:29:02 2008
New Revision: 63857
Log:
Reverting earlier changes. Need to tread a little more carefully here.
Modified:
 python/branches/tlee-ast-optimize/Include/compile.h
 python/branches/tlee-ast-optimize/Include/optimize.h
 python/branches/tlee-ast-optimize/Python/bltinmodule.c
 python/branches/tlee-ast-optimize/Python/compile.c
 python/branches/tlee-ast-optimize/Python/optimize.c
 python/branches/tlee-ast-optimize/Python/pythonrun.c
Modified: python/branches/tlee-ast-optimize/Include/compile.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/compile.h	(original)
+++ python/branches/tlee-ast-optimize/Include/compile.h	Sun Jun 1 18:29:02 2008
@@ -32,8 +32,6 @@
 PyAPI_FUNC(PyCodeObject *) PyAST_Compile(struct _mod *, const char *,
 					PyCompilerFlags *, PyArena *);
 PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *);
-PyAPI_FUNC(int) PyAST_BuildSymbolInfo(struct _mod *, PyFutureFeatures**,
- struct symtable**, const char*, PyCompilerFlags*);
 
 #define ERR_LATE_FUTURE \
 "from __future__ imports must occur at the beginning of the file"
Modified: python/branches/tlee-ast-optimize/Include/optimize.h
==============================================================================
--- python/branches/tlee-ast-optimize/Include/optimize.h	(original)
+++ python/branches/tlee-ast-optimize/Include/optimize.h	Sun Jun 1 18:29:02 2008
@@ -5,8 +5,7 @@
 extern "C" {
 #endif
 
-PyAPI_FUNC(int) PyAST_Optimize(mod_ty* mod_ptr, struct symtable* st,
- PyArena* arena);
+PyAPI_FUNC(int) PyAST_Optimize(mod_ty* mod_ptr, PyArena* arena);
 
 #ifdef __cplusplus
 };
Modified: python/branches/tlee-ast-optimize/Python/bltinmodule.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/bltinmodule.c	(original)
+++ python/branches/tlee-ast-optimize/Python/bltinmodule.c	Sun Jun 1 18:29:02 2008
@@ -6,7 +6,6 @@
 #include "node.h"
 #include "code.h"
 #include "eval.h"
-#include "symtable.h"
 #include "optimize.h"
 
 #include <ctype.h>
@@ -516,8 +515,6 @@
 		else {
 			PyArena *arena;
 			mod_ty mod;
- struct symtable* st;
- PyFutureFeatures* future;
 
 			arena = PyArena_New();
 			mod = PyAST_obj2mod(cmd, arena, mode);
@@ -525,15 +522,9 @@
 				PyArena_Free(arena);
 				return NULL;
 			}
- if (!PyAST_BuildSymbolInfo(mod, &future, &st, filename, &cf)) {
- PyArena_Free(arena);
- return NULL;
- }
 if (!(supplied_flags & PyCF_NO_OPTIMIZE)) {
- if (!PyAST_Optimize(&mod, st, arena)) {
+ if (!PyAST_Optimize(&mod, arena)) {
 PyArena_Free(arena);
- PySymtable_Free(st);
- PyObject_Free(future);
 return NULL;
 }
 }
Modified: python/branches/tlee-ast-optimize/Python/compile.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/compile.c	(original)
+++ python/branches/tlee-ast-optimize/Python/compile.c	Sun Jun 1 18:29:02 2008
@@ -180,31 +180,6 @@
 static PyCodeObject *assemble(struct compiler *, int addNone);
 static PyObject *__doc__;
 
-int
-PyAST_BuildSymbolInfo(mod_ty mod, PyFutureFeatures** f, struct symtable** st,
- const char* filename, PyCompilerFlags* cf)
-{
- int merged;
-
- *f = PyFuture_FromAST(mod, filename);
- if (*f == NULL)
- return 0;
-
- merged = (*f)->ff_features | (cf ? cf->cf_flags : 0);
- (*f)->ff_features = merged;
-
- *st = PySymtable_Build(mod, filename, *f);
- if (*st == NULL) {
- PyObject_Free(*st);
- return 0;
- }
-
- if (cf != NULL)
- cf->cf_flags = merged;
-
- return 1;
-}
-
 PyObject *
 _Py_Mangle(PyObject *privateobj, PyObject *ident)
 {
@@ -272,6 +247,7 @@
 	struct compiler c;
 	PyCodeObject *co = NULL;
 	PyCompilerFlags local_flags;
+	int merged;
 
 	if (!__doc__) {
 		__doc__ = PyBytes_InternFromString("__doc__");
@@ -283,13 +259,25 @@
 		return NULL;
 	c.c_filename = filename;
 	c.c_arena = arena;
+	c.c_future = PyFuture_FromAST(mod, filename);
+	if (c.c_future == NULL)
+		goto finally;
 	if (!flags) {
 		local_flags.cf_flags = 0;
 		flags = &local_flags;
 	}
- if (!PyAST_BuildSymbolInfo(mod, &c.c_future, &c.c_st, filename, flags))
- goto finally;
- c.c_flags = flags;
+	merged = c.c_future->ff_features | flags->cf_flags;
+	c.c_future->ff_features = merged;
+	flags->cf_flags = merged;
+	c.c_flags = flags;
+	c.c_nestlevel = 0;
+
+	c.c_st = PySymtable_Build(mod, filename, c.c_future);
+	if (c.c_st == NULL) {
+		if (!PyErr_Occurred())
+			PyErr_SetString(PyExc_SystemError, "no symtable");
+		goto finally;
+	}
 
 	/* XXX initialize to NULL for now, need to handle */
 	c.c_encoding = NULL;
@@ -312,15 +300,8 @@
 		return NULL;
 	mod = PyAST_FromNode(n, NULL, filename, arena);
 	if (mod != NULL) {
- PyFutureFeatures* future;
- struct symtable* st;
-
- if (PyAST_BuildSymbolInfo(mod, &future, &st, filename, NULL)) {
- if (PyAST_Optimize(&mod, st, arena)) {
- co = PyAST_Compile(mod, filename, NULL, arena);
- }
- PyObject_Free(future);
- PySymtable_Free(st);
+ if (PyAST_Optimize(&mod, arena)) {
+ co = PyAST_Compile(mod, filename, NULL, arena);
 }
 }
 	PyArena_Free(arena);
@@ -330,10 +311,10 @@
 static void
 compiler_free(struct compiler *c)
 {
- if (c->c_st != NULL)
- PySymtable_Free(c->c_st);
- if (c->c_future)
- PyObject_Free(c->c_future);
+	if (c->c_st)
+		PySymtable_Free(c->c_st);
+	if (c->c_future)
+		PyObject_Free(c->c_future);
 	Py_DECREF(c->c_stack);
 }
 
Modified: python/branches/tlee-ast-optimize/Python/optimize.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/optimize.c	(original)
+++ python/branches/tlee-ast-optimize/Python/optimize.c	Sun Jun 1 18:29:02 2008
@@ -4,22 +4,14 @@
 #include "pyerrors.h"
 #include "node.h"
 #include "ast.h"
-#include "symtable.h"
 
-static int optimize_expr(expr_ty* expr_ptr, PySTEntryObject* ste,
- PyArena* arena);
-static int optimize_stmt(stmt_ty* stmt_ptr, PySTEntryObject* ste,
- PyArena* arena);
-static int optimize_comprehension(comprehension_ty* comp_ptr,
- PySTEntryObject* ste, PyArena* arena);
-static int optimize_excepthandler(excepthandler_ty* exc_ptr,
- PySTEntryObject* ste, PyArena* arena);
-static int optimize_keyword(keyword_ty* kwd_ptr, PySTEntryObject* ste,
- PyArena* arena);
-static int optimize_arguments(arguments_ty* args_ptr, PySTEntryObject* ste,
- PyArena* arena);
-static int optimize_slice(slice_ty* slice_ptr, PySTEntryObject* ste,
- PyArena* arena);
+static int optimize_expr(expr_ty* expr_ptr, PyArena* arena);
+static int optimize_stmt(stmt_ty* stmt_ptr, PyArena* arena);
+static int optimize_comprehension(comprehension_ty* comp_ptr, PyArena* arena);
+static int optimize_excepthandler(excepthandler_ty* exc_ptr, PyArena* arena);
+static int optimize_keyword(keyword_ty* kwd_ptr, PyArena* arena);
+static int optimize_arguments(arguments_ty* args_ptr, PyArena* arena);
+static int optimize_slice(slice_ty* slice_ptr, PyArena* arena);
 
 /**
 * Determine the constant value of a given expression. It's assumed that
@@ -141,12 +133,12 @@
 * Optimize a sequence of expressions.
 */
 static int
-optimize_expr_seq(asdl_seq** seq_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_expr_seq(asdl_seq** seq_ptr, PyArena* arena)
 {
 int n;
 asdl_seq* seq = *seq_ptr;
 for (n = 0; n < asdl_seq_LEN(seq); n++)
- if (!optimize_expr((expr_ty*)&asdl_seq_GET(seq, n), ste, arena))
+ if (!optimize_expr((expr_ty*)&asdl_seq_GET(seq, n), arena))
 return 0;
 return 1;
 }
@@ -194,8 +186,7 @@
 * Replaces the AST node at `n' with a Pass() node.
 */
 static asdl_seq*
-_asdl_seq_replace_with_pass(asdl_seq* seq, int n, int lineno, int col_offset,
- PyArena* arena)
+_asdl_seq_replace_with_pass(asdl_seq* seq, int n, int lineno, int col_offset, PyArena* arena)
 {
 stmt_ty pass = Pass(lineno, col_offset, arena);
 if (pass == NULL)
@@ -208,13 +199,13 @@
 * Optimize a sequence of statements.
 */
 static int
-optimize_stmt_seq(asdl_seq** seq_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_stmt_seq(asdl_seq** seq_ptr, PyArena* arena)
 {
 int n;
 asdl_seq* seq = *seq_ptr;
 for (n = 0; n < asdl_seq_LEN(seq); n++) {
 stmt_ty stmt = asdl_seq_GET(seq, n);
- if (!optimize_stmt((stmt_ty*)&asdl_seq_GET(seq, n), ste, arena))
+ if (!optimize_stmt((stmt_ty*)&asdl_seq_GET(seq, n), arena))
 return 0;
 
 if (stmt->kind == If_kind) {
@@ -252,59 +243,57 @@
 }
 
 static int
-optimize_comprehension_seq(asdl_seq** seq_ptr, PySTEntryObject* ste,
- PyArena* arena)
+optimize_comprehension_seq(asdl_seq** seq_ptr, PyArena* arena)
 {
 int n;
 asdl_seq* seq = *seq_ptr;
 for (n = 0; n < asdl_seq_LEN(seq); n++) {
 comprehension_ty* comp;
 comp = (comprehension_ty*)&asdl_seq_GET(seq, n);
- if (!optimize_comprehension(comp, ste, arena))
+ if (!optimize_comprehension(comp, arena))
 return 0;
 }
 return 1;
 }
 
 static int
-optimize_excepthandler_seq(asdl_seq** seq_ptr, PySTEntryObject* ste,
- PyArena* arena)
+optimize_excepthandler_seq(asdl_seq** seq_ptr, PyArena* arena)
 {
 int n;
 asdl_seq* seq = *seq_ptr;
 for (n = 0; n < asdl_seq_LEN(seq); n++) {
 excepthandler_ty* excepthandler;
 excepthandler = (excepthandler_ty*)&asdl_seq_GET(seq, n);
- if (!optimize_excepthandler(excepthandler, ste, arena))
+ if (!optimize_excepthandler(excepthandler, arena))
 return 0;
 }
 return 1;
 }
 
 static int
-optimize_keyword_seq(asdl_seq** seq_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_keyword_seq(asdl_seq** seq_ptr, PyArena* arena)
 {
 int n;
 asdl_seq* seq = *seq_ptr;
 for (n = 0; n < asdl_seq_LEN(seq); n++)
- if (!optimize_keyword((keyword_ty*)&asdl_seq_GET(seq, n), ste, arena))
+ if (!optimize_keyword((keyword_ty*)&asdl_seq_GET(seq, n), arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_slice_seq(asdl_seq** seq_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_slice_seq(asdl_seq** seq_ptr, PyArena* arena)
 {
 int n;
 asdl_seq* seq = *seq_ptr;
 for (n = 0; n < asdl_seq_LEN(seq); n++)
- if (!optimize_slice((slice_ty*)&asdl_seq_GET(seq, n), ste, arena))
+ if (!optimize_slice((slice_ty*)&asdl_seq_GET(seq, n), arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_mod(mod_ty* mod_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_mod(mod_ty* mod_ptr, PyArena* arena)
 {
 asdl_seq** body;
 mod_ty mod = *mod_ptr;
@@ -327,7 +316,7 @@
 }
 case Expression_kind:
 {
- return optimize_expr(&mod->v.Expression.body, ste, arena);
+ return optimize_expr(&mod->v.Expression.body, arena);
 }
 default:
 PyErr_Format(PyExc_ValueError, "unknown mod_ty kind: %d",
@@ -335,28 +324,28 @@
 return 0;
 };
 
- return optimize_stmt_seq(body, ste, arena);
+ return optimize_stmt_seq(body, arena);
 }
 
 static int
-optimize_bool_op(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_bool_op(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr_seq(&expr->v.BoolOp.values, ste, arena))
+ if (!optimize_expr_seq(&expr->v.BoolOp.values, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_bin_op(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_bin_op(expr_ty* expr_ptr, PyArena* arena)
 {
 PyObject* left;
 PyObject* right;
 expr_ty expr = *expr_ptr;
 
- if (!optimize_expr(&expr->v.BinOp.left, ste, arena))
+ if (!optimize_expr(&expr->v.BinOp.left, arena))
 return 0;
- if (!optimize_expr(&expr->v.BinOp.right, ste, arena))
+ if (!optimize_expr(&expr->v.BinOp.right, arena))
 return 0;
 
 /* 
@@ -483,11 +472,11 @@
 }
 
 static int
-optimize_unary_op(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_unary_op(expr_ty* expr_ptr, PyArena* arena)
 {
 PyObject* operand;
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.UnaryOp.operand, ste, arena))
+ if (!optimize_expr(&expr->v.UnaryOp.operand, arena))
 return 0;
 operand = _expr_constant_value(expr->v.UnaryOp.operand);
 if (operand != NULL) {
@@ -548,82 +537,76 @@
 }
 
 static int
-optimize_lambda(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_lambda(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- /* XXX: do we need to look up ste again? */
- if (!optimize_expr(&expr->v.Lambda.body, ste, arena))
+ if (!optimize_expr(&expr->v.Lambda.body, arena))
 return 0;
 return 1;
 }
 
-static int optimize_if_exp(expr_ty* expr_ptr, PySTEntryObject* ste,
- PyArena* arena) {
+static int optimize_if_exp(expr_ty* expr_ptr, PyArena* arena) {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.IfExp.test, ste, arena))
+ if (!optimize_expr(&expr->v.IfExp.test, arena))
 return 0;
- if (!optimize_expr(&expr->v.IfExp.body, ste, arena))
+ if (!optimize_expr(&expr->v.IfExp.body, arena))
 return 0;
- if (!optimize_expr(&expr->v.IfExp.orelse, ste, arena))
+ if (!optimize_expr(&expr->v.IfExp.orelse, arena))
 return 0;
 return 1;
 }
 
-static int optimize_dict(expr_ty* expr_ptr, PySTEntryObject* ste,
- PyArena* arena)
-{
+static int optimize_dict(expr_ty* expr_ptr, PyArena* arena) {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr_seq(&expr->v.Dict.keys, ste, arena))
+ if (!optimize_expr_seq(&expr->v.Dict.keys, arena))
 return 0;
- if (!optimize_expr_seq(&expr->v.Dict.values, ste, arena))
+ if (!optimize_expr_seq(&expr->v.Dict.values, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_comprehension(comprehension_ty* comp_ptr, PySTEntryObject* ste,
- PyArena* arena)
+optimize_comprehension(comprehension_ty* comp_ptr, PyArena* arena)
 {
 comprehension_ty comp = *comp_ptr;
- if (!optimize_expr(&comp->target, ste, arena))
+ if (!optimize_expr(&comp->target, arena))
 return 0;
- if (!optimize_expr(&comp->iter, ste, arena))
+ if (!optimize_expr(&comp->iter, arena))
 return 0;
- if (!optimize_expr_seq(&comp->ifs, ste, arena))
+ if (!optimize_expr_seq(&comp->ifs, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_list_comp(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_list_comp(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.ListComp.elt, ste, arena))
+ if (!optimize_expr(&expr->v.ListComp.elt, arena))
 return 0;
- if (!optimize_comprehension_seq(&expr->v.ListComp.generators, ste, arena))
+ if (!optimize_comprehension_seq(&expr->v.ListComp.generators, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_generator_exp(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_generator_exp(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.GeneratorExp.elt, ste, arena))
+ if (!optimize_expr(&expr->v.GeneratorExp.elt, arena))
 return 0;
- if (!optimize_comprehension_seq(&expr->v.GeneratorExp.generators, ste,
- arena))
+ if (!optimize_comprehension_seq(&expr->v.GeneratorExp.generators, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_yield(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_yield(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
 if (expr->v.Yield.value != NULL) {
 expr_ty value;
- if (!optimize_expr(&expr->v.Yield.value, ste, arena))
+ if (!optimize_expr(&expr->v.Yield.value, arena))
 return 0;
 value = expr->v.Yield.value;
 if (value->kind == Const_kind && value->v.Const.value == Py_None)
@@ -633,101 +616,100 @@
 }
 
 static int
-optimize_compare(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_compare(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.Compare.left, ste, arena))
+ if (!optimize_expr(&expr->v.Compare.left, arena))
 return 0;
- if (!optimize_expr_seq(&expr->v.Compare.comparators, ste, arena))
+ if (!optimize_expr_seq(&expr->v.Compare.comparators, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_keyword(keyword_ty* keyword_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_keyword(keyword_ty* keyword_ptr, PyArena* arena)
 {
 keyword_ty keyword = *keyword_ptr;
- if (!optimize_expr(&keyword->value, ste, arena))
+ if (!optimize_expr(&keyword->value, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_arguments(arguments_ty* args_ptr, PySTEntryObject* ste,
- PyArena* arena)
+optimize_arguments(arguments_ty* args_ptr, PyArena* arena)
 {
 arguments_ty args = *args_ptr;
- if (!optimize_expr_seq(&args->args, ste, arena))
+ if (!optimize_expr_seq(&args->args, arena))
 return 0;
- if (!optimize_expr_seq(&args->defaults, ste, arena))
+ if (!optimize_expr_seq(&args->defaults, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_call(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_call(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.Call.func, ste, arena))
+ if (!optimize_expr(&expr->v.Call.func, arena))
 return 0;
- if (!optimize_expr_seq(&expr->v.Call.args, ste, arena))
+ if (!optimize_expr_seq(&expr->v.Call.args, arena))
 return 0;
- if (!optimize_keyword_seq(&expr->v.Call.keywords, ste, arena))
+ if (!optimize_keyword_seq(&expr->v.Call.keywords, arena))
 return 0;
 if (expr->v.Call.starargs != NULL)
- if (!optimize_expr(&expr->v.Call.starargs, ste, arena))
+ if (!optimize_expr(&expr->v.Call.starargs, arena))
 return 0;
 if (expr->v.Call.kwargs != NULL)
- if (!optimize_expr(&expr->v.Call.kwargs, ste, arena))
+ if (!optimize_expr(&expr->v.Call.kwargs, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_repr(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_repr(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.Repr.value, ste, arena))
+ if (!optimize_expr(&expr->v.Repr.value, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_attribute(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_attribute(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.Attribute.value, ste, arena))
+ if (!optimize_expr(&expr->v.Attribute.value, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_slice(slice_ty* slice_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_slice(slice_ty* slice_ptr, PyArena* arena)
 {
 slice_ty slice = *slice_ptr;
 switch (slice->kind) {
 case Slice_kind:
 {
 if (slice->v.Slice.lower != NULL)
- if (!optimize_expr(&slice->v.Slice.lower, ste, arena))
+ if (!optimize_expr(&slice->v.Slice.lower, arena))
 return 0;
 if (slice->v.Slice.upper != NULL)
- if (!optimize_expr(&slice->v.Slice.upper, ste, arena))
+ if (!optimize_expr(&slice->v.Slice.upper, arena))
 return 0;
 if (slice->v.Slice.step != NULL)
- if (!optimize_expr(&slice->v.Slice.step, ste, arena))
+ if (!optimize_expr(&slice->v.Slice.step, arena))
 return 0;
 break;
 }
 case ExtSlice_kind:
 {
- if (!optimize_slice_seq(&slice->v.ExtSlice.dims, ste, arena))
+ if (!optimize_slice_seq(&slice->v.ExtSlice.dims, arena))
 return 0;
 break;
 }
 case Index_kind:
 {
- if (!optimize_expr(&slice->v.Index.value, ste, arena))
+ if (!optimize_expr(&slice->v.Index.value, arena))
 return 0;
 break;
 }
@@ -744,21 +726,21 @@
 }
 
 static int
-optimize_subscript(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_subscript(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr(&expr->v.Subscript.value, ste, arena))
+ if (!optimize_expr(&expr->v.Subscript.value, arena))
 return 0;
- if (!optimize_slice(&expr->v.Subscript.slice, ste, arena))
+ if (!optimize_slice(&expr->v.Subscript.slice, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_tuple(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_tuple(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
- if (!optimize_expr_seq(&expr->v.Tuple.elts, ste, arena))
+ if (!optimize_expr_seq(&expr->v.Tuple.elts, arena))
 return 0;
 
 if (_is_sequence_of_constants(expr->v.Tuple.elts)) {
@@ -774,7 +756,7 @@
 }
 
 static int
-optimize_name(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_name(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
 const char* id = PyString_AS_STRING(expr->v.Name.id);
@@ -801,77 +783,77 @@
 }
 
 static int
-optimize_expr(expr_ty* expr_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_expr(expr_ty* expr_ptr, PyArena* arena)
 {
 expr_ty expr = *expr_ptr;
 switch (expr->kind) {
 case BoolOp_kind:
 {
- return optimize_bool_op(expr_ptr, ste, arena);
+ return optimize_bool_op(expr_ptr, arena);
 }
 case BinOp_kind:
 {
- return optimize_bin_op(expr_ptr, ste, arena);
+ return optimize_bin_op(expr_ptr, arena);
 }
 case UnaryOp_kind:
 {
- return optimize_unary_op(expr_ptr, ste, arena);
+ return optimize_unary_op(expr_ptr, arena);
 }
 case Lambda_kind:
 {
- return optimize_lambda(expr_ptr, ste, arena);
+ return optimize_lambda(expr_ptr, arena);
 }
 case IfExp_kind:
 {
- return optimize_if_exp(expr_ptr, ste, arena);
+ return optimize_if_exp(expr_ptr, arena);
 }
 case Dict_kind:
 {
- return optimize_dict(expr_ptr, ste, arena);
+ return optimize_dict(expr_ptr, arena);
 }
 case ListComp_kind:
 {
- return optimize_list_comp(expr_ptr, ste, arena);
+ return optimize_list_comp(expr_ptr, arena);
 }
 case GeneratorExp_kind:
 {
- return optimize_generator_exp(expr_ptr, ste, arena);
+ return optimize_generator_exp(expr_ptr, arena);
 }
 case Yield_kind:
 {
- return optimize_yield(expr_ptr, ste, arena);
+ return optimize_yield(expr_ptr, arena);
 }
 case Compare_kind:
 {
- return optimize_compare(expr_ptr, ste, arena);
+ return optimize_compare(expr_ptr, arena);
 }
 case Call_kind:
 {
- return optimize_call(expr_ptr, ste, arena);
+ return optimize_call(expr_ptr, arena);
 }
 case Repr_kind:
 {
- return optimize_repr(expr_ptr, ste, arena);
+ return optimize_repr(expr_ptr, arena);
 }
 case Attribute_kind:
 {
- return optimize_attribute(expr_ptr, ste, arena);
+ return optimize_attribute(expr_ptr, arena);
 }
 case Subscript_kind:
 {
- return optimize_subscript(expr_ptr, ste, arena);
+ return optimize_subscript(expr_ptr, arena);
 }
 case List_kind:
 {
- return optimize_expr_seq(&expr->v.List.elts, ste, arena);
+ return optimize_expr_seq(&expr->v.List.elts, arena);
 }
 case Tuple_kind:
 {
- return optimize_tuple(expr_ptr, ste, arena);
+ return optimize_tuple(expr_ptr, arena);
 }
 case Name_kind:
 {
- return optimize_name(expr_ptr, ste, arena);
+ return optimize_name(expr_ptr, arena);
 }
 case Num_kind:
 case Str_kind:
@@ -887,38 +869,38 @@
 }
 
 static int
-optimize_function_def(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_function_def(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_arguments(&stmt->v.FunctionDef.args, ste, arena))
+ if (!optimize_arguments(&stmt->v.FunctionDef.args, arena))
 return 0;
- if (!optimize_expr_seq(&stmt->v.FunctionDef.decorator_list, ste, arena))
+ if (!optimize_expr_seq(&stmt->v.FunctionDef.decorator_list, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.FunctionDef.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.FunctionDef.body, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_class_def(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_class_def(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr_seq(&stmt->v.ClassDef.bases, ste, arena))
+ if (!optimize_expr_seq(&stmt->v.ClassDef.bases, arena))
 return 0;
- if (!optimize_expr_seq(&stmt->v.ClassDef.decorator_list, ste, arena))
+ if (!optimize_expr_seq(&stmt->v.ClassDef.decorator_list, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.ClassDef.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.ClassDef.body, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_return(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_return(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
 if (stmt->v.Return.value != NULL) {
 expr_ty value;
- if (!optimize_expr(&stmt->v.Return.value, ste, arena))
+ if (!optimize_expr(&stmt->v.Return.value, arena))
 return 0;
 value = stmt->v.Return.value;
 if (value->kind == Const_kind && value->v.Const.value == Py_None)
@@ -928,87 +910,87 @@
 }
 
 static int
-optimize_delete(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_delete(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr_seq(&stmt->v.Delete.targets, ste, arena))
+ if (!optimize_expr_seq(&stmt->v.Delete.targets, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_assign(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_assign(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr_seq(&stmt->v.Assign.targets, ste, arena))
+ if (!optimize_expr_seq(&stmt->v.Assign.targets, arena))
 return 0;
- if (!optimize_expr(&stmt->v.Assign.value, ste, arena))
+ if (!optimize_expr(&stmt->v.Assign.value, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_aug_assign(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_aug_assign(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr(&stmt->v.AugAssign.target, ste, arena))
+ if (!optimize_expr(&stmt->v.AugAssign.target, arena))
 return 0;
- if (!optimize_expr(&stmt->v.AugAssign.value, ste, arena))
+ if (!optimize_expr(&stmt->v.AugAssign.value, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_print(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_print(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
 
 if (stmt->v.Print.dest != NULL)
- if (!optimize_expr(&stmt->v.Print.dest, ste, arena))
+ if (!optimize_expr(&stmt->v.Print.dest, arena))
 return 0;
- if (!optimize_expr_seq(&stmt->v.Print.values, ste, arena))
+ if (!optimize_expr_seq(&stmt->v.Print.values, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_for(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_for(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr(&stmt->v.For.target, ste, arena))
+ if (!optimize_expr(&stmt->v.For.target, arena))
 return 0;
- if (!optimize_expr(&stmt->v.For.iter, ste, arena))
+ if (!optimize_expr(&stmt->v.For.iter, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.For.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.For.body, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.For.orelse, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.For.orelse, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_while(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_while(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr(&stmt->v.While.test, ste, arena))
+ if (!optimize_expr(&stmt->v.While.test, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.While.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.While.body, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.While.orelse, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.While.orelse, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_if(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_if(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
 
- if (!optimize_expr(&stmt->v.If.test, ste, arena))
+ if (!optimize_expr(&stmt->v.If.test, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.If.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.If.body, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.If.orelse, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.If.orelse, arena))
 return 0;
 
 if (stmt->v.If.test->kind == UnaryOp_kind &&
@@ -1038,187 +1020,174 @@
 }
 
 static int
-optimize_with(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_with(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr(&stmt->v.With.context_expr, ste, arena))
+ if (!optimize_expr(&stmt->v.With.context_expr, arena))
 return 0;
 if (stmt->v.With.optional_vars != NULL)
- if (!optimize_expr(&stmt->v.With.optional_vars, ste, arena))
+ if (!optimize_expr(&stmt->v.With.optional_vars, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.With.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.With.body, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_raise(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_raise(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
 if (stmt->v.Raise.type != NULL)
- if (!optimize_expr(&stmt->v.Raise.type, ste, arena))
+ if (!optimize_expr(&stmt->v.Raise.type, arena))
 return 0;
 if (stmt->v.Raise.inst != NULL)
- if (!optimize_expr(&stmt->v.Raise.inst, ste, arena))
+ if (!optimize_expr(&stmt->v.Raise.inst, arena))
 return 0;
 if (stmt->v.Raise.tback != NULL)
- if (!optimize_expr(&stmt->v.Raise.tback, ste, arena))
+ if (!optimize_expr(&stmt->v.Raise.tback, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_excepthandler(excepthandler_ty* exc_ptr, PySTEntryObject* ste,
- PyArena* arena)
+optimize_excepthandler(excepthandler_ty* exc_ptr, PyArena* arena)
 {
 excepthandler_ty exc = *exc_ptr;
 if (exc->v.ExceptHandler.type != NULL)
- if (!optimize_expr(&exc->v.ExceptHandler.type, ste, arena))
+ if (!optimize_expr(&exc->v.ExceptHandler.type, arena))
 return 0;
 if (exc->v.ExceptHandler.name != NULL)
- if (!optimize_expr(&exc->v.ExceptHandler.name, ste, arena))
+ if (!optimize_expr(&exc->v.ExceptHandler.name, arena))
 return 0;
- if (!optimize_stmt_seq(&exc->v.ExceptHandler.body, ste, arena))
+ if (!optimize_stmt_seq(&exc->v.ExceptHandler.body, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_try_except(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_try_except(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_stmt_seq(&stmt->v.TryExcept.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.TryExcept.body, arena))
 return 0;
- if (!optimize_excepthandler_seq(&stmt->v.TryExcept.handlers, ste, arena))
+ if (!optimize_excepthandler_seq(&stmt->v.TryExcept.handlers, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.TryExcept.orelse, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.TryExcept.orelse, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_try_finally(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_try_finally(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_stmt_seq(&stmt->v.TryFinally.body, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.TryFinally.body, arena))
 return 0;
- if (!optimize_stmt_seq(&stmt->v.TryFinally.finalbody, ste, arena))
+ if (!optimize_stmt_seq(&stmt->v.TryFinally.finalbody, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_assert(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_assert(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr(&stmt->v.Assert.test, ste, arena))
+ if (!optimize_expr(&stmt->v.Assert.test, arena))
 return 0;
 if (stmt->v.Assert.msg != NULL)
- if (!optimize_expr(&stmt->v.Assert.msg, ste, arena))
+ if (!optimize_expr(&stmt->v.Assert.msg, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_exec(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_exec(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
- if (!optimize_expr(&stmt->v.Exec.body, ste, arena))
+ if (!optimize_expr(&stmt->v.Exec.body, arena))
 return 0;
 if (stmt->v.Exec.globals != NULL)
- if (!optimize_expr(&stmt->v.Exec.globals, ste, arena))
+ if (!optimize_expr(&stmt->v.Exec.globals, arena))
 return 0;
 if (stmt->v.Exec.locals != NULL)
- if (!optimize_expr(&stmt->v.Exec.locals, ste, arena))
+ if (!optimize_expr(&stmt->v.Exec.locals, arena))
 return 0;
 return 1;
 }
 
 static int
-optimize_stmt(stmt_ty* stmt_ptr, PySTEntryObject* ste, PyArena* arena)
+optimize_stmt(stmt_ty* stmt_ptr, PyArena* arena)
 {
 stmt_ty stmt = *stmt_ptr;
 
 switch (stmt->kind) {
 case FunctionDef_kind:
 {
- int rc;
- ste = PySymtable_Lookup(ste->ste_table, *stmt_ptr);
- if (ste == NULL)
- return 0;
- rc = optimize_function_def(stmt_ptr, ste, arena);
- Py_DECREF(ste);
- return rc;
+ return optimize_function_def(stmt_ptr, arena);
 }
 case ClassDef_kind:
 {
- int rc;
- ste = PySymtable_Lookup(ste->ste_table, *stmt_ptr);
- if (ste == NULL)
- return 0;
- rc = optimize_class_def(stmt_ptr, ste, arena);
- Py_DECREF(ste);
- return rc;
+ return optimize_class_def(stmt_ptr, arena);
 }
 case Return_kind:
 {
- return optimize_return(stmt_ptr, ste, arena);
+ return optimize_return(stmt_ptr, arena);
 }
 case Delete_kind:
 {
- return optimize_delete(stmt_ptr, ste, arena);
+ return optimize_delete(stmt_ptr, arena);
 }
 case Assign_kind:
 {
- return optimize_assign(stmt_ptr, ste, arena);
+ return optimize_assign(stmt_ptr, arena);
 }
 case AugAssign_kind:
 {
- return optimize_aug_assign(stmt_ptr, ste, arena);
+ return optimize_aug_assign(stmt_ptr, arena);
 }
 case Print_kind:
 {
- return optimize_print(stmt_ptr, ste, arena);
+ return optimize_print(stmt_ptr, arena);
 }
 case For_kind:
 {
- return optimize_for(stmt_ptr, ste, arena);
+ return optimize_for(stmt_ptr, arena);
 }
 case While_kind:
 {
- return optimize_while(stmt_ptr, ste, arena);
+ return optimize_while(stmt_ptr, arena);
 }
 case If_kind:
 {
- return optimize_if(stmt_ptr, ste, arena);
+ return optimize_if(stmt_ptr, arena);
 }
 case With_kind:
 {
- return optimize_with(stmt_ptr, ste, arena);
+ return optimize_with(stmt_ptr, arena);
 }
 case Raise_kind:
 {
- return optimize_raise(stmt_ptr, ste, arena);
+ return optimize_raise(stmt_ptr, arena);
 }
 case TryExcept_kind:
 {
- return optimize_try_except(stmt_ptr, ste, arena);
+ return optimize_try_except(stmt_ptr, arena);
 }
 case TryFinally_kind:
 {
- return optimize_try_finally(stmt_ptr, ste, arena);
+ return optimize_try_finally(stmt_ptr, arena);
 }
 case Assert_kind:
 {
- return optimize_assert(stmt_ptr, ste, arena);
+ return optimize_assert(stmt_ptr, arena);
 }
 case Exec_kind:
 {
- return optimize_exec(stmt_ptr, ste, arena);
+ return optimize_exec(stmt_ptr, arena);
 }
 case Expr_kind:
 {
- return optimize_expr(&stmt->v.Expr.value, ste, arena);
+ return optimize_expr(&stmt->v.Expr.value, arena);
 }
 case Import_kind:
 case ImportFrom_kind:
@@ -1242,14 +1211,8 @@
 * Optimize an AST.
 */
 int
-PyAST_Optimize(mod_ty* mod_ptr, struct symtable* st, PyArena* arena)
+PyAST_Optimize(mod_ty* mod_ptr, PyArena* arena)
 {
- int rc;
- PySTEntryObject* ste = PySymtable_Lookup(st, *mod_ptr);
- if (ste == NULL)
- return 0;
- rc = optimize_mod(mod_ptr, ste, arena);
- Py_DECREF(ste);
- return rc;
+ return optimize_mod(mod_ptr, arena);
 }
 
Modified: python/branches/tlee-ast-optimize/Python/pythonrun.c
==============================================================================
--- python/branches/tlee-ast-optimize/Python/pythonrun.c	(original)
+++ python/branches/tlee-ast-optimize/Python/pythonrun.c	Sun Jun 1 18:29:02 2008
@@ -1431,20 +1431,9 @@
 		}
 		mod = PyAST_FromNode(n, flags, filename, arena);
 		PyNode_Free(n);
- if (mod != NULL && flags && !(flags->cf_flags & PyCF_NO_OPTIMIZE)) {
- PyFutureFeatures* future;
- struct symtable* st;
-
- if (!PyAST_BuildSymbolInfo(mod, &future, &st, filename, flags)) {
- if (!PyAST_Optimize(&mod, st, arena)) {
- PyObject_Free(future);
- PySymtable_Free(st);
- return NULL;
- }
- PyObject_Free(future);
- PySymtable_Free(st);
- }
- }
+ if (mod != NULL && flags && !(flags->cf_flags & PyCF_NO_OPTIMIZE))
+ if (!PyAST_Optimize(&mod, arena))
+ return NULL;
 		return mod;
 	}
 	else {
@@ -1470,20 +1459,9 @@
 		}
 		mod = PyAST_FromNode(n, flags, filename, arena);
 		PyNode_Free(n);
- if (mod != NULL && flags && !(flags->cf_flags & PyCF_NO_OPTIMIZE)) {
- PyFutureFeatures* future;
- struct symtable* st;
-
- if (!PyAST_BuildSymbolInfo(mod, &future, &st, filename, flags)) {
- if (!PyAST_Optimize(&mod, st, arena)) {
- PySymtable_Free(st);
- PyObject_Free(future);
- return NULL;
- }
- PySymtable_Free(st);
- PyObject_Free(future);
- }
- }
+ if (mod != NULL && flags && !(flags->cf_flags & PyCF_NO_OPTIMIZE))
+ if (!PyAST_Optimize(&mod, arena))
+ return NULL;
 		return mod;
 	}
 	else {


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /