diff --git a/src/las.c b/src/las.c index fc5d39def7dff6d0976de9dcbeb2241dbbacc8e1..8b490c627e280637920e2cb2c90402a8048bbf1b 100644 --- a/src/las.c +++ b/src/las.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: las.c,v 1.96 1999/11/05 23:22:04 grubba Exp $"); +RCSID("$Id: las.c,v 1.97 1999/11/06 00:08:45 grubba Exp $"); #include "language.h" #include "interpret.h" @@ -1952,6 +1952,12 @@ static void optimize(node *n) if (CAR(n)->token == F_CONSTANT) { goto use_cdr; } + /* ((void) const) , X -> X */ + if (CAR(n)->token == F_CAST && + CAR(n)->type == void_type_string && + CAAR(n)->token == F_CONSTANT) { + goto use_cdr; + } /* (X , const) , Y -> X , Y */ if (CAR(n)->token == F_COMMA_EXPR && CDAR(n)->token == F_CONSTANT) { @@ -1959,7 +1965,16 @@ static void optimize(node *n) CAAR(n) = CDR(n) = 0; goto use_tmp1; } - + /* ((void)(X, const)), Y -> ((void) X), Y */ + if (CAR(n)->token == F_CAST && + CAR(n)->type == void_type_string && + CAAR(n)->token == F_COMMA_EXPR && + CDR(CAAR(n))->token == F_CONSTANT) { + tmp1 = mknode(F_COMMA_EXPR, mkcastnode(void_type_string, CAR(CAAR(n))), + CDR(n)); + CAR(CAAR(n)) = CDR(n) = 0; + goto use_tmp1; + } /* FALL_THROUGH */ case F_ARG_LIST: case F_LVALUE_LIST: