mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-12 10:53:14 +01:00
Branch statements now emit a new block after it. Fixed the _adSort runtime function had a bad signature. Added a missing dot prefix on compiler generated string tables for string switch. Fixed, PTRSIZE seems like it was wrong on 64bit, now it definitely gets set properly.
88 lines
1.3 KiB
D
88 lines
1.3 KiB
D
|
|
extern(C) int printf(char*, ...);
|
|
|
|
struct S
|
|
{
|
|
int i;
|
|
int square()
|
|
{
|
|
return i*i;
|
|
}
|
|
int plus(int a)
|
|
{
|
|
return i + a;
|
|
}
|
|
int minus(int a)
|
|
{
|
|
return i - a;
|
|
}
|
|
int delegate(int) get(char op)
|
|
{
|
|
int delegate(int) rval;
|
|
if (op == '+')
|
|
rval = +
|
|
else if (op == '-')
|
|
rval = −
|
|
return rval;
|
|
}
|
|
}
|
|
|
|
int calldg1(int delegate(int) dg, int i)
|
|
{
|
|
return dg(i);
|
|
}
|
|
|
|
void delegate() retdg()
|
|
{
|
|
void delegate() dg;
|
|
return dg;
|
|
}
|
|
|
|
void getretdg()
|
|
{
|
|
void delegate() dg;
|
|
dg = retdg();
|
|
}
|
|
|
|
class C
|
|
{
|
|
int i;
|
|
void m()
|
|
{
|
|
i = 42;
|
|
}
|
|
}
|
|
|
|
void getclassdg()
|
|
{
|
|
scope c = new C;
|
|
void delegate() dg = &c.m;
|
|
assert(c.i != 42);
|
|
dg();
|
|
assert(c.i == 42);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
printf("Delegate test\n");
|
|
S s = S(4);
|
|
|
|
auto dg = &s.square;
|
|
//assert(dg() == 16);
|
|
//dg();
|
|
|
|
/*auto dg1 = &s.plus;
|
|
assert(dg1(6) == 10);
|
|
|
|
auto dg2 = &s.minus;
|
|
assert(calldg1(dg2,30) == -26);
|
|
|
|
auto dg3 = s.get('+');
|
|
assert(dg3(16) == 20);
|
|
|
|
getretdg();
|
|
getclassdg();*/
|
|
|
|
printf(" SUCCESS\n");
|
|
}
|