CTFE Status 2

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Wed Mar 1 19:09:56 PST 2017


On Thursday, 16 February 2017 at 21:05:51 UTC, Stefan Koch wrote:
> [ ... ]

Hi Guys,

The implementation of ref parameters by itself was successful.
However they hey have one bug, which is a consquence of newCTFE 
not touching dmd's state.
They cannot modify an outer parameter. (where outer means that 
the parameter does not originate from a ctfe-evaluation further 
up the call stack)

uint add8ret3(ref uint a) {a += 8; return 3;}

pragma (msg, (uint outer) { outer += add8ret3(a); return 
outer;}(1)); // will print 4

pragma (msg, (uint outer) { uint inner = outer; inner += 
add8ret3(inner); return inner; }(1)); // will print 12 as 
expected.

There are two options I could take:
The first one is to disallow having refs of outer parameters 
taken.
(and bailing out in this case)
The second option is to implement the logic necessary to modify 
these expression nodes.

Both options require me to detect if we have an outer ref 
parameter. but that should be easy to do.

Cheers,
Stefan


More information about the Digitalmars-d mailing list