blob: f0de22c95d03b6ffcf553d7195cbca73469c7ccb [file] [log] [blame]
/*
PERMUTE_ARGS:
RUN_OUTPUT:
---
OK
---
*/
extern(C) int printf(const char*, ...);
interface IWriter
{
IWriter put (I1 x);
}
interface I1
{
void write (IWriter writer);
}
interface I2 : I1 {}
interface I3 : I2 {}
class Newline : I3
{
static int OKset;
void write (IWriter writer)
{
printf ("OK\n");
OKset += 1;
}
}
class Writer : IWriter
{
IWriter put (I1 x)
{
x.write (this);
return this;
}
}
class FlushWriter : Writer
{
override IWriter put (I1 x)
{
// have superclass handle the I1
super.put (x);
// flush output when we see a newline
if (cast(Newline) x)
{
}
return this;
}
}
void test (IWriter w)
{
//w.put (new Newline);
I3 NL = new Newline;
w.put (NL);
}
int main()
{
test (new FlushWriter);
assert(Newline.OKset == 1);
return 0;
}