blob: 21f7809c684048ad6bc83d1faf6ca4cc83b27828 [file] [log] [blame]
// PERMUTE_ARGS:
import core.stdc.stdio;
import core.stdc.stdlib;
/*********************************************/
class Foo
{
static uint flags;
new(size_t sz, int x)
{ void* p;
printf("Foo.new(sz = %d, x = %d)\n", sz, x);
assert(sz == Foo.classinfo.initializer.length);
assert(x == 5);
p = core.stdc.stdlib.malloc(sz);
flags |= 4;
return p;
}
this()
{
printf("this() %p\n", this);
a = 36;
}
~this()
{
printf("~this() %p\n", this);
a = -5;
flags |= 1;
}
delete(void* p)
{
printf("delete %p\n", p);
free(p);
flags |= 2;
}
int a = 3;
int b = 4;
int d = 56;
}
void test1()
{
Foo f;
f = new(5) Foo;
assert(f.a == 36);
assert(f.b == 4);
assert(f.d == 56);
assert(Foo.flags == 4);
delete f;
assert(Foo.flags == 7);
}
/*********************************************/
struct Foo2
{
static uint flags;
new(size_t sz, int x)
{ void* p;
printf("Foo2.new(sz = %d, x = %d)\n", sz, x);
assert(sz == Foo2.sizeof);
assert(x == 5);
p = core.stdc.stdlib.malloc(sz);
flags |= 4;
return p;
}
delete(void *p)
{
printf("p = %p\n", p);
flags |= 2;
core.stdc.stdlib.free(p);
}
}
void test2()
{
Foo2 *f = new(5) Foo2();
printf("f = %p\n", f);
delete f;
assert(Foo2.flags == 6);
}
/*********************************************/
int main()
{
test1();
test2();
printf("Success\n");
return 0;
}