From 5920f0953c9e7f4683d8c6f90a15497c95870076 Mon Sep 17 00:00:00 2001 From: k-hara Date: Sat, 17 May 2014 16:33:13 +0900 Subject: [PATCH] fix Issue 12798 - constant folding should optimize subsequent concatenations --- src/optimize.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/optimize.c b/src/optimize.c index ce7c76343b6f..d9ca87c50465 100644 --- a/src/optimize.c +++ b/src/optimize.c @@ -1212,6 +1212,21 @@ Expression *Expression_optimize(Expression *e, int result, bool keepLvalue) //printf("CatExp::optimize(%d) %s\n", result, e->toChars()); e->e1 = e->e1->optimize(result); e->e2 = e->e2->optimize(result); + + if (e->e1->op == TOKcat) + { + // Bugzilla 12798: optimize ((expr ~ str1) ~ str2) + CatExp *ce1 = (CatExp *)e->e1; + CatExp cex(e->loc, ce1->e2, e->e2); + cex.type = e->type; + Expression *ex = cex.optimize(result); + if (ex != &cex) + { + e->e1 = ce1->e1; + e->e2 = ex; + } + } + ret = Cat(e->type, e->e1, e->e2); if (ret == EXP_CANT_INTERPRET) ret = e;