From 788788edc0bc9059411372abf0f5509eca6d368d Mon Sep 17 00:00:00 2001 From: ceriel Date: Mon, 23 Oct 1989 13:45:19 +0000 Subject: [PATCH] improvements for the , (comma) operator --- lang/cem/cemcom/arith.c | 15 +++++++++++---- lang/cem/cemcom/eval.c | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lang/cem/cemcom/arith.c b/lang/cem/cemcom/arith.c index 19a9a9fa2..0a169c5cc 100644 --- a/lang/cem/cemcom/arith.c +++ b/lang/cem/cemcom/arith.c @@ -412,10 +412,17 @@ opnd2test(expp, oper) register struct expr **expp; { opnd2logical(expp, oper); - if ((*expp)->ex_class == Oper && is_test_op((*expp)->OP_OPER)) - { /* It is already a test */ } - else - ch7bin(expp, NOTEQUAL, intexpr((arith)0, INT)); + if ((*expp)->ex_class == Oper) { + if (is_test_op((*expp)->OP_OPER)) { + /* It is already a test */ + return; + } + if ((*expp)->OP_OPER == ',') { + opnd2test(&((*expp)->OP_RIGHT), oper); + return; + } + } + ch7bin(expp, NOTEQUAL, intexpr((arith)0, INT)); } int diff --git a/lang/cem/cemcom/eval.c b/lang/cem/cemcom/eval.c index 352d10a49..6478a2a0a 100644 --- a/lang/cem/cemcom/eval.c +++ b/lang/cem/cemcom/eval.c @@ -526,7 +526,7 @@ EVAL(expr, val, code, true_label, false_label) break; case ',': EVAL(left, RVAL, FALSE, NO_LABEL, NO_LABEL); - EVAL(right, RVAL, gencode, NO_LABEL, NO_LABEL); + EVAL(right, RVAL, gencode, true_label, false_label); break; case '~': EVAL(right, RVAL, gencode, NO_LABEL, NO_LABEL); -- 2.34.1