[Python-checkins] r42379 - in python/branches/ast-objects: Include/Python-ast.h Parser/asdl_c.py Python/Python-ast.c Python/ast.c Python/compile.c Python/pythonrun.c Python/symtable.c
neal.norwitz
python-checkins at python.org
Wed Feb 15 08:00:24 CET 2006
Author: neal.norwitz
Date: Wed Feb 15 08:00:21 2006
New Revision: 42379
Modified:
python/branches/ast-objects/Include/Python-ast.h
python/branches/ast-objects/Parser/asdl_c.py
python/branches/ast-objects/Python/Python-ast.c
python/branches/ast-objects/Python/ast.c
python/branches/ast-objects/Python/compile.c
python/branches/ast-objects/Python/pythonrun.c
python/branches/ast-objects/Python/symtable.c
Log:
Further updates from Simon Burton. Runs now, lots of refleaks still.
Modified: python/branches/ast-objects/Include/Python-ast.h
==============================================================================
--- python/branches/ast-objects/Include/Python-ast.h (original)
+++ python/branches/ast-objects/Include/Python-ast.h Wed Feb 15 08:00:21 2006
@@ -11,7 +11,8 @@
struct _mod{
PyObject_HEAD
- enum {Module_kind, Interactive_kind, Expression_kind, Suite_kind} _kind;
+ enum {mod_Dummy_kind, Module_kind, Interactive_kind, Expression_kind,
+ Suite_kind} _kind;
};
#define mod_kind(o) (((struct _mod*)o)->_kind)
@@ -64,12 +65,12 @@
struct _stmt{
PyObject_HEAD
- enum {FunctionDef_kind, ClassDef_kind, Return_kind, Delete_kind,
- Assign_kind, AugAssign_kind, Print_kind, For_kind, While_kind,
- If_kind, Raise_kind, TryExcept_kind, TryFinally_kind,
- Assert_kind, Import_kind, ImportFrom_kind, Exec_kind,
- Global_kind, Expr_kind, Pass_kind, Break_kind, Continue_kind}
- _kind;
+ enum {stmt_Dummy_kind, FunctionDef_kind, ClassDef_kind, Return_kind,
+ Delete_kind, Assign_kind, AugAssign_kind, Print_kind, For_kind,
+ While_kind, If_kind, Raise_kind, TryExcept_kind,
+ TryFinally_kind, Assert_kind, Import_kind, ImportFrom_kind,
+ Exec_kind, Global_kind, Expr_kind, Pass_kind, Break_kind,
+ Continue_kind} _kind;
int lineno;
};
#define stmt_kind(o) (((struct _stmt*)o)->_kind)
@@ -367,10 +368,11 @@
struct _expr{
PyObject_HEAD
- enum {BoolOp_kind, BinOp_kind, UnaryOp_kind, Lambda_kind, Dict_kind,
- ListComp_kind, GeneratorExp_kind, Yield_kind, Compare_kind,
- Call_kind, Repr_kind, Num_kind, Str_kind, Attribute_kind,
- Subscript_kind, Name_kind, List_kind, Tuple_kind} _kind;
+ enum {expr_Dummy_kind, BoolOp_kind, BinOp_kind, UnaryOp_kind,
+ Lambda_kind, Dict_kind, ListComp_kind, GeneratorExp_kind,
+ Yield_kind, Compare_kind, Call_kind, Repr_kind, Num_kind,
+ Str_kind, Attribute_kind, Subscript_kind, Name_kind, List_kind,
+ Tuple_kind} _kind;
int lineno;
};
#define expr_kind(o) (((struct _expr*)o)->_kind)
@@ -621,8 +623,8 @@
struct _expr_context{
PyObject_HEAD
- enum {Load_kind, Store_kind, Del_kind, AugLoad_kind, AugStore_kind,
- Param_kind} _kind;
+ enum {expr_context_Dummy_kind, Load_kind, Store_kind, Del_kind,
+ AugLoad_kind, AugStore_kind, Param_kind} _kind;
};
#define expr_context_kind(o) (((struct _expr_context*)o)->_kind)
@@ -685,7 +687,8 @@
struct _slice{
PyObject_HEAD
- enum {Ellipsis_kind, Slice_kind, ExtSlice_kind, Index_kind} _kind;
+ enum {slice_Dummy_kind, Ellipsis_kind, Slice_kind, ExtSlice_kind,
+ Index_kind} _kind;
};
#define slice_kind(o) (((struct _slice*)o)->_kind)
@@ -740,7 +743,7 @@
struct _boolop{
PyObject_HEAD
- enum {And_kind, Or_kind} _kind;
+ enum {boolop_Dummy_kind, And_kind, Or_kind} _kind;
};
#define boolop_kind(o) (((struct _boolop*)o)->_kind)
@@ -767,9 +770,9 @@
struct _operator{
PyObject_HEAD
- enum {Add_kind, Sub_kind, Mult_kind, Div_kind, Mod_kind, Pow_kind,
- LShift_kind, RShift_kind, BitOr_kind, BitXor_kind, BitAnd_kind,
- FloorDiv_kind} _kind;
+ enum {operator_Dummy_kind, Add_kind, Sub_kind, Mult_kind, Div_kind,
+ Mod_kind, Pow_kind, LShift_kind, RShift_kind, BitOr_kind,
+ BitXor_kind, BitAnd_kind, FloorDiv_kind} _kind;
};
#define operator_kind(o) (((struct _operator*)o)->_kind)
@@ -886,7 +889,8 @@
struct _unaryop{
PyObject_HEAD
- enum {Invert_kind, Not_kind, UAdd_kind, USub_kind} _kind;
+ enum {unaryop_Dummy_kind, Invert_kind, Not_kind, UAdd_kind, USub_kind}
+ _kind;
};
#define unaryop_kind(o) (((struct _unaryop*)o)->_kind)
@@ -931,8 +935,9 @@
struct _cmpop{
PyObject_HEAD
- enum {Eq_kind, NotEq_kind, Lt_kind, LtE_kind, Gt_kind, GtE_kind,
- Is_kind, IsNot_kind, In_kind, NotIn_kind} _kind;
+ enum {cmpop_Dummy_kind, Eq_kind, NotEq_kind, Lt_kind, LtE_kind,
+ Gt_kind, GtE_kind, Is_kind, IsNot_kind, In_kind, NotIn_kind}
+ _kind;
};
#define cmpop_kind(o) (((struct _cmpop*)o)->_kind)
Modified: python/branches/ast-objects/Parser/asdl_c.py
==============================================================================
--- python/branches/ast-objects/Parser/asdl_c.py (original)
+++ python/branches/ast-objects/Parser/asdl_c.py Wed Feb 15 08:00:21 2006
@@ -155,7 +155,8 @@
self.emit_check(name, depth)
emit("struct _%s{" % name)
emit("PyObject_HEAD", depth + 1)
- names = [t.name.value+"_kind" for t in sum.types]
+ names = ["%s_Dummy_kind"%name]
+ names += [t.name.value+"_kind" for t in sum.types]
emit("enum {%s} _kind;" % ", ".join(names), depth+1)
for field in sum.attributes:
type = str(field.type)
@@ -225,7 +226,7 @@
def check(self, t):
t = t.value
if t in ("identifier", "string"):
- return "PyString_Check"
+ return "string_Check"
elif t == "bool":
return "PyBool_Check"
else:
@@ -354,7 +355,7 @@
emit("struct _%s *obj = (struct _%s*)_obj;" % (name,name))
if has_seq:
emit("int i;")
- for f in fields:
+ for f in fields:
if f.seq:
self.emit_seq_check(f)
elif f.opt:
@@ -384,6 +385,8 @@
for t in sum.types:
emit("case %s_kind:" % t.name)
emit(" return %s_validate(_obj);" % t.name)
+ emit("default:")
+ emit(" break;")
depth = 1
emit("}")
emit('PyErr_SetString(PyExc_TypeError, "invalid _kind in %s");' % name)
@@ -500,11 +503,12 @@
static void failed_check(const char* field, const char* expected,
PyObject *real)
{
- PyErr_Format(PyExc_TypeError, "invalid %s: excpected %s, found %s",
+ PyErr_Format(PyExc_TypeError, "invalid %s: expected %s, found %s",
field, expected, real->ob_type->tp_name);
}
/* Convenience macro to simplify asdl_c.py */
#define object_Check(x) 1
+#define string_Check(x) (PyString_Check(x)||PyUnicode_Check(x))
"""
def main(srcfile):
Modified: python/branches/ast-objects/Python/Python-ast.c
==============================================================================
--- python/branches/ast-objects/Python/Python-ast.c (original)
+++ python/branches/ast-objects/Python/Python-ast.c Wed Feb 15 08:00:21 2006
@@ -7,11 +7,12 @@
static void failed_check(const char* field, const char* expected,
PyObject *real)
{
- PyErr_Format(PyExc_TypeError, "invalid %s: excpected %s, found %s",
+ PyErr_Format(PyExc_TypeError, "invalid %s: expected %s, found %s",
field, expected, real->ob_type->tp_name);
}
/* Convenience macro to simplify asdl_c.py */
#define object_Check(x) 1
+#define string_Check(x) (PyString_Check(x)||PyUnicode_Check(x))
static int mod_validate(PyObject*);
static int Module_validate(PyObject*);
@@ -169,6 +170,8 @@
return Expression_validate(_obj);
case Suite_kind:
return Suite_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in mod");
return -1;
@@ -601,6 +604,8 @@
return Break_validate(_obj);
case Continue_kind:
return Continue_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in stmt");
return -1;
@@ -689,7 +694,7 @@
{
struct _FunctionDef *obj = (struct _FunctionDef*)_obj;
int i;
- if (!PyString_Check(obj->name)) {
+ if (!string_Check(obj->name)) {
failed_check("name", "identifier", obj->name);
return -1;
}
@@ -805,7 +810,7 @@
{
struct _ClassDef *obj = (struct _ClassDef*)_obj;
int i;
- if (!PyString_Check(obj->name)) {
+ if (!string_Check(obj->name)) {
failed_check("name", "identifier", obj->name);
return -1;
}
@@ -2240,7 +2245,7 @@
{
struct _ImportFrom *obj = (struct _ImportFrom*)_obj;
int i;
- if (!PyString_Check(obj->module)) {
+ if (!string_Check(obj->module)) {
failed_check("module", "identifier", obj->module);
return -1;
}
@@ -2441,7 +2446,7 @@
return -1;
}
for(i = 0; i < PyList_Size(obj->names); i++) {
- if (!PyString_Check(PyList_GET_ITEM(obj->names, i))) {
+ if (!string_Check(PyList_GET_ITEM(obj->names, i))) {
failed_check("names", "identifier",
PyList_GET_ITEM(obj->names, i));
return -1;
@@ -2817,6 +2822,8 @@
return List_validate(_obj);
case Tuple_kind:
return Tuple_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in expr");
return -1;
@@ -4026,7 +4033,7 @@
Str_validate(PyObject *_obj)
{
struct _Str *obj = (struct _Str*)_obj;
- if (!PyString_Check(obj->s)) {
+ if (!string_Check(obj->s)) {
failed_check("s", "string", obj->s);
return -1;
}
@@ -4112,7 +4119,7 @@
failed_check("value", "expr", obj->value);
return -1;
}
- if (!PyString_Check(obj->attr)) {
+ if (!string_Check(obj->attr)) {
failed_check("attr", "identifier", obj->attr);
return -1;
}
@@ -4285,7 +4292,7 @@
Name_validate(PyObject *_obj)
{
struct _Name *obj = (struct _Name*)_obj;
- if (!PyString_Check(obj->id)) {
+ if (!string_Check(obj->id)) {
failed_check("id", "identifier", obj->id);
return -1;
}
@@ -4547,6 +4554,8 @@
return AugStore_validate(_obj);
case Param_kind:
return Param_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in expr_context");
return -1;
@@ -5012,6 +5021,8 @@
return ExtSlice_validate(_obj);
case Index_kind:
return Index_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in slice");
return -1;
@@ -5410,6 +5421,8 @@
return And_validate(_obj);
case Or_kind:
return Or_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in boolop");
return -1;
@@ -5623,6 +5636,8 @@
return BitAnd_validate(_obj);
case FloorDiv_kind:
return FloorDiv_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in operator");
return -1;
@@ -6490,6 +6505,8 @@
return UAdd_validate(_obj);
case USub_kind:
return USub_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in unaryop");
return -1;
@@ -6833,6 +6850,8 @@
return In_validate(_obj);
case NotIn_kind:
return NotIn_validate(_obj);
+ default:
+ break;
}
PyErr_SetString(PyExc_TypeError, "invalid _kind in cmpop");
return -1;
@@ -7822,12 +7841,12 @@
return -1;
}
if (obj->vararg == Py_None) /* empty */;
- else if (!PyString_Check(obj->vararg)) {
+ else if (!string_Check(obj->vararg)) {
failed_check("vararg", "identifier", obj->vararg);
return -1;
}
if (obj->kwarg == Py_None) /* empty */;
- else if (!PyString_Check(obj->kwarg)) {
+ else if (!string_Check(obj->kwarg)) {
failed_check("kwarg", "identifier", obj->kwarg);
return -1;
}
@@ -7917,7 +7936,7 @@
keyword_validate(PyObject *_obj)
{
struct _keyword *obj = (struct _keyword*)_obj;
- if (!PyString_Check(obj->arg)) {
+ if (!string_Check(obj->arg)) {
failed_check("arg", "identifier", obj->arg);
return -1;
}
@@ -8002,12 +8021,12 @@
alias_validate(PyObject *_obj)
{
struct _alias *obj = (struct _alias*)_obj;
- if (!PyString_Check(obj->name)) {
+ if (!string_Check(obj->name)) {
failed_check("name", "identifier", obj->name);
return -1;
}
if (obj->asname == Py_None) /* empty */;
- else if (!PyString_Check(obj->asname)) {
+ else if (!string_Check(obj->asname)) {
failed_check("asname", "identifier", obj->asname);
return -1;
}
Modified: python/branches/ast-objects/Python/ast.c
==============================================================================
--- python/branches/ast-objects/Python/ast.c (original)
+++ python/branches/ast-objects/Python/ast.c Wed Feb 15 08:00:21 2006
@@ -750,7 +750,7 @@
if (!load)
goto error;
e = Name(id, load, LINENO(n));
- if (!result)
+ if (!e)
goto error;
id = NULL;
@@ -1712,8 +1712,10 @@
loop:
switch (TYPE(n)) {
case test:
- if (TYPE(CHILD(n, 0)) == lambdef)
+ if (TYPE(CHILD(n, 0)) == lambdef) {
result = ast_for_lambdef(c, CHILD(n, 0));
+ break;
+ }
/* Fall through to and_test */
case and_test:
if (NCH(n) == 1) {
@@ -1832,9 +1834,10 @@
case TILDE:
result = UnaryOp(Invert(), expression, LINENO(n));
break;
+ default:
+ PyErr_Format(PyExc_SystemError, "unhandled factor: %d",
+ TYPE(CHILD(n, 0)));
}
- PyErr_Format(PyExc_SystemError, "unhandled factor: %d",
- TYPE(CHILD(n, 0)));
break;
}
case power:
@@ -2352,7 +2355,7 @@
}
else {
a = alias_for_import_name(CHILD(n, 0));
- assert(!alias_asname(a));
+ assert(alias_asname(a) == Py_None);
alias_asname(a) = NEW_IDENTIFIER(CHILD(n, 2));
result = a;
}
Modified: python/branches/ast-objects/Python/compile.c
==============================================================================
--- python/branches/ast-objects/Python/compile.c (original)
+++ python/branches/ast-objects/Python/compile.c Wed Feb 15 08:00:21 2006
@@ -1672,7 +1672,7 @@
int i; \
PyObject *seq = (SEQ); /* avoid variable capture */ \
for (i = 0; i < PyList_GET_SIZE(seq); i++) { \
- /*TYPE ## _ty*/ PyObject *elt = PyList_GET_ITEM(seq, i); \
+ PyObject *elt = PyList_GET_ITEM(seq, i); \
if (!compiler_visit_ ## TYPE((C), elt)) \
return 0; \
} \
@@ -1682,7 +1682,7 @@
int i; \
PyObject *seq = (SEQ); /* avoid variable capture */ \
for (i = 0; i < PyList_GET_SIZE(seq); i++) { \
- /*TYPE ## _ty*/PyObject *elt = PyList_GET_ITEM(seq, i); \
+ PyObject *elt = PyList_GET_ITEM(seq, i); \
if (!compiler_visit_ ## TYPE((C), elt)) { \
compiler_exit_scope(c); \
return 0; \
@@ -2016,8 +2016,7 @@
return 0;
}
- if (arguments_defaults(args))
- VISIT_SEQ(c, expr, arguments_defaults(args));
+ VISIT_SEQ(c, expr, arguments_defaults(args));
if (!compiler_enter_scope(c, name, (void *)e, ((struct _expr*)e)->lineno))
return 0;
@@ -2332,7 +2331,7 @@
except = compiler_new_block(c);
if (except == NULL)
return 0;
- if (excepthandler_type(handler)) {
+ if (excepthandler_type(handler) != Py_None) {
ADDOP(c, DUP_TOP);
VISIT(c, expr, excepthandler_type(handler));
ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH);
@@ -2340,7 +2339,7 @@
ADDOP(c, POP_TOP);
}
ADDOP(c, POP_TOP);
- if (excepthandler_name(handler)) {
+ if (excepthandler_name(handler) != Py_None) {
VISIT(c, expr, excepthandler_name(handler));
}
else {
@@ -2350,7 +2349,7 @@
VISIT_SEQ(c, stmt, excepthandler_body(handler));
ADDOP_JREL(c, JUMP_FORWARD, end);
compiler_use_next_block(c, except);
- if (excepthandler_type(handler))
+ if (excepthandler_type(handler) != Py_None)
ADDOP(c, POP_TOP);
}
ADDOP(c, END_FINALLY);
@@ -2628,6 +2627,8 @@
break;
case Continue_kind:
return compiler_continue(c);
+ default:
+ assert(0);
}
return 1;
}
@@ -2644,6 +2645,8 @@
return UNARY_POSITIVE;
case USub_kind:
return UNARY_NEGATIVE;
+ default:
+ assert(0);
}
return 0;
}
@@ -2679,6 +2682,8 @@
return BINARY_AND;
case FloorDiv_kind:
return BINARY_FLOOR_DIVIDE;
+ default:
+ assert(0);
}
return 0;
}
@@ -2707,6 +2712,8 @@
return PyCmp_IN;
case NotIn_kind:
return PyCmp_NOT_IN;
+ default:
+ assert(0);
}
return PyCmp_BAD;
}
@@ -2742,6 +2749,8 @@
return INPLACE_AND;
case FloorDiv_kind:
return INPLACE_FLOOR_DIVIDE;
+ default:
+ assert(0);
}
PyErr_Format(PyExc_SystemError,
"inplace binary op %d should not be possible",
@@ -2819,6 +2828,8 @@
PyErr_SetString(PyExc_SystemError,
"param invalid for deref variable");
return 0;
+ default:
+ assert(0);
}
break;
case OP_FAST:
@@ -2833,6 +2844,8 @@
PyErr_SetString(PyExc_SystemError,
"param invalid for local variable");
return 0;
+ default:
+ assert(0);
}
ADDOP_O(c, op, mangled, varnames);
Py_DECREF(mangled);
@@ -2849,6 +2862,8 @@
PyErr_SetString(PyExc_SystemError,
"param invalid for global variable");
return 0;
+ default:
+ assert(0);
}
break;
case OP_NAME:
@@ -2863,6 +2878,8 @@
PyErr_SetString(PyExc_SystemError,
"param invalid for name variable");
return 0;
+ default:
+ assert(0);
}
break;
}
@@ -3346,6 +3363,8 @@
PyErr_SetString(PyExc_SystemError,
"param invalid in attribute expression");
return 0;
+ default:
+ assert(0);
}
break;
case Subscript_kind:
@@ -3373,6 +3392,8 @@
PyErr_SetString(PyExc_SystemError,
"param invalid in subscript expression");
return 0;
+ default:
+ assert(0);
}
break;
case Name_kind:
@@ -3382,6 +3403,8 @@
return compiler_list(c, e);
case Tuple_kind:
return compiler_tuple(c, e);
+ default:
+ assert(0);
}
return 1;
}
@@ -3395,7 +3418,7 @@
assert(stmt_kind(s) == AugAssign_kind);
switch (expr_kind(e)) {
- case Attribute_kind:
+ case Attribute_kind:
auge = Attribute(Attribute_value(e), Attribute_attr(e),
AugLoad(), ((struct _expr*)e)->lineno);
if (auge == NULL)
@@ -3500,6 +3523,8 @@
"invalid %s kind %d in subscript\n",
kind, expr_context_kind(ctx));
return 0;
+ default:
+ assert(0);
}
if (expr_context_kind(ctx) == AugLoad_kind) {
ADDOP_I(c, DUP_TOPX, 2);
@@ -3545,7 +3570,7 @@
{
int op = 0, slice_offset = 0, stack_count = 0;
- assert(Slice_step(s) == NULL);
+ assert(Slice_step(s) == Py_None);
if (Slice_lower(s) != Py_None) {
slice_offset++;
stack_count++;
@@ -3584,6 +3609,8 @@
PyErr_SetString(PyExc_SystemError,
"param invalid in simple slice");
return 0;
+ default:
+ assert(0);
}
ADDOP(c, op + slice_offset);
@@ -3608,6 +3635,8 @@
PyErr_SetString(PyExc_SystemError,
"extended slice invalid in nested slice");
return 0;
+ default:
+ assert(0);
}
return 1;
}
@@ -3646,6 +3675,8 @@
if (expr_context_kind(ctx) != AugStore_kind)
VISIT(c, expr, Index_value(s));
return compiler_handle_subscr(c, "index", ctx);
+ default:
+ assert(0);
}
return 1;
}
Modified: python/branches/ast-objects/Python/pythonrun.c
==============================================================================
--- python/branches/ast-objects/Python/pythonrun.c (original)
+++ python/branches/ast-objects/Python/pythonrun.c Wed Feb 15 08:00:21 2006
@@ -1159,7 +1159,7 @@
PyObject *ret;
PyObject *mod = PyParser_ASTFromString(str, "<string>", start, flags);
ret = run_err_mod(mod, "<string>", globals, locals, flags);
- Py_DECREF(mod);
+ Py_XDECREF(mod);
return ret;
}
Modified: python/branches/ast-objects/Python/symtable.c
==============================================================================
--- python/branches/ast-objects/Python/symtable.c (original)
+++ python/branches/ast-objects/Python/symtable.c Wed Feb 15 08:00:21 2006
@@ -240,6 +240,8 @@
PyErr_SetString(PyExc_RuntimeError,
"this compiler does not handle Suites");
goto error;
+ default:
+ assert(0);
}
if (!symtable_exit_block(st, (void *)mod)) {
PySymtable_Free(st);
@@ -1046,6 +1048,8 @@
case Continue_kind:
/* nothing to do here */
break;
+ default:
+ assert(0);
}
return 1;
}
@@ -1148,6 +1152,8 @@
case Tuple_kind:
VISIT_SEQ(st, expr, Tuple_elts(e));
break;
+ default:
+ assert(0);
}
return 1;
}
@@ -1265,7 +1271,7 @@
dotted package name (e.g. spam.eggs)
*/
PyObject *store_name;
- PyObject *name = (alias_asname(a) == NULL) ? alias_name(a) : alias_asname(a);
+ PyObject *name = (alias_asname(a) == Py_None) ? alias_name(a) : alias_asname(a);
const char *base = PyString_AS_STRING(name);
char *dot = strchr(base, '.');
if (dot)
@@ -1332,6 +1338,8 @@
break;
case Ellipsis_kind:
break;
+ default:
+ assert(0);
}
return 1;
}
More information about the Python-checkins
mailing list