[Issue 7926] stack overflow on recursive string mixin

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Apr 17 01:33:46 PDT 2014


https://issues.dlang.org/show_bug.cgi?id=7926

Kenji Hara <k.hara.pg at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |INVALID
                 OS|Linux                       |All

--- Comment #2 from Kenji Hara <k.hara.pg at gmail.com> ---
I don't think this is a bug. The infinite recursive expansion is the intended
behavior of the code. We can write arbitrary code in this kind.

// mutual recursion version
enum string a = "mixin(b);";
enum string b = "mixin(a);";
mixin(a);


// infinite code bloating version
string a(string num = "1")
{
    string inc(string num)
    {
        return (num.length == 0 ? "1" :
                num[$-1] == '9' ? inc(num[0..$-1]) ~ "0" :
                num[0..$-1] ~ cast(char)(num[$-1] + 1));
    }
    return `enum a`~num~` = a("`~inc(num)~`"); `~
           `/*pragma(msg, a`~num~`);*/` ~
           `mixin(a`~num~`);`;
}
mixin(a);

--


More information about the Digitalmars-d-bugs mailing list