Mercurial > projects > ldc
view test/funcptr.d @ 131:5825d48b27d1 trunk
[svn r135] * Merged DMD 1.025 *
* Fixed a minor linking order mishap *
* Added an command line option -annotate *
* Fixed some problems with running optimizations *
* Added std.stdio and dependencies to lphobos (still not 100% working, but compiles and links) *
* Fixed problems with passing aggregate types to variadic functions *
* Added initial code towards full GC support, currently based on malloc and friends, not all the runtime calls the GC yet for memory *
* Fixed problems with resolving nested function context pointers for some heavily nested cases *
* Redid function argument passing + other minor code cleanups, still lots to do on this end... *
author | lindquist |
---|---|
date | Fri, 04 Jan 2008 01:38:42 +0100 |
parents | 027b8d8b71ec |
children | d9d5d59873d8 |
line wrap: on
line source
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"); }