mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-12 19:03:13 +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.
69 lines
1.1 KiB
D
69 lines
1.1 KiB
D
extern(C) int printf(char*, ...);
|
|
|
|
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");
|
|
}
|