digitalmars.D.learn - assumeNoGC works but can't get an assumePure to work
- aliak (32/32) Sep 03 2018 In another thread [0] this function can be used to call non nogc
- Paul Backus (5/8) Sep 03 2018 You can't define an impure function inside a pure unittest. If
- aliak (3/12) Sep 04 2018 Seems you be right. Hmm, I wonder if it's a bug because you can
In another thread [0] this function can be used to call non nogc
code from nogc code
import std.traits;
auto assumeNoGC(T)(T t) {
enum attrs = functionAttributes!T | FunctionAttribute.nogc;
return cast(SetFunctionAttributes!(T, functionLinkage!T,
attrs)) t;
}
And then you can use it like:
nogc unittest {
auto allocate() {
return [1];
}
assumeNoGC({allocate;})();
}
So I tried to the same with pure, wrote assumePure and changed
the attribute to FunctionAttribute.pure_, but that doesn't seem
to be treated the same:
pure unittest {
static int thing = 3;
void modify() {
thing = 4;
}
assumePure({modify;})();
}
Ye get: pure function modify cannot access mutable static data
thing
Why does it work with nogc but not with pure?
Cheers,
- Ali
[0]:
https://forum.dlang.org/thread/awalwokejtywzkxgdqyg forum.dlang.org
Sep 03 2018
On Monday, 3 September 2018 at 22:07:10 UTC, aliak wrote:Why does it work with nogc but not with pure? Cheers, - AliYou can't define an impure function inside a pure unittest. If you move `modify` outside the unittest block, and change the argument from a lambda to a function pointer, it works: https://run.dlang.io/is/xRS75H
Sep 03 2018
On Tuesday, 4 September 2018 at 01:33:52 UTC, Paul Backus wrote:On Monday, 3 September 2018 at 22:07:10 UTC, aliak wrote:Seems you be right. Hmm, I wonder if it's a bug because you can define a non-nogc function inside a nogc block :/Why does it work with nogc but not with pure? Cheers, - AliYou can't define an impure function inside a pure unittest. If you move `modify` outside the unittest block, and change the argument from a lambda to a function pointer, it works: https://run.dlang.io/is/xRS75H
Sep 04 2018








aliak <something something.com>