[Issue 3827] automatic joining of adjacent strings is bad
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Sat Nov 13 23:53:12 PST 2010
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=3827
Don <clugdbug at yahoo.com.au> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugdbug at yahoo.com.au
--- Comment #15 from Don <clugdbug at yahoo.com.au> 2010-11-13 23:51:58 PST ---
(In reply to comment #14)
> you don't need to mess with associativity rules, you just need to be able to
> handle two or three ast cases:
> 
> 1. (~ str str)        ie  str ~ str
> 2. (~ (~ x str) str)  ie  x ~ str ~ str
> 3. (~ str (~ str x))  ie  str ~ (str ~ x)
Like this (optimize.c, line 1023):
Expression *CatExp::optimize(int result)
{   Expression *e;
    //printf("CatExp::optimize(%d) %s\n", result, toChars());
    e1 = e1->optimize(result);
    e2 = e2->optimize(result);
+    if (e1->op == TOKcat && (e2->op == TOKstring || e2->op == TOKnull)
+            && (((CatExp *)e1)->e2->op == TOKstring || ((CatExp *)e1)->e2->op
== TOKnull))
+    {
+        // Convert  (e ~ str) ~ str into  e ~ (str ~ str)
+        CatExp *ce = ((CatExp *)e1);
+        e1 = ce->e1;
+        ce->e1 = ce->e2;
+        ce->e2 = e2;
+        e2 = ce;       
+    }
    e = Cat(type, e1, e2);
    if (e == EXP_CANT_INTERPRET)
        e = this;
    return e;
}
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
    
    
More information about the Digitalmars-d-bugs
mailing list