bpo-32439: Clean up the code for compiling comparison expressions. (#… · python/cpython@02b9ef2 (original) (raw)

`@@ -3420,35 +3420,32 @@ static int

`

3420

3420

`compiler_compare(struct compiler *c, expr_ty e)

`

3421

3421

`{

`

3422

3422

`Py_ssize_t i, n;

`

3423

``

`-

basicblock *cleanup = NULL;

`

3424

3423

``

3425

``

`-

/* XXX the logic can be cleaned up for 1 or multiple comparisons */

`

3426

3424

`VISIT(c, expr, e->v.Compare.left);

`

3427

``

`-

n = asdl_seq_LEN(e->v.Compare.ops);

`

3428

``

`-

assert(n > 0);

`

3429

``

`-

if (n > 1) {

`

3430

``

`-

cleanup = compiler_new_block(c);

`

``

3425

`+

assert(asdl_seq_LEN(e->v.Compare.ops) > 0);

`

``

3426

`+

n = asdl_seq_LEN(e->v.Compare.ops) - 1;

`

``

3427

`+

if (n == 0) {

`

``

3428

`+

VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, 0));

`

``

3429

`+

ADDOP_I(c, COMPARE_OP,

`

``

3430

`+

cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, 0))));

`

``

3431

`+

}

`

``

3432

`+

else {

`

``

3433

`+

basicblock *cleanup = compiler_new_block(c);

`

3431

3434

`if (cleanup == NULL)

`

3432

3435

`return 0;

`

3433

``

`-

VISIT(c, expr,

`

3434

``

`-

(expr_ty)asdl_seq_GET(e->v.Compare.comparators, 0));

`

3435

``

`-

}

`

3436

``

`-

for (i = 1; i < n; i++) {

`

3437

``

`-

ADDOP(c, DUP_TOP);

`

3438

``

`-

ADDOP(c, ROT_THREE);

`

3439

``

`-

ADDOP_I(c, COMPARE_OP,

`

3440

``

`-

cmpop((cmpop_ty)(asdl_seq_GET(

`

3441

``

`-

e->v.Compare.ops, i - 1))));

`

3442

``

`-

ADDOP_JABS(c, JUMP_IF_FALSE_OR_POP, cleanup);

`

3443

``

`-

NEXT_BLOCK(c);

`

3444

``

`-

if (i < (n - 1))

`

``

3436

`+

for (i = 0; i < n; i++) {

`

3445

3437

`VISIT(c, expr,

`

3446

3438

` (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));

`

3447

``

`-

}

`

3448

``

`-

VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n - 1));

`

3449

``

`-

ADDOP_I(c, COMPARE_OP,

`

3450

``

`-

cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n - 1))));

`

3451

``

`-

if (n > 1) {

`

``

3439

`+

ADDOP(c, DUP_TOP);

`

``

3440

`+

ADDOP(c, ROT_THREE);

`

``

3441

`+

ADDOP_I(c, COMPARE_OP,

`

``

3442

`+

cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, i))));

`

``

3443

`+

ADDOP_JABS(c, JUMP_IF_FALSE_OR_POP, cleanup);

`

``

3444

`+

NEXT_BLOCK(c);

`

``

3445

`+

}

`

``

3446

`+

VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));

`

``

3447

`+

ADDOP_I(c, COMPARE_OP,

`

``

3448

`+

cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n))));

`

3452

3449

`basicblock *end = compiler_new_block(c);

`

3453

3450

`if (end == NULL)

`

3454

3451

`return 0;

`