mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-05 01:20:51 +03:00

The context for instances of aggregates *not* nested in the current function, but some parent. Fixes #2960.
36 lines
662 B
D
36 lines
662 B
D
// RUN: %ldc -run %s
|
|
|
|
template listDir(alias handler)
|
|
{
|
|
struct NestedStruct
|
|
{
|
|
void callHandler() { handler(); }
|
|
}
|
|
|
|
class NestedClass
|
|
{
|
|
void callHandler() { handler(); }
|
|
}
|
|
|
|
void nestedFunc() { handler(); }
|
|
|
|
void listDir()
|
|
{
|
|
int a = 123;
|
|
void foo() { assert(a == 123); }
|
|
|
|
// pass local listDir() frame as context
|
|
foo();
|
|
|
|
// pass parent context for sibling symbols:
|
|
NestedStruct().callHandler();
|
|
(new NestedClass).callHandler();
|
|
nestedFunc();
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
int magic = 0xDEADBEEF;
|
|
listDir!(() { assert(magic == 0xDEADBEEF); })();
|
|
}
|