[Python-checkins] r45354 - in python/trunk: Include/asdl.h Python/compile.c
skip.montanaro
python-checkins at python.org
Thu Apr 13 11:37:02 CEST 2006
Author: skip.montanaro
Date: Thu Apr 13 11:37:01 2006
New Revision: 45354
Modified:
python/trunk/Include/asdl.h
python/trunk/Python/compile.c
Log:
Use union to discriminate pointer types from enum/int types.
Modified: python/trunk/Include/asdl.h
==============================================================================
--- python/trunk/Include/asdl.h (original)
+++ python/trunk/Include/asdl.h Thu Apr 13 11:37:01 2006
@@ -19,18 +19,22 @@
typedef struct {
int size;
- void *elements[1];
+ union {
+ void *elements[1];
+ unsigned int enum_type[1];
+ } elt;
} asdl_seq;
asdl_seq *asdl_seq_new(int size, PyArena *arena);
-#define asdl_seq_GET(S, I) (S)->elements[(I)]
+#define asdl_seq_GET(S, I) (S)->elt.elements[(I)]
+#define asdl_seq_GET_ENUM(S, I) (S)->elt.enum_type[(I)]
#define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size)
#ifdef Py_DEBUG
#define asdl_seq_SET(S, I, V) { \
int _asdl_i = (I); \
assert((S) && _asdl_i < (S)->size); \
- (S)->elements[_asdl_i] = (V); \
+ (S)->elt.elements[_asdl_i] = (V); \
}
#else
#define asdl_seq_SET(S, I, V) (S)->elements[I] = (V)
Modified: python/trunk/Python/compile.c
==============================================================================
--- python/trunk/Python/compile.c (original)
+++ python/trunk/Python/compile.c Thu Apr 13 11:37:01 2006
@@ -3066,10 +3066,8 @@
for (i = 1; i < n; i++) {
ADDOP(c, DUP_TOP);
ADDOP(c, ROT_THREE);
- /* XXX We're casting a void* to cmpop_ty in the next stmt. */
ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)( CMPCAST asdl_seq_GET(
- e->v.Compare.ops, i - 1))));
+ cmpop((cmpop_ty)asdl_seq_GET_ENUM(e->v.Compare.ops, i - 1)));
ADDOP_JREL(c, JUMP_IF_FALSE, cleanup);
NEXT_BLOCK(c);
ADDOP(c, POP_TOP);
@@ -3080,8 +3078,7 @@
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n - 1));
ADDOP_I(c, COMPARE_OP,
/* XXX We're casting a void* to cmpop_ty in the next stmt. */
- cmpop((cmpop_ty)( CMPCAST asdl_seq_GET(e->v.Compare.ops,
- n - 1))));
+ cmpop((cmpop_ty)asdl_seq_GET_ENUM(e->v.Compare.ops, n - 1)));
if (n > 1) {
basicblock *end = compiler_new_block(c);
if (end == NULL)
More information about the Python-checkins
mailing list