Files
ldc/test/funcptr.d
Tomas Lindquist Olsen c99938debf [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
Basically it tries to do the following in order: Resolve types, Declare symbols, Create constant initializers, Apply initializers, Generate functions bodies.
ClassInfo is now has the most useful(biased?) members working.
Probably other stuf...
2007-11-18 06:52:57 +01:00

67 lines
1.1 KiB
D

int return_six()
{
return 6;
}
int add_int(int a, int b)
{
return a+b;
}
int sub_int(int a, int b)
{
return a-b;
}
alias int function(int,int) binfn_t;
int binop_int(binfn_t op, int a, int b)
{
return op(a,b);
}
binfn_t get_binop_int(char op)
{
binfn_t fn;
if (op == '+')
fn = &add_int;
else if (op == '-')
fn = &sub_int;
return fn;
}
extern(C) float mul_float(float a, float b)
{
return a * b;
}
void function_pointers()
{
int function() fn = &return_six;
assert(fn() == 6);
binfn_t binfn = &add_int;
assert(binfn(4,1045) == 1049);
assert(binop_int(binfn, 10,656) == 666);
binfn = get_binop_int('+');
assert(binop_int(binfn, 10,100) == 110);
binfn = get_binop_int('-');
assert(binop_int(binfn, 10,100) == -90);
{
auto ffn = &mul_float;
float ftmp = mul_float(2.5,5);
assert(ftmp == 12.5);
assert(ftmp > 12.49 && ftmp < 12.51);
}
}
void main()
{
printf("Function pointer test\n");
function_pointers();
printf(" SUCCESS\n");
}