comparison Python/compile.c @ 37679:58640983fd66 legacy-trunk

Use union to discriminate pointer types from enum/int types.
author Skip Montanaro <skip@pobox.com>
date Thu, 13 Apr 2006 09:37:01 +0000
parents 8c998c760191
children fe88e01ff6de
comparison
equal deleted inserted replaced
37678:30d6b9eaf02d 37679:58640983fd66
3064 #define CMPCAST 3064 #define CMPCAST
3065 #endif 3065 #endif
3066 for (i = 1; i < n; i++) { 3066 for (i = 1; i < n; i++) {
3067 ADDOP(c, DUP_TOP); 3067 ADDOP(c, DUP_TOP);
3068 ADDOP(c, ROT_THREE); 3068 ADDOP(c, ROT_THREE);
3069 /* XXX We're casting a void* to cmpop_ty in the next stmt. */
3070 ADDOP_I(c, COMPARE_OP, 3069 ADDOP_I(c, COMPARE_OP,
3071 cmpop((cmpop_ty)( CMPCAST asdl_seq_GET( 3070 cmpop((cmpop_ty)asdl_seq_GET_ENUM(e->v.Compare.ops, i - 1)));
3072 e->v.Compare.ops, i - 1))));
3073 ADDOP_JREL(c, JUMP_IF_FALSE, cleanup); 3071 ADDOP_JREL(c, JUMP_IF_FALSE, cleanup);
3074 NEXT_BLOCK(c); 3072 NEXT_BLOCK(c);
3075 ADDOP(c, POP_TOP); 3073 ADDOP(c, POP_TOP);
3076 if (i < (n - 1)) 3074 if (i < (n - 1))
3077 VISIT(c, expr, 3075 VISIT(c, expr,
3078 (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i)); 3076 (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
3079 } 3077 }
3080 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n - 1)); 3078 VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n - 1));
3081 ADDOP_I(c, COMPARE_OP, 3079 ADDOP_I(c, COMPARE_OP,
3082 /* XXX We're casting a void* to cmpop_ty in the next stmt. */ 3080 /* XXX We're casting a void* to cmpop_ty in the next stmt. */
3083 cmpop((cmpop_ty)( CMPCAST asdl_seq_GET(e->v.Compare.ops, 3081 cmpop((cmpop_ty)asdl_seq_GET_ENUM(e->v.Compare.ops, n - 1)));
3084 n - 1))));
3085 if (n > 1) { 3082 if (n > 1) {
3086 basicblock *end = compiler_new_block(c); 3083 basicblock *end = compiler_new_block(c);
3087 if (end == NULL) 3084 if (end == NULL)
3088 return 0; 3085 return 0;
3089 ADDOP_JREL(c, JUMP_FORWARD, end); 3086 ADDOP_JREL(c, JUMP_FORWARD, end);