String Mixins & Compile Time Evaluation

Don nospam at nospam.com
Tue Nov 17 04:17:59 PST 2009


Bill Baxter wrote:
> On Tue, Nov 17, 2009 at 2:07 AM, Don <nospam at nospam.com> wrote:
>> Travis Boucher wrote:
>>> I've been playing with string mixins, and they are very powerful.
>>>
>>> One thing I can't figure out is what exactly can and cannot be evaluated
>>> at compile time.
>>>
>>> For example:
>>>
>>> ----
>>> char[] myFunc1() {
>>>    return "int a = 1;";
>>> }
>>>
>>> char[] myFunc2() {
>>>    char[] myFunc3() {
>>>        return "int b = 2;";
>>>    }
>>>    return myFunc3();
>>> }
>>>
>>> void main() {
>>>    mixin(myFunc1());
>>>    mixin(myFunc2());
>>> }
>>> ----
>>>
>>> myFunc1() can be used as a string mixin.
>>> myFunc2() can't be.
>> I think you're using an old version of DMD. It's been working since
>> DMD1.047. Please upgrade to the latest version, you'll find it a lot less
>> frustrating.
>> The bottom of "function.html" in the spec gives the rules.
>> Though it says nested functions aren't supported, but they are.
> 
> Ah, forgot about that list.  Good point.
> But still Travis should know that the list is not exhaustive.
> For instance the other day I found that this didn't work for some reason:
> 
>    while(i < a - b) { ... }
> 
> Instead I had to do
> 
>    int limit = a-b;
>    while(i < limit) { ... }

I can't reproduce it. Do you have a complete test case?


More information about the Digitalmars-d-learn mailing list